mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 04:11:49 +00:00
e6577a7ce9
Putting the vvar area after the vdso text is rather complicated: it only works of the total length of the vdso text mapping is known at vdso link time, and the linker doesn't allow symbol addresses to depend on the sizes of non-allocatable data after the PT_LOAD segment. Moving the vvar area before the vdso text will allow is to safely map non-allocatable data after the vdso text, which is a nice simplification. Signed-off-by: Andy Lutomirski <luto@amacapital.net> Link: http://lkml.kernel.org/r/156c78c0d93144ff1055a66493783b9e56813983.1405040914.git.luto@amacapital.net Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
#ifndef _ASM_X86_VDSO_H
|
|
#define _ASM_X86_VDSO_H
|
|
|
|
#include <asm/page_types.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/init.h>
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
#include <linux/mm_types.h>
|
|
|
|
struct vdso_image {
|
|
void *data;
|
|
unsigned long size; /* Always a multiple of PAGE_SIZE */
|
|
|
|
/* text_mapping.pages is big enough for data/size page pointers */
|
|
struct vm_special_mapping text_mapping;
|
|
|
|
unsigned long alt, alt_len;
|
|
|
|
long sym_vvar_start; /* Negative offset to the vvar area */
|
|
|
|
long sym_vvar_page;
|
|
long sym_hpet_page;
|
|
long sym_VDSO32_NOTE_MASK;
|
|
long sym___kernel_sigreturn;
|
|
long sym___kernel_rt_sigreturn;
|
|
long sym___kernel_vsyscall;
|
|
long sym_VDSO32_SYSENTER_RETURN;
|
|
};
|
|
|
|
#ifdef CONFIG_X86_64
|
|
extern const struct vdso_image vdso_image_64;
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_X32
|
|
extern const struct vdso_image vdso_image_x32;
|
|
#endif
|
|
|
|
#if defined CONFIG_X86_32 || defined CONFIG_COMPAT
|
|
extern const struct vdso_image vdso_image_32_int80;
|
|
#ifdef CONFIG_COMPAT
|
|
extern const struct vdso_image vdso_image_32_syscall;
|
|
#endif
|
|
extern const struct vdso_image vdso_image_32_sysenter;
|
|
|
|
extern const struct vdso_image *selected_vdso32;
|
|
#endif
|
|
|
|
extern void __init init_vdso_image(const struct vdso_image *image);
|
|
|
|
#endif /* __ASSEMBLER__ */
|
|
|
|
#endif /* _ASM_X86_VDSO_H */
|