xref: /freebsd/sys/i386/linux/linux_locore.asm (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
1305b9efeSEd Maste
2305b9efeSEd Maste#include "linux_assym.h"			/* system definitions */
3305b9efeSEd Maste#include <machine/asmacros.h>			/* miscellaneous asm macros */
4305b9efeSEd Maste
5305b9efeSEd Maste#include <i386/linux/linux_syscall.h>		/* system call numbers */
6305b9efeSEd Maste
7c1da89feSDmitry Chagin	.data
8c1da89feSDmitry Chagin
9c1da89feSDmitry Chagin	.globl linux_platform
10c1da89feSDmitry Chaginlinux_platform:
11c1da89feSDmitry Chagin	.asciz "i686"
12c1da89feSDmitry Chagin
13c1da89feSDmitry Chagin	.text
14c1da89feSDmitry Chagin
158f9635dcSDmitry ChaginENTRY(linux_vdso_sigcode)
168f9635dcSDmitry Chagin	.cfi_startproc
178f9635dcSDmitry Chagin	.cfi_signal_frame
188f9635dcSDmitry Chagin	.cfi_def_cfa	%esp, LINUX_SIGF_SC
198f9635dcSDmitry Chagin	.cfi_offset	%gs, L_SC_GS
208f9635dcSDmitry Chagin	.cfi_offset	%fs, L_SC_FS
218f9635dcSDmitry Chagin	.cfi_offset	%es, L_SC_ES
228f9635dcSDmitry Chagin	.cfi_offset	%ds, L_SC_DS
238f9635dcSDmitry Chagin	.cfi_offset	%cs, L_SC_CS
248f9635dcSDmitry Chagin	.cfi_offset	%ss, L_SC_SS
25*f4de136aSJohn Baldwin#ifdef __clang__
268f9635dcSDmitry Chagin	.cfi_offset	%flags, L_SC_EFLAGS
27*f4de136aSJohn Baldwin#else
28*f4de136aSJohn Baldwin	.cfi_offset	%eflags, L_SC_EFLAGS
29*f4de136aSJohn Baldwin#endif
308f9635dcSDmitry Chagin	.cfi_offset	%edi, L_SC_EDI
318f9635dcSDmitry Chagin	.cfi_offset	%esi, L_SC_ESI
328f9635dcSDmitry Chagin	.cfi_offset	%ebp, L_SC_EBP
338f9635dcSDmitry Chagin	.cfi_offset	%ebx, L_SC_EBX
348f9635dcSDmitry Chagin	.cfi_offset	%edx, L_SC_EDX
358f9635dcSDmitry Chagin	.cfi_offset	%ecx, L_SC_ECX
368f9635dcSDmitry Chagin	.cfi_offset	%eax, L_SC_EAX
378f9635dcSDmitry Chagin	.cfi_offset	%eip, L_SC_EIP
388f9635dcSDmitry Chagin	.cfi_offset	%esp, L_SC_ESP
398f9635dcSDmitry Chagin
40ba279bcdSDmitry Chagin	movl	%esp, %ebx			/* sigframe for sigreturn */
41ba279bcdSDmitry Chagin	call	*%edi				/* call signal handler */
428f9635dcSDmitry Chagin	popl	%eax				/* gcc unwind code need this */
438f9635dcSDmitry Chagin	.cfi_def_cfa	%esp, LINUX_SIGF_SC-4
448f9635dcSDmitry Chagin	movl	$LINUX_SYS_linux_sigreturn, %eax
458f9635dcSDmitry Chagin	int	$0x80
468f9635dcSDmitry Chagin0:	jmp	0b
478f9635dcSDmitry Chagin	.cfi_endproc
488f9635dcSDmitry ChaginEND(linux_vdso_sigcode)
498f9635dcSDmitry Chagin
508f9635dcSDmitry ChaginENTRY(linux_vdso_rt_sigcode)
518f9635dcSDmitry Chagin	.cfi_startproc
528f9635dcSDmitry Chagin	.cfi_signal_frame
538f9635dcSDmitry Chagin	.cfi_def_cfa	%esp, LINUX_RT_SIGF_UC + LINUX_RT_SIGF_SC
548f9635dcSDmitry Chagin	.cfi_offset	%gs, L_SC_GS
558f9635dcSDmitry Chagin	.cfi_offset	%fs, L_SC_FS
568f9635dcSDmitry Chagin	.cfi_offset	%es, L_SC_ES
578f9635dcSDmitry Chagin	.cfi_offset	%ds, L_SC_DS
588f9635dcSDmitry Chagin	.cfi_offset	%cs, L_SC_CS
598f9635dcSDmitry Chagin	.cfi_offset	%ss, L_SC_SS
60*f4de136aSJohn Baldwin#ifdef __clang__
618f9635dcSDmitry Chagin	.cfi_offset	%flags, L_SC_EFLAGS
62*f4de136aSJohn Baldwin#else
63*f4de136aSJohn Baldwin	.cfi_offset	%eflags, L_SC_EFLAGS
64*f4de136aSJohn Baldwin#endif
658f9635dcSDmitry Chagin	.cfi_offset	%edi, L_SC_EDI
668f9635dcSDmitry Chagin	.cfi_offset	%esi, L_SC_ESI
678f9635dcSDmitry Chagin	.cfi_offset	%ebp, L_SC_EBP
688f9635dcSDmitry Chagin	.cfi_offset	%ebx, L_SC_EBX
698f9635dcSDmitry Chagin	.cfi_offset	%edx, L_SC_EDX
708f9635dcSDmitry Chagin	.cfi_offset	%ecx, L_SC_ECX
718f9635dcSDmitry Chagin	.cfi_offset	%eax, L_SC_EAX
728f9635dcSDmitry Chagin	.cfi_offset	%eip, L_SC_EIP
738f9635dcSDmitry Chagin	.cfi_offset	%esp, L_SC_ESP
748f9635dcSDmitry Chagin
758f9635dcSDmitry Chagin	leal	LINUX_RT_SIGF_UC(%esp), %ebx	/* linux ucontext for rt_sigreturn */
768f9635dcSDmitry Chagin	call	*%edi				/* call signal handler */
778f9635dcSDmitry Chagin	movl	$LINUX_SYS_linux_rt_sigreturn, %eax
788f9635dcSDmitry Chagin	int	$0x80
798f9635dcSDmitry Chagin0:	jmp	0b
808f9635dcSDmitry Chagin	.cfi_endproc
818f9635dcSDmitry ChaginEND(linux_vdso_rt_sigcode)
828f9635dcSDmitry Chagin
838f9635dcSDmitry ChaginENTRY(__kernel_sigreturn)
848f9635dcSDmitry Chagin	.cfi_startproc
858f9635dcSDmitry Chagin	.cfi_signal_frame
86305b9efeSEd Maste	popl	%eax				/* gcc unwind code need this */
87ba279bcdSDmitry Chagin	movl	$LINUX_SYS_linux_sigreturn, %eax
88ba279bcdSDmitry Chagin	int	$0x80
89305b9efeSEd Maste0:	jmp	0b
908f9635dcSDmitry Chagin	.cfi_endproc
918f9635dcSDmitry ChaginEND(__kernel_sigreturn)
92305b9efeSEd Maste
939931033bSDmitry ChaginENTRY(__kernel_rt_sigreturn)
948f9635dcSDmitry Chagin	.cfi_startproc
958f9635dcSDmitry Chagin	.cfi_signal_frame
96ba279bcdSDmitry Chagin	movl	$LINUX_SYS_linux_rt_sigreturn, %eax
97ba279bcdSDmitry Chagin	int	$0x80
98305b9efeSEd Maste0:	jmp	0b
998f9635dcSDmitry Chagin	.cfi_endproc
1008f9635dcSDmitry ChaginEND(__kernel_rt_sigreturn)
101305b9efeSEd Maste
1029931033bSDmitry ChaginENTRY(__kernel_vsyscall)
1038f9635dcSDmitry Chagin	.cfi_startproc
104305b9efeSEd Maste	int $0x80
105305b9efeSEd Maste	ret
1068f9635dcSDmitry Chagin	.cfi_endproc
1078f9635dcSDmitry ChaginEND(__kernel_vsyscall)
108305b9efeSEd Maste
109305b9efeSEd Maste#if 0
110305b9efeSEd Maste	.section .note.Linux, "a",@note
111305b9efeSEd Maste	.long 2f - 1f		/* namesz */
112305b9efeSEd Maste	.balign 4
113305b9efeSEd Maste	.long 4f - 3f		/* descsz */
114305b9efeSEd Maste	.long 0
115305b9efeSEd Maste1:
116305b9efeSEd Maste	.asciz "Linux"
117305b9efeSEd Maste2:
118305b9efeSEd Maste	.balign 4
119305b9efeSEd Maste3:
120305b9efeSEd Maste	.long LINUX_VERSION_CODE
121305b9efeSEd Maste4:
122305b9efeSEd Maste	.balign 4
123305b9efeSEd Maste	.previous
124305b9efeSEd Maste#endif
125