1 //===- InputSection.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 "InputSection.h"
11 #include "Config.h"
12 #include "EhFrame.h"
13 #include "Error.h"
14 #include "InputFiles.h"
15 #include "LinkerScript.h"
16 #include "Memory.h"
17 #include "OutputSections.h"
18 #include "Relocations.h"
19 #include "SyntheticSections.h"
20 #include "Target.h"
21 #include "Thunks.h"
22 #include "llvm/Object/Decompressor.h"
23 #include "llvm/Support/Compiler.h"
24 #include "llvm/Support/Compression.h"
25 #include "llvm/Support/Endian.h"
26 #include "llvm/Support/Path.h"
27 #include "llvm/Support/Threading.h"
28 #include "llvm/Support/xxhash.h"
29 #include <mutex>
30 
31 using namespace llvm;
32 using namespace llvm::ELF;
33 using namespace llvm::object;
34 using namespace llvm::support;
35 using namespace llvm::support::endian;
36 using namespace llvm::sys;
37 
38 using namespace lld;
39 using namespace lld::elf;
40 
41 std::vector<InputSectionBase *> elf::InputSections;
42 
43 // Returns a string to construct an error message.
44 std::string lld::toString(const InputSectionBase *Sec) {
45   return (toString(Sec->File) + ":(" + Sec->Name + ")").str();
46 }
47 
48 DenseMap<SectionBase *, int> elf::buildSectionOrder() {
49   DenseMap<SectionBase *, int> SectionOrder;
50   if (Config->SymbolOrderingFile.empty())
51     return SectionOrder;
52 
53   // Build a map from symbols to their priorities. Symbols that didn't
54   // appear in the symbol ordering file have the lowest priority 0.
55   // All explicitly mentioned symbols have negative (higher) priorities.
56   DenseMap<StringRef, int> SymbolOrder;
57   int Priority = -Config->SymbolOrderingFile.size();
58   for (StringRef S : Config->SymbolOrderingFile)
59     SymbolOrder.insert({S, Priority++});
60 
61   // Build a map from sections to their priorities.
62   for (InputFile *File : ObjectFiles) {
63     for (SymbolBody *Body : File->getSymbols()) {
64       auto *D = dyn_cast<DefinedRegular>(Body);
65       if (!D || !D->Section)
66         continue;
67       int &Priority = SectionOrder[D->Section];
68       Priority = std::min(Priority, SymbolOrder.lookup(D->getName()));
69     }
70   }
71   return SectionOrder;
72 }
73 
74 template <class ELFT>
75 static ArrayRef<uint8_t> getSectionContents(ObjFile<ELFT> *File,
76                                             const typename ELFT::Shdr *Hdr) {
77   if (!File || Hdr->sh_type == SHT_NOBITS)
78     return makeArrayRef<uint8_t>(nullptr, Hdr->sh_size);
79   return check(File->getObj().getSectionContents(Hdr));
80 }
81 
82 InputSectionBase::InputSectionBase(InputFile *File, uint64_t Flags,
83                                    uint32_t Type, uint64_t Entsize,
84                                    uint32_t Link, uint32_t Info,
85                                    uint32_t Alignment, ArrayRef<uint8_t> Data,
86                                    StringRef Name, Kind SectionKind)
87     : SectionBase(SectionKind, Name, Flags, Entsize, Alignment, Type, Info,
88                   Link),
89       File(File), Data(Data), Repl(this) {
90   Assigned = false;
91   NumRelocations = 0;
92   AreRelocsRela = false;
93 
94   // The ELF spec states that a value of 0 means the section has
95   // no alignment constraits.
96   uint32_t V = std::max<uint64_t>(Alignment, 1);
97   if (!isPowerOf2_64(V))
98     fatal(toString(File) + ": section sh_addralign is not a power of 2");
99   this->Alignment = V;
100 }
101 
102 // Drop SHF_GROUP bit unless we are producing a re-linkable object file.
103 // SHF_GROUP is a marker that a section belongs to some comdat group.
104 // That flag doesn't make sense in an executable.
105 static uint64_t getFlags(uint64_t Flags) {
106   Flags &= ~(uint64_t)SHF_INFO_LINK;
107   if (!Config->Relocatable)
108     Flags &= ~(uint64_t)SHF_GROUP;
109   return Flags;
110 }
111 
112 // GNU assembler 2.24 and LLVM 4.0.0's MC (the newest release as of
113 // March 2017) fail to infer section types for sections starting with
114 // ".init_array." or ".fini_array.". They set SHT_PROGBITS instead of
115 // SHF_INIT_ARRAY. As a result, the following assembler directive
116 // creates ".init_array.100" with SHT_PROGBITS, for example.
117 //
118 //   .section .init_array.100, "aw"
119 //
120 // This function forces SHT_{INIT,FINI}_ARRAY so that we can handle
121 // incorrect inputs as if they were correct from the beginning.
122 static uint64_t getType(uint64_t Type, StringRef Name) {
123   if (Type == SHT_PROGBITS && Name.startswith(".init_array."))
124     return SHT_INIT_ARRAY;
125   if (Type == SHT_PROGBITS && Name.startswith(".fini_array."))
126     return SHT_FINI_ARRAY;
127   return Type;
128 }
129 
130 template <class ELFT>
131 InputSectionBase::InputSectionBase(ObjFile<ELFT> *File,
132                                    const typename ELFT::Shdr *Hdr,
133                                    StringRef Name, Kind SectionKind)
134     : InputSectionBase(File, getFlags(Hdr->sh_flags),
135                        getType(Hdr->sh_type, Name), Hdr->sh_entsize,
136                        Hdr->sh_link, Hdr->sh_info, Hdr->sh_addralign,
137                        getSectionContents(File, Hdr), Name, SectionKind) {
138   // We reject object files having insanely large alignments even though
139   // they are allowed by the spec. I think 4GB is a reasonable limitation.
140   // We might want to relax this in the future.
141   if (Hdr->sh_addralign > UINT32_MAX)
142     fatal(toString(File) + ": section sh_addralign is too large");
143 }
144 
145 size_t InputSectionBase::getSize() const {
146   if (auto *S = dyn_cast<SyntheticSection>(this))
147     return S->getSize();
148 
149   return Data.size();
150 }
151 
152 uint64_t InputSectionBase::getOffsetInFile() const {
153   const uint8_t *FileStart = (const uint8_t *)File->MB.getBufferStart();
154   const uint8_t *SecStart = Data.begin();
155   return SecStart - FileStart;
156 }
157 
158 uint64_t SectionBase::getOffset(uint64_t Offset) const {
159   switch (kind()) {
160   case Output: {
161     auto *OS = cast<OutputSection>(this);
162     // For output sections we treat offset -1 as the end of the section.
163     return Offset == uint64_t(-1) ? OS->Size : Offset;
164   }
165   case Regular:
166     return cast<InputSection>(this)->OutSecOff + Offset;
167   case Synthetic: {
168     auto *IS = cast<InputSection>(this);
169     // For synthetic sections we treat offset -1 as the end of the section.
170     return IS->OutSecOff + (Offset == uint64_t(-1) ? IS->getSize() : Offset);
171   }
172   case EHFrame:
173     // The file crtbeginT.o has relocations pointing to the start of an empty
174     // .eh_frame that is known to be the first in the link. It does that to
175     // identify the start of the output .eh_frame.
176     return Offset;
177   case Merge:
178     const MergeInputSection *MS = cast<MergeInputSection>(this);
179     if (InputSection *IS = MS->getParent())
180       return IS->OutSecOff + MS->getOffset(Offset);
181     return MS->getOffset(Offset);
182   }
183   llvm_unreachable("invalid section kind");
184 }
185 
186 OutputSection *SectionBase::getOutputSection() {
187   InputSection *Sec;
188   if (auto *IS = dyn_cast<InputSection>(this))
189     Sec = cast<InputSection>(IS->Repl);
190   else if (auto *MS = dyn_cast<MergeInputSection>(this))
191     Sec = MS->getParent();
192   else if (auto *EH = dyn_cast<EhInputSection>(this))
193     Sec = EH->getParent();
194   else
195     return cast<OutputSection>(this);
196   return Sec ? Sec->getParent() : nullptr;
197 }
198 
199 // Uncompress section contents if required. Note that this function
200 // is called from parallelForEach, so it must be thread-safe.
201 void InputSectionBase::maybeUncompress() {
202   if (UncompressBuf || !Decompressor::isCompressedELFSection(Flags, Name))
203     return;
204 
205   Decompressor Dec = check(Decompressor::create(Name, toStringRef(Data),
206                                                 Config->IsLE, Config->Is64));
207 
208   size_t Size = Dec.getDecompressedSize();
209   UncompressBuf.reset(new char[Size]());
210   if (Error E = Dec.decompress({UncompressBuf.get(), Size}))
211     fatal(toString(this) +
212           ": decompress failed: " + llvm::toString(std::move(E)));
213 
214   this->Data = makeArrayRef((uint8_t *)UncompressBuf.get(), Size);
215   this->Flags &= ~(uint64_t)SHF_COMPRESSED;
216 }
217 
218 uint64_t SectionBase::getOffset(const DefinedRegular &Sym) const {
219   return getOffset(Sym.Value);
220 }
221 
222 InputSection *InputSectionBase::getLinkOrderDep() const {
223   if ((Flags & SHF_LINK_ORDER) && Link != 0) {
224     InputSectionBase *L = File->getSections()[Link];
225     if (auto *IS = dyn_cast<InputSection>(L))
226       return IS;
227     error("a section with SHF_LINK_ORDER should not refer a non-regular "
228           "section: " +
229           toString(L));
230   }
231   return nullptr;
232 }
233 
234 // Returns a source location string. Used to construct an error message.
235 template <class ELFT>
236 std::string InputSectionBase::getLocation(uint64_t Offset) {
237   // We don't have file for synthetic sections.
238   if (getFile<ELFT>() == nullptr)
239     return (Config->OutputFile + ":(" + Name + "+0x" + utohexstr(Offset) + ")")
240         .str();
241 
242   // First check if we can get desired values from debugging information.
243   std::string LineInfo = getFile<ELFT>()->getLineInfo(this, Offset);
244   if (!LineInfo.empty())
245     return LineInfo;
246 
247   // File->SourceFile contains STT_FILE symbol that contains a
248   // source file name. If it's missing, we use an object file name.
249   std::string SrcFile = getFile<ELFT>()->SourceFile;
250   if (SrcFile.empty())
251     SrcFile = toString(File);
252 
253   // Find a function symbol that encloses a given location.
254   for (SymbolBody *B : getFile<ELFT>()->getSymbols())
255     if (auto *D = dyn_cast<DefinedRegular>(B))
256       if (D->Section == this && D->Type == STT_FUNC)
257         if (D->Value <= Offset && Offset < D->Value + D->Size)
258           return SrcFile + ":(function " + toString(*D) + ")";
259 
260   // If there's no symbol, print out the offset in the section.
261   return (SrcFile + ":(" + Name + "+0x" + utohexstr(Offset) + ")").str();
262 }
263 
264 // Returns a source location string. This function is intended to be
265 // used for constructing an error message. The returned message looks
266 // like this:
267 //
268 //   foo.c:42 (/home/alice/possibly/very/long/path/foo.c:42)
269 //
270 // Returns an empty string if there's no way to get line info.
271 template <class ELFT> std::string InputSectionBase::getSrcMsg(uint64_t Offset) {
272   // Synthetic sections don't have input files.
273   ObjFile<ELFT> *File = getFile<ELFT>();
274   if (!File)
275     return "";
276 
277   Optional<DILineInfo> Info = File->getDILineInfo(this, Offset);
278 
279   // File->SourceFile contains STT_FILE symbol, and that is a last resort.
280   if (!Info)
281     return File->SourceFile;
282 
283   std::string Path = Info->FileName;
284   std::string Filename = path::filename(Path);
285   std::string Lineno = ":" + std::to_string(Info->Line);
286   if (Filename == Path)
287     return Filename + Lineno;
288   return Filename + Lineno + " (" + Path + Lineno + ")";
289 }
290 
291 // Returns a filename string along with an optional section name. This
292 // function is intended to be used for constructing an error
293 // message. The returned message looks like this:
294 //
295 //   path/to/foo.o:(function bar)
296 //
297 // or
298 //
299 //   path/to/foo.o:(function bar) in archive path/to/bar.a
300 template <class ELFT> std::string InputSectionBase::getObjMsg(uint64_t Off) {
301   // Synthetic sections don't have input files.
302   ObjFile<ELFT> *File = getFile<ELFT>();
303   if (!File)
304     return ("(internal):(" + Name + "+0x" + utohexstr(Off) + ")").str();
305   std::string Filename = File->getName();
306 
307   std::string Archive;
308   if (!File->ArchiveName.empty())
309     Archive = (" in archive " + File->ArchiveName).str();
310 
311   // Find a symbol that encloses a given location.
312   for (SymbolBody *B : getFile<ELFT>()->getSymbols())
313     if (auto *D = dyn_cast<DefinedRegular>(B))
314       if (D->Section == this && D->Value <= Off && Off < D->Value + D->Size)
315         return Filename + ":(" + toString(*D) + ")" + Archive;
316 
317   // If there's no symbol, print out the offset in the section.
318   return (Filename + ":(" + Name + "+0x" + utohexstr(Off) + ")" + Archive)
319       .str();
320 }
321 
322 InputSectionBase InputSectionBase::Discarded;
323 
324 InputSection::InputSection(uint64_t Flags, uint32_t Type, uint32_t Alignment,
325                            ArrayRef<uint8_t> Data, StringRef Name, Kind K)
326     : InputSectionBase(nullptr, Flags, Type,
327                        /*Entsize*/ 0, /*Link*/ 0, /*Info*/ 0, Alignment, Data,
328                        Name, K) {}
329 
330 template <class ELFT>
331 InputSection::InputSection(ObjFile<ELFT> *F, const typename ELFT::Shdr *Header,
332                            StringRef Name)
333     : InputSectionBase(F, Header, Name, InputSectionBase::Regular) {}
334 
335 bool InputSection::classof(const SectionBase *S) {
336   return S->kind() == SectionBase::Regular ||
337          S->kind() == SectionBase::Synthetic;
338 }
339 
340 OutputSection *InputSection::getParent() const {
341   return cast_or_null<OutputSection>(Parent);
342 }
343 
344 // Copy SHT_GROUP section contents. Used only for the -r option.
345 template <class ELFT> void InputSection::copyShtGroup(uint8_t *Buf) {
346   // ELFT::Word is the 32-bit integral type in the target endianness.
347   typedef typename ELFT::Word u32;
348   ArrayRef<u32> From = getDataAs<u32>();
349   auto *To = reinterpret_cast<u32 *>(Buf);
350 
351   // The first entry is not a section number but a flag.
352   *To++ = From[0];
353 
354   // Adjust section numbers because section numbers in an input object
355   // files are different in the output.
356   ArrayRef<InputSectionBase *> Sections = this->File->getSections();
357   for (uint32_t Idx : From.slice(1))
358     *To++ = Sections[Idx]->getOutputSection()->SectionIndex;
359 }
360 
361 InputSectionBase *InputSection::getRelocatedSection() {
362   assert(this->Type == SHT_RELA || this->Type == SHT_REL);
363   ArrayRef<InputSectionBase *> Sections = this->File->getSections();
364   return Sections[this->Info];
365 }
366 
367 // This is used for -r and --emit-relocs. We can't use memcpy to copy
368 // relocations because we need to update symbol table offset and section index
369 // for each relocation. So we copy relocations one by one.
370 template <class ELFT, class RelTy>
371 void InputSection::copyRelocations(uint8_t *Buf, ArrayRef<RelTy> Rels) {
372   InputSectionBase *Sec = getRelocatedSection();
373 
374   for (const RelTy &Rel : Rels) {
375     RelType Type = Rel.getType(Config->IsMips64EL);
376     SymbolBody &Body = this->getFile<ELFT>()->getRelocTargetSym(Rel);
377 
378     auto *P = reinterpret_cast<typename ELFT::Rela *>(Buf);
379     Buf += sizeof(RelTy);
380 
381     if (Config->IsRela)
382       P->r_addend = getAddend<ELFT>(Rel);
383 
384     // Output section VA is zero for -r, so r_offset is an offset within the
385     // section, but for --emit-relocs it is an virtual address.
386     P->r_offset = Sec->getOutputSection()->Addr + Sec->getOffset(Rel.r_offset);
387     P->setSymbolAndType(InX::SymTab->getSymbolIndex(&Body), Type,
388                         Config->IsMips64EL);
389 
390     if (Body.Type == STT_SECTION) {
391       // We combine multiple section symbols into only one per
392       // section. This means we have to update the addend. That is
393       // trivial for Elf_Rela, but for Elf_Rel we have to write to the
394       // section data. We do that by adding to the Relocation vector.
395 
396       // .eh_frame is horribly special and can reference discarded sections. To
397       // avoid having to parse and recreate .eh_frame, we just replace any
398       // relocation in it pointing to discarded sections with R_*_NONE, which
399       // hopefully creates a frame that is ignored at runtime.
400       SectionBase *Section = cast<DefinedRegular>(Body).Section;
401       if (Section == &InputSection::Discarded) {
402         P->setSymbolAndType(0, 0, false);
403         continue;
404       }
405 
406       if (Config->IsRela) {
407         P->r_addend += Body.getVA() - Section->getOutputSection()->Addr;
408       } else if (Config->Relocatable) {
409         const uint8_t *BufLoc = Sec->Data.begin() + Rel.r_offset;
410         Sec->Relocations.push_back({R_ABS, Type, Rel.r_offset,
411                                     Target->getImplicitAddend(BufLoc, Type),
412                                     &Body});
413       }
414     }
415 
416   }
417 }
418 
419 // The ARM and AArch64 ABI handle pc-relative relocations to undefined weak
420 // references specially. The general rule is that the value of the symbol in
421 // this context is the address of the place P. A further special case is that
422 // branch relocations to an undefined weak reference resolve to the next
423 // instruction.
424 static uint32_t getARMUndefinedRelativeWeakVA(RelType Type, uint32_t A,
425                                               uint32_t P) {
426   switch (Type) {
427   // Unresolved branch relocations to weak references resolve to next
428   // instruction, this will be either 2 or 4 bytes on from P.
429   case R_ARM_THM_JUMP11:
430     return P + 2 + A;
431   case R_ARM_CALL:
432   case R_ARM_JUMP24:
433   case R_ARM_PC24:
434   case R_ARM_PLT32:
435   case R_ARM_PREL31:
436   case R_ARM_THM_JUMP19:
437   case R_ARM_THM_JUMP24:
438     return P + 4 + A;
439   case R_ARM_THM_CALL:
440     // We don't want an interworking BLX to ARM
441     return P + 5 + A;
442   // Unresolved non branch pc-relative relocations
443   // R_ARM_TARGET2 which can be resolved relatively is not present as it never
444   // targets a weak-reference.
445   case R_ARM_MOVW_PREL_NC:
446   case R_ARM_MOVT_PREL:
447   case R_ARM_REL32:
448   case R_ARM_THM_MOVW_PREL_NC:
449   case R_ARM_THM_MOVT_PREL:
450     return P + A;
451   }
452   llvm_unreachable("ARM pc-relative relocation expected\n");
453 }
454 
455 // The comment above getARMUndefinedRelativeWeakVA applies to this function.
456 static uint64_t getAArch64UndefinedRelativeWeakVA(uint64_t Type, uint64_t A,
457                                                   uint64_t P) {
458   switch (Type) {
459   // Unresolved branch relocations to weak references resolve to next
460   // instruction, this is 4 bytes on from P.
461   case R_AARCH64_CALL26:
462   case R_AARCH64_CONDBR19:
463   case R_AARCH64_JUMP26:
464   case R_AARCH64_TSTBR14:
465     return P + 4 + A;
466   // Unresolved non branch pc-relative relocations
467   case R_AARCH64_PREL16:
468   case R_AARCH64_PREL32:
469   case R_AARCH64_PREL64:
470   case R_AARCH64_ADR_PREL_LO21:
471   case R_AARCH64_LD_PREL_LO19:
472     return P + A;
473   }
474   llvm_unreachable("AArch64 pc-relative relocation expected\n");
475 }
476 
477 // ARM SBREL relocations are of the form S + A - B where B is the static base
478 // The ARM ABI defines base to be "addressing origin of the output segment
479 // defining the symbol S". We defined the "addressing origin"/static base to be
480 // the base of the PT_LOAD segment containing the Body.
481 // The procedure call standard only defines a Read Write Position Independent
482 // RWPI variant so in practice we should expect the static base to be the base
483 // of the RW segment.
484 static uint64_t getARMStaticBase(const SymbolBody &Body) {
485   OutputSection *OS = Body.getOutputSection();
486   if (!OS || !OS->PtLoad || !OS->PtLoad->FirstSec)
487     fatal("SBREL relocation to " + Body.getName() + " without static base");
488   return OS->PtLoad->FirstSec->Addr;
489 }
490 
491 static uint64_t getRelocTargetVA(RelType Type, int64_t A, uint64_t P,
492                                  const SymbolBody &Body, RelExpr Expr) {
493   switch (Expr) {
494   case R_INVALID:
495     return 0;
496   case R_ABS:
497   case R_RELAX_GOT_PC_NOPIC:
498     return Body.getVA(A);
499   case R_ARM_SBREL:
500     return Body.getVA(A) - getARMStaticBase(Body);
501   case R_GOT:
502   case R_RELAX_TLS_GD_TO_IE_ABS:
503     return Body.getGotVA() + A;
504   case R_GOTONLY_PC:
505     return InX::Got->getVA() + A - P;
506   case R_GOTONLY_PC_FROM_END:
507     return InX::Got->getVA() + A - P + InX::Got->getSize();
508   case R_GOTREL:
509     return Body.getVA(A) - InX::Got->getVA();
510   case R_GOTREL_FROM_END:
511     return Body.getVA(A) - InX::Got->getVA() - InX::Got->getSize();
512   case R_GOT_FROM_END:
513   case R_RELAX_TLS_GD_TO_IE_END:
514     return Body.getGotOffset() + A - InX::Got->getSize();
515   case R_GOT_OFF:
516     return Body.getGotOffset() + A;
517   case R_GOT_PAGE_PC:
518   case R_RELAX_TLS_GD_TO_IE_PAGE_PC:
519     return getAArch64Page(Body.getGotVA() + A) - getAArch64Page(P);
520   case R_GOT_PC:
521   case R_RELAX_TLS_GD_TO_IE:
522     return Body.getGotVA() + A - P;
523   case R_HINT:
524   case R_NONE:
525   case R_TLSDESC_CALL:
526     llvm_unreachable("cannot relocate hint relocs");
527   case R_MIPS_GOTREL:
528     return Body.getVA(A) - InX::MipsGot->getGp();
529   case R_MIPS_GOT_GP:
530     return InX::MipsGot->getGp() + A;
531   case R_MIPS_GOT_GP_PC: {
532     // R_MIPS_LO16 expression has R_MIPS_GOT_GP_PC type iif the target
533     // is _gp_disp symbol. In that case we should use the following
534     // formula for calculation "AHL + GP - P + 4". For details see p. 4-19 at
535     // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
536     uint64_t V = InX::MipsGot->getGp() + A - P;
537     if (Type == R_MIPS_LO16 || Type == R_MICROMIPS_LO16)
538       V += 4;
539     return V;
540   }
541   case R_MIPS_GOT_LOCAL_PAGE:
542     // If relocation against MIPS local symbol requires GOT entry, this entry
543     // should be initialized by 'page address'. This address is high 16-bits
544     // of sum the symbol's value and the addend.
545     return InX::MipsGot->getVA() + InX::MipsGot->getPageEntryOffset(Body, A) -
546            InX::MipsGot->getGp();
547   case R_MIPS_GOT_OFF:
548   case R_MIPS_GOT_OFF32:
549     // In case of MIPS if a GOT relocation has non-zero addend this addend
550     // should be applied to the GOT entry content not to the GOT entry offset.
551     // That is why we use separate expression type.
552     return InX::MipsGot->getVA() + InX::MipsGot->getBodyEntryOffset(Body, A) -
553            InX::MipsGot->getGp();
554   case R_MIPS_TLSGD:
555     return InX::MipsGot->getVA() + InX::MipsGot->getTlsOffset() +
556            InX::MipsGot->getGlobalDynOffset(Body) - InX::MipsGot->getGp();
557   case R_MIPS_TLSLD:
558     return InX::MipsGot->getVA() + InX::MipsGot->getTlsOffset() +
559            InX::MipsGot->getTlsIndexOff() - InX::MipsGot->getGp();
560   case R_PAGE_PC:
561   case R_PLT_PAGE_PC: {
562     uint64_t Dest;
563     if (Body.isUndefWeak())
564       Dest = getAArch64Page(A);
565     else
566       Dest = getAArch64Page(Body.getVA(A));
567     return Dest - getAArch64Page(P);
568   }
569   case R_PC: {
570     uint64_t Dest;
571     if (Body.isUndefWeak()) {
572       // On ARM and AArch64 a branch to an undefined weak resolves to the
573       // next instruction, otherwise the place.
574       if (Config->EMachine == EM_ARM)
575         Dest = getARMUndefinedRelativeWeakVA(Type, A, P);
576       else if (Config->EMachine == EM_AARCH64)
577         Dest = getAArch64UndefinedRelativeWeakVA(Type, A, P);
578       else
579         Dest = Body.getVA(A);
580     } else {
581       Dest = Body.getVA(A);
582     }
583     return Dest - P;
584   }
585   case R_PLT:
586     return Body.getPltVA() + A;
587   case R_PLT_PC:
588   case R_PPC_PLT_OPD:
589     return Body.getPltVA() + A - P;
590   case R_PPC_OPD: {
591     uint64_t SymVA = Body.getVA(A);
592     // If we have an undefined weak symbol, we might get here with a symbol
593     // address of zero. That could overflow, but the code must be unreachable,
594     // so don't bother doing anything at all.
595     if (!SymVA)
596       return 0;
597     if (Out::Opd) {
598       // If this is a local call, and we currently have the address of a
599       // function-descriptor, get the underlying code address instead.
600       uint64_t OpdStart = Out::Opd->Addr;
601       uint64_t OpdEnd = OpdStart + Out::Opd->Size;
602       bool InOpd = OpdStart <= SymVA && SymVA < OpdEnd;
603       if (InOpd)
604         SymVA = read64be(&Out::OpdBuf[SymVA - OpdStart]);
605     }
606     return SymVA - P;
607   }
608   case R_PPC_TOC:
609     return getPPC64TocBase() + A;
610   case R_RELAX_GOT_PC:
611     return Body.getVA(A) - P;
612   case R_RELAX_TLS_GD_TO_LE:
613   case R_RELAX_TLS_IE_TO_LE:
614   case R_RELAX_TLS_LD_TO_LE:
615   case R_TLS:
616     // A weak undefined TLS symbol resolves to the base of the TLS
617     // block, i.e. gets a value of zero. If we pass --gc-sections to
618     // lld and .tbss is not referenced, it gets reclaimed and we don't
619     // create a TLS program header. Therefore, we resolve this
620     // statically to zero.
621     if (Body.isTls() && Body.isUndefWeak())
622       return 0;
623     if (Target->TcbSize)
624       return Body.getVA(A) + alignTo(Target->TcbSize, Out::TlsPhdr->p_align);
625     return Body.getVA(A) - Out::TlsPhdr->p_memsz;
626   case R_RELAX_TLS_GD_TO_LE_NEG:
627   case R_NEG_TLS:
628     return Out::TlsPhdr->p_memsz - Body.getVA(A);
629   case R_SIZE:
630     return A; // Body.getSize was already folded into the addend.
631   case R_TLSDESC:
632     return InX::Got->getGlobalDynAddr(Body) + A;
633   case R_TLSDESC_PAGE:
634     return getAArch64Page(InX::Got->getGlobalDynAddr(Body) + A) -
635            getAArch64Page(P);
636   case R_TLSGD:
637     return InX::Got->getGlobalDynOffset(Body) + A - InX::Got->getSize();
638   case R_TLSGD_PC:
639     return InX::Got->getGlobalDynAddr(Body) + A - P;
640   case R_TLSLD:
641     return InX::Got->getTlsIndexOff() + A - InX::Got->getSize();
642   case R_TLSLD_PC:
643     return InX::Got->getTlsIndexVA() + A - P;
644   }
645   llvm_unreachable("Invalid expression");
646 }
647 
648 // This function applies relocations to sections without SHF_ALLOC bit.
649 // Such sections are never mapped to memory at runtime. Debug sections are
650 // an example. Relocations in non-alloc sections are much easier to
651 // handle than in allocated sections because it will never need complex
652 // treatement such as GOT or PLT (because at runtime no one refers them).
653 // So, we handle relocations for non-alloc sections directly in this
654 // function as a performance optimization.
655 template <class ELFT, class RelTy>
656 void InputSection::relocateNonAlloc(uint8_t *Buf, ArrayRef<RelTy> Rels) {
657   const unsigned Bits = sizeof(typename ELFT::uint) * 8;
658 
659   for (const RelTy &Rel : Rels) {
660     RelType Type = Rel.getType(Config->IsMips64EL);
661     uint64_t Offset = getOffset(Rel.r_offset);
662     uint8_t *BufLoc = Buf + Offset;
663     int64_t Addend = getAddend<ELFT>(Rel);
664     if (!RelTy::IsRela)
665       Addend += Target->getImplicitAddend(BufLoc, Type);
666 
667     SymbolBody &Sym = this->getFile<ELFT>()->getRelocTargetSym(Rel);
668     RelExpr Expr = Target->getRelExpr(Type, Sym, BufLoc);
669     if (Expr == R_NONE)
670       continue;
671     if (Expr != R_ABS) {
672       error(this->getLocation<ELFT>(Offset) + ": has non-ABS relocation " +
673             toString(Type) + " against symbol '" + toString(Sym) + "'");
674       return;
675     }
676 
677     if (Sym.isTls() && !Out::TlsPhdr)
678       Target->relocateOne(BufLoc, Type, 0);
679     else
680       Target->relocateOne(BufLoc, Type, SignExtend64<Bits>(Sym.getVA(Addend)));
681   }
682 }
683 
684 template <class ELFT>
685 void InputSectionBase::relocate(uint8_t *Buf, uint8_t *BufEnd) {
686   if (Flags & SHF_ALLOC) {
687     relocateAlloc(Buf, BufEnd);
688     return;
689   }
690 
691   auto *Sec = cast<InputSection>(this);
692   if (Sec->AreRelocsRela)
693     Sec->relocateNonAlloc<ELFT>(Buf, Sec->template relas<ELFT>());
694   else
695     Sec->relocateNonAlloc<ELFT>(Buf, Sec->template rels<ELFT>());
696 }
697 
698 void InputSectionBase::relocateAlloc(uint8_t *Buf, uint8_t *BufEnd) {
699   assert(Flags & SHF_ALLOC);
700   const unsigned Bits = Config->Wordsize * 8;
701 
702   for (const Relocation &Rel : Relocations) {
703     uint64_t Offset = getOffset(Rel.Offset);
704     uint8_t *BufLoc = Buf + Offset;
705     RelType Type = Rel.Type;
706 
707     uint64_t AddrLoc = getOutputSection()->Addr + Offset;
708     RelExpr Expr = Rel.Expr;
709     uint64_t TargetVA = SignExtend64(
710         getRelocTargetVA(Type, Rel.Addend, AddrLoc, *Rel.Sym, Expr), Bits);
711 
712     switch (Expr) {
713     case R_RELAX_GOT_PC:
714     case R_RELAX_GOT_PC_NOPIC:
715       Target->relaxGot(BufLoc, TargetVA);
716       break;
717     case R_RELAX_TLS_IE_TO_LE:
718       Target->relaxTlsIeToLe(BufLoc, Type, TargetVA);
719       break;
720     case R_RELAX_TLS_LD_TO_LE:
721       Target->relaxTlsLdToLe(BufLoc, Type, TargetVA);
722       break;
723     case R_RELAX_TLS_GD_TO_LE:
724     case R_RELAX_TLS_GD_TO_LE_NEG:
725       Target->relaxTlsGdToLe(BufLoc, Type, TargetVA);
726       break;
727     case R_RELAX_TLS_GD_TO_IE:
728     case R_RELAX_TLS_GD_TO_IE_ABS:
729     case R_RELAX_TLS_GD_TO_IE_PAGE_PC:
730     case R_RELAX_TLS_GD_TO_IE_END:
731       Target->relaxTlsGdToIe(BufLoc, Type, TargetVA);
732       break;
733     case R_PPC_PLT_OPD:
734       // Patch a nop (0x60000000) to a ld.
735       if (BufLoc + 8 <= BufEnd && read32be(BufLoc + 4) == 0x60000000)
736         write32be(BufLoc + 4, 0xe8410028); // ld %r2, 40(%r1)
737       LLVM_FALLTHROUGH;
738     default:
739       Target->relocateOne(BufLoc, Type, TargetVA);
740       break;
741     }
742   }
743 }
744 
745 template <class ELFT> void InputSection::writeTo(uint8_t *Buf) {
746   if (this->Type == SHT_NOBITS)
747     return;
748 
749   if (auto *S = dyn_cast<SyntheticSection>(this)) {
750     S->writeTo(Buf + OutSecOff);
751     return;
752   }
753 
754   // If -r or --emit-relocs is given, then an InputSection
755   // may be a relocation section.
756   if (this->Type == SHT_RELA) {
757     copyRelocations<ELFT>(Buf + OutSecOff,
758                           this->template getDataAs<typename ELFT::Rela>());
759     return;
760   }
761   if (this->Type == SHT_REL) {
762     copyRelocations<ELFT>(Buf + OutSecOff,
763                           this->template getDataAs<typename ELFT::Rel>());
764     return;
765   }
766 
767   // If -r is given, we may have a SHT_GROUP section.
768   if (this->Type == SHT_GROUP) {
769     copyShtGroup<ELFT>(Buf + OutSecOff);
770     return;
771   }
772 
773   // Copy section contents from source object file to output file
774   // and then apply relocations.
775   memcpy(Buf + OutSecOff, Data.data(), Data.size());
776   uint8_t *BufEnd = Buf + OutSecOff + Data.size();
777   this->relocate<ELFT>(Buf, BufEnd);
778 }
779 
780 void InputSection::replace(InputSection *Other) {
781   this->Alignment = std::max(this->Alignment, Other->Alignment);
782   Other->Repl = this->Repl;
783   Other->Live = false;
784 }
785 
786 template <class ELFT>
787 EhInputSection::EhInputSection(ObjFile<ELFT> *F,
788                                const typename ELFT::Shdr *Header,
789                                StringRef Name)
790     : InputSectionBase(F, Header, Name, InputSectionBase::EHFrame) {
791   // Mark .eh_frame sections as live by default because there are
792   // usually no relocations that point to .eh_frames. Otherwise,
793   // the garbage collector would drop all .eh_frame sections.
794   this->Live = true;
795 }
796 
797 SyntheticSection *EhInputSection::getParent() const {
798   return cast_or_null<SyntheticSection>(Parent);
799 }
800 
801 // Returns the index of the first relocation that points to a region between
802 // Begin and Begin+Size.
803 template <class IntTy, class RelTy>
804 static unsigned getReloc(IntTy Begin, IntTy Size, const ArrayRef<RelTy> &Rels,
805                          unsigned &RelocI) {
806   // Start search from RelocI for fast access. That works because the
807   // relocations are sorted in .eh_frame.
808   for (unsigned N = Rels.size(); RelocI < N; ++RelocI) {
809     const RelTy &Rel = Rels[RelocI];
810     if (Rel.r_offset < Begin)
811       continue;
812 
813     if (Rel.r_offset < Begin + Size)
814       return RelocI;
815     return -1;
816   }
817   return -1;
818 }
819 
820 // .eh_frame is a sequence of CIE or FDE records.
821 // This function splits an input section into records and returns them.
822 template <class ELFT> void EhInputSection::split() {
823   // Early exit if already split.
824   if (!this->Pieces.empty())
825     return;
826 
827   if (this->NumRelocations) {
828     if (this->AreRelocsRela)
829       split<ELFT>(this->relas<ELFT>());
830     else
831       split<ELFT>(this->rels<ELFT>());
832     return;
833   }
834   split<ELFT>(makeArrayRef<typename ELFT::Rela>(nullptr, nullptr));
835 }
836 
837 template <class ELFT, class RelTy>
838 void EhInputSection::split(ArrayRef<RelTy> Rels) {
839   ArrayRef<uint8_t> Data = this->Data;
840   unsigned RelI = 0;
841   for (size_t Off = 0, End = Data.size(); Off != End;) {
842     size_t Size = readEhRecordSize<ELFT>(this, Off);
843     this->Pieces.emplace_back(Off, this, Size, getReloc(Off, Size, Rels, RelI));
844     // The empty record is the end marker.
845     if (Size == 4)
846       break;
847     Off += Size;
848   }
849 }
850 
851 static size_t findNull(StringRef S, size_t EntSize) {
852   // Optimize the common case.
853   if (EntSize == 1)
854     return S.find(0);
855 
856   for (unsigned I = 0, N = S.size(); I != N; I += EntSize) {
857     const char *B = S.begin() + I;
858     if (std::all_of(B, B + EntSize, [](char C) { return C == 0; }))
859       return I;
860   }
861   return StringRef::npos;
862 }
863 
864 SyntheticSection *MergeInputSection::getParent() const {
865   return cast_or_null<SyntheticSection>(Parent);
866 }
867 
868 // Split SHF_STRINGS section. Such section is a sequence of
869 // null-terminated strings.
870 void MergeInputSection::splitStrings(ArrayRef<uint8_t> Data, size_t EntSize) {
871   size_t Off = 0;
872   bool IsAlloc = this->Flags & SHF_ALLOC;
873   StringRef S = toStringRef(Data);
874 
875   while (!S.empty()) {
876     size_t End = findNull(S, EntSize);
877     if (End == StringRef::npos)
878       fatal(toString(this) + ": string is not null terminated");
879     size_t Size = End + EntSize;
880 
881     Pieces.emplace_back(Off, xxHash64(S.substr(0, Size)), !IsAlloc);
882     S = S.substr(Size);
883     Off += Size;
884   }
885 }
886 
887 // Split non-SHF_STRINGS section. Such section is a sequence of
888 // fixed size records.
889 void MergeInputSection::splitNonStrings(ArrayRef<uint8_t> Data,
890                                         size_t EntSize) {
891   size_t Size = Data.size();
892   assert((Size % EntSize) == 0);
893   bool IsAlloc = this->Flags & SHF_ALLOC;
894 
895   for (size_t I = 0; I != Size; I += EntSize)
896     Pieces.emplace_back(I, xxHash64(toStringRef(Data.slice(I, EntSize))),
897                         !IsAlloc);
898 }
899 
900 template <class ELFT>
901 MergeInputSection::MergeInputSection(ObjFile<ELFT> *F,
902                                      const typename ELFT::Shdr *Header,
903                                      StringRef Name)
904     : InputSectionBase(F, Header, Name, InputSectionBase::Merge) {
905   // In order to reduce memory allocation, we assume that mergeable
906   // sections are smaller than 4 GiB, which is not an unreasonable
907   // assumption as of 2017.
908   if (Data.size() > UINT32_MAX)
909     error(toString(this) + ": section too large");
910 }
911 
912 // This function is called after we obtain a complete list of input sections
913 // that need to be linked. This is responsible to split section contents
914 // into small chunks for further processing.
915 //
916 // Note that this function is called from parallelForEach. This must be
917 // thread-safe (i.e. no memory allocation from the pools).
918 void MergeInputSection::splitIntoPieces() {
919   assert(Pieces.empty());
920 
921   if (this->Flags & SHF_STRINGS)
922     splitStrings(Data, Entsize);
923   else
924     splitNonStrings(Data, Entsize);
925 
926   if (Config->GcSections && (this->Flags & SHF_ALLOC))
927     for (uint64_t Off : LiveOffsets)
928       this->getSectionPiece(Off)->Live = true;
929 }
930 
931 // Do binary search to get a section piece at a given input offset.
932 SectionPiece *MergeInputSection::getSectionPiece(uint64_t Offset) {
933   auto *This = static_cast<const MergeInputSection *>(this);
934   return const_cast<SectionPiece *>(This->getSectionPiece(Offset));
935 }
936 
937 template <class It, class T, class Compare>
938 static It fastUpperBound(It First, It Last, const T &Value, Compare Comp) {
939   size_t Size = std::distance(First, Last);
940   assert(Size != 0);
941   while (Size != 1) {
942     size_t H = Size / 2;
943     const It MI = First + H;
944     Size -= H;
945     First = Comp(Value, *MI) ? First : First + H;
946   }
947   return Comp(Value, *First) ? First : First + 1;
948 }
949 
950 const SectionPiece *MergeInputSection::getSectionPiece(uint64_t Offset) const {
951   if (Data.size() <= Offset)
952     fatal(toString(this) + ": entry is past the end of the section");
953 
954   // Find the element this offset points to.
955   auto I = fastUpperBound(
956       Pieces.begin(), Pieces.end(), Offset,
957       [](const uint64_t &A, const SectionPiece &B) { return A < B.InputOff; });
958   --I;
959   return &*I;
960 }
961 
962 // Returns the offset in an output section for a given input offset.
963 // Because contents of a mergeable section is not contiguous in output,
964 // it is not just an addition to a base output offset.
965 uint64_t MergeInputSection::getOffset(uint64_t Offset) const {
966   if (!Live)
967     return 0;
968 
969   const SectionPiece &Piece = *getSectionPiece(Offset);
970   if (!Piece.Live)
971     return 0;
972   uint64_t Addend = Offset - Piece.InputOff;
973   return Piece.OutputOff + Addend;
974 }
975 
976 template InputSection::InputSection(ObjFile<ELF32LE> *, const ELF32LE::Shdr *,
977                                     StringRef);
978 template InputSection::InputSection(ObjFile<ELF32BE> *, const ELF32BE::Shdr *,
979                                     StringRef);
980 template InputSection::InputSection(ObjFile<ELF64LE> *, const ELF64LE::Shdr *,
981                                     StringRef);
982 template InputSection::InputSection(ObjFile<ELF64BE> *, const ELF64BE::Shdr *,
983                                     StringRef);
984 
985 template std::string InputSectionBase::getLocation<ELF32LE>(uint64_t);
986 template std::string InputSectionBase::getLocation<ELF32BE>(uint64_t);
987 template std::string InputSectionBase::getLocation<ELF64LE>(uint64_t);
988 template std::string InputSectionBase::getLocation<ELF64BE>(uint64_t);
989 
990 template std::string InputSectionBase::getSrcMsg<ELF32LE>(uint64_t);
991 template std::string InputSectionBase::getSrcMsg<ELF32BE>(uint64_t);
992 template std::string InputSectionBase::getSrcMsg<ELF64LE>(uint64_t);
993 template std::string InputSectionBase::getSrcMsg<ELF64BE>(uint64_t);
994 
995 template std::string InputSectionBase::getObjMsg<ELF32LE>(uint64_t);
996 template std::string InputSectionBase::getObjMsg<ELF32BE>(uint64_t);
997 template std::string InputSectionBase::getObjMsg<ELF64LE>(uint64_t);
998 template std::string InputSectionBase::getObjMsg<ELF64BE>(uint64_t);
999 
1000 template void InputSection::writeTo<ELF32LE>(uint8_t *);
1001 template void InputSection::writeTo<ELF32BE>(uint8_t *);
1002 template void InputSection::writeTo<ELF64LE>(uint8_t *);
1003 template void InputSection::writeTo<ELF64BE>(uint8_t *);
1004 
1005 template MergeInputSection::MergeInputSection(ObjFile<ELF32LE> *,
1006                                               const ELF32LE::Shdr *, StringRef);
1007 template MergeInputSection::MergeInputSection(ObjFile<ELF32BE> *,
1008                                               const ELF32BE::Shdr *, StringRef);
1009 template MergeInputSection::MergeInputSection(ObjFile<ELF64LE> *,
1010                                               const ELF64LE::Shdr *, StringRef);
1011 template MergeInputSection::MergeInputSection(ObjFile<ELF64BE> *,
1012                                               const ELF64BE::Shdr *, StringRef);
1013 
1014 template EhInputSection::EhInputSection(ObjFile<ELF32LE> *,
1015                                         const ELF32LE::Shdr *, StringRef);
1016 template EhInputSection::EhInputSection(ObjFile<ELF32BE> *,
1017                                         const ELF32BE::Shdr *, StringRef);
1018 template EhInputSection::EhInputSection(ObjFile<ELF64LE> *,
1019                                         const ELF64LE::Shdr *, StringRef);
1020 template EhInputSection::EhInputSection(ObjFile<ELF64BE> *,
1021                                         const ELF64BE::Shdr *, StringRef);
1022 
1023 template void EhInputSection::split<ELF32LE>();
1024 template void EhInputSection::split<ELF32BE>();
1025 template void EhInputSection::split<ELF64LE>();
1026 template void EhInputSection::split<ELF64BE>();
1027