xref: /llvm-project-15.0.7/lld/ELF/Writer.cpp (revision c744e120)
1 //===- Writer.cpp ---------------------------------------------------------===//
2 //
3 //                             The LLVM Linker
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "Writer.h"
11 #include "Config.h"
12 #include "OutputSections.h"
13 #include "SymbolTable.h"
14 #include "Target.h"
15 
16 #include "llvm/ADT/StringMap.h"
17 #include "llvm/ADT/StringSwitch.h"
18 #include "llvm/Support/FileOutputBuffer.h"
19 #include "llvm/Support/StringSaver.h"
20 
21 using namespace llvm;
22 using namespace llvm::ELF;
23 using namespace llvm::object;
24 
25 using namespace lld;
26 using namespace lld::elf2;
27 
28 namespace {
29 // The writer writes a SymbolTable result to a file.
30 template <class ELFT> class Writer {
31 public:
32   typedef typename ELFFile<ELFT>::uintX_t uintX_t;
33   typedef typename ELFFile<ELFT>::Elf_Shdr Elf_Shdr;
34   typedef typename ELFFile<ELFT>::Elf_Ehdr Elf_Ehdr;
35   typedef typename ELFFile<ELFT>::Elf_Phdr Elf_Phdr;
36   typedef typename ELFFile<ELFT>::Elf_Sym Elf_Sym;
37   typedef typename ELFFile<ELFT>::Elf_Sym_Range Elf_Sym_Range;
38   typedef typename ELFFile<ELFT>::Elf_Rela Elf_Rela;
39   Writer(SymbolTable<ELFT> &S) : Symtab(S) {}
40   void run();
41 
42 private:
43   void copyLocalSymbols();
44   void createSections();
45   template <bool isRela>
46   void scanRelocs(InputSectionBase<ELFT> &C,
47                   iterator_range<const Elf_Rel_Impl<ELFT, isRela> *> Rels);
48   void scanRelocs(InputSection<ELFT> &C);
49   void scanRelocs(InputSectionBase<ELFT> &S, const Elf_Shdr &RelSec);
50   void assignAddresses();
51   void buildSectionMap();
52   void openFile(StringRef OutputPath);
53   void writeHeader();
54   void writeSections();
55   bool isDiscarded(InputSectionBase<ELFT> *IS) const;
56   StringRef getOutputSectionName(StringRef S) const;
57   bool needsInterpSection() const {
58     return !Symtab.getSharedFiles().empty() && !Config->DynamicLinker.empty();
59   }
60   bool isOutputDynamic() const {
61     return !Symtab.getSharedFiles().empty() || Config->Shared;
62   }
63   uintX_t getEntryAddr() const;
64   int getPhdrsNum() const;
65 
66   OutputSection<ELFT> *getBSS();
67   void addCommonSymbols(std::vector<DefinedCommon<ELFT> *> &Syms);
68   void addSharedCopySymbols(std::vector<SharedSymbol<ELFT> *> &Syms);
69 
70   std::unique_ptr<llvm::FileOutputBuffer> Buffer;
71 
72   SpecificBumpPtrAllocator<OutputSection<ELFT>> SecAlloc;
73   SpecificBumpPtrAllocator<MergeOutputSection<ELFT>> MSecAlloc;
74   SpecificBumpPtrAllocator<EHOutputSection<ELFT>> EHSecAlloc;
75   BumpPtrAllocator Alloc;
76   std::vector<OutputSectionBase<ELFT> *> OutputSections;
77   unsigned getNumSections() const { return OutputSections.size() + 1; }
78 
79   void addStartStopSymbols(OutputSectionBase<ELFT> *Sec);
80   void setPhdr(Elf_Phdr *PH, uint32_t Type, uint32_t Flags, uintX_t FileOff,
81                uintX_t VA, uintX_t Size, uintX_t Align);
82   void copyPhdr(Elf_Phdr *PH, OutputSectionBase<ELFT> *From);
83 
84   SymbolTable<ELFT> &Symtab;
85   std::vector<Elf_Phdr> Phdrs;
86 
87   uintX_t FileSize;
88   uintX_t SectionHeaderOff;
89 
90   llvm::StringMap<llvm::StringRef> InputToOutputSection;
91 };
92 } // anonymous namespace
93 
94 template <class ELFT> void lld::elf2::writeResult(SymbolTable<ELFT> *Symtab) {
95   // Initialize output sections that are handled by Writer specially.
96   // Don't reorder because the order of initialization matters.
97   InterpSection<ELFT> Interp;
98   Out<ELFT>::Interp = &Interp;
99   StringTableSection<ELFT> ShStrTab(".shstrtab", false);
100   Out<ELFT>::ShStrTab = &ShStrTab;
101   StringTableSection<ELFT> StrTab(".strtab", false);
102   if (!Config->StripAll)
103     Out<ELFT>::StrTab = &StrTab;
104   StringTableSection<ELFT> DynStrTab(".dynstr", true);
105   Out<ELFT>::DynStrTab = &DynStrTab;
106   GotSection<ELFT> Got;
107   Out<ELFT>::Got = &Got;
108   GotPltSection<ELFT> GotPlt;
109   if (Target->supportsLazyRelocations())
110     Out<ELFT>::GotPlt = &GotPlt;
111   PltSection<ELFT> Plt;
112   Out<ELFT>::Plt = &Plt;
113   std::unique_ptr<SymbolTableSection<ELFT>> SymTab;
114   if (!Config->StripAll) {
115     SymTab.reset(new SymbolTableSection<ELFT>(*Symtab, *Out<ELFT>::StrTab));
116     Out<ELFT>::SymTab = SymTab.get();
117   }
118   SymbolTableSection<ELFT> DynSymTab(*Symtab, *Out<ELFT>::DynStrTab);
119   Out<ELFT>::DynSymTab = &DynSymTab;
120   HashTableSection<ELFT> HashTab;
121   if (Config->SysvHash)
122     Out<ELFT>::HashTab = &HashTab;
123   GnuHashTableSection<ELFT> GnuHashTab;
124   if (Config->GnuHash)
125     Out<ELFT>::GnuHashTab = &GnuHashTab;
126   bool IsRela = Symtab->shouldUseRela();
127   RelocationSection<ELFT> RelaDyn(IsRela ? ".rela.dyn" : ".rel.dyn", IsRela);
128   Out<ELFT>::RelaDyn = &RelaDyn;
129   RelocationSection<ELFT> RelaPlt(IsRela ? ".rela.plt" : ".rel.plt", IsRela);
130   if (Target->supportsLazyRelocations())
131     Out<ELFT>::RelaPlt = &RelaPlt;
132   DynamicSection<ELFT> Dynamic(*Symtab);
133   Out<ELFT>::Dynamic = &Dynamic;
134 
135   Writer<ELFT>(*Symtab).run();
136 }
137 
138 // The main function of the writer.
139 template <class ELFT> void Writer<ELFT>::run() {
140   buildSectionMap();
141   if (!Config->DiscardAll)
142     copyLocalSymbols();
143   createSections();
144   assignAddresses();
145   openFile(Config->OutputFile);
146   writeHeader();
147   writeSections();
148   error(Buffer->commit());
149 }
150 
151 namespace {
152 template <bool Is64Bits> struct SectionKey {
153   typedef typename std::conditional<Is64Bits, uint64_t, uint32_t>::type uintX_t;
154   StringRef Name;
155   uint32_t Type;
156   uintX_t Flags;
157   uintX_t EntSize;
158 };
159 }
160 namespace llvm {
161 template <bool Is64Bits> struct DenseMapInfo<SectionKey<Is64Bits>> {
162   static SectionKey<Is64Bits> getEmptyKey() {
163     return SectionKey<Is64Bits>{DenseMapInfo<StringRef>::getEmptyKey(), 0, 0,
164                                 0};
165   }
166   static SectionKey<Is64Bits> getTombstoneKey() {
167     return SectionKey<Is64Bits>{DenseMapInfo<StringRef>::getTombstoneKey(), 0,
168                                 0, 0};
169   }
170   static unsigned getHashValue(const SectionKey<Is64Bits> &Val) {
171     return hash_combine(Val.Name, Val.Type, Val.Flags, Val.EntSize);
172   }
173   static bool isEqual(const SectionKey<Is64Bits> &LHS,
174                       const SectionKey<Is64Bits> &RHS) {
175     return DenseMapInfo<StringRef>::isEqual(LHS.Name, RHS.Name) &&
176            LHS.Type == RHS.Type && LHS.Flags == RHS.Flags &&
177            LHS.EntSize == RHS.EntSize;
178   }
179 };
180 }
181 
182 // The reason we have to do this early scan is as follows
183 // * To mmap the output file, we need to know the size
184 // * For that, we need to know how many dynamic relocs we will have.
185 // It might be possible to avoid this by outputting the file with write:
186 // * Write the allocated output sections, computing addresses.
187 // * Apply relocations, recording which ones require a dynamic reloc.
188 // * Write the dynamic relocations.
189 // * Write the rest of the file.
190 template <class ELFT>
191 template <bool isRela>
192 void Writer<ELFT>::scanRelocs(
193     InputSectionBase<ELFT> &C,
194     iterator_range<const Elf_Rel_Impl<ELFT, isRela> *> Rels) {
195   typedef Elf_Rel_Impl<ELFT, isRela> RelType;
196   const ObjectFile<ELFT> &File = *C.getFile();
197   for (const RelType &RI : Rels) {
198     uint32_t SymIndex = RI.getSymbol(Config->Mips64EL);
199     SymbolBody *Body = File.getSymbolBody(SymIndex);
200     uint32_t Type = RI.getType(Config->Mips64EL);
201 
202     if (Type == Target->getTlsLocalDynamicReloc()) {
203       if (Out<ELFT>::LocalModuleTlsIndexOffset == uint32_t(-1)) {
204         Out<ELFT>::LocalModuleTlsIndexOffset =
205             Out<ELFT>::Got->addLocalModuleTlsIndex();
206         Out<ELFT>::RelaDyn->addReloc({C, RI});
207       }
208       continue;
209     }
210 
211     // Set "used" bit for --as-needed.
212     if (Body && Body->isUndefined() && !Body->isWeak())
213       if (auto *S = dyn_cast<SharedSymbol<ELFT>>(Body->repl()))
214         S->File->IsUsed = true;
215 
216     if (Body)
217       Body = Body->repl();
218     bool NeedsGot = false;
219     bool NeedsPlt = false;
220     if (Body) {
221       if (auto *E = dyn_cast<SharedSymbol<ELFT>>(Body)) {
222         if (E->needsCopy())
223           continue;
224         if (Target->relocNeedsCopy(Type, *Body))
225           E->OffsetInBSS = 0;
226       }
227       NeedsPlt = Target->relocNeedsPlt(Type, *Body);
228       if (NeedsPlt) {
229         if (Body->isInPlt())
230           continue;
231         Out<ELFT>::Plt->addEntry(Body);
232       }
233       NeedsGot = Target->relocNeedsGot(Type, *Body);
234       if (NeedsGot) {
235         if (NeedsPlt && Target->supportsLazyRelocations()) {
236           Out<ELFT>::GotPlt->addEntry(Body);
237         } else {
238           if (Body->isInGot())
239             continue;
240           Out<ELFT>::Got->addEntry(Body);
241         }
242       }
243     }
244 
245     if (Config->EMachine == EM_MIPS && NeedsGot) {
246       // MIPS ABI has special rules to process GOT entries
247       // and doesn't require relocation entries for them.
248       // See "Global Offset Table" in Chapter 5 in the following document
249       // for detailed description:
250       // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
251       Body->setUsedInDynamicReloc();
252       continue;
253     }
254     bool CBP = canBePreempted(Body, NeedsGot);
255     if (!CBP && (!Config->Shared || Target->isRelRelative(Type)))
256       continue;
257     if (CBP)
258       Body->setUsedInDynamicReloc();
259     if (NeedsPlt && Target->supportsLazyRelocations())
260       Out<ELFT>::RelaPlt->addReloc({C, RI});
261     else
262       Out<ELFT>::RelaDyn->addReloc({C, RI});
263   }
264 }
265 
266 template <class ELFT> void Writer<ELFT>::scanRelocs(InputSection<ELFT> &C) {
267   if (!(C.getSectionHdr()->sh_flags & SHF_ALLOC))
268     return;
269 
270   for (const Elf_Shdr *RelSec : C.RelocSections)
271     scanRelocs(C, *RelSec);
272 }
273 
274 template <class ELFT>
275 void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &S,
276                               const Elf_Shdr &RelSec) {
277   ELFFile<ELFT> &EObj = S.getFile()->getObj();
278   if (RelSec.sh_type == SHT_RELA)
279     scanRelocs(S, EObj.relas(&RelSec));
280   else
281     scanRelocs(S, EObj.rels(&RelSec));
282 }
283 
284 template <class ELFT>
285 static void reportUndefined(const SymbolTable<ELFT> &S, const SymbolBody &Sym) {
286   typedef typename ELFFile<ELFT>::Elf_Sym Elf_Sym;
287   typedef typename ELFFile<ELFT>::Elf_Sym_Range Elf_Sym_Range;
288 
289   if (Config->Shared && !Config->NoUndefined)
290     return;
291 
292   const Elf_Sym &SymE = cast<ELFSymbolBody<ELFT>>(Sym).Sym;
293   ELFFileBase<ELFT> *SymFile = nullptr;
294 
295   for (const std::unique_ptr<ObjectFile<ELFT>> &File : S.getObjectFiles()) {
296     Elf_Sym_Range Syms = File->getObj().symbols(File->getSymbolTable());
297     if (&SymE > Syms.begin() && &SymE < Syms.end())
298       SymFile = File.get();
299   }
300 
301   std::string Message = "undefined symbol: " + Sym.getName().str();
302   if (SymFile)
303     Message += " in " + SymFile->getName().str();
304   if (Config->NoInhibitExec)
305     warning(Message);
306   else
307     error(Message);
308 }
309 
310 // Local symbols are not in the linker's symbol table. This function scans
311 // each object file's symbol table to copy local symbols to the output.
312 template <class ELFT> void Writer<ELFT>::copyLocalSymbols() {
313   for (const std::unique_ptr<ObjectFile<ELFT>> &F : Symtab.getObjectFiles()) {
314     for (const Elf_Sym &Sym : F->getLocalSymbols()) {
315       ErrorOr<StringRef> SymNameOrErr = Sym.getName(F->getStringTable());
316       error(SymNameOrErr);
317       StringRef SymName = *SymNameOrErr;
318       if (!shouldKeepInSymtab<ELFT>(*F, SymName, Sym))
319         continue;
320       if (Out<ELFT>::SymTab)
321         Out<ELFT>::SymTab->addLocalSymbol(SymName);
322     }
323   }
324 }
325 
326 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections that
327 // we would like to make sure appear is a specific order to maximize their
328 // coverage by a single signed 16-bit offset from the TOC base pointer.
329 // Conversely, the special .tocbss section should be first among all SHT_NOBITS
330 // sections. This will put it next to the loaded special PPC64 sections (and,
331 // thus, within reach of the TOC base pointer).
332 static int getPPC64SectionRank(StringRef SectionName) {
333   return StringSwitch<int>(SectionName)
334            .Case(".tocbss", 0)
335            .Case(".branch_lt", 2)
336            .Case(".toc", 3)
337            .Case(".toc1", 4)
338            .Case(".opd", 5)
339            .Default(1);
340 }
341 
342 // Output section ordering is determined by this function.
343 template <class ELFT>
344 static bool compareOutputSections(OutputSectionBase<ELFT> *A,
345                                   OutputSectionBase<ELFT> *B) {
346   typedef typename ELFFile<ELFT>::uintX_t uintX_t;
347 
348   uintX_t AFlags = A->getFlags();
349   uintX_t BFlags = B->getFlags();
350 
351   // Allocatable sections go first to reduce the total PT_LOAD size and
352   // so debug info doesn't change addresses in actual code.
353   bool AIsAlloc = AFlags & SHF_ALLOC;
354   bool BIsAlloc = BFlags & SHF_ALLOC;
355   if (AIsAlloc != BIsAlloc)
356     return AIsAlloc;
357 
358   // We don't have any special requirements for the relative order of
359   // two non allocatable sections.
360   if (!AIsAlloc)
361     return false;
362 
363   // We want the read only sections first so that they go in the PT_LOAD
364   // covering the program headers at the start of the file.
365   bool AIsWritable = AFlags & SHF_WRITE;
366   bool BIsWritable = BFlags & SHF_WRITE;
367   if (AIsWritable != BIsWritable)
368     return BIsWritable;
369 
370   // For a corresponding reason, put non exec sections first (the program
371   // header PT_LOAD is not executable).
372   bool AIsExec = AFlags & SHF_EXECINSTR;
373   bool BIsExec = BFlags & SHF_EXECINSTR;
374   if (AIsExec != BIsExec)
375     return BIsExec;
376 
377   // If we got here we know that both A and B are in the same PT_LOAD.
378 
379   // The TLS initialization block needs to be a single contiguous block in a R/W
380   // PT_LOAD, so stick TLS sections directly before R/W sections. The TLS NOBITS
381   // sections are placed here as they don't take up virtual address space in the
382   // PT_LOAD.
383   bool AIsTLS = AFlags & SHF_TLS;
384   bool BIsTLS = BFlags & SHF_TLS;
385   if (AIsTLS != BIsTLS)
386     return AIsTLS;
387 
388   // The next requirement we have is to put nobits sections last. The
389   // reason is that the only thing the dynamic linker will see about
390   // them is a p_memsz that is larger than p_filesz. Seeing that it
391   // zeros the end of the PT_LOAD, so that has to correspond to the
392   // nobits sections.
393   bool AIsNoBits = A->getType() == SHT_NOBITS;
394   bool BIsNoBits = B->getType() == SHT_NOBITS;
395   if (AIsNoBits != BIsNoBits)
396     return BIsNoBits;
397 
398   // Some architectures have additional ordering restrictions for sections
399   // within the same PT_LOAD.
400   if (Config->EMachine == EM_PPC64)
401     return getPPC64SectionRank(A->getName()) <
402            getPPC64SectionRank(B->getName());
403 
404   return false;
405 }
406 
407 template <class ELFT> OutputSection<ELFT> *Writer<ELFT>::getBSS() {
408   if (!Out<ELFT>::Bss) {
409     Out<ELFT>::Bss = new (SecAlloc.Allocate())
410         OutputSection<ELFT>(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE);
411     OutputSections.push_back(Out<ELFT>::Bss);
412   }
413   return Out<ELFT>::Bss;
414 }
415 
416 // Until this function is called, common symbols do not belong to any section.
417 // This function adds them to end of BSS section.
418 template <class ELFT>
419 void Writer<ELFT>::addCommonSymbols(std::vector<DefinedCommon<ELFT> *> &Syms) {
420   typedef typename ELFFile<ELFT>::uintX_t uintX_t;
421   typedef typename ELFFile<ELFT>::Elf_Sym Elf_Sym;
422 
423   if (Syms.empty())
424     return;
425 
426   // Sort the common symbols by alignment as an heuristic to pack them better.
427   std::stable_sort(
428     Syms.begin(), Syms.end(),
429     [](const DefinedCommon<ELFT> *A, const DefinedCommon<ELFT> *B) {
430       return A->MaxAlignment > B->MaxAlignment;
431     });
432 
433   uintX_t Off = getBSS()->getSize();
434   for (DefinedCommon<ELFT> *C : Syms) {
435     const Elf_Sym &Sym = C->Sym;
436     uintX_t Align = C->MaxAlignment;
437     Off = RoundUpToAlignment(Off, Align);
438     C->OffsetInBSS = Off;
439     Off += Sym.st_size;
440   }
441 
442   Out<ELFT>::Bss->setSize(Off);
443 }
444 
445 template <class ELFT>
446 void Writer<ELFT>::addSharedCopySymbols(
447     std::vector<SharedSymbol<ELFT> *> &Syms) {
448   typedef typename ELFFile<ELFT>::uintX_t uintX_t;
449   typedef typename ELFFile<ELFT>::Elf_Sym Elf_Sym;
450   typedef typename ELFFile<ELFT>::Elf_Shdr Elf_Shdr;
451 
452   if (Syms.empty())
453     return;
454 
455   uintX_t Off = getBSS()->getSize();
456   for (SharedSymbol<ELFT> *C : Syms) {
457     const Elf_Sym &Sym = C->Sym;
458     const Elf_Shdr *Sec = C->File->getSection(Sym);
459     uintX_t SecAlign = Sec->sh_addralign;
460     uintX_t Align = Sym.st_value % SecAlign;
461     if (Align == 0)
462       Align = SecAlign;
463     Out<ELFT>::Bss->updateAlign(Align);
464     Off = RoundUpToAlignment(Off, Align);
465     C->OffsetInBSS = Off;
466     Off += Sym.st_size;
467   }
468   Out<ELFT>::Bss->setSize(Off);
469 }
470 
471 template <class ELFT>
472 StringRef Writer<ELFT>::getOutputSectionName(StringRef S) const {
473   auto It = InputToOutputSection.find(S);
474   if (It != std::end(InputToOutputSection))
475     return It->second;
476 
477   if (S.startswith(".text."))
478     return ".text";
479   if (S.startswith(".rodata."))
480     return ".rodata";
481   if (S.startswith(".data."))
482     return ".data";
483   if (S.startswith(".bss."))
484     return ".bss";
485   return S;
486 }
487 
488 template <class ELFT>
489 bool Writer<ELFT>::isDiscarded(InputSectionBase<ELFT> *IS) const {
490   if (!IS || !IS->isLive() || IS == &InputSection<ELFT>::Discarded)
491     return true;
492   return InputToOutputSection.lookup(IS->getSectionName()) == "/DISCARD/";
493 }
494 
495 template <class ELFT>
496 static bool compareSections(OutputSectionBase<ELFT> *A,
497                             OutputSectionBase<ELFT> *B) {
498   auto ItA = Config->OutputSections.find(A->getName());
499   auto ItEnd = std::end(Config->OutputSections);
500   if (ItA == ItEnd)
501     return compareOutputSections(A, B);
502   auto ItB = Config->OutputSections.find(B->getName());
503   if (ItB == ItEnd)
504     return compareOutputSections(A, B);
505 
506   return std::distance(ItA, ItB) > 0;
507 }
508 
509 // Create output section objects and add them to OutputSections.
510 template <class ELFT> void Writer<ELFT>::createSections() {
511   // .interp needs to be on the first page in the output file.
512   if (needsInterpSection())
513     OutputSections.push_back(Out<ELFT>::Interp);
514 
515   SmallDenseMap<SectionKey<ELFT::Is64Bits>, OutputSectionBase<ELFT> *> Map;
516 
517   std::vector<OutputSectionBase<ELFT> *> RegularSections;
518 
519   for (const std::unique_ptr<ObjectFile<ELFT>> &F : Symtab.getObjectFiles()) {
520     for (InputSectionBase<ELFT> *C : F->getSections()) {
521       if (isDiscarded(C))
522         continue;
523       const Elf_Shdr *H = C->getSectionHdr();
524       uintX_t OutFlags = H->sh_flags & ~SHF_GROUP;
525       // For SHF_MERGE we create different output sections for each sh_entsize.
526       // This makes each output section simple and keeps a single level
527       // mapping from input to output.
528       typename InputSectionBase<ELFT>::Kind K = C->SectionKind;
529       uintX_t EntSize = K != InputSectionBase<ELFT>::Merge ? 0 : H->sh_entsize;
530       uint32_t OutType = H->sh_type;
531       if (OutType == SHT_PROGBITS && C->getSectionName() == ".eh_frame" &&
532           Config->EMachine == EM_X86_64)
533         OutType = SHT_X86_64_UNWIND;
534       SectionKey<ELFT::Is64Bits> Key{getOutputSectionName(C->getSectionName()),
535                                      OutType, OutFlags, EntSize};
536       OutputSectionBase<ELFT> *&Sec = Map[Key];
537       if (!Sec) {
538         switch (K) {
539         case InputSectionBase<ELFT>::Regular:
540           Sec = new (SecAlloc.Allocate())
541               OutputSection<ELFT>(Key.Name, Key.Type, Key.Flags);
542           break;
543         case InputSectionBase<ELFT>::EHFrame:
544           Sec = new (EHSecAlloc.Allocate())
545               EHOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags);
546           break;
547         case InputSectionBase<ELFT>::Merge:
548           Sec = new (MSecAlloc.Allocate())
549               MergeOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags);
550           break;
551         }
552         OutputSections.push_back(Sec);
553         RegularSections.push_back(Sec);
554       }
555       switch (K) {
556       case InputSectionBase<ELFT>::Regular:
557         static_cast<OutputSection<ELFT> *>(Sec)
558             ->addSection(cast<InputSection<ELFT>>(C));
559         break;
560       case InputSectionBase<ELFT>::EHFrame:
561         static_cast<EHOutputSection<ELFT> *>(Sec)
562             ->addSection(cast<EHInputSection<ELFT>>(C));
563         break;
564       case InputSectionBase<ELFT>::Merge:
565         static_cast<MergeOutputSection<ELFT> *>(Sec)
566             ->addSection(cast<MergeInputSection<ELFT>>(C));
567         break;
568       }
569     }
570   }
571 
572   Out<ELFT>::Bss = static_cast<OutputSection<ELFT> *>(
573       Map[{".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE, 0}]);
574 
575   Out<ELFT>::Dynamic->PreInitArraySec = Map.lookup(
576       {".preinit_array", SHT_PREINIT_ARRAY, SHF_WRITE | SHF_ALLOC, 0});
577   Out<ELFT>::Dynamic->InitArraySec =
578       Map.lookup({".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC, 0});
579   Out<ELFT>::Dynamic->FiniArraySec =
580       Map.lookup({".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC, 0});
581 
582   auto AddStartEnd = [&](StringRef Start, StringRef End,
583                          OutputSectionBase<ELFT> *OS) {
584     if (OS) {
585       Symtab.addSyntheticSym(Start, *OS, 0);
586       Symtab.addSyntheticSym(End, *OS, OS->getSize());
587     } else {
588       Symtab.addIgnoredSym(Start);
589       Symtab.addIgnoredSym(End);
590     }
591   };
592 
593   AddStartEnd("__preinit_array_start", "__preinit_array_end",
594               Out<ELFT>::Dynamic->PreInitArraySec);
595   AddStartEnd("__init_array_start", "__init_array_end",
596               Out<ELFT>::Dynamic->InitArraySec);
597   AddStartEnd("__fini_array_start", "__fini_array_end",
598               Out<ELFT>::Dynamic->FiniArraySec);
599 
600   for (OutputSectionBase<ELFT> *Sec : RegularSections)
601     addStartStopSymbols(Sec);
602 
603   // __tls_get_addr is defined by the dynamic linker for dynamic ELFs. For
604   // static linking the linker is required to optimize away any references to
605   // __tls_get_addr, so it's not defined anywhere. Create a hidden definition
606   // to avoid the undefined symbol error.
607   if (!isOutputDynamic())
608     Symtab.addIgnoredSym("__tls_get_addr");
609 
610   // Scan relocations. This must be done after every symbol is declared so that
611   // we can correctly decide if a dynamic relocation is needed.
612   for (const std::unique_ptr<ObjectFile<ELFT>> &F : Symtab.getObjectFiles()) {
613     for (InputSectionBase<ELFT> *C : F->getSections()) {
614       if (isDiscarded(C))
615         continue;
616       if (auto *S = dyn_cast<InputSection<ELFT>>(C))
617         scanRelocs(*S);
618       else if (auto *S = dyn_cast<EHInputSection<ELFT>>(C))
619         if (S->RelocSection)
620           scanRelocs(*S, *S->RelocSection);
621     }
622   }
623 
624   std::vector<DefinedCommon<ELFT> *> CommonSymbols;
625   std::vector<SharedSymbol<ELFT> *> SharedCopySymbols;
626   for (auto &P : Symtab.getSymbols()) {
627     SymbolBody *Body = P.second->Body;
628     if (auto *U = dyn_cast<Undefined<ELFT>>(Body))
629       if (!U->isWeak() && !U->canKeepUndefined())
630         reportUndefined<ELFT>(Symtab, *Body);
631 
632     if (auto *C = dyn_cast<DefinedCommon<ELFT>>(Body))
633       CommonSymbols.push_back(C);
634     if (auto *SC = dyn_cast<SharedSymbol<ELFT>>(Body))
635       if (SC->needsCopy())
636         SharedCopySymbols.push_back(SC);
637 
638     if (!includeInSymtab<ELFT>(*Body))
639       continue;
640     if (Out<ELFT>::SymTab)
641       Out<ELFT>::SymTab->addSymbol(Body);
642 
643     if (isOutputDynamic() && includeInDynamicSymtab(*Body))
644       Out<ELFT>::DynSymTab->addSymbol(Body);
645   }
646   addCommonSymbols(CommonSymbols);
647   addSharedCopySymbols(SharedCopySymbols);
648 
649   // This order is not the same as the final output order
650   // because we sort the sections using their attributes below.
651   if (Out<ELFT>::SymTab)
652     OutputSections.push_back(Out<ELFT>::SymTab);
653   OutputSections.push_back(Out<ELFT>::ShStrTab);
654   if (Out<ELFT>::StrTab)
655     OutputSections.push_back(Out<ELFT>::StrTab);
656   if (isOutputDynamic()) {
657     OutputSections.push_back(Out<ELFT>::DynSymTab);
658     if (Out<ELFT>::GnuHashTab)
659       OutputSections.push_back(Out<ELFT>::GnuHashTab);
660     if (Out<ELFT>::HashTab)
661       OutputSections.push_back(Out<ELFT>::HashTab);
662     OutputSections.push_back(Out<ELFT>::Dynamic);
663     OutputSections.push_back(Out<ELFT>::DynStrTab);
664     if (Out<ELFT>::RelaDyn->hasRelocs())
665       OutputSections.push_back(Out<ELFT>::RelaDyn);
666     if (Out<ELFT>::RelaPlt && Out<ELFT>::RelaPlt->hasRelocs())
667       OutputSections.push_back(Out<ELFT>::RelaPlt);
668     // This is a MIPS specific section to hold a space within the data segment
669     // of executable file which is pointed to by the DT_MIPS_RLD_MAP entry.
670     // See "Dynamic section" in Chapter 5 in the following document:
671     // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
672     if (Config->EMachine == EM_MIPS && !Config->Shared) {
673       Out<ELFT>::MipsRldMap = new (SecAlloc.Allocate())
674           OutputSection<ELFT>(".rld_map", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
675       Out<ELFT>::MipsRldMap->setSize(ELFT::Is64Bits ? 8 : 4);
676       Out<ELFT>::MipsRldMap->updateAlign(ELFT::Is64Bits ? 8 : 4);
677       OutputSections.push_back(Out<ELFT>::MipsRldMap);
678     }
679   }
680 
681   // We add the .got section to the result for dynamic MIPS target because
682   // its address and properties are mentioned in the .dynamic section.
683   if (!Out<ELFT>::Got->empty() ||
684       (isOutputDynamic() && Config->EMachine == EM_MIPS))
685     OutputSections.push_back(Out<ELFT>::Got);
686   if (Out<ELFT>::GotPlt && !Out<ELFT>::GotPlt->empty())
687     OutputSections.push_back(Out<ELFT>::GotPlt);
688   if (!Out<ELFT>::Plt->empty())
689     OutputSections.push_back(Out<ELFT>::Plt);
690 
691   std::stable_sort(OutputSections.begin(), OutputSections.end(),
692                    compareSections<ELFT>);
693 
694   for (unsigned I = 0, N = OutputSections.size(); I < N; ++I)
695     OutputSections[I]->SectionIndex = I + 1;
696 
697   for (OutputSectionBase<ELFT> *Sec : OutputSections)
698     Out<ELFT>::ShStrTab->add(Sec->getName());
699 
700   // Finalizers fix each section's size.
701   // .dynamic section's finalizer may add strings to .dynstr,
702   // so finalize that early.
703   // Likewise, .dynsym is finalized early since that may fill up .gnu.hash.
704   Out<ELFT>::Dynamic->finalize();
705   if (isOutputDynamic())
706     Out<ELFT>::DynSymTab->finalize();
707 
708   // Fill other section headers.
709   for (OutputSectionBase<ELFT> *Sec : OutputSections)
710     Sec->finalize();
711 
712   // If we have a .opd section (used under PPC64 for function descriptors),
713   // store a pointer to it here so that we can use it later when processing
714   // relocations.
715   Out<ELFT>::Opd = Map.lookup({".opd", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC, 0});
716 }
717 
718 static bool isAlpha(char C) {
719   return ('a' <= C && C <= 'z') || ('A' <= C && C <= 'Z') || C == '_';
720 }
721 
722 static bool isAlnum(char C) { return isAlpha(C) || ('0' <= C && C <= '9'); }
723 
724 // Returns true if S is valid as a C language identifier.
725 static bool isValidCIdentifier(StringRef S) {
726   if (S.empty() || !isAlpha(S[0]))
727     return false;
728   return std::all_of(S.begin() + 1, S.end(), isAlnum);
729 }
730 
731 // If a section name is valid as a C identifier (which is rare because of
732 // the leading '.'), linkers are expected to define __start_<secname> and
733 // __stop_<secname> symbols. They are at beginning and end of the section,
734 // respectively. This is not requested by the ELF standard, but GNU ld and
735 // gold provide the feature, and used by many programs.
736 template <class ELFT>
737 void Writer<ELFT>::addStartStopSymbols(OutputSectionBase<ELFT> *Sec) {
738   StringRef S = Sec->getName();
739   if (!isValidCIdentifier(S))
740     return;
741   StringSaver Saver(Alloc);
742   StringRef Start = Saver.save("__start_" + S);
743   StringRef Stop = Saver.save("__stop_" + S);
744   if (Symtab.isUndefined(Start))
745     Symtab.addSyntheticSym(Start, *Sec, 0);
746   if (Symtab.isUndefined(Stop))
747     Symtab.addSyntheticSym(Stop, *Sec, Sec->getSize());
748 }
749 
750 template <class ELFT> static bool needsPhdr(OutputSectionBase<ELFT> *Sec) {
751   return Sec->getFlags() & SHF_ALLOC;
752 }
753 
754 static uint32_t toPhdrFlags(uint64_t Flags) {
755   uint32_t Ret = PF_R;
756   if (Flags & SHF_WRITE)
757     Ret |= PF_W;
758   if (Flags & SHF_EXECINSTR)
759     Ret |= PF_X;
760   return Ret;
761 }
762 
763 // Visits all sections to create PHDRs and to assign incremental,
764 // non-overlapping addresses to output sections.
765 template <class ELFT> void Writer<ELFT>::assignAddresses() {
766   uintX_t VA = Target->getVAStart() + sizeof(Elf_Ehdr);
767   uintX_t FileOff = sizeof(Elf_Ehdr);
768 
769   // Calculate and reserve the space for the program header first so that
770   // the first section can start right after the program header.
771   Phdrs.resize(getPhdrsNum());
772   size_t PhdrSize = sizeof(Elf_Phdr) * Phdrs.size();
773 
774   // The first phdr entry is PT_PHDR which describes the program header itself.
775   setPhdr(&Phdrs[0], PT_PHDR, PF_R, FileOff, VA, PhdrSize, /*Align=*/8);
776   FileOff += PhdrSize;
777   VA += PhdrSize;
778 
779   // PT_INTERP must be the second entry if exists.
780   int PhdrIdx = 0;
781   Elf_Phdr *Interp = nullptr;
782   if (needsInterpSection())
783     Interp = &Phdrs[++PhdrIdx];
784 
785   // Add the first PT_LOAD segment for regular output sections.
786   setPhdr(&Phdrs[++PhdrIdx], PT_LOAD, PF_R, 0, Target->getVAStart(), FileOff,
787           Target->getPageSize());
788 
789   Elf_Phdr TlsPhdr{};
790   uintX_t ThreadBSSOffset = 0;
791   // Create phdrs as we assign VAs and file offsets to all output sections.
792   for (OutputSectionBase<ELFT> *Sec : OutputSections) {
793     if (needsPhdr<ELFT>(Sec)) {
794       uintX_t Flags = toPhdrFlags(Sec->getFlags());
795       if (Phdrs[PhdrIdx].p_flags != Flags) {
796         // Flags changed. Create a new PT_LOAD.
797         VA = RoundUpToAlignment(VA, Target->getPageSize());
798         FileOff = RoundUpToAlignment(FileOff, Target->getPageSize());
799         Elf_Phdr *PH = &Phdrs[++PhdrIdx];
800         setPhdr(PH, PT_LOAD, Flags, FileOff, VA, 0, Target->getPageSize());
801       }
802 
803       if (Sec->getFlags() & SHF_TLS) {
804         if (!TlsPhdr.p_vaddr)
805           setPhdr(&TlsPhdr, PT_TLS, PF_R, FileOff, VA, 0, Sec->getAlign());
806         if (Sec->getType() != SHT_NOBITS)
807           VA = RoundUpToAlignment(VA, Sec->getAlign());
808         uintX_t TVA = RoundUpToAlignment(VA + ThreadBSSOffset, Sec->getAlign());
809         Sec->setVA(TVA);
810         TlsPhdr.p_memsz += Sec->getSize();
811         if (Sec->getType() == SHT_NOBITS) {
812           ThreadBSSOffset = TVA - VA + Sec->getSize();
813         } else {
814           TlsPhdr.p_filesz += Sec->getSize();
815           VA += Sec->getSize();
816         }
817         TlsPhdr.p_align = std::max<uintX_t>(TlsPhdr.p_align, Sec->getAlign());
818       } else {
819         VA = RoundUpToAlignment(VA, Sec->getAlign());
820         Sec->setVA(VA);
821         VA += Sec->getSize();
822       }
823     }
824 
825     FileOff = RoundUpToAlignment(FileOff, Sec->getAlign());
826     Sec->setFileOffset(FileOff);
827     if (Sec->getType() != SHT_NOBITS)
828       FileOff += Sec->getSize();
829     if (needsPhdr<ELFT>(Sec)) {
830       Elf_Phdr *Cur = &Phdrs[PhdrIdx];
831       Cur->p_filesz = FileOff - Cur->p_offset;
832       Cur->p_memsz = VA - Cur->p_vaddr;
833     }
834   }
835 
836   if (TlsPhdr.p_vaddr) {
837     // The TLS pointer goes after PT_TLS. At least glibc will align it,
838     // so round up the size to make sure the offsets are correct.
839     TlsPhdr.p_memsz = RoundUpToAlignment(TlsPhdr.p_memsz, TlsPhdr.p_align);
840     Phdrs[++PhdrIdx] = TlsPhdr;
841     Out<ELFT>::TlsPhdr = &Phdrs[PhdrIdx];
842   }
843 
844   // Add an entry for .dynamic.
845   if (isOutputDynamic()) {
846     Elf_Phdr *PH = &Phdrs[++PhdrIdx];
847     PH->p_type = PT_DYNAMIC;
848     copyPhdr(PH, Out<ELFT>::Dynamic);
849   }
850 
851   // Fix up PT_INTERP as we now know the address of .interp section.
852   if (Interp) {
853     Interp->p_type = PT_INTERP;
854     copyPhdr(Interp, Out<ELFT>::Interp);
855   }
856 
857   // Add space for section headers.
858   SectionHeaderOff = RoundUpToAlignment(FileOff, ELFT::Is64Bits ? 8 : 4);
859   FileSize = SectionHeaderOff + getNumSections() * sizeof(Elf_Shdr);
860 
861   // Update MIPS _gp absolute symbol so that it points to the static data.
862   if (Config->EMachine == EM_MIPS)
863     DefinedAbsolute<ELFT>::MipsGp.st_value = getMipsGpAddr<ELFT>();
864 }
865 
866 // Returns the number of PHDR entries.
867 template <class ELFT> int Writer<ELFT>::getPhdrsNum() const {
868   bool Tls = false;
869   int I = 2; // 2 for PT_PHDR and the first PT_LOAD
870   if (needsInterpSection())
871     ++I;
872   if (isOutputDynamic())
873     ++I;
874   uintX_t Last = PF_R;
875   for (OutputSectionBase<ELFT> *Sec : OutputSections) {
876     if (!needsPhdr<ELFT>(Sec))
877       continue;
878     if (Sec->getFlags() & SHF_TLS)
879       Tls = true;
880     uintX_t Flags = toPhdrFlags(Sec->getFlags());
881     if (Last != Flags) {
882       Last = Flags;
883       ++I;
884     }
885   }
886   if (Tls)
887     ++I;
888   return I;
889 }
890 
891 template <class ELFT> void Writer<ELFT>::writeHeader() {
892   uint8_t *Buf = Buffer->getBufferStart();
893   memcpy(Buf, "\177ELF", 4);
894 
895   // Write the ELF header.
896   auto *EHdr = reinterpret_cast<Elf_Ehdr *>(Buf);
897   EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32;
898   EHdr->e_ident[EI_DATA] = ELFT::TargetEndianness == llvm::support::little
899                                ? ELFDATA2LSB
900                                : ELFDATA2MSB;
901   EHdr->e_ident[EI_VERSION] = EV_CURRENT;
902 
903   auto &FirstObj = cast<ELFFileBase<ELFT>>(*Config->FirstElf);
904   EHdr->e_ident[EI_OSABI] = FirstObj.getOSABI();
905 
906   EHdr->e_type = Config->Shared ? ET_DYN : ET_EXEC;
907   EHdr->e_machine = FirstObj.getEMachine();
908   EHdr->e_version = EV_CURRENT;
909   EHdr->e_entry = getEntryAddr();
910   EHdr->e_phoff = sizeof(Elf_Ehdr);
911   EHdr->e_shoff = SectionHeaderOff;
912   EHdr->e_ehsize = sizeof(Elf_Ehdr);
913   EHdr->e_phentsize = sizeof(Elf_Phdr);
914   EHdr->e_phnum = Phdrs.size();
915   EHdr->e_shentsize = sizeof(Elf_Shdr);
916   EHdr->e_shnum = getNumSections();
917   EHdr->e_shstrndx = Out<ELFT>::ShStrTab->SectionIndex;
918 
919   // Write the program header table.
920   memcpy(Buf + EHdr->e_phoff, &Phdrs[0], Phdrs.size() * sizeof(Phdrs[0]));
921 
922   // Write the section header table. Note that the first table entry is null.
923   auto SHdrs = reinterpret_cast<Elf_Shdr *>(Buf + EHdr->e_shoff);
924   for (OutputSectionBase<ELFT> *Sec : OutputSections)
925     Sec->writeHeaderTo(++SHdrs);
926 }
927 
928 template <class ELFT> void Writer<ELFT>::openFile(StringRef Path) {
929   ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
930       FileOutputBuffer::create(Path, FileSize, FileOutputBuffer::F_executable);
931   error(BufferOrErr, Twine("failed to open ") + Path);
932   Buffer = std::move(*BufferOrErr);
933 }
934 
935 // Write section contents to a mmap'ed file.
936 template <class ELFT> void Writer<ELFT>::writeSections() {
937   uint8_t *Buf = Buffer->getBufferStart();
938 
939   // PPC64 needs to process relocations in the .opd section before processing
940   // relocations in code-containing sections.
941   if (OutputSectionBase<ELFT> *Sec = Out<ELFT>::Opd) {
942     Out<ELFT>::OpdBuf = Buf + Sec->getFileOff();
943     Sec->writeTo(Buf + Sec->getFileOff());
944   }
945 
946   for (OutputSectionBase<ELFT> *Sec : OutputSections)
947     if (Sec != Out<ELFT>::Opd)
948       Sec->writeTo(Buf + Sec->getFileOff());
949 }
950 
951 template <class ELFT>
952 typename ELFFile<ELFT>::uintX_t Writer<ELFT>::getEntryAddr() const {
953   if (Config->EntrySym) {
954     if (auto *E = dyn_cast<ELFSymbolBody<ELFT>>(Config->EntrySym->repl()))
955       return getSymVA<ELFT>(*E);
956     return 0;
957   }
958   if (Config->EntryAddr != uint64_t(-1))
959     return Config->EntryAddr;
960   return 0;
961 }
962 
963 template <class ELFT>
964 void Writer<ELFT>::setPhdr(Elf_Phdr *PH, uint32_t Type, uint32_t Flags,
965                            uintX_t FileOff, uintX_t VA, uintX_t Size,
966                            uintX_t Align) {
967   PH->p_type = Type;
968   PH->p_flags = Flags;
969   PH->p_offset = FileOff;
970   PH->p_vaddr = VA;
971   PH->p_paddr = VA;
972   PH->p_filesz = Size;
973   PH->p_memsz = Size;
974   PH->p_align = Align;
975 }
976 
977 template <class ELFT>
978 void Writer<ELFT>::copyPhdr(Elf_Phdr *PH, OutputSectionBase<ELFT> *From) {
979   PH->p_flags = toPhdrFlags(From->getFlags());
980   PH->p_offset = From->getFileOff();
981   PH->p_vaddr = From->getVA();
982   PH->p_paddr = From->getVA();
983   PH->p_filesz = From->getSize();
984   PH->p_memsz = From->getSize();
985   PH->p_align = From->getAlign();
986 }
987 
988 template <class ELFT> void Writer<ELFT>::buildSectionMap() {
989   for (const std::pair<StringRef, std::vector<StringRef>> &OutSec :
990        Config->OutputSections)
991     for (StringRef Name : OutSec.second)
992       InputToOutputSection[Name] = OutSec.first;
993 }
994 
995 template void lld::elf2::writeResult<ELF32LE>(SymbolTable<ELF32LE> *Symtab);
996 template void lld::elf2::writeResult<ELF32BE>(SymbolTable<ELF32BE> *Symtab);
997 template void lld::elf2::writeResult<ELF64LE>(SymbolTable<ELF64LE> *Symtab);
998 template void lld::elf2::writeResult<ELF64BE>(SymbolTable<ELF64BE> *Symtab);
999