OSDN Git Service

Some arches (like the Blackfin architecture) have an ABI where all symbols
authorDavid McCullough <davidm@snapgear.com>
Wed, 6 May 2009 23:59:01 +0000 (23:59 +0000)
committerDavid McCullough <davidm@snapgear.com>
Wed, 6 May 2009 23:59:01 +0000 (23:59 +0000)
get a symbol prefix.  In our case, it's an underscore ("_").  So we set the
symbol prefix in the configure script and output it in the linker script and
all relevant files.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Makefile.in
configure.in
elf2flt.ld
ld-elf2flt.in

index f041890..5f9e17d 100644 (file)
@@ -35,7 +35,7 @@ CCFLAGS = $(CFLAGS) $(DEFS) $(INCLUDES)
 
 LDFILE= elf2flt.ld
 ifeq ($(strip $(CPU)),e1)
 
 LDFILE= elf2flt.ld
 ifeq ($(strip $(CPU)),e1)
-SRC_LDFILE= $(CPU)-elf2flt.ld
+SRC_LDFILE= $(srcdir)/$(CPU)-elf2flt.ld
 else 
 SRC_LDFILE= elf2flt.ld
 endif
 else 
 SRC_LDFILE= elf2flt.ld
 endif
@@ -79,6 +79,6 @@ install:
                mv $(target_bindir)/ld$(EXEEXT) $(target_bindir)/ld.real$(EXEEXT)
        $(INSTALL) -m 755 ld-elf2flt $(bindir)/$(TARGET)-ld
        $(INSTALL) -m 755 ld-elf2flt $(target_bindir)/ld
                mv $(target_bindir)/ld$(EXEEXT) $(target_bindir)/ld.real$(EXEEXT)
        $(INSTALL) -m 755 ld-elf2flt $(bindir)/$(TARGET)-ld
        $(INSTALL) -m 755 ld-elf2flt $(target_bindir)/ld
-       $(INSTALL) -m 644 $(srcdir)/$(SRC_LDFILE) $(target_libdir)/$(LDFILE)
+       $(INSTALL) -m 644 $(SRC_LDFILE) $(target_libdir)/$(LDFILE)
 
 
 
 
index 5ab8983..c3b71ed 100644 (file)
@@ -135,6 +135,13 @@ Run configure again specifying these options:
 ])
 fi
 
 ])
 fi
 
+SYMBOL_PREFIX=
+case $target in
+       bfin*)
+               SYMBOL_PREFIX=_
+               ;;
+esac
+
 dnl Make sure we resolve system symbols before libiberty/libbfd ones.
 dnl Otherwise, things like getopt get screwed up because the system headers
 dnl redirect some functions to the system symbols, but other local symbols
 dnl Make sure we resolve system symbols before libiberty/libbfd ones.
 dnl Otherwise, things like getopt get screwed up because the system headers
 dnl redirect some functions to the system symbols, but other local symbols
@@ -166,6 +173,7 @@ AC_SUBST(zlib_include_dir)
 AC_SUBST(binutils_ldscript_dir)
 AC_SUBST(got_check)
 AC_SUBST(emit_relocs)
 AC_SUBST(binutils_ldscript_dir)
 AC_SUBST(got_check)
 AC_SUBST(emit_relocs)
+AC_SUBST(SYMBOL_PREFIX)
 
 
-AC_OUTPUT(Makefile ld-elf2flt)
+AC_OUTPUT(Makefile ld-elf2flt elf2flt.ld)
 
 
index 9c01b31..4343108 100644 (file)
@@ -1,5 +1,5 @@
 
 
-ENTRY (_start)
+ENTRY (@SYMBOL_PREFIX@_start)
 
 MEMORY {
        flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
 
 MEMORY {
        flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
@@ -10,7 +10,7 @@ SECTIONS {
        .text 0x0 : {
                . = . + 4;
                . = ALIGN(0x4) ;
        .text 0x0 : {
                . = . + 4;
                . = ALIGN(0x4) ;
-               _stext = . ;
+               @SYMBOL_PREFIX@_stext = . ;
                *(.text)
                *(.text.*)
                *(.gnu.warning)
                *(.text)
                *(.text.*)
                *(.gnu.warning)
@@ -32,19 +32,19 @@ W_RODAT             *(.gnu.linkonce.r*)
                   the start followed by the code pointed to by entries
                   in the lookup table.  */
                . = ALIGN (4) ;
                   the start followed by the code pointed to by entries
                   in the lookup table.  */
                . = ALIGN (4) ;
-               PROVIDE(__ctbp = .);
+               PROVIDE(@SYMBOL_PREFIX@__ctbp = .);
                *(.call_table_data)
                *(.call_table_text)
 
                . = ALIGN(0x20) ;
                *(.call_table_data)
                *(.call_table_text)
 
                . = ALIGN(0x20) ;
-               _etext = . ;
+               @SYMBOL_PREFIX@_etext = . ;
        } > flatmem
 
        .data : {
                . = ALIGN(0x4) ;
        } > flatmem
 
        .data : {
                . = ALIGN(0x4) ;
-               _sdata = . ;
-               __data_start = . ;
-               data_start = . ;
+               @SYMBOL_PREFIX@_sdata = . ;
+               @SYMBOL_PREFIX@__data_start = . ;
+               @SYMBOL_PREFIX@data_start = . ;
                *(.got.plt)
                *(.got)
                FILL(0) ;
                *(.got.plt)
                *(.got)
                FILL(0) ;
@@ -62,15 +62,15 @@ R_RODAT             *(.gnu.linkonce.r*)
 
                /* Microblaze has .sdata and .sbss (small bss).  They must
                   be contiguous, so please don't move any of this. JW */
 
                /* Microblaze has .sdata and .sbss (small bss).  They must
                   be contiguous, so please don't move any of this. JW */
-               _ssrw = . ;
+               @SYMBOL_PREFIX@_ssrw = . ;
                *(.sdata)
                *(.sdata.*)
                *(.sbss)                        /* Don't move this! */
                *(.gnu.linkonce.sb*)
                *(.sdata)
                *(.sdata.*)
                *(.sbss)                        /* Don't move this! */
                *(.gnu.linkonce.sb*)
-               _essrw = . ;
+               @SYMBOL_PREFIX@_essrw = . ;
 
 
-               _ssrw_size = _essrw - _ssrw;
-               PROVIDE(_SDA_BASE_ = _ssrw + (_ssrw_size / 2));
+               @SYMBOL_PREFIX@_ssrw_size = @SYMBOL_PREFIX@_essrw - @SYMBOL_PREFIX@_ssrw;
+               PROVIDE(@SYMBOL_PREFIX@_SDA_BASE_ = @SYMBOL_PREFIX@_ssrw + (@SYMBOL_PREFIX@_ssrw_size / 2));
 
                *(.gnu.linkonce.s.*)
                *(__libc_atexit)
 
                *(.gnu.linkonce.s.*)
                *(__libc_atexit)
@@ -80,15 +80,15 @@ R_RODAT             *(.gnu.linkonce.r*)
 
                /* microblaze-specific read-only small data area
                   and associated locating symbols */
 
                /* microblaze-specific read-only small data area
                   and associated locating symbols */
-               _ssro = . ;
+               @SYMBOL_PREFIX@_ssro = . ;
                *(.sdata2)
                *(.sdata2)
-               _essro = . ;
-               _ssro_size = _essro - _ssro;
-               PROVIDE(_SDA2_BASE_ = _ssro + (_ssro_size / 2));
+               @SYMBOL_PREFIX@_essro = . ;
+               @SYMBOL_PREFIX@_ssro_size = @SYMBOL_PREFIX@_essro - @SYMBOL_PREFIX@_ssro;
+               PROVIDE(@SYMBOL_PREFIX@_SDA2_BASE_ = @SYMBOL_PREFIX@_ssro + (@SYMBOL_PREFIX@_ssro_size / 2));
 
                . = ALIGN(4) ;
 
                . = ALIGN(4) ;
-               __CTOR_LIST__ = .;
-               LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+               @SYMBOL_PREFIX@__CTOR_LIST__ = .;
+               LONG((@SYMBOL_PREFIX@__CTOR_END__ - @SYMBOL_PREFIX@__CTOR_LIST__) / 4 - 2)
 SINGLE_LINK:   /* gcc uses crtbegin.o to find the start of
 SINGLE_LINK:      the constructors, so we make sure it is
 SINGLE_LINK:      first.  Because this is a wildcard, it
 SINGLE_LINK:   /* gcc uses crtbegin.o to find the start of
 SINGLE_LINK:      the constructors, so we make sure it is
 SINGLE_LINK:      first.  Because this is a wildcard, it
@@ -107,29 +107,29 @@ SINGLE_LINK:      KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
 SINGLE_LINK:   KEEP (*(SORT(.ctors.*)))
                KEEP (*(.ctors))
                LONG(0)
 SINGLE_LINK:   KEEP (*(SORT(.ctors.*)))
                KEEP (*(.ctors))
                LONG(0)
-               __CTOR_END__ = .;
-               __DTOR_LIST__ = .;
-               LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+               @SYMBOL_PREFIX@__CTOR_END__ = .;
+               @SYMBOL_PREFIX@__DTOR_LIST__ = .;
+               LONG((@SYMBOL_PREFIX@__DTOR_END__ - @SYMBOL_PREFIX@__DTOR_LIST__) / 4 - 2)
 SINGLE_LINK:   KEEP (*crtbegin*.o(.dtors))
 SINGLE_LINK:   KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
 SINGLE_LINK:   KEEP (*(SORT(.dtors.*)))
                KEEP (*(.dtors))
                LONG(0)
 SINGLE_LINK:   KEEP (*crtbegin*.o(.dtors))
 SINGLE_LINK:   KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
 SINGLE_LINK:   KEEP (*(SORT(.dtors.*)))
                KEEP (*(.dtors))
                LONG(0)
-               __DTOR_END__ = .;
+               @SYMBOL_PREFIX@__DTOR_END__ = .;
 
 
-               PROVIDE (__preinit_array_start = .);
+               PROVIDE (@SYMBOL_PREFIX@__preinit_array_start = .);
                KEEP (*(.preinit_array))
                KEEP (*(.preinit_array))
-               PROVIDE (__preinit_array_end = .);
+               PROVIDE (@SYMBOL_PREFIX@__preinit_array_end = .);
 
 
-               PROVIDE (__init_array_start = .);
+               PROVIDE (@SYMBOL_PREFIX@__init_array_start = .);
                KEEP (*(SORT(.init_array.*)))
                KEEP (*(.init_array))
                KEEP (*(SORT(.init_array.*)))
                KEEP (*(.init_array))
-               PROVIDE (__init_array_end = .);
+               PROVIDE (@SYMBOL_PREFIX@__init_array_end = .);
 
 
-               PROVIDE (__fini_array_start = .);
+               PROVIDE (@SYMBOL_PREFIX@__fini_array_start = .);
                KEEP (*(.fini_array))
                KEEP (*(SORT(.fini_array.*)))
                KEEP (*(.fini_array))
                KEEP (*(SORT(.fini_array.*)))
-               PROVIDE (__fini_array_end = .);
+               PROVIDE (@SYMBOL_PREFIX@__fini_array_end = .);
        } > flatmem
 
        .eh_frame_hdr : { *(.eh_frame_hdr) } > flatmem
        } > flatmem
 
        .eh_frame_hdr : { *(.eh_frame_hdr) } > flatmem
@@ -137,12 +137,12 @@ SINGLE_LINK:      KEEP (*(SORT(.dtors.*)))
        .gcc_except_table : { KEEP(*(.gcc_except_table)) } >flatmem
 
        . = ALIGN(0x10) ;
        .gcc_except_table : { KEEP(*(.gcc_except_table)) } >flatmem
 
        . = ALIGN(0x10) ;
-       _edata = . ;
+       @SYMBOL_PREFIX@_edata = . ;
 
        .bss : {
                . = ALIGN(0x4) ;
 
        .bss : {
                . = ALIGN(0x4) ;
-               _sbss = ALIGN(0x4) ;
-               __bss_start = . ;
+               @SYMBOL_PREFIX@_sbss = ALIGN(0x4) ;
+               @SYMBOL_PREFIX@__bss_start = . ;
                *(.dynsbss)
                *(.sbss)
                *(.sbss.*)
                *(.dynsbss)
                *(.sbss)
                *(.sbss.*)
@@ -154,14 +154,14 @@ SINGLE_LINK:      KEEP (*(SORT(.dtors.*)))
                *(.gnu.linkonce.b*)
                *(COMMON)
                . = ALIGN(0x10) ;
                *(.gnu.linkonce.b*)
                *(COMMON)
                . = ALIGN(0x10) ;
-               _ebss = . ;
-               _end = . ;
-               end = . ;
+               @SYMBOL_PREFIX@_ebss = . ;
+               @SYMBOL_PREFIX@_end = . ;
+               @SYMBOL_PREFIX@end = . ;
        } > flatmem
 
        .stack : {
                . = ALIGN(0x4);
        } > flatmem
 
        .stack : {
                . = ALIGN(0x4);
-               __stack_start = .;
+               @SYMBOL_PREFIX@_stack_start = .;
        }
 
        .junk 0 : { *(.rel*) *(.rela*) }
        }
 
        .junk 0 : { *(.rel*) *(.rela*) }
index 418c9ee..3ca0c7b 100644 (file)
@@ -122,7 +122,7 @@ then
                        then
                                # Non application modules enter via main not _start
                                #    SEDOP="$SEDOP -e 's/ENTRY (_start)/ENTRY (main)/'"
                        then
                                # Non application modules enter via main not _start
                                #    SEDOP="$SEDOP -e 's/ENTRY (_start)/ENTRY (main)/'"
-                               SEDOP="$SEDOP -e s/\\(ENTRY.\\)(_start)/\1(lib_main)/"
+                               SEDOP="$SEDOP -e s/\\(ENTRY.\\)(@SYMBOL_PREFIX@_start)/\1(lib_main)/"
                                OBJCOPYOP="--localize-hidden --weaken"
                        fi
 
                                OBJCOPYOP="--localize-hidden --weaken"
                        fi