xref: /freebsd/sys/i386/linux/linux_locore.asm (revision 4d846d26)
1/* $FreeBSD$ */
2
3#include "linux_assym.h"			/* system definitions */
4#include <machine/asmacros.h>			/* miscellaneous asm macros */
5
6#include <i386/linux/linux_syscall.h>		/* system call numbers */
7
8	.data
9
10	.globl linux_platform
11linux_platform:
12	.asciz "i686"
13
14	.text
15
16ENTRY(linux_vdso_sigcode)
17	.cfi_startproc
18	.cfi_signal_frame
19	.cfi_def_cfa	%esp, LINUX_SIGF_SC
20	.cfi_offset	%gs, L_SC_GS
21	.cfi_offset	%fs, L_SC_FS
22	.cfi_offset	%es, L_SC_ES
23	.cfi_offset	%ds, L_SC_DS
24	.cfi_offset	%cs, L_SC_CS
25	.cfi_offset	%ss, L_SC_SS
26	.cfi_offset	%flags, L_SC_EFLAGS
27	.cfi_offset	%edi, L_SC_EDI
28	.cfi_offset	%esi, L_SC_ESI
29	.cfi_offset	%ebp, L_SC_EBP
30	.cfi_offset	%ebx, L_SC_EBX
31	.cfi_offset	%edx, L_SC_EDX
32	.cfi_offset	%ecx, L_SC_ECX
33	.cfi_offset	%eax, L_SC_EAX
34	.cfi_offset	%eip, L_SC_EIP
35	.cfi_offset	%esp, L_SC_ESP
36
37	movl	%esp, %ebx			/* sigframe for sigreturn */
38	call	*%edi				/* call signal handler */
39	popl	%eax				/* gcc unwind code need this */
40	.cfi_def_cfa	%esp, LINUX_SIGF_SC-4
41	movl	$LINUX_SYS_linux_sigreturn, %eax
42	int	$0x80
430:	jmp	0b
44	.cfi_endproc
45END(linux_vdso_sigcode)
46
47ENTRY(linux_vdso_rt_sigcode)
48	.cfi_startproc
49	.cfi_signal_frame
50	.cfi_def_cfa	%esp, LINUX_RT_SIGF_UC + LINUX_RT_SIGF_SC
51	.cfi_offset	%gs, L_SC_GS
52	.cfi_offset	%fs, L_SC_FS
53	.cfi_offset	%es, L_SC_ES
54	.cfi_offset	%ds, L_SC_DS
55	.cfi_offset	%cs, L_SC_CS
56	.cfi_offset	%ss, L_SC_SS
57	.cfi_offset	%flags, L_SC_EFLAGS
58	.cfi_offset	%edi, L_SC_EDI
59	.cfi_offset	%esi, L_SC_ESI
60	.cfi_offset	%ebp, L_SC_EBP
61	.cfi_offset	%ebx, L_SC_EBX
62	.cfi_offset	%edx, L_SC_EDX
63	.cfi_offset	%ecx, L_SC_ECX
64	.cfi_offset	%eax, L_SC_EAX
65	.cfi_offset	%eip, L_SC_EIP
66	.cfi_offset	%esp, L_SC_ESP
67
68	leal	LINUX_RT_SIGF_UC(%esp), %ebx	/* linux ucontext for rt_sigreturn */
69	call	*%edi				/* call signal handler */
70	movl	$LINUX_SYS_linux_rt_sigreturn, %eax
71	int	$0x80
720:	jmp	0b
73	.cfi_endproc
74END(linux_vdso_rt_sigcode)
75
76ENTRY(__kernel_sigreturn)
77	.cfi_startproc
78	.cfi_signal_frame
79	popl	%eax				/* gcc unwind code need this */
80	movl	$LINUX_SYS_linux_sigreturn, %eax
81	int	$0x80
820:	jmp	0b
83	.cfi_endproc
84END(__kernel_sigreturn)
85
86ENTRY(__kernel_rt_sigreturn)
87	.cfi_startproc
88	.cfi_signal_frame
89	movl	$LINUX_SYS_linux_rt_sigreturn, %eax
90	int	$0x80
910:	jmp	0b
92	.cfi_endproc
93END(__kernel_rt_sigreturn)
94
95ENTRY(__kernel_vsyscall)
96	.cfi_startproc
97	int $0x80
98	ret
99	.cfi_endproc
100END(__kernel_vsyscall)
101
102#if 0
103	.section .note.Linux, "a",@note
104	.long 2f - 1f		/* namesz */
105	.balign 4
106	.long 4f - 3f		/* descsz */
107	.long 0
1081:
109	.asciz "Linux"
1102:
111	.balign 4
1123:
113	.long LINUX_VERSION_CODE
1144:
115	.balign 4
116	.previous
117#endif
118