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