]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/x86/include/asm/vdso.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[karo-tx-linux.git] / arch / x86 / include / asm / vdso.h
1 #ifndef _ASM_X86_VDSO_H
2 #define _ASM_X86_VDSO_H
3
4 #include <asm/page_types.h>
5 #include <linux/linkage.h>
6
7 #ifdef __ASSEMBLER__
8
9 #define DEFINE_VDSO_IMAGE(symname, filename)                            \
10 __PAGE_ALIGNED_DATA ;                                                   \
11         .globl symname##_start, symname##_end ;                         \
12         .align PAGE_SIZE ;                                              \
13         symname##_start: ;                                              \
14         .incbin filename ;                                              \
15         symname##_end: ;                                                \
16         .align PAGE_SIZE /* extra data here leaks to userspace. */ ;    \
17                                                                         \
18 .previous ;                                                             \
19                                                                         \
20         .globl symname##_pages ;                                        \
21         .bss ;                                                          \
22         .align 8 ;                                                      \
23         .type symname##_pages, @object ;                                \
24         symname##_pages: ;                                              \
25         .zero (symname##_end - symname##_start + PAGE_SIZE - 1) / PAGE_SIZE * (BITS_PER_LONG / 8) ; \
26         .size symname##_pages, .-symname##_pages
27
28 #else
29
30 #define DECLARE_VDSO_IMAGE(symname)                             \
31         extern char symname##_start[], symname##_end[];         \
32         extern struct page *symname##_pages[]
33
34 #if defined CONFIG_X86_32 || defined CONFIG_COMPAT
35
36 #include <asm/vdso32.h>
37
38 DECLARE_VDSO_IMAGE(vdso32_int80);
39 #ifdef CONFIG_COMPAT
40 DECLARE_VDSO_IMAGE(vdso32_syscall);
41 #endif
42 DECLARE_VDSO_IMAGE(vdso32_sysenter);
43
44 /*
45  * Given a pointer to the vDSO image, find the pointer to VDSO32_name
46  * as that symbol is defined in the vDSO sources or linker script.
47  */
48 #define VDSO32_SYMBOL(base, name)                                       \
49 ({                                                                      \
50         extern const char VDSO32_##name[];                              \
51         (void __user *)(VDSO32_##name + (unsigned long)(base));         \
52 })
53 #endif
54
55 /*
56  * These symbols are defined with the addresses in the vsyscall page.
57  * See vsyscall-sigreturn.S.
58  */
59 extern void __user __kernel_sigreturn;
60 extern void __user __kernel_rt_sigreturn;
61
62 void __init patch_vdso32(void *vdso, size_t len);
63
64 #endif /* __ASSEMBLER__ */
65
66 #endif /* _ASM_X86_VDSO_H */