Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c40818d authored by Andy Lutomirski's avatar Andy Lutomirski Committed by H. Peter Anvin
Browse files

x86-64: Move the "user" vsyscall segment out of the data segment.

parent 1bdfac19
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -154,6 +154,24 @@ SECTIONS

#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 VLOAD_OFFSET (VSYSCALL_ADDR - __vsyscall_0 + LOAD_OFFSET)
@@ -162,7 +180,6 @@ SECTIONS
#define VVIRT_OFFSET (VSYSCALL_ADDR - __vsyscall_0)
#define VVIRT(x) (ADDR(x) - VVIRT_OFFSET)

	. = ALIGN(4096);
	__vsyscall_0 = .;

	. = VSYSCALL_ADDR;
@@ -185,23 +202,6 @@ SECTIONS
#undef VVIRT_OFFSET
#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 */

	/* Init code and data - will be freed after init */