PageRenderTime 22ms CodeModel.GetById 19ms app.highlight 2ms RepoModel.GetById 0ms app.codeStats 0ms

/arch/x86/vdso/vdso32/syscall.S

https://bitbucket.org/ndreys/linux-sunxi
Assembly | 77 lines | 72 code | 5 blank | 0 comment | 3 complexity | 0137d7f2ea270de3f119325ee7d3da3c MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
 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