aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog13
-rw-r--r--ld/emulparams/criself.sh19
-rw-r--r--ld/emulparams/crislinux.sh10
-rw-r--r--ld/scripttempl/crisaout.sc17
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);}