diff options
-rw-r--r-- | ld/ChangeLog | 13 | ||||
-rw-r--r-- | ld/emulparams/criself.sh | 19 | ||||
-rw-r--r-- | ld/emulparams/crislinux.sh | 10 | ||||
-rw-r--r-- | ld/scripttempl/crisaout.sc | 17 |
4 files changed, 43 insertions, 16 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 58a6c87..8a14306 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,16 @@ +2000-09-29 Hans-Peter Nilsson <hp@axis.com> + + * scripttempl/crisaout.sc (ENTRY): Now __start. + (.text): Add default setting for __start. + Remove CONSTRUCTORS handling. + (/DISCARD/): Add .gnu.warning.*. + * emulparams/crislinux.sh (ENTRY): Now __start. + (TEXT_START_SYMBOLS): New; provide __Stext and __start default. + * emulparams/criself.sh (OUTPUT_FORMAT): Now elf32-us-cris. + (ENTRY): Now __start. + (INITIAL_READONLY_SECTIONS): Add KEEP for .startup. + (EXECUTABLE_SYMBOLS): Add default setting for __start. + 2000-09-29 Kazu Hirata <kazu@hxi.com> * deffile.h: Fix formatting. diff --git a/ld/emulparams/criself.sh b/ld/emulparams/criself.sh index 44d0a11..4acd56a 100644 --- a/ld/emulparams/criself.sh +++ b/ld/emulparams/criself.sh @@ -2,21 +2,32 @@ MACHINE= SCRIPT_NAME=elf TEMPLATE_NAME=elf32 -OUTPUT_FORMAT="elf32-cris" + +# Symbols have underscore prepended. +OUTPUT_FORMAT="elf32-us-cris" ARCH=cris MAXPAGESIZE=32 -ENTRY=_start +ENTRY=__start EMBEDDED=yes ALIGNMENT=32 TEXT_START_ADDR=0 # Put crt0 for flash/eprom etc. in this section. -INITIAL_READONLY_SECTIONS='.startup : { *(.startup) }' +INITIAL_READONLY_SECTIONS='.startup : { KEEP(*(.startup)) }' # TEXT_START_SYMBOLS doesn't get what we want which is the start of # all read-only sections; there's at least .init and .fini before it. # We have to resort to trickery. -EXECUTABLE_SYMBOLS='PROVIDE (__Stext = .);' +# +# The __start dance is to get us through assumptions about entry +# symbols, and to clear _start for normal use with sane programs. +EXECUTABLE_SYMBOLS=' +PROVIDE (__Stext = .); +__start = DEFINED(__start) ? __start : + DEFINED(_start) ? _start : + DEFINED(start) ? start : + DEFINED(.startup) ? .startup + 2 : 2; +' # Smuggle an "OTHER_TEXT_END_SYMBOLS" here. OTHER_READONLY_SECTIONS='PROVIDE (__Etext = .);' diff --git a/ld/emulparams/crislinux.sh b/ld/emulparams/crislinux.sh index 15af6cf..22ea9ea 100644 --- a/ld/emulparams/crislinux.sh +++ b/ld/emulparams/crislinux.sh @@ -4,7 +4,7 @@ SCRIPT_NAME=elf OUTPUT_FORMAT="elf32-cris" ARCH=cris TEMPLATE_NAME=elf32 -ENTRY=_start +ENTRY=__start # Needed? Perhaps should be page-size alignment. ALIGNMENT=32 GENERATE_SHLIB_SCRIPT=yes @@ -12,11 +12,17 @@ GENERATE_SHLIB_SCRIPT=yes # Is this high enough and low enough? TEXT_START_ADDR=0x80000 -# Do we need to set this higher? MAXPAGESIZE=8192 # FIXME: GOT, PLT... +TEXT_START_SYMBOLS='PROVIDE (__Stext = .); +__start = DEFINED(__start) ? __start : + DEFINED(_start) ? _start : + DEFINED(start) ? start : + DEFINED(.startup) ? .startup + 2 : 2; +' + # Smuggle an "OTHER_TEXT_END_SYMBOLS" here. OTHER_READONLY_SECTIONS='PROVIDE (__Etext = .);' DATA_START_SYMBOLS='PROVIDE (__Sdata = .);' diff --git a/ld/scripttempl/crisaout.sc b/ld/scripttempl/crisaout.sc index 6777482..927ec9c 100644 --- a/ld/scripttempl/crisaout.sc +++ b/ld/scripttempl/crisaout.sc @@ -1,7 +1,7 @@ cat <<EOF OUTPUT_FORMAT("a.out-cris") OUTPUT_ARCH(cris) -ENTRY(_start) +ENTRY(__start) SECTIONS { .text ${RELOCATING+ ${TEXT_START_ADDR}}: @@ -10,6 +10,10 @@ SECTIONS ${RELOCATING+ __Stext = .;} ${RELOCATING+*(.startup)} *(.text) + ${RELOCATING+__start = DEFINED(__start) ? __start : + DEFINED(_start) ? _start : + DEFINED(start) ? start : + DEFINED(.startup) ? .startup + 2 : 2;} ${RELOCATING+*(.text.*)} ${RELOCATING+*(.gnu.linkonce.t*)} ${RELOCATING+*(.rodata)} @@ -41,14 +45,6 @@ SECTIONS ${RELOCATING+PROVIDE (__fini__end = .);} ${RELOCATING+ ___fini__end = .;} - /* Putting constructors in constant store is sane as long as - there's no need for dynamic fixups. */ - /* The constructors and destructors set symbols are unused now that - collect2 has its wicked way. */ - ${CONSTRUCTING+ ___aout_ctors_dtors_begin = .;} - ${CONSTRUCTING+ SORT(CONSTRUCTORS);} - ${CONSTRUCTING+ ___aout_ctors_dtors_end = .;} - /* Cater to linking from ELF. */ ${CONSTRUCTING+ PROVIDE(___ctors = .);} ${CONSTRUCTING+ ___elf_ctors_dtors_begin = .;} @@ -111,7 +107,8 @@ SECTIONS /* Unfortunately, stabs are not mappable from ELF to a.out. It can probably be fixed with some amount of work. */ - /DISCARD/ : { *(.stab) *(.stab*) *(.debug) *(.debug*) *(.comment) } + /DISCARD/ : + { *(.stab) *(.stab*) *(.debug) *(.debug*) *(.comment) *(.gnu.warning.*) } /* For the rsim and xsim simulators. */ ${RELOCATING+ PROVIDE(__Endmem = 0x10000000);} |