Factor out placeOrphanSections. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 14 Nov 2016 14:13:32 +0000 (14:13 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 14 Nov 2016 14:13:32 +0000 (14:13 +0000)
llvm-svn: 286824

lld/ELF/LinkerScript.cpp
lld/ELF/LinkerScript.h

index 0cd4f82..2cb1662 100644 (file)
@@ -583,14 +583,11 @@ static bool shouldSkip(const BaseCommand &Cmd) {
   return Assign->Name != ".";
 }
 
+// Orphan sections are sections present in the input files which are not
+// explicitly placed into the output file by the linker script. This just
+// places them in the order already decided in OutputSections.
 template <class ELFT>
-void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
-  // Orphan sections are sections present in the input files which
-  // are not explicitly placed into the output file by the linker script.
-  // We place orphan sections at end of file.
-  // Other linkers places them using some heuristics as described in
-  // https://sourceware.org/binutils/docs/ld/Orphan-Sections.html#Orphan-Sections.
-
+void LinkerScript<ELFT>::placeOrphanSections() {
   // The OutputSections are already in the correct order.
   // This loops creates or moves commands as needed so that they are in the
   // correct order.
@@ -622,6 +619,11 @@ void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
     // Continue from where we found it.
     CmdIndex = (Pos - Opt.Commands.begin()) + 1;
   }
+}
+
+template <class ELFT>
+void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
+  placeOrphanSections();
 
   // Assign addresses as instructed by linker script SECTIONS sub-commands.
   Dot = 0;
index 1840978..3056ae9 100644 (file)
@@ -229,6 +229,7 @@ public:
   bool hasLMA(StringRef Name);
   bool shouldKeep(InputSectionBase<ELFT> *S);
   void assignOffsets(OutputSectionCommand *Cmd);
+  void placeOrphanSections();
   void assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs);
   bool hasPhdrsCommands();
   uint64_t getOutputSectionAddress(StringRef Name) override;