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	 */
72VDSO32_vsyscall_eh_frame_size = 0x40
73	.section .data,"aw",@progbits
74	.space VDSO32_vsyscall_eh_frame_size-(.LENDFDE1-.LSTARTFRAME), 0
75	.previous
76