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

📄 sigtramp.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
!!	"@(#)sigtramp.s 1.1 92/07/30"!       Copyright (c) 1987 by Sun Microsystems, Inc.!	.seg	"text"#include <machine/asm_linkage.h>#include <machine/psl.h>#include <sys/signal.h>#include "PIC.h"	.global	__sigtramp, __sigfunc__sigtramp:	!	! On entry sp points to:	! 	0 - 63: window save area	!	64: signal number	!	68: signal code	!	72: pointer to sigcontext	!	76: addr parameter	!	! A sigcontext looks like:	!	00: on signal stack flag	!	04: old signal mask	!	08: old sp	!	12: old pc	!	16: old npc	!	20: old psr	!	24: old g1	!	28: old o0	!	! We are also in the old window. We first do a save in which we	! bump the sp down by enough to have an area to save the old globals,	! the old floating point registers and the normal frame.	! This also gives us a fresh set of registers.	!	save	%sp, -(SA(MINFRAME)+SA(40*4)), %sp ! make frame on (new) stack	ld	[%fp + 72], %o2		! get ptr to sigcontext	set	PSR_EF, %l0	ld	[%o2 + 20], %o0		! get psr	mov	%y, %l1			! save y	btst	%l0, %o0		! is FPU enabled?	bz	1f			! if not skip FPU save	ld	[%fp + 64], %o0		! get signal number	cmp	%o0, SIGFPE		! check if sigfpe	be,a	1f			! don't save fp registers if sigfpe	mov	0, %l0			! unset PSR_EF bit, for later check					! so we don't restore them also	std	%f0, [%sp + SA(MINFRAME)+(0*4)]	! save all fpu registers.	std	%f2, [%sp + SA(MINFRAME)+(2*4)]	std	%f4, [%sp + SA(MINFRAME)+(4*4)]	std	%f6, [%sp + SA(MINFRAME)+(6*4)]	std	%f8, [%sp + SA(MINFRAME)+(8*4)]	std	%f10, [%sp + SA(MINFRAME)+(10*4)]	std	%f12, [%sp + SA(MINFRAME)+(12*4)]	std	%f14, [%sp + SA(MINFRAME)+(14*4)]	std	%f16, [%sp + SA(MINFRAME)+(16*4)]	std	%f18, [%sp + SA(MINFRAME)+(18*4)]	std	%f20, [%sp + SA(MINFRAME)+(20*4)]	std	%f22, [%sp + SA(MINFRAME)+(22*4)]	std	%f24, [%sp + SA(MINFRAME)+(24*4)]	std	%f26, [%sp + SA(MINFRAME)+(26*4)]	std	%f28, [%sp + SA(MINFRAME)+(28*4)]	std	%f30, [%sp + SA(MINFRAME)+(30*4)]	st	%fsr, [%sp + SA(MINFRAME)+(32*4)] ! save old fsr1:	st	%l1, [%sp + SA(MINFRAME)+(33*4)] ! store copy of %y	std	%g2, [%sp + SA(MINFRAME)+(34*4)] ! save globals	std	%g4, [%sp + SA(MINFRAME)+(36*4)]	std	%g6, [%sp + SA(MINFRAME)+(38*4)]#ifdef PIC	PIC_SETUP(o5)	ld	[%o5 + __sigfunc], %g1#else	set	__sigfunc, %g1		! get array of function ptrs#endif	ld	[%fp + 68], %o1		! get code	sll	%o0, 2, %g2		! scale signal number for index	ld	[%g1 + %g2], %g1	! get func	call	%g1			! (*_sigfunc[sig])(sig,code,&sc,addr)	ld	[%fp + 76], %o3		! get addr	!	! Restore state.	!	ld	[%fp + 72], %i0		! get ptr to sigcontext	ld	[%sp + SA(MINFRAME)+(33*4)], %l1 ! restore y	ld	[%i0 + 20], %o0		! get psr	mov	%l1, %y	btst	%l0, %o0		! is FPU enabled?	bz	2f			! if not skip FPU restore	ldd	[%sp + SA(MINFRAME)+(34*4)], %g2 ! delay slot, restore globals	ldd	[%sp + SA(MINFRAME)+(0*4)], %f0	! restore all fpu registers.	ldd	[%sp + SA(MINFRAME)+(2*4)], %f2	ldd	[%sp + SA(MINFRAME)+(4*4)], %f4	ldd	[%sp + SA(MINFRAME)+(6*4)], %f6	ldd	[%sp + SA(MINFRAME)+(8*4)], %f8	ldd	[%sp + SA(MINFRAME)+(10*4)], %f10	ldd	[%sp + SA(MINFRAME)+(12*4)], %f12	ldd	[%sp + SA(MINFRAME)+(14*4)], %f14	ldd	[%sp + SA(MINFRAME)+(16*4)], %f16	ldd	[%sp + SA(MINFRAME)+(18*4)], %f18	ldd	[%sp + SA(MINFRAME)+(20*4)], %f20	ldd	[%sp + SA(MINFRAME)+(22*4)], %f22	ldd	[%sp + SA(MINFRAME)+(24*4)], %f24	ldd	[%sp + SA(MINFRAME)+(26*4)], %f26	ldd	[%sp + SA(MINFRAME)+(28*4)], %f28	ldd	[%sp + SA(MINFRAME)+(30*4)], %f30	ld	[%sp + SA(MINFRAME)+(32*4)], %fsr	! restore old fsr2:	ldd	[%sp + SA(MINFRAME)+(36*4)], %g4	ldd	[%sp + SA(MINFRAME)+(38*4)], %g6	restore	%g0, 139, %g1		! sigcleanup system call	t	0	unimp	0			! just in case it returns	/*NOTREACHED*/

⌨️ 快捷键说明

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