aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/vmlinux.lds.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index e79fb3951fce..8f3a265476d7 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -158,10 +158,12 @@ SECTIONS
158 __vvar_page = .; 158 __vvar_page = .;
159 159
160 .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) { 160 .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) {
161 /* work around gold bug 13023 */
162 __vvar_beginning_hack = .;
161 163
162 /* Place all vvars at the offsets in asm/vvar.h. */ 164 /* Place all vvars at the offsets in asm/vvar.h. */
163#define EMIT_VVAR(name, offset) \ 165#define EMIT_VVAR(name, offset) \
164 . = offset; \ 166 . = __vvar_beginning_hack + offset; \
165 *(.vvar_ ## name) 167 *(.vvar_ ## name)
166#define __VVAR_KERNEL_LDS 168#define __VVAR_KERNEL_LDS
167#include <asm/vvar.h> 169#include <asm/vvar.h>
@@ -184,15 +186,17 @@ SECTIONS
184 186
185 . = VSYSCALL_ADDR; 187 . = VSYSCALL_ADDR;
186 .vsyscall : AT(VLOAD(.vsyscall)) { 188 .vsyscall : AT(VLOAD(.vsyscall)) {
189 /* work around gold bug 13023 */
190 __vsyscall_beginning_hack = .;
187 *(.vsyscall_0) 191 *(.vsyscall_0)
188 192
189 . = 1024; 193 . = __vsyscall_beginning_hack + 1024;
190 *(.vsyscall_1) 194 *(.vsyscall_1)
191 195
192 . = 2048; 196 . = __vsyscall_beginning_hack + 2048;
193 *(.vsyscall_2) 197 *(.vsyscall_2)
194 198
195 . = 4096; /* Pad the whole page. */ 199 . = __vsyscall_beginning_hack + 4096; /* Pad the whole page. */
196 } :user =0xcc 200 } :user =0xcc
197 . = ALIGN(__vsyscall_0 + PAGE_SIZE, PAGE_SIZE); 201 . = ALIGN(__vsyscall_0 + PAGE_SIZE, PAGE_SIZE);
198 202