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.
This commit is contained in:
Joel Sherrill
2009-03-02 17:27:54 +00:00
parent bdc8d46647
commit 27d29e18b8
6 changed files with 87 additions and 32 deletions

View File

@@ -1,3 +1,9 @@
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.
2009-02-12 Joel Sherrill <joel.sherrill@oarcorp.com>
* startup/setvec.c: Change prototype of IDLE thread to consistently

View File

@@ -94,13 +94,11 @@ SECTIONS
.text :
{
CREATE_OBJECT_SYMBOLS
start = .;
text_start = .;
_text_start = .;
*(.text*)
. = ALIGN (16);
/*
* Special FreeBSD sysctl sections.
*/
@@ -119,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*)

View File

@@ -1,3 +1,9 @@
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.
2008-12-04 Ralf Corsépius <ralf.corsepius@rtems.org>
* bsp_specs: Remove -e start from %link.

View File

@@ -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*)

View File

@@ -1,3 +1,9 @@
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.
2008-12-04 Ralf Corsépius <ralf.corsepius@rtems.org>
* bsp_specs: Remove -e start from %link.

View File

@@ -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*)