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 "LinkerScript.h" 13 #include "OutputSections.h" 14 #include "SymbolTable.h" 15 #include "Target.h" 16 17 #include "llvm/ADT/SmallPtrSet.h" 18 #include "llvm/ADT/StringMap.h" 19 #include "llvm/ADT/StringSwitch.h" 20 #include "llvm/Support/FileOutputBuffer.h" 21 #include "llvm/Support/StringSaver.h" 22 #include "llvm/Support/raw_ostream.h" 23 24 using namespace llvm; 25 using namespace llvm::ELF; 26 using namespace llvm::object; 27 28 using namespace lld; 29 using namespace lld::elf; 30 31 namespace { 32 // The writer writes a SymbolTable result to a file. 33 template <class ELFT> class Writer { 34 public: 35 typedef typename ELFT::uint uintX_t; 36 typedef typename ELFT::Shdr Elf_Shdr; 37 typedef typename ELFT::Ehdr Elf_Ehdr; 38 typedef typename ELFT::Phdr Elf_Phdr; 39 typedef typename ELFT::Sym Elf_Sym; 40 typedef typename ELFT::SymRange Elf_Sym_Range; 41 typedef typename ELFT::Rela Elf_Rela; 42 Writer(SymbolTable<ELFT> &S) : Symtab(S) {} 43 void run(); 44 45 private: 46 // This describes a program header entry. 47 // Each contains type, access flags and range of output sections that will be 48 // placed in it. 49 struct Phdr { 50 Phdr(unsigned Type, unsigned Flags) { 51 H.p_type = Type; 52 H.p_flags = Flags; 53 } 54 Elf_Phdr H = {}; 55 OutputSectionBase<ELFT> *First = nullptr; 56 OutputSectionBase<ELFT> *Last = nullptr; 57 }; 58 59 void copyLocalSymbols(); 60 void addReservedSymbols(); 61 bool createSections(); 62 void addPredefinedSections(); 63 bool needsGot(); 64 65 template <class RelTy> 66 void scanRelocs(InputSectionBase<ELFT> &C, 67 iterator_range<const RelTy *> Rels); 68 69 void scanRelocs(InputSection<ELFT> &C); 70 void scanRelocs(InputSectionBase<ELFT> &S, const Elf_Shdr &RelSec); 71 void createPhdrs(); 72 void assignAddresses(); 73 void assignAddressesRelocatable(); 74 void fixAbsoluteSymbols(); 75 bool openFile(); 76 void writeHeader(); 77 void writeSections(); 78 void writeBuildId(); 79 bool isDiscarded(InputSectionBase<ELFT> *IS) const; 80 StringRef getOutputSectionName(InputSectionBase<ELFT> *S) const; 81 bool needsInterpSection() const { 82 return !Symtab.getSharedFiles().empty() && !Config->DynamicLinker.empty(); 83 } 84 bool isOutputDynamic() const { 85 return !Symtab.getSharedFiles().empty() || Config->Pic; 86 } 87 88 void ensureBss(); 89 void addCommonSymbols(std::vector<DefinedCommon *> &Syms); 90 void addCopyRelSymbols(std::vector<SharedSymbol<ELFT> *> &Syms); 91 92 std::unique_ptr<llvm::FileOutputBuffer> Buffer; 93 94 BumpPtrAllocator Alloc; 95 std::vector<OutputSectionBase<ELFT> *> OutputSections; 96 std::vector<std::unique_ptr<OutputSectionBase<ELFT>>> OwningSections; 97 98 // We create a section for the ELF header and one for the program headers. 99 ArrayRef<OutputSectionBase<ELFT> *> getSections() const { 100 return makeArrayRef(OutputSections).slice(dummySectionsNum()); 101 } 102 unsigned getNumSections() const { 103 return OutputSections.size() + 1 - dummySectionsNum(); 104 } 105 // Usually there are 2 dummies sections: ELF header and program header. 106 // Relocatable output does not require program headers to be created. 107 unsigned dummySectionsNum() const { return Config->Relocatable ? 1 : 2; } 108 109 void addRelIpltSymbols(); 110 void addStartEndSymbols(); 111 void addStartStopSymbols(OutputSectionBase<ELFT> *Sec); 112 113 SymbolTable<ELFT> &Symtab; 114 std::vector<Phdr> Phdrs; 115 116 uintX_t FileSize; 117 uintX_t SectionHeaderOff; 118 119 // Flag to force GOT to be in output if we have relocations 120 // that relies on its address. 121 bool HasGotOffRel = false; 122 }; 123 } // anonymous namespace 124 125 template <class ELFT> void elf::writeResult(SymbolTable<ELFT> *Symtab) { 126 typedef typename ELFT::uint uintX_t; 127 128 // Create singleton output sections. 129 DynamicSection<ELFT> Dynamic(*Symtab); 130 EhFrameHeader<ELFT> EhFrameHdr; 131 GotSection<ELFT> Got; 132 InterpSection<ELFT> Interp; 133 PltSection<ELFT> Plt; 134 RelocationSection<ELFT> RelaDyn(Config->Rela ? ".rela.dyn" : ".rel.dyn"); 135 StringTableSection<ELFT> DynStrTab(".dynstr", true); 136 StringTableSection<ELFT> ShStrTab(".shstrtab", false); 137 SymbolTableSection<ELFT> DynSymTab(*Symtab, DynStrTab); 138 139 OutputSectionBase<ELFT> ElfHeader("", 0, SHF_ALLOC); 140 OutputSectionBase<ELFT> ProgramHeaders("", 0, SHF_ALLOC); 141 ProgramHeaders.updateAlign(sizeof(uintX_t)); 142 143 // Instantiate optional output sections if they are needed. 144 std::unique_ptr<BuildIdSection<ELFT>> BuildId; 145 std::unique_ptr<GnuHashTableSection<ELFT>> GnuHashTab; 146 std::unique_ptr<GotPltSection<ELFT>> GotPlt; 147 std::unique_ptr<HashTableSection<ELFT>> HashTab; 148 std::unique_ptr<RelocationSection<ELFT>> RelaPlt; 149 std::unique_ptr<StringTableSection<ELFT>> StrTab; 150 std::unique_ptr<SymbolTableSection<ELFT>> SymTabSec; 151 std::unique_ptr<OutputSection<ELFT>> MipsRldMap; 152 153 if (Config->BuildId) 154 BuildId.reset(new BuildIdSection<ELFT>); 155 if (Config->GnuHash) 156 GnuHashTab.reset(new GnuHashTableSection<ELFT>); 157 if (Config->SysvHash) 158 HashTab.reset(new HashTableSection<ELFT>); 159 if (Target->UseLazyBinding) { 160 StringRef S = Config->Rela ? ".rela.plt" : ".rel.plt"; 161 GotPlt.reset(new GotPltSection<ELFT>); 162 RelaPlt.reset(new RelocationSection<ELFT>(S)); 163 } 164 if (!Config->StripAll) { 165 StrTab.reset(new StringTableSection<ELFT>(".strtab", false)); 166 SymTabSec.reset(new SymbolTableSection<ELFT>(*Symtab, *StrTab)); 167 } 168 if (Config->EMachine == EM_MIPS && !Config->Shared) { 169 // This is a MIPS specific section to hold a space within the data segment 170 // of executable file which is pointed to by the DT_MIPS_RLD_MAP entry. 171 // See "Dynamic section" in Chapter 5 in the following document: 172 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 173 MipsRldMap.reset(new OutputSection<ELFT>(".rld_map", SHT_PROGBITS, 174 SHF_ALLOC | SHF_WRITE)); 175 MipsRldMap->setSize(sizeof(uintX_t)); 176 MipsRldMap->updateAlign(sizeof(uintX_t)); 177 } 178 179 Out<ELFT>::BuildId = BuildId.get(); 180 Out<ELFT>::DynStrTab = &DynStrTab; 181 Out<ELFT>::DynSymTab = &DynSymTab; 182 Out<ELFT>::Dynamic = &Dynamic; 183 Out<ELFT>::EhFrameHdr = &EhFrameHdr; 184 Out<ELFT>::GnuHashTab = GnuHashTab.get(); 185 Out<ELFT>::Got = &Got; 186 Out<ELFT>::GotPlt = GotPlt.get(); 187 Out<ELFT>::HashTab = HashTab.get(); 188 Out<ELFT>::Interp = &Interp; 189 Out<ELFT>::Plt = &Plt; 190 Out<ELFT>::RelaDyn = &RelaDyn; 191 Out<ELFT>::RelaPlt = RelaPlt.get(); 192 Out<ELFT>::ShStrTab = &ShStrTab; 193 Out<ELFT>::StrTab = StrTab.get(); 194 Out<ELFT>::SymTab = SymTabSec.get(); 195 Out<ELFT>::Bss = nullptr; 196 Out<ELFT>::MipsRldMap = MipsRldMap.get(); 197 Out<ELFT>::Opd = nullptr; 198 Out<ELFT>::OpdBuf = nullptr; 199 Out<ELFT>::TlsPhdr = nullptr; 200 Out<ELFT>::ElfHeader = &ElfHeader; 201 Out<ELFT>::ProgramHeaders = &ProgramHeaders; 202 203 Writer<ELFT>(*Symtab).run(); 204 } 205 206 // The main function of the writer. 207 template <class ELFT> void Writer<ELFT>::run() { 208 if (!Config->DiscardAll) 209 copyLocalSymbols(); 210 addReservedSymbols(); 211 if (!createSections()) 212 return; 213 if (!Config->Relocatable) { 214 createPhdrs(); 215 assignAddresses(); 216 } else { 217 assignAddressesRelocatable(); 218 } 219 fixAbsoluteSymbols(); 220 if (!openFile()) 221 return; 222 writeHeader(); 223 writeSections(); 224 writeBuildId(); 225 if (HasError) 226 return; 227 check(Buffer->commit()); 228 } 229 230 namespace { 231 template <bool Is64Bits> struct SectionKey { 232 typedef typename std::conditional<Is64Bits, uint64_t, uint32_t>::type uintX_t; 233 StringRef Name; 234 uint32_t Type; 235 uintX_t Flags; 236 uintX_t Alignment; 237 }; 238 } 239 namespace llvm { 240 template <bool Is64Bits> struct DenseMapInfo<SectionKey<Is64Bits>> { 241 static SectionKey<Is64Bits> getEmptyKey() { 242 return SectionKey<Is64Bits>{DenseMapInfo<StringRef>::getEmptyKey(), 0, 0, 243 0}; 244 } 245 static SectionKey<Is64Bits> getTombstoneKey() { 246 return SectionKey<Is64Bits>{DenseMapInfo<StringRef>::getTombstoneKey(), 0, 247 0, 0}; 248 } 249 static unsigned getHashValue(const SectionKey<Is64Bits> &Val) { 250 return hash_combine(Val.Name, Val.Type, Val.Flags, Val.Alignment); 251 } 252 static bool isEqual(const SectionKey<Is64Bits> &LHS, 253 const SectionKey<Is64Bits> &RHS) { 254 return DenseMapInfo<StringRef>::isEqual(LHS.Name, RHS.Name) && 255 LHS.Type == RHS.Type && LHS.Flags == RHS.Flags && 256 LHS.Alignment == RHS.Alignment; 257 } 258 }; 259 } 260 261 // Returns the number of relocations processed. 262 template <class ELFT, class RelT> 263 static unsigned handleTlsRelocation(uint32_t Type, SymbolBody &Body, 264 InputSectionBase<ELFT> &C, RelT &RI) { 265 if (Target->pointsToLocalDynamicGotEntry(Type)) { 266 if (Target->canRelaxTls(Type, nullptr)) 267 return 1; 268 if (Out<ELFT>::Got->addTlsIndex()) 269 Out<ELFT>::RelaDyn->addReloc({Target->TlsModuleIndexRel, 270 DynamicReloc<ELFT>::Off_LTlsIndex, 271 nullptr}); 272 return 1; 273 } 274 275 if (!Body.IsTls) 276 return 0; 277 278 if (Target->isTlsGlobalDynamicRel(Type)) { 279 if (!Target->canRelaxTls(Type, &Body)) { 280 if (Out<ELFT>::Got->addDynTlsEntry(Body)) { 281 Out<ELFT>::RelaDyn->addReloc({Target->TlsModuleIndexRel, 282 DynamicReloc<ELFT>::Off_GTlsIndex, 283 &Body}); 284 Out<ELFT>::RelaDyn->addReloc( 285 {Target->TlsOffsetRel, DynamicReloc<ELFT>::Off_GTlsOffset, &Body}); 286 } 287 return 1; 288 } 289 if (!Body.isPreemptible()) 290 return 1; 291 Out<ELFT>::Got->addEntry(Body); 292 Out<ELFT>::RelaDyn->addReloc( 293 {Target->TlsGotRel, DynamicReloc<ELFT>::Off_Got, false, &Body}); 294 return 2; 295 } 296 return 0; 297 } 298 299 // The reason we have to do this early scan is as follows 300 // * To mmap the output file, we need to know the size 301 // * For that, we need to know how many dynamic relocs we will have. 302 // It might be possible to avoid this by outputting the file with write: 303 // * Write the allocated output sections, computing addresses. 304 // * Apply relocations, recording which ones require a dynamic reloc. 305 // * Write the dynamic relocations. 306 // * Write the rest of the file. 307 // This would have some drawbacks. For example, we would only know if .rela.dyn 308 // is needed after applying relocations. If it is, it will go after rw and rx 309 // sections. Given that it is ro, we will need an extra PT_LOAD. This 310 // complicates things for the dynamic linker and means we would have to reserve 311 // space for the extra PT_LOAD even if we end up not using it. 312 template <class ELFT> 313 template <class RelTy> 314 void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &C, 315 iterator_range<const RelTy *> Rels) { 316 const elf::ObjectFile<ELFT> &File = *C.getFile(); 317 for (auto I = Rels.begin(), E = Rels.end(); I != E; ++I) { 318 const RelTy &RI = *I; 319 uint32_t SymIndex = RI.getSymbol(Config->Mips64EL); 320 SymbolBody &OrigBody = File.getSymbolBody(SymIndex); 321 SymbolBody &Body = OrigBody.repl(); 322 uint32_t Type = RI.getType(Config->Mips64EL); 323 324 // Ignore "hint" relocation because it is for optional code optimization. 325 if (Target->isHintRel(Type)) 326 continue; 327 328 if (Target->isGotRelative(Type)) 329 HasGotOffRel = true; 330 331 // Set "used" bit for --as-needed. 332 if (OrigBody.isUndefined() && !OrigBody.isWeak()) 333 if (auto *S = dyn_cast<SharedSymbol<ELFT>>(&Body)) 334 S->File->IsUsed = true; 335 336 bool Preemptible = Body.isPreemptible(); 337 if (unsigned Processed = handleTlsRelocation<ELFT>(Type, Body, C, RI)) { 338 I += (Processed - 1); 339 continue; 340 } 341 342 if (Target->needsDynRelative(Type)) 343 Out<ELFT>::RelaDyn->addReloc({Target->RelativeRel, &C, RI.r_offset, true, 344 &Body, getAddend<ELFT>(RI)}); 345 346 // If a symbol in a DSO is referenced directly instead of through GOT, 347 // we need to create a copy relocation for the symbol. 348 if (auto *B = dyn_cast<SharedSymbol<ELFT>>(&Body)) { 349 if (B->needsCopy()) 350 continue; 351 if (Target->needsCopyRel<ELFT>(Type, *B)) { 352 B->NeedsCopyOrPltAddr = true; 353 Out<ELFT>::RelaDyn->addReloc( 354 {Target->CopyRel, DynamicReloc<ELFT>::Off_Bss, B}); 355 continue; 356 } 357 } 358 359 // An STT_GNU_IFUNC symbol always uses a PLT entry, and all references 360 // to the symbol go through the PLT. This is true even for a local 361 // symbol, although local symbols normally do not require PLT entries. 362 if (Body.IsGnuIFunc) { 363 if (Body.isInPlt()) 364 continue; 365 Out<ELFT>::Plt->addEntry(Body); 366 if (Target->UseLazyBinding) { 367 Out<ELFT>::GotPlt->addEntry(Body); 368 Out<ELFT>::RelaPlt->addReloc( 369 {Preemptible ? Target->PltRel : Target->IRelativeRel, 370 DynamicReloc<ELFT>::Off_GotPlt, !Preemptible, &Body}); 371 } else { 372 Out<ELFT>::Got->addEntry(Body); 373 Out<ELFT>::RelaDyn->addReloc( 374 {Preemptible ? Target->PltRel : Target->IRelativeRel, 375 DynamicReloc<ELFT>::Off_Got, !Preemptible, &Body}); 376 } 377 continue; 378 } 379 380 // If a relocation needs PLT, we create a PLT and a GOT slot 381 // for the symbol. 382 TargetInfo::PltNeed NeedPlt = Target->needsPlt(Type, Body); 383 if (NeedPlt) { 384 if (NeedPlt == TargetInfo::Plt_Implicit) 385 Body.NeedsCopyOrPltAddr = true; 386 if (Body.isInPlt()) 387 continue; 388 Out<ELFT>::Plt->addEntry(Body); 389 390 if (Target->UseLazyBinding) { 391 Out<ELFT>::GotPlt->addEntry(Body); 392 Out<ELFT>::RelaPlt->addReloc( 393 {Target->PltRel, DynamicReloc<ELFT>::Off_GotPlt, &Body}); 394 } else { 395 if (Body.isInGot()) 396 continue; 397 Out<ELFT>::Got->addEntry(Body); 398 Out<ELFT>::RelaDyn->addReloc( 399 {Target->GotRel, DynamicReloc<ELFT>::Off_Got, &Body}); 400 } 401 continue; 402 } 403 404 // If a relocation needs GOT, we create a GOT slot for the symbol. 405 if (Target->needsGot(Type, Body)) { 406 if (Body.isInGot()) 407 continue; 408 Out<ELFT>::Got->addEntry(Body); 409 410 if (Config->EMachine == EM_MIPS) 411 // MIPS ABI has special rules to process GOT entries 412 // and doesn't require relocation entries for them. 413 // See "Global Offset Table" in Chapter 5 in the following document 414 // for detailed description: 415 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 416 continue; 417 418 bool Dynrel = Config->Pic && !Target->isRelRelative(Type) && 419 !Target->isSizeRel(Type); 420 if (Preemptible || Dynrel) { 421 uint32_t DynType; 422 if (Body.IsTls) 423 DynType = Target->TlsGotRel; 424 else if (Preemptible) 425 DynType = Target->GotRel; 426 else 427 DynType = Target->RelativeRel; 428 Out<ELFT>::RelaDyn->addReloc( 429 {DynType, DynamicReloc<ELFT>::Off_Got, !Preemptible, &Body}); 430 } 431 continue; 432 } 433 434 if (Config->EMachine == EM_MIPS) { 435 if (Type == R_MIPS_LO16) 436 // Ignore R_MIPS_LO16 relocation. If it is a pair for R_MIPS_GOT16 we 437 // already completed all required action (GOT entry allocation) when 438 // handle R_MIPS_GOT16a. If it is a pair for R_MIPS_HI16 against 439 // _gp_disp it does not require dynamic relocation. If its a pair for 440 // R_MIPS_HI16 against a regular symbol it does not require dynamic 441 // relocation too because that case is possible for executable file 442 // linking only. 443 continue; 444 if (&Body == Config->MipsGpDisp || &Body == Config->MipsLocalGp) 445 // MIPS _gp_disp designates offset between start of function and 'gp' 446 // pointer into GOT. __gnu_local_gp is equal to the current value of 447 // the 'gp'. Therefore any relocations against them do not require 448 // dynamic relocation. 449 continue; 450 } 451 452 if (Preemptible) { 453 // We don't know anything about the finaly symbol. Just ask the dynamic 454 // linker to handle the relocation for us. 455 Out<ELFT>::RelaDyn->addReloc({Target->getDynRel(Type), &C, RI.r_offset, 456 false, &Body, getAddend<ELFT>(RI)}); 457 continue; 458 } 459 460 // We know that this is the final symbol. If the program being produced 461 // is position independent, the final value is still not known. 462 // If the relocation depends on the symbol value (not the size or distances 463 // in the output), we still need some help from the dynamic linker. 464 // We can however do better than just copying the incoming relocation. We 465 // can process some of it and and just ask the dynamic linker to add the 466 // load address. 467 if (!Config->Pic || Target->isRelRelative(Type) || Target->isSizeRel(Type)) 468 continue; 469 470 uintX_t Addend = getAddend<ELFT>(RI); 471 if (Config->EMachine == EM_PPC64 && RI.getType(false) == R_PPC64_TOC) { 472 Out<ELFT>::RelaDyn->addReloc({R_PPC64_RELATIVE, &C, RI.r_offset, false, 473 nullptr, 474 (uintX_t)getPPC64TocBase() + Addend}); 475 continue; 476 } 477 Out<ELFT>::RelaDyn->addReloc( 478 {Target->RelativeRel, &C, RI.r_offset, true, &Body, Addend}); 479 } 480 } 481 482 template <class ELFT> void Writer<ELFT>::scanRelocs(InputSection<ELFT> &C) { 483 if (C.getSectionHdr()->sh_flags & SHF_ALLOC) 484 for (const Elf_Shdr *RelSec : C.RelocSections) 485 scanRelocs(C, *RelSec); 486 } 487 488 template <class ELFT> 489 void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &S, 490 const Elf_Shdr &RelSec) { 491 ELFFile<ELFT> &EObj = S.getFile()->getObj(); 492 if (RelSec.sh_type == SHT_RELA) 493 scanRelocs(S, EObj.relas(&RelSec)); 494 else 495 scanRelocs(S, EObj.rels(&RelSec)); 496 } 497 498 template <class ELFT> 499 static void reportUndefined(SymbolTable<ELFT> &Symtab, SymbolBody *Sym) { 500 if ((Config->Relocatable || Config->Shared) && !Config->NoUndefined) 501 return; 502 503 std::string Msg = "undefined symbol: " + Sym->getName().str(); 504 if (InputFile *File = Symtab.findFile(Sym)) 505 Msg += " in " + File->getName().str(); 506 if (Config->NoinhibitExec) 507 warning(Msg); 508 else 509 error(Msg); 510 } 511 512 template <class ELFT> 513 static bool shouldKeepInSymtab(const elf::ObjectFile<ELFT> &File, 514 StringRef SymName, 515 const typename ELFT::Sym &Sym) { 516 if (Sym.getType() == STT_FILE) 517 return false; 518 519 // We keep sections in symtab for relocatable output. 520 if (Sym.getType() == STT_SECTION) 521 return Config->Relocatable; 522 523 InputSectionBase<ELFT> *Sec = File.getSection(Sym); 524 // If sym references a section in a discarded group, don't keep it. 525 if (Sec == InputSection<ELFT>::Discarded) 526 return false; 527 528 if (Config->DiscardNone) 529 return true; 530 531 // In ELF assembly .L symbols are normally discarded by the assembler. 532 // If the assembler fails to do so, the linker discards them if 533 // * --discard-locals is used. 534 // * The symbol is in a SHF_MERGE section, which is normally the reason for 535 // the assembler keeping the .L symbol. 536 if (!SymName.startswith(".L") && !SymName.empty()) 537 return true; 538 539 if (Config->DiscardLocals) 540 return false; 541 542 return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE); 543 } 544 545 // Local symbols are not in the linker's symbol table. This function scans 546 // each object file's symbol table to copy local symbols to the output. 547 template <class ELFT> void Writer<ELFT>::copyLocalSymbols() { 548 if (!Out<ELFT>::SymTab) 549 return; 550 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 551 Symtab.getObjectFiles()) { 552 for (SymbolBody *B : F->getLocalSymbols()) { 553 const Elf_Sym &Sym = cast<DefinedRegular<ELFT>>(B)->Sym; 554 StringRef SymName = check(Sym.getName(F->getStringTable())); 555 if (!shouldKeepInSymtab<ELFT>(*F, SymName, Sym)) 556 continue; 557 if (Sym.st_shndx != SHN_ABS) 558 if (!F->getSection(Sym)->Live) 559 continue; 560 ++Out<ELFT>::SymTab->NumLocals; 561 if (Config->Relocatable) 562 B->DynsymIndex = Out<ELFT>::SymTab->NumLocals; 563 F->KeptLocalSyms.push_back(std::make_pair( 564 &Sym, Out<ELFT>::SymTab->StrTabSec.addString(SymName))); 565 } 566 } 567 } 568 569 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections that 570 // we would like to make sure appear is a specific order to maximize their 571 // coverage by a single signed 16-bit offset from the TOC base pointer. 572 // Conversely, the special .tocbss section should be first among all SHT_NOBITS 573 // sections. This will put it next to the loaded special PPC64 sections (and, 574 // thus, within reach of the TOC base pointer). 575 static int getPPC64SectionRank(StringRef SectionName) { 576 return StringSwitch<int>(SectionName) 577 .Case(".tocbss", 0) 578 .Case(".branch_lt", 2) 579 .Case(".toc", 3) 580 .Case(".toc1", 4) 581 .Case(".opd", 5) 582 .Default(1); 583 } 584 585 template <class ELFT> static bool isRelroSection(OutputSectionBase<ELFT> *Sec) { 586 if (!Config->ZRelro) 587 return false; 588 typename OutputSectionBase<ELFT>::uintX_t Flags = Sec->getFlags(); 589 if (!(Flags & SHF_ALLOC) || !(Flags & SHF_WRITE)) 590 return false; 591 if (Flags & SHF_TLS) 592 return true; 593 uint32_t Type = Sec->getType(); 594 if (Type == SHT_INIT_ARRAY || Type == SHT_FINI_ARRAY || 595 Type == SHT_PREINIT_ARRAY) 596 return true; 597 if (Sec == Out<ELFT>::GotPlt) 598 return Config->ZNow; 599 if (Sec == Out<ELFT>::Dynamic || Sec == Out<ELFT>::Got) 600 return true; 601 StringRef S = Sec->getName(); 602 return S == ".data.rel.ro" || S == ".ctors" || S == ".dtors" || S == ".jcr" || 603 S == ".eh_frame"; 604 } 605 606 // Output section ordering is determined by this function. 607 template <class ELFT> 608 static bool compareSections(OutputSectionBase<ELFT> *A, 609 OutputSectionBase<ELFT> *B) { 610 typedef typename ELFT::uint uintX_t; 611 612 int Comp = Script->compareSections(A->getName(), B->getName()); 613 if (Comp != 0) 614 return Comp < 0; 615 616 uintX_t AFlags = A->getFlags(); 617 uintX_t BFlags = B->getFlags(); 618 619 // Allocatable sections go first to reduce the total PT_LOAD size and 620 // so debug info doesn't change addresses in actual code. 621 bool AIsAlloc = AFlags & SHF_ALLOC; 622 bool BIsAlloc = BFlags & SHF_ALLOC; 623 if (AIsAlloc != BIsAlloc) 624 return AIsAlloc; 625 626 // We don't have any special requirements for the relative order of 627 // two non allocatable sections. 628 if (!AIsAlloc) 629 return false; 630 631 // We want the read only sections first so that they go in the PT_LOAD 632 // covering the program headers at the start of the file. 633 bool AIsWritable = AFlags & SHF_WRITE; 634 bool BIsWritable = BFlags & SHF_WRITE; 635 if (AIsWritable != BIsWritable) 636 return BIsWritable; 637 638 // For a corresponding reason, put non exec sections first (the program 639 // header PT_LOAD is not executable). 640 bool AIsExec = AFlags & SHF_EXECINSTR; 641 bool BIsExec = BFlags & SHF_EXECINSTR; 642 if (AIsExec != BIsExec) 643 return BIsExec; 644 645 // If we got here we know that both A and B are in the same PT_LOAD. 646 647 // The TLS initialization block needs to be a single contiguous block in a R/W 648 // PT_LOAD, so stick TLS sections directly before R/W sections. The TLS NOBITS 649 // sections are placed here as they don't take up virtual address space in the 650 // PT_LOAD. 651 bool AIsTls = AFlags & SHF_TLS; 652 bool BIsTls = BFlags & SHF_TLS; 653 if (AIsTls != BIsTls) 654 return AIsTls; 655 656 // The next requirement we have is to put nobits sections last. The 657 // reason is that the only thing the dynamic linker will see about 658 // them is a p_memsz that is larger than p_filesz. Seeing that it 659 // zeros the end of the PT_LOAD, so that has to correspond to the 660 // nobits sections. 661 bool AIsNoBits = A->getType() == SHT_NOBITS; 662 bool BIsNoBits = B->getType() == SHT_NOBITS; 663 if (AIsNoBits != BIsNoBits) 664 return BIsNoBits; 665 666 // We place RelRo section before plain r/w ones. 667 bool AIsRelRo = isRelroSection(A); 668 bool BIsRelRo = isRelroSection(B); 669 if (AIsRelRo != BIsRelRo) 670 return AIsRelRo; 671 672 // Some architectures have additional ordering restrictions for sections 673 // within the same PT_LOAD. 674 if (Config->EMachine == EM_PPC64) 675 return getPPC64SectionRank(A->getName()) < 676 getPPC64SectionRank(B->getName()); 677 678 return false; 679 } 680 681 // The .bss section does not exist if no input file has a .bss section. 682 // This function creates one if that's the case. 683 template <class ELFT> void Writer<ELFT>::ensureBss() { 684 if (Out<ELFT>::Bss) 685 return; 686 Out<ELFT>::Bss = 687 new OutputSection<ELFT>(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE); 688 OwningSections.emplace_back(Out<ELFT>::Bss); 689 OutputSections.push_back(Out<ELFT>::Bss); 690 } 691 692 // Until this function is called, common symbols do not belong to any section. 693 // This function adds them to end of BSS section. 694 template <class ELFT> 695 void Writer<ELFT>::addCommonSymbols(std::vector<DefinedCommon *> &Syms) { 696 if (Syms.empty()) 697 return; 698 699 // Sort the common symbols by alignment as an heuristic to pack them better. 700 std::stable_sort(Syms.begin(), Syms.end(), 701 [](const DefinedCommon *A, const DefinedCommon *B) { 702 return A->Alignment > B->Alignment; 703 }); 704 705 ensureBss(); 706 uintX_t Off = Out<ELFT>::Bss->getSize(); 707 for (DefinedCommon *C : Syms) { 708 Off = alignTo(Off, C->Alignment); 709 Out<ELFT>::Bss->updateAlign(C->Alignment); 710 C->OffsetInBss = Off; 711 Off += C->Size; 712 } 713 714 Out<ELFT>::Bss->setSize(Off); 715 } 716 717 template <class ELFT> static uint32_t getAlignment(SharedSymbol<ELFT> *SS) { 718 typedef typename ELFFile<ELFT>::uintX_t uintX_t; 719 720 uintX_t SecAlign = SS->File->getSection(SS->Sym)->sh_addralign; 721 uintX_t SymValue = SS->Sym.st_value; 722 int TrailingZeros = std::min(countTrailingZeros(SecAlign), 723 countTrailingZeros(SymValue)); 724 return 1 << TrailingZeros; 725 } 726 727 // Reserve space in .bss for copy relocations. 728 template <class ELFT> 729 void Writer<ELFT>::addCopyRelSymbols(std::vector<SharedSymbol<ELFT> *> &Syms) { 730 if (Syms.empty()) 731 return; 732 ensureBss(); 733 uintX_t Off = Out<ELFT>::Bss->getSize(); 734 uintX_t MaxAlign = Out<ELFT>::Bss->getAlign(); 735 for (SharedSymbol<ELFT> *SS : Syms) { 736 uintX_t Align = getAlignment(SS); 737 Off = alignTo(Off, Align); 738 SS->OffsetInBss = Off; 739 Off += SS->Sym.st_size; 740 MaxAlign = std::max(MaxAlign, Align); 741 } 742 Out<ELFT>::Bss->setSize(Off); 743 Out<ELFT>::Bss->updateAlign(MaxAlign); 744 } 745 746 template <class ELFT> 747 StringRef Writer<ELFT>::getOutputSectionName(InputSectionBase<ELFT> *S) const { 748 StringRef Dest = Script->getOutputSection<ELFT>(S); 749 if (!Dest.empty()) 750 return Dest; 751 752 StringRef Name = S->getSectionName(); 753 for (StringRef V : {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.", 754 ".init_array.", ".fini_array.", ".ctors.", ".dtors.", 755 ".tbss.", ".gcc_except_table.", ".tdata."}) 756 if (Name.startswith(V)) 757 return V.drop_back(); 758 return Name; 759 } 760 761 template <class ELFT> 762 void reportDiscarded(InputSectionBase<ELFT> *IS, 763 const std::unique_ptr<elf::ObjectFile<ELFT>> &File) { 764 if (!Config->PrintGcSections || !IS || IS->Live) 765 return; 766 llvm::errs() << "removing unused section from '" << IS->getSectionName() 767 << "' in file '" << File->getName() << "'\n"; 768 } 769 770 template <class ELFT> 771 bool Writer<ELFT>::isDiscarded(InputSectionBase<ELFT> *S) const { 772 return !S || S == InputSection<ELFT>::Discarded || !S->Live || 773 Script->isDiscarded(S); 774 } 775 776 // The beginning and the ending of .rel[a].plt section are marked 777 // with __rel[a]_iplt_{start,end} symbols if it is a statically linked 778 // executable. The runtime needs these symbols in order to resolve 779 // all IRELATIVE relocs on startup. For dynamic executables, we don't 780 // need these symbols, since IRELATIVE relocs are resolved through GOT 781 // and PLT. For details, see http://www.airs.com/blog/archives/403. 782 template <class ELFT> 783 void Writer<ELFT>::addRelIpltSymbols() { 784 if (isOutputDynamic() || !Out<ELFT>::RelaPlt) 785 return; 786 StringRef S = Config->Rela ? "__rela_iplt_start" : "__rel_iplt_start"; 787 if (Symtab.find(S)) 788 Symtab.addAbsolute(S, ElfSym<ELFT>::RelaIpltStart); 789 790 S = Config->Rela ? "__rela_iplt_end" : "__rel_iplt_end"; 791 if (Symtab.find(S)) 792 Symtab.addAbsolute(S, ElfSym<ELFT>::RelaIpltEnd); 793 } 794 795 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) { 796 if (!B.isUsedInRegularObj()) 797 return false; 798 799 if (auto *D = dyn_cast<DefinedRegular<ELFT>>(&B)) { 800 // Don't include synthetic symbols like __init_array_start in every output. 801 if (&D->Sym == &ElfSym<ELFT>::Ignored) 802 return false; 803 // Exclude symbols pointing to garbage-collected sections. 804 if (D->Section && !D->Section->Live) 805 return false; 806 } 807 return true; 808 } 809 810 static bool includeInDynsym(const SymbolBody &B) { 811 uint8_t V = B.getVisibility(); 812 if (V != STV_DEFAULT && V != STV_PROTECTED) 813 return false; 814 if (Config->ExportDynamic || Config->Shared) 815 return true; 816 return B.MustBeInDynSym; 817 } 818 819 // This class knows how to create an output section for a given 820 // input section. Output section type is determined by various 821 // factors, including input section's sh_flags, sh_type and 822 // linker scripts. 823 namespace { 824 template <class ELFT> class OutputSectionFactory { 825 typedef typename ELFT::Shdr Elf_Shdr; 826 typedef typename ELFT::uint uintX_t; 827 828 public: 829 std::pair<OutputSectionBase<ELFT> *, bool> create(InputSectionBase<ELFT> *C, 830 StringRef OutsecName); 831 832 OutputSectionBase<ELFT> *lookup(StringRef Name, uint32_t Type, uintX_t Flags); 833 834 private: 835 SectionKey<ELFT::Is64Bits> createKey(InputSectionBase<ELFT> *C, 836 StringRef OutsecName); 837 838 SmallDenseMap<SectionKey<ELFT::Is64Bits>, OutputSectionBase<ELFT> *> Map; 839 }; 840 } 841 842 template <class ELFT> 843 std::pair<OutputSectionBase<ELFT> *, bool> 844 OutputSectionFactory<ELFT>::create(InputSectionBase<ELFT> *C, 845 StringRef OutsecName) { 846 SectionKey<ELFT::Is64Bits> Key = createKey(C, OutsecName); 847 OutputSectionBase<ELFT> *&Sec = Map[Key]; 848 if (Sec) 849 return {Sec, false}; 850 851 switch (C->SectionKind) { 852 case InputSectionBase<ELFT>::Regular: 853 Sec = new OutputSection<ELFT>(Key.Name, Key.Type, Key.Flags); 854 break; 855 case InputSectionBase<ELFT>::EHFrame: 856 Sec = new EHOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags); 857 break; 858 case InputSectionBase<ELFT>::Merge: 859 Sec = new MergeOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags, 860 Key.Alignment); 861 break; 862 case InputSectionBase<ELFT>::MipsReginfo: 863 Sec = new MipsReginfoOutputSection<ELFT>(); 864 break; 865 } 866 return {Sec, true}; 867 } 868 869 template <class ELFT> 870 OutputSectionBase<ELFT> *OutputSectionFactory<ELFT>::lookup(StringRef Name, 871 uint32_t Type, 872 uintX_t Flags) { 873 return Map.lookup({Name, Type, Flags, 0}); 874 } 875 876 template <class ELFT> 877 SectionKey<ELFT::Is64Bits> 878 OutputSectionFactory<ELFT>::createKey(InputSectionBase<ELFT> *C, 879 StringRef OutsecName) { 880 const Elf_Shdr *H = C->getSectionHdr(); 881 uintX_t Flags = H->sh_flags & ~SHF_GROUP; 882 883 // For SHF_MERGE we create different output sections for each alignment. 884 // This makes each output section simple and keeps a single level mapping from 885 // input to output. 886 uintX_t Alignment = 0; 887 if (isa<MergeInputSection<ELFT>>(C)) { 888 Alignment = H->sh_addralign; 889 if (H->sh_entsize > Alignment) 890 Alignment = H->sh_entsize; 891 } 892 893 // GNU as can give .eh_frame secion type SHT_PROGBITS or SHT_X86_64_UNWIND 894 // depending on the construct. We want to canonicalize it so that 895 // there is only one .eh_frame in the end. 896 uint32_t Type = H->sh_type; 897 if (Type == SHT_PROGBITS && Config->EMachine == EM_X86_64 && 898 isa<EHInputSection<ELFT>>(C)) 899 Type = SHT_X86_64_UNWIND; 900 901 return SectionKey<ELFT::Is64Bits>{OutsecName, Type, Flags, Alignment}; 902 } 903 904 // The linker is expected to define some symbols depending on 905 // the linking result. This function defines such symbols. 906 template <class ELFT> void Writer<ELFT>::addReservedSymbols() { 907 // __tls_get_addr is defined by the dynamic linker for dynamic ELFs. For 908 // static linking the linker is required to optimize away any references to 909 // __tls_get_addr, so it's not defined anywhere. Create a hidden definition 910 // to avoid the undefined symbol error. 911 if (!isOutputDynamic()) 912 Symtab.addIgnored("__tls_get_addr"); 913 914 auto Define = [this](StringRef S, Elf_Sym &Sym) { 915 if (Symtab.find(S)) 916 Symtab.addAbsolute(S, Sym); 917 918 // The name without the underscore is not a reserved name, 919 // so it is defined only when there is a reference against it. 920 assert(S.startswith("_")); 921 S = S.substr(1); 922 if (SymbolBody *B = Symtab.find(S)) 923 if (B->isUndefined()) 924 Symtab.addAbsolute(S, Sym); 925 }; 926 927 Define("_end", ElfSym<ELFT>::End); 928 Define("_etext", ElfSym<ELFT>::Etext); 929 Define("_edata", ElfSym<ELFT>::Edata); 930 } 931 932 // Sort input sections by section name suffixes for 933 // __attribute__((init_priority(N))). 934 template <class ELFT> static void sortInitFini(OutputSectionBase<ELFT> *S) { 935 if (S) 936 reinterpret_cast<OutputSection<ELFT> *>(S)->sortInitFini(); 937 } 938 939 // Sort input sections by the special rule for .ctors and .dtors. 940 template <class ELFT> static void sortCtorsDtors(OutputSectionBase<ELFT> *S) { 941 if (S) 942 reinterpret_cast<OutputSection<ELFT> *>(S)->sortCtorsDtors(); 943 } 944 945 // Create output section objects and add them to OutputSections. 946 template <class ELFT> bool Writer<ELFT>::createSections() { 947 OutputSections.push_back(Out<ELFT>::ElfHeader); 948 if (!Config->Relocatable) 949 OutputSections.push_back(Out<ELFT>::ProgramHeaders); 950 951 // Add .interp first because some loaders want to see that section 952 // on the first page of the executable file when loaded into memory. 953 if (needsInterpSection()) 954 OutputSections.push_back(Out<ELFT>::Interp); 955 956 // A core file does not usually contain unmodified segments except 957 // the first page of the executable. Add the build ID section now 958 // so that the section is included in the first page. 959 if (Out<ELFT>::BuildId) 960 OutputSections.push_back(Out<ELFT>::BuildId); 961 962 // Create output sections for input object file sections. 963 std::vector<OutputSectionBase<ELFT> *> RegularSections; 964 OutputSectionFactory<ELFT> Factory; 965 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 966 Symtab.getObjectFiles()) { 967 for (InputSectionBase<ELFT> *C : F->getSections()) { 968 if (isDiscarded(C)) { 969 reportDiscarded(C, F); 970 continue; 971 } 972 OutputSectionBase<ELFT> *Sec; 973 bool IsNew; 974 std::tie(Sec, IsNew) = Factory.create(C, getOutputSectionName(C)); 975 if (IsNew) { 976 OwningSections.emplace_back(Sec); 977 OutputSections.push_back(Sec); 978 RegularSections.push_back(Sec); 979 } 980 Sec->addSection(C); 981 } 982 } 983 984 Out<ELFT>::Bss = static_cast<OutputSection<ELFT> *>( 985 Factory.lookup(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE)); 986 987 // If we have a .opd section (used under PPC64 for function descriptors), 988 // store a pointer to it here so that we can use it later when processing 989 // relocations. 990 Out<ELFT>::Opd = Factory.lookup(".opd", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC); 991 992 Out<ELFT>::Dynamic->PreInitArraySec = Factory.lookup( 993 ".preinit_array", SHT_PREINIT_ARRAY, SHF_WRITE | SHF_ALLOC); 994 Out<ELFT>::Dynamic->InitArraySec = 995 Factory.lookup(".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC); 996 Out<ELFT>::Dynamic->FiniArraySec = 997 Factory.lookup(".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC); 998 999 // Sort section contents for __attribute__((init_priority(N)). 1000 sortInitFini(Out<ELFT>::Dynamic->InitArraySec); 1001 sortInitFini(Out<ELFT>::Dynamic->FiniArraySec); 1002 sortCtorsDtors(Factory.lookup(".ctors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 1003 sortCtorsDtors(Factory.lookup(".dtors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 1004 1005 // The linker needs to define SECNAME_start, SECNAME_end and SECNAME_stop 1006 // symbols for sections, so that the runtime can get the start and end 1007 // addresses of each section by section name. Add such symbols. 1008 if (!Config->Relocatable) { 1009 addStartEndSymbols(); 1010 for (OutputSectionBase<ELFT> *Sec : RegularSections) 1011 addStartStopSymbols(Sec); 1012 } 1013 1014 // Add _DYNAMIC symbol. Unlike GNU gold, our _DYNAMIC symbol has no type. 1015 // It should be okay as no one seems to care about the type. 1016 // Even the author of gold doesn't remember why gold behaves that way. 1017 // https://sourceware.org/ml/binutils/2002-03/msg00360.html 1018 if (isOutputDynamic()) 1019 Symtab.addSynthetic("_DYNAMIC", *Out<ELFT>::Dynamic, 0, STV_HIDDEN); 1020 1021 // Define __rel[a]_iplt_{start,end} symbols if needed. 1022 addRelIpltSymbols(); 1023 1024 // Scan relocations. This must be done after every symbol is declared so that 1025 // we can correctly decide if a dynamic relocation is needed. 1026 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 1027 Symtab.getObjectFiles()) { 1028 for (InputSectionBase<ELFT> *C : F->getSections()) { 1029 if (isDiscarded(C)) 1030 continue; 1031 if (auto *S = dyn_cast<InputSection<ELFT>>(C)) 1032 scanRelocs(*S); 1033 else if (auto *S = dyn_cast<EHInputSection<ELFT>>(C)) 1034 if (S->RelocSection) 1035 scanRelocs(*S, *S->RelocSection); 1036 } 1037 } 1038 1039 // Now that we have defined all possible symbols including linker- 1040 // synthesized ones. Visit all symbols to give the finishing touches. 1041 std::vector<DefinedCommon *> CommonSymbols; 1042 std::vector<SharedSymbol<ELFT> *> CopyRelSymbols; 1043 for (auto &P : Symtab.getSymbols()) { 1044 SymbolBody *Body = P.second->Body; 1045 if (auto *U = dyn_cast<Undefined>(Body)) 1046 if (!U->isWeak() && !U->canKeepUndefined()) 1047 reportUndefined<ELFT>(Symtab, Body); 1048 1049 if (auto *C = dyn_cast<DefinedCommon>(Body)) 1050 CommonSymbols.push_back(C); 1051 if (auto *SC = dyn_cast<SharedSymbol<ELFT>>(Body)) 1052 if (SC->needsCopy()) 1053 CopyRelSymbols.push_back(SC); 1054 1055 if (!includeInSymtab<ELFT>(*Body)) 1056 continue; 1057 if (Out<ELFT>::SymTab) 1058 Out<ELFT>::SymTab->addSymbol(Body); 1059 1060 if (isOutputDynamic() && includeInDynsym(*Body)) 1061 Out<ELFT>::DynSymTab->addSymbol(Body); 1062 } 1063 1064 // Do not proceed if there was an undefined symbol. 1065 if (HasError) 1066 return false; 1067 1068 addCommonSymbols(CommonSymbols); 1069 addCopyRelSymbols(CopyRelSymbols); 1070 1071 // So far we have added sections from input object files. 1072 // This function adds linker-created Out<ELFT>::* sections. 1073 addPredefinedSections(); 1074 1075 std::stable_sort(OutputSections.begin(), OutputSections.end(), 1076 compareSections<ELFT>); 1077 1078 for (unsigned I = dummySectionsNum(), N = OutputSections.size(); I < N; ++I) 1079 OutputSections[I]->SectionIndex = I + 1 - dummySectionsNum(); 1080 1081 for (OutputSectionBase<ELFT> *Sec : getSections()) 1082 Sec->setSHName(Out<ELFT>::ShStrTab->addString(Sec->getName())); 1083 1084 // Finalizers fix each section's size. 1085 // .dynsym is finalized early since that may fill up .gnu.hash. 1086 if (isOutputDynamic()) 1087 Out<ELFT>::DynSymTab->finalize(); 1088 1089 // Fill other section headers. The dynamic table is finalized 1090 // at the end because some tags like RELSZ depend on result 1091 // of finalizing other sections. The dynamic string table is 1092 // finalized once the .dynamic finalizer has added a few last 1093 // strings. See DynamicSection::finalize() 1094 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1095 if (Sec != Out<ELFT>::DynStrTab && Sec != Out<ELFT>::Dynamic) 1096 Sec->finalize(); 1097 1098 if (isOutputDynamic()) 1099 Out<ELFT>::Dynamic->finalize(); 1100 return true; 1101 } 1102 1103 template <class ELFT> bool Writer<ELFT>::needsGot() { 1104 if (!Out<ELFT>::Got->empty()) 1105 return true; 1106 1107 // We add the .got section to the result for dynamic MIPS target because 1108 // its address and properties are mentioned in the .dynamic section. 1109 if (Config->EMachine == EM_MIPS && isOutputDynamic()) 1110 return true; 1111 1112 // If we have a relocation that is relative to GOT (such as GOTOFFREL), 1113 // we need to emit a GOT even if it's empty. 1114 return HasGotOffRel; 1115 } 1116 1117 // This function add Out<ELFT>::* sections to OutputSections. 1118 template <class ELFT> void Writer<ELFT>::addPredefinedSections() { 1119 auto Add = [&](OutputSectionBase<ELFT> *C) { 1120 if (C) 1121 OutputSections.push_back(C); 1122 }; 1123 1124 // This order is not the same as the final output order 1125 // because we sort the sections using their attributes below. 1126 Add(Out<ELFT>::SymTab); 1127 Add(Out<ELFT>::ShStrTab); 1128 Add(Out<ELFT>::StrTab); 1129 if (isOutputDynamic()) { 1130 Add(Out<ELFT>::DynSymTab); 1131 Add(Out<ELFT>::GnuHashTab); 1132 Add(Out<ELFT>::HashTab); 1133 Add(Out<ELFT>::Dynamic); 1134 Add(Out<ELFT>::DynStrTab); 1135 if (Out<ELFT>::RelaDyn->hasRelocs()) 1136 Add(Out<ELFT>::RelaDyn); 1137 Add(Out<ELFT>::MipsRldMap); 1138 } 1139 1140 // We always need to add rel[a].plt to output if it has entries. 1141 // Even during static linking it can contain R_[*]_IRELATIVE relocations. 1142 if (Out<ELFT>::RelaPlt && Out<ELFT>::RelaPlt->hasRelocs()) { 1143 Add(Out<ELFT>::RelaPlt); 1144 Out<ELFT>::RelaPlt->Static = !isOutputDynamic(); 1145 } 1146 1147 if (needsGot()) 1148 Add(Out<ELFT>::Got); 1149 if (Out<ELFT>::GotPlt && !Out<ELFT>::GotPlt->empty()) 1150 Add(Out<ELFT>::GotPlt); 1151 if (!Out<ELFT>::Plt->empty()) 1152 Add(Out<ELFT>::Plt); 1153 if (Out<ELFT>::EhFrameHdr->Live) 1154 Add(Out<ELFT>::EhFrameHdr); 1155 } 1156 1157 // The linker is expected to define SECNAME_start and SECNAME_end 1158 // symbols for a few sections. This function defines them. 1159 template <class ELFT> void Writer<ELFT>::addStartEndSymbols() { 1160 auto Define = [&](StringRef Start, StringRef End, 1161 OutputSectionBase<ELFT> *OS) { 1162 if (OS) { 1163 Symtab.addSynthetic(Start, *OS, 0, STV_DEFAULT); 1164 Symtab.addSynthetic(End, *OS, OS->getSize(), STV_DEFAULT); 1165 } else { 1166 Symtab.addIgnored(Start); 1167 Symtab.addIgnored(End); 1168 } 1169 }; 1170 1171 Define("__preinit_array_start", "__preinit_array_end", 1172 Out<ELFT>::Dynamic->PreInitArraySec); 1173 Define("__init_array_start", "__init_array_end", 1174 Out<ELFT>::Dynamic->InitArraySec); 1175 Define("__fini_array_start", "__fini_array_end", 1176 Out<ELFT>::Dynamic->FiniArraySec); 1177 } 1178 1179 // If a section name is valid as a C identifier (which is rare because of 1180 // the leading '.'), linkers are expected to define __start_<secname> and 1181 // __stop_<secname> symbols. They are at beginning and end of the section, 1182 // respectively. This is not requested by the ELF standard, but GNU ld and 1183 // gold provide the feature, and used by many programs. 1184 template <class ELFT> 1185 void Writer<ELFT>::addStartStopSymbols(OutputSectionBase<ELFT> *Sec) { 1186 StringRef S = Sec->getName(); 1187 if (!isValidCIdentifier(S)) 1188 return; 1189 StringSaver Saver(Alloc); 1190 StringRef Start = Saver.save("__start_" + S); 1191 StringRef Stop = Saver.save("__stop_" + S); 1192 if (SymbolBody *B = Symtab.find(Start)) 1193 if (B->isUndefined()) 1194 Symtab.addSynthetic(Start, *Sec, 0, STV_DEFAULT); 1195 if (SymbolBody *B = Symtab.find(Stop)) 1196 if (B->isUndefined()) 1197 Symtab.addSynthetic(Stop, *Sec, Sec->getSize(), STV_DEFAULT); 1198 } 1199 1200 template <class ELFT> static bool needsPtLoad(OutputSectionBase<ELFT> *Sec) { 1201 if (!(Sec->getFlags() & SHF_ALLOC)) 1202 return false; 1203 1204 // Don't allocate VA space for TLS NOBITS sections. The PT_TLS PHDR is 1205 // responsible for allocating space for them, not the PT_LOAD that 1206 // contains the TLS initialization image. 1207 if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) 1208 return false; 1209 return true; 1210 } 1211 1212 static uint32_t toPhdrFlags(uint64_t Flags) { 1213 uint32_t Ret = PF_R; 1214 if (Flags & SHF_WRITE) 1215 Ret |= PF_W; 1216 if (Flags & SHF_EXECINSTR) 1217 Ret |= PF_X; 1218 return Ret; 1219 } 1220 1221 // Decide which program headers to create and which sections to include in each 1222 // one. 1223 template <class ELFT> void Writer<ELFT>::createPhdrs() { 1224 auto AddHdr = [this](unsigned Type, unsigned Flags) { 1225 return &*Phdrs.emplace(Phdrs.end(), Type, Flags); 1226 }; 1227 1228 auto AddSec = [](Phdr &Hdr, OutputSectionBase<ELFT> *Sec) { 1229 Hdr.Last = Sec; 1230 if (!Hdr.First) 1231 Hdr.First = Sec; 1232 Hdr.H.p_align = std::max<uintX_t>(Hdr.H.p_align, Sec->getAlign()); 1233 }; 1234 1235 // The first phdr entry is PT_PHDR which describes the program header itself. 1236 Phdr &Hdr = *AddHdr(PT_PHDR, PF_R); 1237 AddSec(Hdr, Out<ELFT>::ProgramHeaders); 1238 1239 // PT_INTERP must be the second entry if exists. 1240 if (needsInterpSection()) { 1241 Phdr &Hdr = *AddHdr(PT_INTERP, toPhdrFlags(Out<ELFT>::Interp->getFlags())); 1242 AddSec(Hdr, Out<ELFT>::Interp); 1243 } 1244 1245 // Add the first PT_LOAD segment for regular output sections. 1246 uintX_t Flags = PF_R; 1247 Phdr *Load = AddHdr(PT_LOAD, Flags); 1248 AddSec(*Load, Out<ELFT>::ElfHeader); 1249 1250 Phdr TlsHdr(PT_TLS, PF_R); 1251 Phdr RelRo(PT_GNU_RELRO, PF_R); 1252 Phdr Note(PT_NOTE, PF_R); 1253 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1254 if (!(Sec->getFlags() & SHF_ALLOC)) 1255 break; 1256 1257 // If we meet TLS section then we create TLS header 1258 // and put all TLS sections inside for futher use when 1259 // assign addresses. 1260 if (Sec->getFlags() & SHF_TLS) 1261 AddSec(TlsHdr, Sec); 1262 1263 if (!needsPtLoad<ELFT>(Sec)) 1264 continue; 1265 1266 // If flags changed then we want new load segment. 1267 uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); 1268 if (Flags != NewFlags) { 1269 Load = AddHdr(PT_LOAD, NewFlags); 1270 Flags = NewFlags; 1271 } 1272 1273 AddSec(*Load, Sec); 1274 1275 if (isRelroSection(Sec)) 1276 AddSec(RelRo, Sec); 1277 if (Sec->getType() == SHT_NOTE) 1278 AddSec(Note, Sec); 1279 } 1280 1281 // Add the TLS segment unless it's empty. 1282 if (TlsHdr.First) 1283 Phdrs.push_back(std::move(TlsHdr)); 1284 1285 // Add an entry for .dynamic. 1286 if (isOutputDynamic()) { 1287 Phdr &H = *AddHdr(PT_DYNAMIC, toPhdrFlags(Out<ELFT>::Dynamic->getFlags())); 1288 AddSec(H, Out<ELFT>::Dynamic); 1289 } 1290 1291 // PT_GNU_RELRO includes all sections that should be marked as 1292 // read-only by dynamic linker after proccessing relocations. 1293 if (RelRo.First) 1294 Phdrs.push_back(std::move(RelRo)); 1295 1296 // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. 1297 if (Out<ELFT>::EhFrameHdr->Live) { 1298 Phdr &Hdr = *AddHdr(PT_GNU_EH_FRAME, 1299 toPhdrFlags(Out<ELFT>::EhFrameHdr->getFlags())); 1300 AddSec(Hdr, Out<ELFT>::EhFrameHdr); 1301 } 1302 1303 // PT_GNU_STACK is a special section to tell the loader to make the 1304 // pages for the stack non-executable. 1305 if (!Config->ZExecStack) 1306 AddHdr(PT_GNU_STACK, PF_R | PF_W); 1307 1308 if (Note.First) 1309 Phdrs.push_back(std::move(Note)); 1310 } 1311 1312 // Used for relocatable output (-r). In this case we create only ELF file 1313 // header, do not create program headers. Also assign of section addresses 1314 // is very straightforward: we just put all sections sequentually to the file. 1315 template <class ELFT> void Writer<ELFT>::assignAddressesRelocatable() { 1316 Out<ELFT>::ElfHeader->setSize(sizeof(Elf_Ehdr)); 1317 uintX_t FileOff = 0; 1318 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1319 if (Sec->getType() != SHT_NOBITS) 1320 FileOff = alignTo(FileOff, Sec->getAlign()); 1321 Sec->setFileOffset(FileOff); 1322 if (Sec->getType() != SHT_NOBITS) 1323 FileOff += Sec->getSize(); 1324 } 1325 SectionHeaderOff = alignTo(FileOff, sizeof(uintX_t)); 1326 FileSize = SectionHeaderOff + getNumSections() * sizeof(Elf_Shdr); 1327 } 1328 1329 // Visits all headers in PhdrTable and assigns the adresses to 1330 // the output sections. Also creates common and special headers. 1331 template <class ELFT> void Writer<ELFT>::assignAddresses() { 1332 Out<ELFT>::ElfHeader->setSize(sizeof(Elf_Ehdr)); 1333 size_t PhdrSize = sizeof(Elf_Phdr) * Phdrs.size(); 1334 Out<ELFT>::ProgramHeaders->setSize(PhdrSize); 1335 1336 // The first section of each PT_LOAD and the first section after PT_GNU_RELRO 1337 // have to be page aligned so that the dynamic linker can set the permissions. 1338 SmallPtrSet<OutputSectionBase<ELFT> *, 4> PageAlign; 1339 for (const Phdr &P : Phdrs) { 1340 if (P.H.p_type == PT_GNU_RELRO) { 1341 // Find the first section after PT_GNU_RELRO. If it is in a PT_LOAD we 1342 // have to align it to a page. 1343 auto I = std::find(OutputSections.begin(), OutputSections.end(), P.Last); 1344 ++I; 1345 if (I != OutputSections.end() && needsPtLoad(*I)) 1346 PageAlign.insert(*I); 1347 } 1348 1349 if (P.H.p_type == PT_LOAD) 1350 PageAlign.insert(P.First); 1351 } 1352 1353 uintX_t ThreadBssOffset = 0; 1354 uintX_t VA = Target->getVAStart(); 1355 uintX_t FileOff = 0; 1356 1357 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1358 uintX_t Align = Sec->getAlign(); 1359 if (PageAlign.count(Sec)) 1360 Align = std::max<uintX_t>(Align, Target->PageSize); 1361 1362 if (Sec->getType() != SHT_NOBITS) 1363 FileOff = alignTo(FileOff, Align); 1364 Sec->setFileOffset(FileOff); 1365 if (Sec->getType() != SHT_NOBITS) 1366 FileOff += Sec->getSize(); 1367 1368 // We only assign VAs to allocated sections. 1369 if (needsPtLoad<ELFT>(Sec)) { 1370 VA = alignTo(VA, Align); 1371 Sec->setVA(VA); 1372 VA += Sec->getSize(); 1373 } else if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) { 1374 uintX_t TVA = VA + ThreadBssOffset; 1375 TVA = alignTo(TVA, Align); 1376 Sec->setVA(TVA); 1377 ThreadBssOffset = TVA - VA + Sec->getSize(); 1378 } 1379 } 1380 1381 // Add space for section headers. 1382 SectionHeaderOff = alignTo(FileOff, sizeof(uintX_t)); 1383 FileSize = SectionHeaderOff + getNumSections() * sizeof(Elf_Shdr); 1384 1385 // Update "_end" and "end" symbols so that they 1386 // point to the end of the data segment. 1387 ElfSym<ELFT>::End.st_value = VA; 1388 1389 for (Phdr &PHdr : Phdrs) { 1390 Elf_Phdr &H = PHdr.H; 1391 if (PHdr.First) { 1392 OutputSectionBase<ELFT> *Last = PHdr.Last; 1393 H.p_filesz = Last->getFileOff() - PHdr.First->getFileOff(); 1394 if (Last->getType() != SHT_NOBITS) 1395 H.p_filesz += Last->getSize(); 1396 H.p_memsz = Last->getVA() + Last->getSize() - PHdr.First->getVA(); 1397 H.p_offset = PHdr.First->getFileOff(); 1398 H.p_vaddr = PHdr.First->getVA(); 1399 } 1400 if (H.p_type == PT_LOAD) 1401 H.p_align = Target->PageSize; 1402 else if (H.p_type == PT_GNU_RELRO) 1403 H.p_align = 1; 1404 H.p_paddr = H.p_vaddr; 1405 1406 // The TLS pointer goes after PT_TLS. At least glibc will align it, 1407 // so round up the size to make sure the offsets are correct. 1408 if (H.p_type == PT_TLS) { 1409 Out<ELFT>::TlsPhdr = &H; 1410 H.p_memsz = alignTo(H.p_memsz, H.p_align); 1411 } 1412 } 1413 } 1414 1415 static uint32_t getMipsEFlags() { 1416 // FIXME: In fact ELF flags depends on ELF flags of input object files 1417 // and selected emulation. For now just use hard coded values. 1418 uint32_t V = EF_MIPS_ABI_O32 | EF_MIPS_CPIC | EF_MIPS_ARCH_32R2; 1419 if (Config->Shared) 1420 V |= EF_MIPS_PIC; 1421 return V; 1422 } 1423 1424 template <class ELFT> static typename ELFT::uint getEntryAddr() { 1425 if (SymbolBody *B = Config->EntrySym) 1426 return B->repl().getVA<ELFT>(); 1427 if (Config->EntryAddr != uint64_t(-1)) 1428 return Config->EntryAddr; 1429 return 0; 1430 } 1431 1432 template <class ELFT> static uint8_t getELFEncoding() { 1433 if (ELFT::TargetEndianness == llvm::support::little) 1434 return ELFDATA2LSB; 1435 return ELFDATA2MSB; 1436 } 1437 1438 static uint16_t getELFType() { 1439 if (Config->Pic) 1440 return ET_DYN; 1441 if (Config->Relocatable) 1442 return ET_REL; 1443 return ET_EXEC; 1444 } 1445 1446 // This function is called after we have assigned address and size 1447 // to each section. This function fixes some predefined absolute 1448 // symbol values that depend on section address and size. 1449 template <class ELFT> void Writer<ELFT>::fixAbsoluteSymbols() { 1450 // Update __rel[a]_iplt_{start,end} symbols so that they point 1451 // to beginning or ending of .rela.plt section, respectively. 1452 if (Out<ELFT>::RelaPlt) { 1453 uintX_t Start = Out<ELFT>::RelaPlt->getVA(); 1454 ElfSym<ELFT>::RelaIpltStart.st_value = Start; 1455 ElfSym<ELFT>::RelaIpltEnd.st_value = Start + Out<ELFT>::RelaPlt->getSize(); 1456 } 1457 1458 // Update MIPS _gp absolute symbol so that it points to the static data. 1459 if (Config->EMachine == EM_MIPS) 1460 ElfSym<ELFT>::MipsGp.st_value = getMipsGpAddr<ELFT>(); 1461 1462 // _etext is the first location after the last read-only loadable segment. 1463 // _edata is the first location after the last read-write loadable segment. 1464 for (Phdr &PHdr : Phdrs) { 1465 if (PHdr.H.p_type != PT_LOAD) 1466 continue; 1467 uintX_t Val = PHdr.H.p_vaddr + PHdr.H.p_filesz; 1468 if (PHdr.H.p_flags & PF_W) 1469 ElfSym<ELFT>::Edata.st_value = Val; 1470 else 1471 ElfSym<ELFT>::Etext.st_value = Val; 1472 } 1473 } 1474 1475 template <class ELFT> void Writer<ELFT>::writeHeader() { 1476 uint8_t *Buf = Buffer->getBufferStart(); 1477 memcpy(Buf, "\177ELF", 4); 1478 1479 auto &FirstObj = cast<ELFFileBase<ELFT>>(*Config->FirstElf); 1480 1481 // Write the ELF header. 1482 auto *EHdr = reinterpret_cast<Elf_Ehdr *>(Buf); 1483 EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; 1484 EHdr->e_ident[EI_DATA] = getELFEncoding<ELFT>(); 1485 EHdr->e_ident[EI_VERSION] = EV_CURRENT; 1486 EHdr->e_ident[EI_OSABI] = FirstObj.getOSABI(); 1487 EHdr->e_type = getELFType(); 1488 EHdr->e_machine = FirstObj.getEMachine(); 1489 EHdr->e_version = EV_CURRENT; 1490 EHdr->e_entry = getEntryAddr<ELFT>(); 1491 EHdr->e_shoff = SectionHeaderOff; 1492 EHdr->e_ehsize = sizeof(Elf_Ehdr); 1493 EHdr->e_phnum = Phdrs.size(); 1494 EHdr->e_shentsize = sizeof(Elf_Shdr); 1495 EHdr->e_shnum = getNumSections(); 1496 EHdr->e_shstrndx = Out<ELFT>::ShStrTab->SectionIndex; 1497 1498 if (Config->EMachine == EM_MIPS) 1499 EHdr->e_flags = getMipsEFlags(); 1500 1501 if (!Config->Relocatable) { 1502 EHdr->e_phoff = sizeof(Elf_Ehdr); 1503 EHdr->e_phentsize = sizeof(Elf_Phdr); 1504 } 1505 1506 // Write the program header table. 1507 auto *HBuf = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff); 1508 for (Phdr &P : Phdrs) 1509 *HBuf++ = P.H; 1510 1511 // Write the section header table. Note that the first table entry is null. 1512 auto *SHdrs = reinterpret_cast<Elf_Shdr *>(Buf + EHdr->e_shoff); 1513 for (OutputSectionBase<ELFT> *Sec : getSections()) 1514 Sec->writeHeaderTo(++SHdrs); 1515 } 1516 1517 template <class ELFT> bool Writer<ELFT>::openFile() { 1518 ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = 1519 FileOutputBuffer::create(Config->OutputFile, FileSize, 1520 FileOutputBuffer::F_executable); 1521 if (!BufferOrErr) { 1522 error(BufferOrErr, "failed to open " + Config->OutputFile); 1523 return false; 1524 } 1525 Buffer = std::move(*BufferOrErr); 1526 return true; 1527 } 1528 1529 // Write section contents to a mmap'ed file. 1530 template <class ELFT> void Writer<ELFT>::writeSections() { 1531 uint8_t *Buf = Buffer->getBufferStart(); 1532 1533 // PPC64 needs to process relocations in the .opd section before processing 1534 // relocations in code-containing sections. 1535 if (OutputSectionBase<ELFT> *Sec = Out<ELFT>::Opd) { 1536 Out<ELFT>::OpdBuf = Buf + Sec->getFileOff(); 1537 Sec->writeTo(Buf + Sec->getFileOff()); 1538 } 1539 1540 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1541 if (Sec != Out<ELFT>::Opd) 1542 Sec->writeTo(Buf + Sec->getFileOff()); 1543 } 1544 1545 template <class ELFT> void Writer<ELFT>::writeBuildId() { 1546 BuildIdSection<ELFT> *S = Out<ELFT>::BuildId; 1547 if (!S) 1548 return; 1549 1550 // Compute a hash of all sections except .debug_* sections. 1551 // We skip debug sections because they tend to be very large 1552 // and their contents are very likely to be the same as long as 1553 // other sections are the same. 1554 uint8_t *Start = Buffer->getBufferStart(); 1555 uint8_t *Last = Start; 1556 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1557 uint8_t *End = Start + Sec->getFileOff(); 1558 if (!Sec->getName().startswith(".debug_")) 1559 S->update({Last, End}); 1560 Last = End; 1561 } 1562 S->update({Last, Start + FileSize}); 1563 1564 // Fill the hash value field in the .note.gnu.build-id section. 1565 S->writeBuildId(); 1566 } 1567 1568 template void elf::writeResult<ELF32LE>(SymbolTable<ELF32LE> *Symtab); 1569 template void elf::writeResult<ELF32BE>(SymbolTable<ELF32BE> *Symtab); 1570 template void elf::writeResult<ELF64LE>(SymbolTable<ELF64LE> *Symtab); 1571 template void elf::writeResult<ELF64BE>(SymbolTable<ELF64BE> *Symtab); 1572