generic, x86: fix __per_cpu_load relocation
authorBrian Gerst <brgerst@gmail.com>
Mon, 26 Jan 2009 13:44:05 +0000 (08:44 -0500)
committerIngo Molnar <mingo@elte.hu>
Mon, 26 Jan 2009 14:18:10 +0000 (15:18 +0100)
This patch fixes this linker error:

 WARNING: Absolute relocations present
 Offset     Info     Type     Sym.Value Sym.Name
 c0a4e07d 00e78001   R_386_32 c0ab0000  __per_cpu_load

Now, __per_cpu_load is a section-relative symbol:

 c0aa4000 D __per_cpu_load
 c0aa4000 A __per_cpu_load_abs

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/asm-generic/vmlinux.lds.h

index 53e21f3..f3180a8 100644 (file)
  * end offset.
  */
 #define PERCPU_VADDR(vaddr, phdr)                                      \
-       VMLINUX_SYMBOL(__per_cpu_load) = .;                             \
-       .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load)          \
+       VMLINUX_SYMBOL(__per_cpu_load_abs) = .;                         \
+       .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load_abs)      \
                                - LOAD_OFFSET) {                        \
                VMLINUX_SYMBOL(__per_cpu_start) = .;                    \
+               VMLINUX_SYMBOL(__per_cpu_load) = LOADADDR(.data.percpu) + LOAD_OFFSET;\
                *(.data.percpu.first)                                   \
                *(.data.percpu.page_aligned)                            \
                *(.data.percpu)                                         \
                *(.data.percpu.shared_aligned)                          \
                VMLINUX_SYMBOL(__per_cpu_end) = .;                      \
        } phdr                                                          \
-       . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
+       . = VMLINUX_SYMBOL(__per_cpu_load_abs) + SIZEOF(.data.percpu);
 
 /**
  * PERCPU - define output section for percpu area, simple version