⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sigsetjmp.s

📁 Newlib 嵌入式 C库 标准实现代码
💻 S
字号:
! This file is called sigsetjmp.s because that is what V8 uses.! We do not define sigsetjmp() or setlongjmp() yet.! Solaris has setjmp/longjmp in setjmp.o.  Move this stuff there.#include <sys/syscallasm.h>	TEXT_SECTION	ALIGN (4)#ifdef __svr4__	GLOBAL (ASM_SYMBOL (setjmp))	.proc	04ASM_SYMBOL (setjmp):	clr	[%o0]	stx	%sp,[%o0+8]	add	%o7,8,%g1	stx	%g1,[%o0+16]	retl 	mov	%g0,%o0	GLOBAL (ASM_SYMBOL (longjmp))	.proc	04ASM_SYMBOL (longjmp):	flushw				! flush register windows	sub	%sp,136,%sp	ldx	[%o0+8],%fp	ldx	[%o0+16],%g1	tst	%o1	bne	L0	sub	%g1,8,%o7	mov	1,%o1L0:	retl 	restore	%o1,0,%o0#else	GLOBAL (ASM_SYMBOL (setjmp))	.proc	04ASM_SYMBOL (setjmp):	save	%sp,-136,%sp	or	%g0,%g0,%o0		! %o0 = 0	or	%g0,0x6d,%g1		! %g1 = 0x6d (syscall number)	ta	SYSCALL_TRAP	stw	%o0,[%i0+4]		! save result at [%i0+4] (sigmask?)	add	%fp,-8,%o1		! %o1 -> tmp 8 byte buffer	or	%g0,%g0,%o0		! %o0 = 0	or	%g0,0x70,%g1		! %g1 = 0x70 (syscall number)	ta	SYSCALL_TRAP	lduw	[%fp-4],%g1		! %g1 = onsstack?	stw	%fp,[%i0+8]		! save %fp at [%i0+8]	stw	%g1,[%i0+0]		! save ? at [%i0+8]	add	%i7,8,%g1		! %g1 = return address	stw	%g1,[%i0+12]		! save return address at [%i0+12]	add	%g1,4,%g1		! %g1 = nPC	stw	%g1,[%i0+16]		! save nPC at [%i0+16]	stw	%g0,[%i0+20]	stw	%g0,[%i0+24]	stw	%g0,[%i0+32]	jmpl	%i7+8,%g0	restore	%g0,0,%o0	GLOBAL (ASM_SYMBOL (longjmp))	.proc	04ASM_SYMBOL (longjmp):	orcc	%g0,%o1,%g0		! return val == 0 ?	be,a	L1			! branch if 0	or	%g0,1,%o1		! make it 1 (executed if branch taken)L1:	or	%g0,0x8b,%g1		! set syscall 0x8b	stw	%o1,[%o0+28]		! save return val for restoration	ta	SYSCALL_TRAP#endif /* ! __svr4__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -