svr4_locore.s revision 43412
1153761Swollman#include "svr4_assym.h"			/* system definitions */
2192886Sedwin#include <machine/asmacros.h>		/* miscellaneous asm macros */
3192886Sedwin
467578Swollman#include <svr4/svr4_syscall.h>		/* system call numbers */
52742Swollman
62742SwollmanNON_GPROF_ENTRY(svr4_sigcode)
7243003Sedwin	call	SVR4_SIGF_HANDLER(%esp)
82742Swollman	leal	SVR4_SIGF_UC(%esp),%eax	# ucp (the call may have clobbered the
9248307Sedwin					# copy at SIGF_UCP(%esp))
102742Swollman#if defined(NOTYET)
112742Swollman#ifdef VM86
12158421Swollman	testl	$PSL_VM,SVR4_UC_EFLAGS(%eax)
13158421Swollman	jnz	1f
142742Swollman#endif
1586222Swollman#endif
1620094Swollman	movl	SVR4_UC_FS(%eax),%ecx
1720094Swollman	movl	SVR4_UC_GS(%eax),%edx
1820094Swollman	movl	%cx,%fs
1920094Swollman	movl	%dx,%gs
2020094Swollman#if defined(__NetBSD__)
21158421Swollman1:	pushl	%eax
22158421Swollman	pushl	$1			# setcontext(p) == syscontext(1, p)
2320094Swollman	pushl	%eax			# junk to fake return address
242742Swollman	movl	$_svr4_sys_context,%eax
252742Swollman#else
262742Swollman/* must be FreeBSD, right? */
272742Swollman1:	pushl	%eax			# fake return address
28248307Sedwin	pushl	$1			# pointer to ucontext
29248307Sedwin	movl	$svr4_sys_context,%eax
30248307Sedwin#endif
31248307Sedwin	int	$0x80	 		# enter kernel with args on stack
3214343Swollman	movl	$exit,%eax
3358787Sru	int	$0x80			# exit if sigreturn fails
3414343Swollman
3530711Swollman/*	.globl	_svr4_esigcode*/
3630711Swollman
37149514Swollman	.align	2				/* long word align */
3830711Swollmansvr4_esigcode:
3930711Swollman
4030711Swollman	.data
4130711Swollman	.globl	svr4_szsigcode
4230711Swollmansvr4_szsigcode:
432742Swollman	.long	svr4_esigcode - svr4_sigcode
4430711Swollman
4530711Swollman	.text
4630711Swollman
4730711Swollman