x86-64: Move the "user" vsyscall segment out of the data segment.
The kernel's loader doesn't seem to care, but gold complains. Signed-off-by: Andy Lutomirski <luto@mit.edu> Link: http://lkml.kernel.org/r/f0716870c297242a841b949953d80c0d87bf3d3f.1312378163.git.luto@mit.edu Reported-by: Arkadiusz Miskiewicz <a.miskiewicz@gmail.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
Родитель
1bdfac19b3
Коммит
9c40818da5
|
@ -154,6 +154,24 @@ SECTIONS
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
__vvar_page = .;
|
||||||
|
|
||||||
|
.vvar : AT(ADDR(.vvar) - LOAD_OFFSET) {
|
||||||
|
|
||||||
|
/* Place all vvars at the offsets in asm/vvar.h. */
|
||||||
|
#define EMIT_VVAR(name, offset) \
|
||||||
|
. = offset; \
|
||||||
|
*(.vvar_ ## name)
|
||||||
|
#define __VVAR_KERNEL_LDS
|
||||||
|
#include <asm/vvar.h>
|
||||||
|
#undef __VVAR_KERNEL_LDS
|
||||||
|
#undef EMIT_VVAR
|
||||||
|
|
||||||
|
} :data
|
||||||
|
|
||||||
|
. = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE);
|
||||||
|
|
||||||
#define VSYSCALL_ADDR (-10*1024*1024)
|
#define VSYSCALL_ADDR (-10*1024*1024)
|
||||||
|
|
||||||
#define VLOAD_OFFSET (VSYSCALL_ADDR - __vsyscall_0 + LOAD_OFFSET)
|
#define VLOAD_OFFSET (VSYSCALL_ADDR - __vsyscall_0 + LOAD_OFFSET)
|
||||||
|
@ -162,7 +180,6 @@ SECTIONS
|
||||||
#define VVIRT_OFFSET (VSYSCALL_ADDR - __vsyscall_0)
|
#define VVIRT_OFFSET (VSYSCALL_ADDR - __vsyscall_0)
|
||||||
#define VVIRT(x) (ADDR(x) - VVIRT_OFFSET)
|
#define VVIRT(x) (ADDR(x) - VVIRT_OFFSET)
|
||||||
|
|
||||||
. = ALIGN(4096);
|
|
||||||
__vsyscall_0 = .;
|
__vsyscall_0 = .;
|
||||||
|
|
||||||
. = VSYSCALL_ADDR;
|
. = VSYSCALL_ADDR;
|
||||||
|
@ -185,23 +202,6 @@ SECTIONS
|
||||||
#undef VVIRT_OFFSET
|
#undef VVIRT_OFFSET
|
||||||
#undef VVIRT
|
#undef VVIRT
|
||||||
|
|
||||||
__vvar_page = .;
|
|
||||||
|
|
||||||
.vvar : AT(ADDR(.vvar) - LOAD_OFFSET) {
|
|
||||||
|
|
||||||
/* Place all vvars at the offsets in asm/vvar.h. */
|
|
||||||
#define EMIT_VVAR(name, offset) \
|
|
||||||
. = offset; \
|
|
||||||
*(.vvar_ ## name)
|
|
||||||
#define __VVAR_KERNEL_LDS
|
|
||||||
#include <asm/vvar.h>
|
|
||||||
#undef __VVAR_KERNEL_LDS
|
|
||||||
#undef EMIT_VVAR
|
|
||||||
|
|
||||||
} :data
|
|
||||||
|
|
||||||
. = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE);
|
|
||||||
|
|
||||||
#endif /* CONFIG_X86_64 */
|
#endif /* CONFIG_X86_64 */
|
||||||
|
|
||||||
/* Init code and data - will be freed after init */
|
/* Init code and data - will be freed after init */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче