[rtems commit] bsps/arm: Fix ctor/dtor invocation order

Sebastian Huber sebh at rtems.org
Tue Oct 9 10:19:06 UTC 2018


Module:    rtems
Branch:    master
Commit:    511ef83ce4dd13051d532ea03156d005f3ac573d
Changeset: http://git.rtems.org/rtems/commit/?id=511ef83ce4dd13051d532ea03156d005f3ac573d

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Oct  9 11:59:48 2018 +0200

bsps/arm: Fix ctor/dtor invocation order

Remove obsolete .ctor and .dtor output sections.

---

 bsps/arm/shared/start/linkcmds.base | 35 ++++-------------------------------
 1 file changed, 4 insertions(+), 31 deletions(-)

diff --git a/bsps/arm/shared/start/linkcmds.base b/bsps/arm/shared/start/linkcmds.base
index cab8e85..a250b51 100644
--- a/bsps/arm/shared/start/linkcmds.base
+++ b/bsps/arm/shared/start/linkcmds.base
@@ -135,43 +135,16 @@ SECTIONS {
 	} > REGION_RODATA AT > REGION_RODATA_LOAD
 	.init_array : ALIGN_WITH_INPUT {
 		PROVIDE_HIDDEN (__init_array_start = .);
-		KEEP (*(SORT(.init_array.*)))
-		KEEP (*(.init_array))
+		KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+		KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
 		PROVIDE_HIDDEN (__init_array_end = .);
 	} > REGION_RODATA AT > REGION_RODATA_LOAD
 	.fini_array : ALIGN_WITH_INPUT {
 		PROVIDE_HIDDEN (__fini_array_start = .);
-		KEEP (*(.fini_array))
-		KEEP (*(SORT(.fini_array.*)))
+		KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+		KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
 		PROVIDE_HIDDEN (__fini_array_end = .);
 	} > REGION_RODATA AT > REGION_RODATA_LOAD
-	.ctors : ALIGN_WITH_INPUT {
-		/* 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))
-	} > REGION_RODATA AT > REGION_RODATA_LOAD
-	.dtors : ALIGN_WITH_INPUT {
-		KEEP (*crtbegin.o(.dtors))
-		KEEP (*crtbegin?.o(.dtors))
-		KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
-		KEEP (*(SORT(.dtors.*)))
-		KEEP (*(.dtors))
-	} > REGION_RODATA AT > REGION_RODATA_LOAD
 	.data.rel.ro : ALIGN_WITH_INPUT {
 		*(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*)
 		*(.data.rel.ro* .gnu.linkonce.d.rel.ro.*)



More information about the vc mailing list