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#include "assym.inc" 9 10 .data 11 12 .globl linux_platform 13linux_platform: 14 .asciz "i686" 15 16 .text 17 18ENTRY(__kernel_sigreturn) 19 movl %esp, %ebx /* sigframe for sigreturn */ 20 call *%edi /* call signal handler */ 21.startsigcode: 22 popl %eax /* gcc unwind code need this */ 23 movl $LINUX_SYS_linux_sigreturn, %eax 24 int $0x80 25.endsigcode: 260: jmp 0b 27 28ENTRY(__kernel_rt_sigreturn) 29 leal LINUX_RT_SIGF_UC(%esp), %ebx /* linux ucontext for rt_sigreturn */ 30 call *%edi /* call signal handler */ 31.startrtsigcode: 32 movl $LINUX_SYS_linux_rt_sigreturn, %eax 33 int $0x80 34.endrtsigcode: 350: jmp 0b 36 37ENTRY(__kernel_vsyscall) 38.startvsyscall: 39 int $0x80 40 ret 41.endvsyscall: 42 43#if 0 44 .section .note.Linux, "a",@note 45 .long 2f - 1f /* namesz */ 46 .balign 4 47 .long 4f - 3f /* descsz */ 48 .long 0 491: 50 .asciz "Linux" 512: 52 .balign 4 533: 54 .long LINUX_VERSION_CODE 554: 56 .balign 4 57 .previous 58#endif 59 60#define do_cfa_expr(offset) \ 61 .byte 0x0f; /* DW_CFA_def_cfa_expression */ \ 62 .uleb128 11f-10f; /* length */ \ 6310: .byte 0x74; /* DW_OP_breg4 */ \ 64 .sleb128 offset; /* offset */ \ 65 .byte 0x06; /* DW_OP_deref */ \ 6611: 67 68 69 /* CIE */ 70 .section .eh_frame,"a",@progbits 71.LSTARTFRAMEDLSI1: 72 .long .LENDCIEDLSI1-.LSTARTCIEDLSI1 73.LSTARTCIEDLSI1: 74 .long 0 /* CIE ID */ 75 .byte 1 /* Version number */ 76 .string "zRS" /* NULL-terminated 77 * augmentation string 78 */ 79 .uleb128 1 /* Code alignment factor */ 80 .sleb128 -4 /* Data alignment factor */ 81 .byte 8 /* Return address 82 * register column 83 */ 84 .uleb128 1 /* Augmentation value length */ 85 .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */ 86 .byte 0 /* DW_CFA_nop */ 87 .align 4 88.LENDCIEDLSI1: 89 90 /* FDE */ 91 .long .LENDFDEDLSI1-.LSTARTFDEDLSI1 /* Length FDE */ 92.LSTARTFDEDLSI1: 93 .long .LSTARTFDEDLSI1-.LSTARTFRAMEDLSI1 /* CIE pointer */ 94 .long .startsigcode-. /* PC-relative start address */ 95 .long .endsigcode-.startsigcode 96 .uleb128 0 /* Augmentation */ 97 do_cfa_expr(LINUX_SIGF_SC-8) 98 .align 4 99.LENDFDEDLSI1: 100 101 .long .LENDFDEDLSI2-.LSTARTFDEDLSI2 /* Length FDE */ 102.LSTARTFDEDLSI2: 103 .long .LSTARTFDEDLSI2-.LSTARTFRAMEDLSI1 /* CIE pointer */ 104 .long .startrtsigcode-. /* PC-relative start address */ 105 .long .endrtsigcode-.startrtsigcode 106 .uleb128 0 /* Augmentation */ 107 do_cfa_expr(LINUX_RT_SIGF_SC-4+LINUX_SC_ESP) 108 .align 4 109.LENDFDEDLSI2: 110 .previous 111 112 .section .eh_frame,"a",@progbits 113.LSTARTFRAMEDLSI2: 114 .long .LENDCIEDLSI2-.LSTARTCIEDLSI2 115.LSTARTCIEDLSI2: 116 .long 0 /* CIE ID */ 117 .byte 1 /* Version number */ 118 .string "zR" /* NULL-terminated 119 * augmentation string 120 */ 121 .uleb128 1 /* Code alignment factor */ 122 .sleb128 -4 /* Data alignment factor */ 123 .byte 8 /* Return address register column */ 124 .uleb128 1 /* Augmentation value length */ 125 .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */ 126 .byte 0x0c /* DW_CFA_def_cfa */ 127 .uleb128 4 128 .uleb128 4 129 .byte 0x88 /* DW_CFA_offset, column 0x8 */ 130 .uleb128 1 131 .align 4 132.LENDCIEDLSI2: 133 .long .LENDFDEDLSI3-.LSTARTFDEDLSI3 /* Length FDE */ 134.LSTARTFDEDLSI3: 135 .long .LSTARTFDEDLSI3-.LSTARTFRAMEDLSI2 /* CIE pointer */ 136 .long .startvsyscall-. /* PC-relative start address */ 137 .long .endvsyscall-.startvsyscall 138 .uleb128 0 139 .align 4 140.LENDFDEDLSI3: 141 .previous 142