[patch] libgloss/m68k/fido.sc: Catch more sections.

Kazu Hirata kazu@codesourcery.com
Fri Apr 27 04:48:00 GMT 2007


Hi,

Attached is a patch to catch more sections.

Specifically, we need to catch

  .text.*
  .rodata.*
  .data.*
  .bss.*

to cope with newer versions of gcc emitting symbols in sections of the
form .text.foo.

Also, we need to include .ctor.* and .dtor.* to catch ctor symbols
with priorities.  At the same time, we need to wrap those
ctor/dtor-related sections with KEEP so that the garbage collector
won't remove them.

Tested on fido-none-elf.  OK to apply?
 
Kazu Hirata

2007-04-26  Kazu Hirata  <kazu@codesourcery.com>

	* libgloss/m68k/fido.sc: Catch .text.*, .rodata.*, .data.*,
	.bss.*, .ctor.*, and .dtor.*.  Wrap ctor/dtor-related sections
	with KEEP.

Index: libgloss/m68k/fido.sc
===================================================================
RCS file: /cvs/src/src/libgloss/m68k/fido.sc,v
retrieving revision 1.2
diff -u -d -p -r1.2 fido.sc
--- libgloss/m68k/fido.sc	18 Dec 2006 21:48:18 -0000	1.2
+++ libgloss/m68k/fido.sc	26 Apr 2007 15:16:49 -0000
@@ -142,21 +142,22 @@ SECTIONS {
   /* Text section.  */
   .text :
   {
-    *(.text .gnu.linkonce.t.*)
+    *(.text .text.*)
+    *(.gnu.linkonce.t.*)
+
     . = ALIGN(0x4);
-     __CTOR_LIST__ = .;
-    ___CTOR_LIST__ = .;
-    LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
-    *(.ctors)
-    LONG(0)
-    __CTOR_END__ = .;
-    __DTOR_LIST__ = .;
-    ___DTOR_LIST__ = .;
-    LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
-    *(.dtors)
-     LONG(0)
-    __DTOR_END__ = .;
-    *(.rodata* .gnu.linkonce.r.*)
+    /* These are for running static constructors and destructors under ELF.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*crtend.o(.ctors))
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*crtend.o(.dtors))
+
+    *(.rodata .rodata.*)
+    *(.gnu.linkonce.r.*)
     *(.gcc_except_table) 
     *(.eh_frame)
 
@@ -188,7 +189,8 @@ SECTIONS {
     _data = .;
     KEEP (*(.jcr));
     *(.shdata);
-    *(.data .gnu.linkonce.d.*);
+    *(.data .data.*)
+    *(.gnu.linkonce.d.*)
     _edata_cksum = .;
     *(checksum);
     _edata = .;
@@ -200,7 +202,8 @@ SECTIONS {
     . = ALIGN(0x4);
     __bss_start = . ;
     *(.shbss)
-    *(.bss .gnu.linkonce.b.*)
+    *(.bss .bss.*)
+    *(.gnu.linkonce.b.*)
     *(COMMON)
     _end =  ALIGN (0x8);
     __end = _end;



More information about the Newlib mailing list