]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/x86/entry/vdso/vdso32/syscall.S
Merge branch 'sunxi/dt-for-4.4' into sunxi/for-next
[karo-tx-linux.git] / arch / x86 / entry / vdso / vdso32 / syscall.S
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    %ebp, %ecx
23         popl    %ebp
24 .Lpop_ebp:
25         ret
26 .LEND_vsyscall:
27         .size __kernel_vsyscall,.-.LSTART_vsyscall
28
29         .section .eh_frame,"a",@progbits
30 .LSTARTFRAME:
31         .long .LENDCIE-.LSTARTCIE
32 .LSTARTCIE:
33         .long 0                 /* CIE ID */
34         .byte 1                 /* Version number */
35         .string "zR"            /* NUL-terminated augmentation string */
36         .uleb128 1              /* Code alignment factor */
37         .sleb128 -4             /* Data alignment factor */
38         .byte 8                 /* Return address register column */
39         .uleb128 1              /* Augmentation value length */
40         .byte 0x1b              /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
41         .byte 0x0c              /* DW_CFA_def_cfa */
42         .uleb128 4
43         .uleb128 4
44         .byte 0x88              /* DW_CFA_offset, column 0x8 */
45         .uleb128 1
46         .align 4
47 .LENDCIE:
48
49         .long .LENDFDE1-.LSTARTFDE1     /* Length FDE */
50 .LSTARTFDE1:
51         .long .LSTARTFDE1-.LSTARTFRAME  /* CIE pointer */
52         .long .LSTART_vsyscall-.        /* PC-relative start address */
53         .long .LEND_vsyscall-.LSTART_vsyscall
54         .uleb128 0                      /* Augmentation length */
55         /* What follows are the instructions for the table generation.
56            We have to record all changes of the stack pointer.  */
57         .byte 0x40 + .Lpush_ebp-.LSTART_vsyscall /* DW_CFA_advance_loc */
58         .byte 0x0e              /* DW_CFA_def_cfa_offset */
59         .uleb128 8
60         .byte 0x85, 0x02        /* DW_CFA_offset %ebp -8 */
61         .byte 0x40 + .Lpop_ebp-.Lpush_ebp /* DW_CFA_advance_loc */
62         .byte 0xc5              /* DW_CFA_restore %ebp */
63         .byte 0x0e              /* DW_CFA_def_cfa_offset */
64         .uleb128 4
65         .align 4
66 .LENDFDE1:
67         .previous
68
69         /*
70          * Pad out the segment to match the size of the sysenter.S version.
71          */
72 VDSO32_vsyscall_eh_frame_size = 0x40
73         .section .data,"aw",@progbits
74         .space VDSO32_vsyscall_eh_frame_size-(.LENDFDE1-.LSTARTFRAME), 0
75         .previous