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