Linker script support for constructor priorities.

Change-Id: Ib551019b291a152921431fa2b0b6031474ed6fed
diff --git a/core/armelf.x b/core/armelf.x
index d38dc1d..b484776 100644
--- a/core/armelf.x
+++ b/core/armelf.x
@@ -93,10 +93,16 @@
   .preinit_array     : { KEEP (*(.preinit_array)) }
   PROVIDE (__preinit_array_end = .);
   PROVIDE (__init_array_start = .);
-  .init_array     : { KEEP (*(.init_array)) }
+  .init_array     : {
+    KEEP (*(SORT(.init_array.*)))
+    KEEP (*(.init_array))
+  }
   PROVIDE (__init_array_end = .);
   PROVIDE (__fini_array_start = .);
-  .fini_array     : { KEEP (*(.fini_array)) }
+  .fini_array     : {
+    KEEP (*(.fini_array))
+    KEEP (*(SORT(.fini_array.*)))
+  }
   PROVIDE (__fini_array_end = .);
   .ctors          :
   {
diff --git a/core/armelflib.x b/core/armelflib.x
index 0150e02..ec7abd5 100644
--- a/core/armelflib.x
+++ b/core/armelflib.x
@@ -59,10 +59,16 @@
   .preinit_array     : { KEEP (*(.preinit_array)) }
   PROVIDE (__preinit_array_end = .);
   PROVIDE (__init_array_start = .);
-  .init_array     : { KEEP (*(.init_array)) }
+  .init_array     : {
+     KEEP (*(SORT(.init_array.*)))
+     KEEP (*(.init_array))
+   }
   PROVIDE (__init_array_end = .);
   PROVIDE (__fini_array_start = .);
-  .fini_array     : { KEEP (*(.fini_array)) }
+  .fini_array     : {
+    KEEP (*(.fini_array))
+    KEEP (*(SORT(.fini_array.*)))
+  }
   PROVIDE (__fini_array_end = .);
   .ctors          :
   {