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

📄 trap.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
/* *	.seg	"data" *	.asciz	"@(#)trap.s	1.1 7/30/92 SMI" *	Copyright (c) 1986,1990 by Sun Microsystems, Inc. */#include <machine/asm_linkage.h>#include <machine/reg.h>#include <machine/psl.h>/* * Make sure the vector for 'trap #0' is installed. Kadb in particular * depends on this. * * set_vec(vbr) *	int vbr; */	ENTRY(set_vec)	bclr	0xfff, %o0		! set tt field to 0x80 for trap #0	or	%o0, 0x800, %o0	set	trap_0, %o1	ldd	[%o1], %o2		! copy prototype to trap table	std	%o2, [%o0]	ldd	[%o1 + 8], %o2	std	%o2, [%o0 + 8]	mov	%psr, %o0		! enable traps	or	%o0, PSR_ET, %o0	mov	%o0, %psr	nop	retl	mov	%g0, %o0	.align 8trap_0:	sethi	%hi(systrap), %l7	or	%l7, %lo(systrap), %l7	jmp	%l7	mov	%psr, %l0	.align 4/* * System call handler. We get here after a 't 0' instruction, so we're * trapped somewhere in a syscall stub. We won't rett directly back to the * caller; instead we'll make it look like we simply called syscall(). * Syscall()'s return will pass control back to the stub right after * the trap instruction. */systrap:!! When we enter:!   %i0 : syscall code!   %i1 : arg 0!   %i2 : arg 1!   %i3 : arg 2!   %l1 : trapped %pc!   %l2 : trapped %npc!! Decrement the return address so the system call returns to the right place.!	sub	%l1, 4, %i7!! Push the args, then leave room for a window overflow. This must be! based on CALLER'S current stack pointer (our frame pointer), not our! current sp, since we want out of this window.!	st	%i1, [%fp + 0]	st	%i2, [%fp + 4]	st	%i3, [%fp + 8]	mov	%fp, %i1	add	%fp, -SA(MINFRAME), %fp!! Set up addresses so that when we leave the trap control passes to syscall().!	set	_syscall, %l1	add	%l1, 4, %l2	jmp	%l1	rett	%l2

⌨️ 快捷键说明

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