1/* 2 * Code for the vDSO. This version uses the syscall instruction. 3 * 4 * First get the common code for the sigreturn entry points. 5 * This must come first. 6 */ 7#define SYSCALL_ENTER_KERNEL syscall 8#include "sigreturn.S" 9 10#include <asm/segment.h> 11 12 .text 13 .globl __kernel_vsyscall 14 .type __kernel_vsyscall,@function 15 ALIGN 16__kernel_vsyscall: 17.LSTART_vsyscall: 18 push %ebp 19.Lpush_ebp: 20 movl %ecx, %ebp 21 syscall 22 movl $__USER32_DS, %ecx 23 movl %ecx, %ss 24 movl %ebp, %ecx 25 popl %ebp 26.Lpop_ebp: 27 ret 28.LEND_vsyscall: 29 .size __kernel_vsyscall,.-.LSTART_vsyscall 30 31 .section .eh_frame,"a",@progbits 32.LSTARTFRAME: 33 .long .LENDCIE-.LSTARTCIE 34.LSTARTCIE: 35 .long 0 /* CIE ID */ 36 .byte 1 /* Version number */ 37 .string "zR" /* NUL-terminated augmentation string */ 38 .uleb128 1 /* Code alignment factor */ 39 .sleb128 -4 /* Data alignment factor */ 40 .byte 8 /* Return address register column */ 41 .uleb128 1 /* Augmentation value length */ 42 .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */ 43 .byte 0x0c /* DW_CFA_def_cfa */ 44 .uleb128 4 45 .uleb128 4 46 .byte 0x88 /* DW_CFA_offset, column 0x8 */ 47 .uleb128 1 48 .align 4 49.LENDCIE: 50 51 .long .LENDFDE1-.LSTARTFDE1 /* Length FDE */ 52.LSTARTFDE1: 53 .long .LSTARTFDE1-.LSTARTFRAME /* CIE pointer */ 54 .long .LSTART_vsyscall-. /* PC-relative start address */ 55 .long .LEND_vsyscall-.LSTART_vsyscall 56 .uleb128 0 /* Augmentation length */ 57 /* What follows are the instructions for the table generation. 58 We have to record all changes of the stack pointer. */ 59 .byte 0x40 + .Lpush_ebp-.LSTART_vsyscall /* DW_CFA_advance_loc */ 60 .byte 0x0e /* DW_CFA_def_cfa_offset */ 61 .uleb128 8 62 .byte 0x85, 0x02 /* DW_CFA_offset %ebp -8 */ 63 .byte 0x40 + .Lpop_ebp-.Lpush_ebp /* DW_CFA_advance_loc */ 64 .byte 0xc5 /* DW_CFA_restore %ebp */ 65 .byte 0x0e /* DW_CFA_def_cfa_offset */ 66 .uleb128 4 67 .align 4 68.LENDFDE1: 69 .previous 70 71 /* 72 * Pad out the segment to match the size of the sysenter.S version. 73 */ 74VDSO32_vsyscall_eh_frame_size = 0x40 75 .section .data,"aw",@progbits 76 .space VDSO32_vsyscall_eh_frame_size-(.LENDFDE1-.LSTARTFRAME), 0 77 .previous 78