From 547ee84cea37696d25c93306e909378a87db2f66 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Sat, 16 Apr 2005 15:24:35 -0700 Subject: [PATCH] ppc64: Improve mapping of vDSO This patch reworks the way the ppc64 is mapped in user memory by the kernel to make it more robust against possible collisions with executable segments. Instead of just whacking a VMA at 1Mb, I now use get_unmapped_area() with a hint, and I moved the mapping of the vDSO to after the mapping of the various ELF segments and of the interpreter, so that conflicts get caught properly (it still has to be before create_elf_tables since the later will fill the AT_SYSINFO_EHDR with the proper address). While I was at it, I also changed the 32 and 64 bits vDSO's to link at their "natural" address of 1Mb instead of 0. This is the address where they are normally mapped in absence of conflict. By doing so, it should be possible to properly prelink one it's been verified to work on glibc. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/asm-ppc64/vdso.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/asm-ppc64') diff --git a/include/asm-ppc64/vdso.h b/include/asm-ppc64/vdso.h index b74e16c0cf01..85d8a7be25c4 100644 --- a/include/asm-ppc64/vdso.h +++ b/include/asm-ppc64/vdso.h @@ -4,12 +4,12 @@ #ifdef __KERNEL__ /* Default link addresses for the vDSOs */ -#define VDSO32_LBASE 0 -#define VDSO64_LBASE 0 +#define VDSO32_LBASE 0x100000 +#define VDSO64_LBASE 0x100000 /* Default map addresses */ -#define VDSO32_MBASE 0x100000 -#define VDSO64_MBASE 0x100000 +#define VDSO32_MBASE VDSO32_LBASE +#define VDSO64_MBASE VDSO64_LBASE #define VDSO_VERSION_STRING LINUX_2.6.12 -- cgit v1.2.3