Define __EH_FRAME_{BEGIN|END}__
authorNick Clifton <nickc@redhat.com>
Sat, 20 Oct 2001 09:56:29 +0000 (09:56 +0000)
committerNick Clifton <nickc@redhat.com>
Sat, 20 Oct 2001 09:56:29 +0000 (09:56 +0000)
ld/ChangeLog
ld/scripttempl/armcoff.sc

index 0c0a882b185dc692079e78384bebec9e4419d06e..1ff2d260c2ae8a68496ae960dd3b3790d8bec1d6 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-20  Nick Clifton  <nickc@cambridge.redhat.com>
+
+       * scripttempl/armcoff.sc: Define __EH_FRAME_BEGIN__ and
+       __EH_FRAME_END__ and accept eh frames into data section.
+       Add ctor and dtor sections.
+
 2001-10-19  Danny Smith  <danny_r_smith_2001@yahoo.co.nz>
 
        * pe-dll.c (autofilter_objectlist): Add gcrt0.o.
index 4311f10b8f1090297fa61f4c27e20b5e15e677eb..c61f73472466662bd513d903d1d7a974546a356c 100644 (file)
@@ -6,6 +6,18 @@ if test -z "${DATA_ADDR}"; then
     DATA_ADDR=.
   fi
 fi
+
+# These are substituted in as variables in order to get '}' in a shell
+# conditional expansion.
+CTOR='.ctor : {
+    *(SORT(.ctors.*))
+    *(.ctor)
+  }'
+DTOR='.dtor : {
+    *(SORT(.dtors.*))
+    *(.dtor)
+  }'
+
 cat <<EOF
 OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", "${LITTLE_OUTPUT_FORMAT}")
 ${LIB_SEARCH_DIRS}
@@ -35,10 +47,19 @@ SECTIONS
   .data ${RELOCATING+${DATA_ADDR-0x40000 + (. & 0xfffc0fff)}} : {
     ${RELOCATING+  __data_start__ = . ;}
     *(.data*)
+        
+    ${RELOCATING+*(.gcc_exc*)}
+    ${RELOCATING+___EH_FRAME_BEGIN__ = . ;}
+    ${RELOCATING+*(.eh_fram*)}
+    ${RELOCATING+___EH_FRAME_END__ = . ;}
+    ${RELOCATING+LONG(0);}
+    
     ${RELOCATING+ __data_end__ = . ;}
     ${RELOCATING+ edata  =  .;}
     ${RELOCATING+ _edata  =  .;}
   }
+  ${CONSTRUCTING+${RELOCATING-$CTOR}}
+  ${CONSTRUCTING+${RELOCATING-$DTOR}}
   .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
   {                                    
     ${RELOCATING+ __bss_start__ = . ;}