3 #include "linux_assym.h" /* system definitions */
4 #include <machine/asmacros.h> /* miscellaneous asm macros */
6 #include <i386/linux/linux_syscall.h> /* system call numbers */
11 * To avoid excess stack frame the signal trampoline code emulates
12 * the 'call' instruction.
14 NON_GPROF_ENTRY
(linux_sigcode
)
15 movl
%esp
, %ebx
/* preserve sigframe */
19 add $
.startsigcode-.getip0, %eax /* ret address */
21 jmp
*LINUX_SIGF_HANDLER
(%ebx
)
23 popl
%eax
/* gcc unwind code need this */
24 movl $LINUX_SYS_linux_sigreturn
,%eax
/* linux_sigreturn() */
25 int $
0x80 /* enter kernel with args */
29 NON_GPROF_ENTRY
(linux_rt_sigcode
)
30 leal LINUX_RT_SIGF_UC
(%esp
),%ebx
/* linux ucp */
31 leal LINUX_RT_SIGF_SC
(%ebx
),%ecx
/* linux sigcontext */
36 add $
.startrtsigcode-.getip1, %eax /* ret address */
38 jmp
*LINUX_RT_SIGF_HANDLER
(%edi
)
40 movl $LINUX_SYS_linux_rt_sigreturn
,%eax
/* linux_rt_sigreturn() */
41 int $
0x80 /* enter kernel with args */
45 NON_GPROF_ENTRY
(linux_vsyscall
)
52 .section .note.Linux, "a",@note
53 .long 2f - 1f /* namesz */
55 .long 4f - 3f /* descsz */
62 .long LINUX_VERSION_CODE
68 #define do_cfa_expr(offset) \
69 .byte 0x0f; /* DW_CFA_def_cfa_expression */ \
70 .uleb128 11f-10f; /* length */ \
71 10: .byte 0x74; /* DW_OP_breg4 */ \
72 .sleb128 offset; /* offset */ \
73 .byte 0x06; /* DW_OP_deref */ \
78 .section .eh_frame,"a",@progbits
80 .long .LENDCIEDLSI1-.LSTARTCIEDLSI1
83 .byte 1 /* Version number */
84 .string "zRS" /* NULL-terminated
87 .uleb128 1 /* Code alignment factor */
88 .sleb128 -4 /* Data alignment factor */
89 .byte 8 /* Return address
92 .uleb128 1 /* Augmentation value length */
93 .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
94 .byte 0 /* DW_CFA_nop */
99 .long .LENDFDEDLSI1-.LSTARTFDEDLSI1 /* Length FDE */
101 .long .LSTARTFDEDLSI1-.LSTARTFRAMEDLSI1 /* CIE pointer */
102 .long .startsigcode-. /* PC-relative start address */
103 .long .endsigcode-.startsigcode
104 .uleb128 0 /* Augmentation */
105 do_cfa_expr
(LINUX_SIGF_SC-
8)
109 .long .LENDFDEDLSI2-.LSTARTFDEDLSI2 /* Length FDE */
111 .long .LSTARTFDEDLSI2-.LSTARTFRAMEDLSI1 /* CIE pointer */
112 .long .startrtsigcode-. /* PC-relative start address */
113 .long .endrtsigcode-.startrtsigcode
114 .uleb128 0 /* Augmentation */
115 do_cfa_expr
(LINUX_RT_SIGF_SC-
4+LINUX_SC_ESP
)
120 .section .eh_frame,"a",@progbits
122 .long .LENDCIEDLSI2-.LSTARTCIEDLSI2
125 .byte 1 /* Version number */
126 .string "zR" /* NULL-terminated
127 * augmentation string
129 .uleb128 1 /* Code alignment factor */
130 .sleb128 -4 /* Data alignment factor */
131 .byte 8 /* Return address register column */
132 .uleb128 1 /* Augmentation value length */
133 .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
134 .byte 0x0c /* DW_CFA_def_cfa */
137 .byte 0x88 /* DW_CFA_offset, column 0x8 */
141 .long .LENDFDEDLSI3-.LSTARTFDEDLSI3 /* Length FDE */
143 .long .LSTARTFDEDLSI3-.LSTARTFRAMEDLSI2 /* CIE pointer */
144 .long .startvsyscall-. /* PC-relative start address */
145 .long .endvsyscall-.startvsyscall