summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/leon3/startup/linkcmds
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-03-02 17:28:45 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-03-02 17:28:45 +0000
commit73d1f0799f3b8e8a1d51b60cf5b9d76d7685fbf6 (patch)
tree7e20ff7c2da375137a571477aded6b5663bf0cc0 /c/src/lib/libbsp/sparc/leon3/startup/linkcmds
parent2009-03-02 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-73d1f0799f3b8e8a1d51b60cf5b9d76d7685fbf6.tar.bz2
2009-03-02 Daniel Hellstrom <daniel@gaisler.com>
PR 1390/bsps * startup/linkcmds: Fix sections so C++ global constructors and destructors work with late model (>= 4.3) gcc versions.
Diffstat (limited to '')
-rw-r--r--c/src/lib/libbsp/sparc/leon3/startup/linkcmds33
1 files changed, 23 insertions, 10 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/startup/linkcmds b/c/src/lib/libbsp/sparc/leon3/startup/linkcmds
index d62014eb3a..0c4aff72ee 100644
--- a/c/src/lib/libbsp/sparc/leon3/startup/linkcmds
+++ b/c/src/lib/libbsp/sparc/leon3/startup/linkcmds
@@ -117,16 +117,29 @@ SECTIONS
/*
* C++ constructors
*/
- __CTOR_LIST__ = .;
- LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
- *(.ctors)
- LONG(0)
- __CTOR_END__ = .;
- __DTOR_LIST__ = .;
- LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
- *(.dtors)
- LONG(0)
- __DTOR_END__ = .;
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
_rodata_start = . ;
*(.rodata*)