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