Add static initialization/finalization array support.

This adds entries in the dynamic table for .init_array, .fini_array and
.preinit_array.

llvm-svn: 249175
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 7ffa6d2..43a92b0 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -328,8 +328,14 @@
     }
   }
 
-  if (OutputSection<ELFT> *OS =
-          Map.lookup({".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC})) {
+  DynamicSec.PreInitArraySec =
+      Map.lookup({".preinit_array", SHT_PREINIT_ARRAY, SHF_WRITE | SHF_ALLOC});
+  DynamicSec.InitArraySec =
+      Map.lookup({".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC});
+  DynamicSec.FiniArraySec =
+      Map.lookup({".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC});
+
+  if (OutputSection<ELFT> *OS = DynamicSec.InitArraySec) {
     Symtab.addSyntheticSym<ELFT>("__init_array_start", *OS, 0);
     Symtab.addSyntheticSym<ELFT>("__init_array_end", *OS, OS->getSize());
   } else {