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