|
@@ -135,24 +135,21 @@ SECTIONS
|
|
|
#ifdef CONFIG_X86_64
|
|
|
|
|
|
#define VSYSCALL_ADDR (-10*1024*1024)
|
|
|
-#define VSYSCALL_PHYS_ADDR ((LOADADDR(.data) + SIZEOF(.data) + \
|
|
|
- PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
|
|
|
-#define VSYSCALL_VIRT_ADDR ((ADDR(.data) + SIZEOF(.data) + \
|
|
|
- PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
|
|
|
|
|
|
-#define VLOAD_OFFSET (VSYSCALL_ADDR - VSYSCALL_PHYS_ADDR)
|
|
|
+#define VLOAD_OFFSET (VSYSCALL_ADDR - __vsyscall_0 + LOAD_OFFSET)
|
|
|
#define VLOAD(x) (ADDR(x) - VLOAD_OFFSET)
|
|
|
|
|
|
-#define VVIRT_OFFSET (VSYSCALL_ADDR - VSYSCALL_VIRT_ADDR)
|
|
|
+#define VVIRT_OFFSET (VSYSCALL_ADDR - __vsyscall_0)
|
|
|
#define VVIRT(x) (ADDR(x) - VVIRT_OFFSET)
|
|
|
|
|
|
+ . = ALIGN(4096);
|
|
|
+ __vsyscall_0 = .;
|
|
|
+
|
|
|
. = VSYSCALL_ADDR;
|
|
|
- .vsyscall_0 : AT(VSYSCALL_PHYS_ADDR) {
|
|
|
+ .vsyscall_0 : AT(VLOAD(.vsyscall_0)) {
|
|
|
*(.vsyscall_0)
|
|
|
} :user
|
|
|
|
|
|
- __vsyscall_0 = VSYSCALL_VIRT_ADDR;
|
|
|
-
|
|
|
. = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
|
|
|
.vsyscall_fn : AT(VLOAD(.vsyscall_fn)) {
|
|
|
*(.vsyscall_fn)
|
|
@@ -192,11 +189,9 @@ SECTIONS
|
|
|
*(.vsyscall_3)
|
|
|
}
|
|
|
|
|
|
- . = VSYSCALL_VIRT_ADDR + PAGE_SIZE;
|
|
|
+ . = __vsyscall_0 + PAGE_SIZE;
|
|
|
|
|
|
#undef VSYSCALL_ADDR
|
|
|
-#undef VSYSCALL_PHYS_ADDR
|
|
|
-#undef VSYSCALL_VIRT_ADDR
|
|
|
#undef VLOAD_OFFSET
|
|
|
#undef VLOAD
|
|
|
#undef VVIRT_OFFSET
|