Missing symbol prefix on vmlinux.lds.h
authorYoshinori Sato <ysato@users.sourceforge.jp>
Thu, 31 Jul 2008 07:07:29 +0000 (00:07 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 1 Aug 2008 19:46:41 +0000 (12:46 -0700)
ARCH=h8300:

init/main.c:781: undefined reference to `___early_initcall_end'

Same problem have
__start___bug_table
__stop___bug_table
__tracedata_start
__tracedata_end
__per_cpu_start
__per_cpu_end

When defining a symbol in vmlinux.lds, use the VMLINUX_SYMBOL macro.
VMLINUX_SYMBOL adds a prefix charactor.

You can't just use straight symbol names in common header files as they
dont take into consideration weird arch-specific ABI conventions.  in the
case of Blackfin/h8300, the ABI dictates that any C-visible symbols have
an underscore prefixed to them.  Thus all symbols in vmlinux.lds.h need to
be wrapped in VMLINUX_SYMBOL() so that each arch can put hide this magic
in their own files.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: "Mike Frysinger" <vapier.adi@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/asm-generic/vmlinux.lds.h

index 6d88a92..cb752ba 100644 (file)
 #define BUG_TABLE                                                      \
        . = ALIGN(8);                                                   \
        __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) {             \
-               __start___bug_table = .;                                \
+               VMLINUX_SYMBOL(__start___bug_table) = .;                \
                *(__bug_table)                                          \
-               __stop___bug_table = .;                                 \
+               VMLINUX_SYMBOL(__stop___bug_table) = .;                 \
        }
 #else
 #define BUG_TABLE
 #define TRACEDATA                                                      \
        . = ALIGN(4);                                                   \
        .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {               \
-               __tracedata_start = .;                                  \
+               VMLINUX_SYMBOL(__tracedata_start) = .;                  \
                *(.tracedata)                                           \
-               __tracedata_end = .;                                    \
+               VMLINUX_SYMBOL(__tracedata_end) = .;                    \
        }
 #else
 #define TRACEDATA
 
 #define INITCALLS                                                      \
        *(.initcallearly.init)                                          \
-       __early_initcall_end = .;                                       \
+       VMLINUX_SYMBOL(__early_initcall_end) = .;                       \
        *(.initcall0.init)                                              \
        *(.initcall0s.init)                                             \
        *(.initcall1.init)                                              \
 
 #define PERCPU(align)                                                  \
        . = ALIGN(align);                                               \
-       __per_cpu_start = .;                                            \
+       VMLINUX_SYMBOL(__per_cpu_start) = .;                            \
        .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {          \
                *(.data.percpu)                                         \
                *(.data.percpu.shared_aligned)                          \
        }                                                               \
-       __per_cpu_end = .;
+       VMLINUX_SYMBOL(__per_cpu_end) = .;