When compiling C++ code it's common to get comdat sections with names
like .bss.foo. In the final output file these should be places in .bss. The
libgloss m68k linker scripts don't handle these sections so ld sometimes
places them after _end, with catastrophic results.
The attached patch fixes the linker scripts to include these sections.
Ok?
Paul
2005-12-06 Paul Brook <paul@codesourcery.com>
libgloss/
* m68k/bcc.ld: Add .text.*, .rodata.*, .data.* and .bss.*.
* m68k/idp.ld: Ditto.
* m68k/idpgdb: Ditto.
* m68k/mvme135.ld: Ditto.
* m68k/sbc5204.ld: Ditto.
* m68k/sbc5206.ld: Ditto.
* m68k/sim.ld: Ditto.
------------------------------------------------------------------------
Index: libgloss/m68k/bcc.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/bcc.ld,v
retrieving revision 1.1
diff -u -p -r1.1 bcc.ld
--- libgloss/m68k/bcc.ld 17 Mar 2000 22:48:50 -0000 1.1
+++ libgloss/m68k/bcc.ld 6 Dec 2005 16:12:34 -0000
@@ -63,7 +63,7 @@ SECTIONS
{
.text :
{
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
@@ -77,7 +77,7 @@ SECTIONS
*(.dtors)
LONG(0)
__DTOR_END__ = .;
- *(.rodata)
+ *(.rodata .rodata.*)
*(.gcc_except_table)
. = ALIGN(0x2);
@@ -100,7 +100,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -109,7 +109,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/idp.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/idp.ld,v
retrieving revision 1.1
diff -u -p -r1.1 idp.ld
--- libgloss/m68k/idp.ld 17 Mar 2000 22:48:50 -0000 1.1
+++ libgloss/m68k/idp.ld 6 Dec 2005 16:13:32 -0000
@@ -77,7 +77,7 @@ SECTIONS
.text :
{
CREATE_OBJECT_SYMBOLS
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
/* These are for running static constructors and destructors under ELF. */
@@ -90,7 +90,7 @@ SECTIONS
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
- *(.rodata)
+ *(.rodata .rodata.*)
. = ALIGN(0x4);
*(.gcc_except_table)
@@ -119,7 +119,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -128,7 +128,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/idpgdb.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/idpgdb.ld,v
retrieving revision 1.1
diff -u -p -r1.1 idpgdb.ld
--- libgloss/m68k/idpgdb.ld 10 Sep 2001 23:47:42 -0000 1.1
+++ libgloss/m68k/idpgdb.ld 6 Dec 2005 16:13:03 -0000
@@ -77,7 +77,7 @@ SECTIONS
.text :
{
CREATE_OBJECT_SYMBOLS
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
/* These are for running static constructors and destructors under ELF. */
@@ -90,7 +90,7 @@ SECTIONS
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
- *(.rodata)
+ *(.rodata .rodata.*)
. = ALIGN(0x4);
*(.gcc_except_table)
@@ -119,7 +119,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -128,7 +128,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/mvme135.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/mvme135.ld,v
retrieving revision 1.1
diff -u -p -r1.1 mvme135.ld
--- libgloss/m68k/mvme135.ld 17 Mar 2000 22:48:51 -0000 1.1
+++ libgloss/m68k/mvme135.ld 6 Dec 2005 16:14:02 -0000
@@ -64,7 +64,7 @@ SECTIONS
{
.text :
{
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
@@ -78,7 +78,7 @@ SECTIONS
*(.dtors)
LONG(0)
__DTOR_END__ = .;
- *(.rodata)
+ *(.rodata .rodata.*)
*(.gcc_except_table)
. = ALIGN(0x2);
@@ -101,7 +101,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -110,7 +110,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/mvme162.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/mvme162.ld,v
retrieving revision 1.1
diff -u -p -r1.1 mvme162.ld
--- libgloss/m68k/mvme162.ld 17 Mar 2000 22:48:51 -0000 1.1
+++ libgloss/m68k/mvme162.ld 6 Dec 2005 16:14:36 -0000
@@ -65,7 +65,7 @@ SECTIONS
{
.text :
{
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
@@ -79,7 +79,7 @@ SECTIONS
*(.dtors)
LONG(0)
__DTOR_END__ = .;
- *(.rodata)
+ *(.rodata .rodata.*)
*(.gcc_except_table)
. = ALIGN(0x2);
@@ -102,7 +102,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -111,7 +111,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/sbc5204.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/sbc5204.ld,v
retrieving revision 1.1
diff -u -p -r1.1 sbc5204.ld
--- libgloss/m68k/sbc5204.ld 17 Mar 2000 22:48:51 -0000 1.1
+++ libgloss/m68k/sbc5204.ld 6 Dec 2005 16:15:05 -0000
@@ -63,7 +63,7 @@ SECTIONS
{
.text :
{
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
@@ -77,7 +77,7 @@ SECTIONS
*(.dtors)
LONG(0)
__DTOR_END__ = .;
- *(.rodata)
+ *(.rodata .rodata.*)
*(.gcc_except_table)
. = ALIGN(0x2);
@@ -100,7 +100,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -109,7 +109,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/sbc5206.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/sbc5206.ld,v
retrieving revision 1.1
diff -u -p -r1.1 sbc5206.ld
--- libgloss/m68k/sbc5206.ld 17 Mar 2000 22:48:51 -0000 1.1
+++ libgloss/m68k/sbc5206.ld 6 Dec 2005 16:15:31 -0000
@@ -63,7 +63,7 @@ SECTIONS
{
.text :
{
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
@@ -77,7 +77,7 @@ SECTIONS
*(.dtors)
LONG(0)
__DTOR_END__ = .;
- *(.rodata)
+ *(.rodata .rodata.*)
*(.gcc_except_table)
. = ALIGN(0x2);
@@ -100,7 +100,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -109,7 +109,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
Index: libgloss/m68k/sim.ld
===================================================================
RCS file: /var/cvsroot/src-cvs/src/libgloss/m68k/sim.ld,v
retrieving revision 1.1
diff -u -p -r1.1 sim.ld
--- libgloss/m68k/sim.ld 28 Feb 2001 18:41:57 -0000 1.1
+++ libgloss/m68k/sim.ld 6 Dec 2005 16:15:34 -0000
@@ -18,7 +18,7 @@ SECTIONS
.text :
{
CREATE_OBJECT_SYMBOLS
- *(.text)
+ *(.text .text.*)
. = ALIGN(0x4);
/* These are for running static constructors and destructors under ELF. */
@@ -31,7 +31,7 @@ SECTIONS
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
- *(.rodata)
+ *(.rodata .rodata.*)
. = ALIGN(0x4);
*(.gcc_except_table)
@@ -60,7 +60,7 @@ SECTIONS
.data :
{
*(.shdata)
- *(.data)
+ *(.data .data.*)
_edata = .;
} > ram
@@ -69,7 +69,7 @@ SECTIONS
. = ALIGN(0x4);
__bss_start = . ;
*(.shbss)
- *(.bss)
+ *(.bss .bss.*)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;