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