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 "MapFile.h" 14 #include "Memory.h" 15 #include "OutputSections.h" 16 #include "Relocations.h" 17 #include "Strings.h" 18 #include "SymbolTable.h" 19 #include "SyntheticSections.h" 20 #include "Target.h" 21 #include "llvm/ADT/StringMap.h" 22 #include "llvm/ADT/StringSwitch.h" 23 #include "llvm/Support/FileOutputBuffer.h" 24 #include "llvm/Support/FileSystem.h" 25 #include "llvm/Support/raw_ostream.h" 26 #include <climits> 27 #include <thread> 28 29 using namespace llvm; 30 using namespace llvm::ELF; 31 using namespace llvm::object; 32 using namespace llvm::support; 33 using namespace llvm::support::endian; 34 35 using namespace lld; 36 using namespace lld::elf; 37 38 namespace { 39 // The writer writes a SymbolTable result to a file. 40 template <class ELFT> class Writer { 41 public: 42 typedef typename ELFT::uint uintX_t; 43 typedef typename ELFT::Shdr Elf_Shdr; 44 typedef typename ELFT::Ehdr Elf_Ehdr; 45 typedef typename ELFT::Phdr Elf_Phdr; 46 typedef typename ELFT::Sym Elf_Sym; 47 typedef typename ELFT::SymRange Elf_Sym_Range; 48 typedef typename ELFT::Rela Elf_Rela; 49 void run(); 50 51 private: 52 void createSyntheticSections(); 53 void copyLocalSymbols(); 54 void addReservedSymbols(); 55 void addInputSec(InputSectionBase<ELFT> *S); 56 void createSections(); 57 void forEachRelSec(std::function<void(InputSectionBase<ELFT> &)> Fn); 58 void sortSections(); 59 void finalizeSections(); 60 void addPredefinedSections(); 61 62 std::vector<PhdrEntry> createPhdrs(); 63 void removeEmptyPTLoad(); 64 void addPtArmExid(std::vector<PhdrEntry> &Phdrs); 65 void assignAddresses(); 66 void assignFileOffsets(); 67 void assignFileOffsetsBinary(); 68 void setPhdrs(); 69 void fixHeaders(); 70 void fixSectionAlignments(); 71 void fixAbsoluteSymbols(); 72 void openFile(); 73 void writeHeader(); 74 void writeSections(); 75 void writeSectionsBinary(); 76 void writeBuildId(); 77 78 std::unique_ptr<FileOutputBuffer> Buffer; 79 80 std::vector<OutputSectionBase *> OutputSections; 81 OutputSectionFactory<ELFT> Factory; 82 83 void addRelIpltSymbols(); 84 void addStartEndSymbols(); 85 void addStartStopSymbols(OutputSectionBase *Sec); 86 uintX_t getEntryAddr(); 87 OutputSectionBase *findSection(StringRef Name); 88 89 std::vector<PhdrEntry> Phdrs; 90 91 uintX_t FileSize; 92 uintX_t SectionHeaderOff; 93 bool AllocateHeader = true; 94 }; 95 } // anonymous namespace 96 97 StringRef elf::getOutputSectionName(StringRef Name) { 98 if (Config->Relocatable) 99 return Name; 100 101 for (StringRef V : 102 {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.", 103 ".init_array.", ".fini_array.", ".ctors.", ".dtors.", ".tbss.", 104 ".gcc_except_table.", ".tdata.", ".ARM.exidx."}) { 105 StringRef Prefix = V.drop_back(); 106 if (Name.startswith(V) || Name == Prefix) 107 return Prefix; 108 } 109 110 // CommonSection is identified as "COMMON" in linker scripts. 111 // By default, it should go to .bss section. 112 if (Name == "COMMON") 113 return ".bss"; 114 115 // ".zdebug_" is a prefix for ZLIB-compressed sections. 116 // Because we decompressed input sections, we want to remove 'z'. 117 if (Name.startswith(".zdebug_")) 118 return Saver.save(Twine(".") + Name.substr(2)); 119 return Name; 120 } 121 122 template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) { 123 if (IS == In<ELFT>::ShStrTab) 124 error("discarding .shstrtab section is not allowed"); 125 if (!Config->PrintGcSections) 126 return; 127 errs() << "removing unused section from '" << IS->Name << "' in file '" 128 << IS->getFile()->getName() << "'\n"; 129 } 130 131 template <class ELFT> static bool needsInterpSection() { 132 return !Symtab<ELFT>::X->getSharedFiles().empty() && 133 !Config->DynamicLinker.empty() && 134 !Script<ELFT>::X->ignoreInterpSection(); 135 } 136 137 template <class ELFT> void elf::writeResult() { Writer<ELFT>().run(); } 138 139 template <class ELFT> void Writer<ELFT>::removeEmptyPTLoad() { 140 auto I = std::remove_if(Phdrs.begin(), Phdrs.end(), [&](const PhdrEntry &P) { 141 if (P.p_type != PT_LOAD) 142 return false; 143 if (!P.First) 144 return true; 145 uintX_t Size = P.Last->Addr + P.Last->Size - P.First->Addr; 146 return Size == 0; 147 }); 148 Phdrs.erase(I, Phdrs.end()); 149 } 150 151 // The main function of the writer. 152 template <class ELFT> void Writer<ELFT>::run() { 153 // Create linker-synthesized sections such as .got or .plt. 154 // Such sections are of type input section. 155 createSyntheticSections(); 156 157 // We need to create some reserved symbols such as _end. Create them. 158 if (!Config->Relocatable) 159 addReservedSymbols(); 160 161 // Some architectures use small displacements for jump instructions. 162 // It is linker's responsibility to create thunks containing long 163 // jump instructions if jump targets are too far. Create thunks. 164 if (Target->NeedsThunks) 165 forEachRelSec(createThunks<ELFT>); 166 167 // Create output sections. 168 Script<ELFT>::X->OutputSections = &OutputSections; 169 if (ScriptConfig->HasSections) { 170 // If linker script contains SECTIONS commands, let it create sections. 171 Script<ELFT>::X->processCommands(Factory); 172 173 // Linker scripts may have left some input sections unassigned. 174 // Assign such sections using the default rule. 175 Script<ELFT>::X->addOrphanSections(Factory); 176 } else { 177 // If linker script does not contain SECTIONS commands, create 178 // output sections by default rules. We still need to give the 179 // linker script a chance to run, because it might contain 180 // non-SECTIONS commands such as ASSERT. 181 createSections(); 182 Script<ELFT>::X->processCommands(Factory); 183 } 184 185 if (Config->Discard != DiscardPolicy::All) 186 copyLocalSymbols(); 187 188 // Now that we have a complete set of output sections. This function 189 // completes section contents. For example, we need to add strings 190 // to the string table, and add entries to .got and .plt. 191 // finalizeSections does that. 192 finalizeSections(); 193 if (ErrorCount) 194 return; 195 196 if (Config->Relocatable) { 197 assignFileOffsets(); 198 } else { 199 if (ScriptConfig->HasSections) { 200 Script<ELFT>::X->assignAddresses(Phdrs); 201 } else { 202 fixSectionAlignments(); 203 assignAddresses(); 204 } 205 206 // Remove empty PT_LOAD to avoid causing the dynamic linker to try to mmap a 207 // 0 sized region. This has to be done late since only after assignAddresses 208 // we know the size of the sections. 209 removeEmptyPTLoad(); 210 211 if (!Config->OFormatBinary) 212 assignFileOffsets(); 213 else 214 assignFileOffsetsBinary(); 215 216 setPhdrs(); 217 fixAbsoluteSymbols(); 218 } 219 220 // It does not make sense try to open the file if we have error already. 221 if (ErrorCount) 222 return; 223 // Write the result down to a file. 224 openFile(); 225 if (ErrorCount) 226 return; 227 if (!Config->OFormatBinary) { 228 writeHeader(); 229 writeSections(); 230 } else { 231 writeSectionsBinary(); 232 } 233 234 // Backfill .note.gnu.build-id section content. This is done at last 235 // because the content is usually a hash value of the entire output file. 236 writeBuildId(); 237 if (ErrorCount) 238 return; 239 240 writeMapFile<ELFT>(OutputSections); 241 if (auto EC = Buffer->commit()) 242 error("failed to write to the output file: " + EC.message()); 243 244 // Flush the output streams and exit immediately. A full shutdown 245 // is a good test that we are keeping track of all allocated memory, 246 // but actually freeing it is a waste of time in a regular linker run. 247 if (Config->ExitEarly) 248 exitLld(0); 249 } 250 251 // Initialize Out<ELFT> members. 252 template <class ELFT> void Writer<ELFT>::createSyntheticSections() { 253 // Initialize all pointers with NULL. This is needed because 254 // you can call lld::elf::main more than once as a library. 255 memset(&Out<ELFT>::First, 0, sizeof(Out<ELFT>)); 256 257 // Create singleton output sections. 258 Out<ELFT>::Bss = 259 make<OutputSection<ELFT>>(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE); 260 Out<ELFT>::BssRelRo = make<OutputSection<ELFT>>(".bss.rel.ro", SHT_NOBITS, 261 SHF_ALLOC | SHF_WRITE); 262 In<ELFT>::DynStrTab = make<StringTableSection<ELFT>>(".dynstr", true); 263 In<ELFT>::Dynamic = make<DynamicSection<ELFT>>(); 264 Out<ELFT>::EhFrame = make<EhOutputSection<ELFT>>(); 265 In<ELFT>::RelaDyn = make<RelocationSection<ELFT>>( 266 Config->Rela ? ".rela.dyn" : ".rel.dyn", Config->ZCombreloc); 267 In<ELFT>::ShStrTab = make<StringTableSection<ELFT>>(".shstrtab", false); 268 269 Out<ELFT>::ElfHeader = make<OutputSectionBase>("", 0, SHF_ALLOC); 270 Out<ELFT>::ElfHeader->Size = sizeof(Elf_Ehdr); 271 Out<ELFT>::ProgramHeaders = make<OutputSectionBase>("", 0, SHF_ALLOC); 272 Out<ELFT>::ProgramHeaders->updateAlignment(sizeof(uintX_t)); 273 274 if (needsInterpSection<ELFT>()) { 275 In<ELFT>::Interp = createInterpSection<ELFT>(); 276 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::Interp); 277 } else { 278 In<ELFT>::Interp = nullptr; 279 } 280 281 if (!Config->Relocatable) 282 Symtab<ELFT>::X->Sections.push_back(createCommentSection<ELFT>()); 283 284 if (Config->Strip != StripPolicy::All) { 285 In<ELFT>::StrTab = make<StringTableSection<ELFT>>(".strtab", false); 286 In<ELFT>::SymTab = make<SymbolTableSection<ELFT>>(*In<ELFT>::StrTab); 287 } 288 289 if (Config->BuildId != BuildIdKind::None) { 290 In<ELFT>::BuildId = make<BuildIdSection<ELFT>>(); 291 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::BuildId); 292 } 293 294 InputSection<ELFT> *Common = createCommonSection<ELFT>(); 295 if (!Common->Data.empty()) { 296 In<ELFT>::Common = Common; 297 Symtab<ELFT>::X->Sections.push_back(Common); 298 } 299 300 // Add MIPS-specific sections. 301 bool HasDynSymTab = !Symtab<ELFT>::X->getSharedFiles().empty() || Config->Pic; 302 if (Config->EMachine == EM_MIPS) { 303 if (!Config->Shared && HasDynSymTab) { 304 In<ELFT>::MipsRldMap = make<MipsRldMapSection<ELFT>>(); 305 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::MipsRldMap); 306 } 307 if (auto *Sec = MipsAbiFlagsSection<ELFT>::create()) 308 Symtab<ELFT>::X->Sections.push_back(Sec); 309 if (auto *Sec = MipsOptionsSection<ELFT>::create()) 310 Symtab<ELFT>::X->Sections.push_back(Sec); 311 if (auto *Sec = MipsReginfoSection<ELFT>::create()) 312 Symtab<ELFT>::X->Sections.push_back(Sec); 313 } 314 315 if (HasDynSymTab) { 316 In<ELFT>::DynSymTab = make<SymbolTableSection<ELFT>>(*In<ELFT>::DynStrTab); 317 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::DynSymTab); 318 319 In<ELFT>::VerSym = make<VersionTableSection<ELFT>>(); 320 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::VerSym); 321 322 if (!Config->VersionDefinitions.empty()) { 323 In<ELFT>::VerDef = make<VersionDefinitionSection<ELFT>>(); 324 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::VerDef); 325 } 326 327 In<ELFT>::VerNeed = make<VersionNeedSection<ELFT>>(); 328 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::VerNeed); 329 330 if (Config->GnuHash) { 331 In<ELFT>::GnuHashTab = make<GnuHashTableSection<ELFT>>(); 332 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::GnuHashTab); 333 } 334 335 if (Config->SysvHash) { 336 In<ELFT>::HashTab = make<HashTableSection<ELFT>>(); 337 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::HashTab); 338 } 339 340 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::Dynamic); 341 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::DynStrTab); 342 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::RelaDyn); 343 } 344 345 // Add .got. MIPS' .got is so different from the other archs, 346 // it has its own class. 347 if (Config->EMachine == EM_MIPS) { 348 In<ELFT>::MipsGot = make<MipsGotSection<ELFT>>(); 349 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::MipsGot); 350 } else { 351 In<ELFT>::Got = make<GotSection<ELFT>>(); 352 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::Got); 353 } 354 355 In<ELFT>::GotPlt = make<GotPltSection<ELFT>>(); 356 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::GotPlt); 357 In<ELFT>::IgotPlt = make<IgotPltSection<ELFT>>(); 358 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::IgotPlt); 359 360 if (Config->GdbIndex) { 361 In<ELFT>::GdbIndex = make<GdbIndexSection<ELFT>>(); 362 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::GdbIndex); 363 } 364 365 // We always need to add rel[a].plt to output if it has entries. 366 // Even for static linking it can contain R_[*]_IRELATIVE relocations. 367 In<ELFT>::RelaPlt = make<RelocationSection<ELFT>>( 368 Config->Rela ? ".rela.plt" : ".rel.plt", false /*Sort*/); 369 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::RelaPlt); 370 371 // The RelaIplt immediately follows .rel.plt (.rel.dyn for ARM) to ensure 372 // that the IRelative relocations are processed last by the dynamic loader 373 In<ELFT>::RelaIplt = make<RelocationSection<ELFT>>( 374 (Config->EMachine == EM_ARM) ? ".rel.dyn" : In<ELFT>::RelaPlt->Name, 375 false /*Sort*/); 376 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::RelaIplt); 377 378 In<ELFT>::Plt = make<PltSection<ELFT>>(); 379 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::Plt); 380 In<ELFT>::Iplt = make<IpltSection<ELFT>>(); 381 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::Iplt); 382 383 if (Config->EhFrameHdr) { 384 In<ELFT>::EhFrameHdr = make<EhFrameHeader<ELFT>>(); 385 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::EhFrameHdr); 386 } 387 388 if (In<ELFT>::SymTab) 389 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::SymTab); 390 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::ShStrTab); 391 if (In<ELFT>::StrTab) 392 Symtab<ELFT>::X->Sections.push_back(In<ELFT>::StrTab); 393 } 394 395 template <class ELFT> 396 static bool shouldKeepInSymtab(InputSectionBase<ELFT> *Sec, StringRef SymName, 397 const SymbolBody &B) { 398 if (B.isFile()) 399 return false; 400 401 // We keep sections in symtab for relocatable output. 402 if (B.isSection()) 403 return Config->Relocatable; 404 405 // If sym references a section in a discarded group, don't keep it. 406 if (Sec == &InputSection<ELFT>::Discarded) 407 return false; 408 409 if (Config->Discard == DiscardPolicy::None) 410 return true; 411 412 // In ELF assembly .L symbols are normally discarded by the assembler. 413 // If the assembler fails to do so, the linker discards them if 414 // * --discard-locals is used. 415 // * The symbol is in a SHF_MERGE section, which is normally the reason for 416 // the assembler keeping the .L symbol. 417 if (!SymName.startswith(".L") && !SymName.empty()) 418 return true; 419 420 if (Config->Discard == DiscardPolicy::Locals) 421 return false; 422 423 return !Sec || !(Sec->Flags & SHF_MERGE); 424 } 425 426 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) { 427 if (!B.isLocal() && !B.symbol()->IsUsedInRegularObj) 428 return false; 429 430 // If --retain-symbols-file is given, we'll keep only symbols listed in that 431 // file. 432 if (Config->Discard == DiscardPolicy::RetainFile && 433 !Config->RetainSymbolsFile.count(B.getName())) 434 return false; 435 436 if (auto *D = dyn_cast<DefinedRegular<ELFT>>(&B)) { 437 // Always include absolute symbols. 438 if (!D->Section) 439 return true; 440 // Exclude symbols pointing to garbage-collected sections. 441 if (!D->Section->Live) 442 return false; 443 if (auto *S = dyn_cast<MergeInputSection<ELFT>>(D->Section)) 444 if (!S->getSectionPiece(D->Value)->Live) 445 return false; 446 } 447 return true; 448 } 449 450 // Local symbols are not in the linker's symbol table. This function scans 451 // each object file's symbol table to copy local symbols to the output. 452 template <class ELFT> void Writer<ELFT>::copyLocalSymbols() { 453 if (!In<ELFT>::SymTab) 454 return; 455 for (elf::ObjectFile<ELFT> *F : Symtab<ELFT>::X->getObjectFiles()) { 456 for (SymbolBody *B : F->getLocalSymbols()) { 457 if (!B->IsLocal) 458 fatal(toString(F) + 459 ": broken object: getLocalSymbols returns a non-local symbol"); 460 auto *DR = dyn_cast<DefinedRegular<ELFT>>(B); 461 462 // No reason to keep local undefined symbol in symtab. 463 if (!DR) 464 continue; 465 if (!includeInSymtab<ELFT>(*B)) 466 continue; 467 468 InputSectionBase<ELFT> *Sec = DR->Section; 469 if (!shouldKeepInSymtab<ELFT>(Sec, B->getName(), *B)) 470 continue; 471 ++In<ELFT>::SymTab->NumLocals; 472 if (Config->Relocatable) 473 B->DynsymIndex = In<ELFT>::SymTab->NumLocals; 474 F->KeptLocalSyms.push_back(std::make_pair( 475 DR, In<ELFT>::SymTab->StrTabSec.addString(B->getName()))); 476 } 477 } 478 } 479 480 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections that 481 // we would like to make sure appear is a specific order to maximize their 482 // coverage by a single signed 16-bit offset from the TOC base pointer. 483 // Conversely, the special .tocbss section should be first among all SHT_NOBITS 484 // sections. This will put it next to the loaded special PPC64 sections (and, 485 // thus, within reach of the TOC base pointer). 486 static int getPPC64SectionRank(StringRef SectionName) { 487 return StringSwitch<int>(SectionName) 488 .Case(".tocbss", 0) 489 .Case(".branch_lt", 2) 490 .Case(".toc", 3) 491 .Case(".toc1", 4) 492 .Case(".opd", 5) 493 .Default(1); 494 } 495 496 // All sections with SHF_MIPS_GPREL flag should be grouped together 497 // because data in these sections is addressable with a gp relative address. 498 static int getMipsSectionRank(const OutputSectionBase *S) { 499 if ((S->Flags & SHF_MIPS_GPREL) == 0) 500 return 0; 501 if (S->getName() == ".got") 502 return 1; 503 return 2; 504 } 505 506 template <class ELFT> bool elf::isRelroSection(const OutputSectionBase *Sec) { 507 if (!Config->ZRelro) 508 return false; 509 uint64_t Flags = Sec->Flags; 510 if (!(Flags & SHF_ALLOC) || !(Flags & SHF_WRITE)) 511 return false; 512 if (Flags & SHF_TLS) 513 return true; 514 uint32_t Type = Sec->Type; 515 if (Type == SHT_INIT_ARRAY || Type == SHT_FINI_ARRAY || 516 Type == SHT_PREINIT_ARRAY) 517 return true; 518 if (Sec == In<ELFT>::GotPlt->OutSec) 519 return Config->ZNow; 520 if (Sec == In<ELFT>::Dynamic->OutSec) 521 return true; 522 if (In<ELFT>::Got && Sec == In<ELFT>::Got->OutSec) 523 return true; 524 if (Sec == Out<ELFT>::BssRelRo) 525 return true; 526 StringRef S = Sec->getName(); 527 return S == ".data.rel.ro" || S == ".ctors" || S == ".dtors" || S == ".jcr" || 528 S == ".eh_frame" || S == ".openbsd.randomdata"; 529 } 530 531 template <class ELFT> 532 static bool compareSectionsNonScript(const OutputSectionBase *A, 533 const OutputSectionBase *B) { 534 // Put .interp first because some loaders want to see that section 535 // on the first page of the executable file when loaded into memory. 536 bool AIsInterp = A->getName() == ".interp"; 537 bool BIsInterp = B->getName() == ".interp"; 538 if (AIsInterp != BIsInterp) 539 return AIsInterp; 540 541 // Allocatable sections go first to reduce the total PT_LOAD size and 542 // so debug info doesn't change addresses in actual code. 543 bool AIsAlloc = A->Flags & SHF_ALLOC; 544 bool BIsAlloc = B->Flags & SHF_ALLOC; 545 if (AIsAlloc != BIsAlloc) 546 return AIsAlloc; 547 548 // We don't have any special requirements for the relative order of two non 549 // allocatable sections. 550 if (!AIsAlloc) 551 return false; 552 553 // We want to put section specified by -T option first, so we 554 // can start assigning VA starting from them later. 555 auto AAddrSetI = Config->SectionStartMap.find(A->getName()); 556 auto BAddrSetI = Config->SectionStartMap.find(B->getName()); 557 bool AHasAddrSet = AAddrSetI != Config->SectionStartMap.end(); 558 bool BHasAddrSet = BAddrSetI != Config->SectionStartMap.end(); 559 if (AHasAddrSet != BHasAddrSet) 560 return AHasAddrSet; 561 if (AHasAddrSet) 562 return AAddrSetI->second < BAddrSetI->second; 563 564 // We want the read only sections first so that they go in the PT_LOAD 565 // covering the program headers at the start of the file. 566 bool AIsWritable = A->Flags & SHF_WRITE; 567 bool BIsWritable = B->Flags & SHF_WRITE; 568 if (AIsWritable != BIsWritable) 569 return BIsWritable; 570 571 if (!Config->SingleRoRx) { 572 // For a corresponding reason, put non exec sections first (the program 573 // header PT_LOAD is not executable). 574 // We only do that if we are not using linker scripts, since with linker 575 // scripts ro and rx sections are in the same PT_LOAD, so their relative 576 // order is not important. The same applies for -no-rosegment. 577 bool AIsExec = A->Flags & SHF_EXECINSTR; 578 bool BIsExec = B->Flags & SHF_EXECINSTR; 579 if (AIsExec != BIsExec) 580 return BIsExec; 581 } 582 583 // If we got here we know that both A and B are in the same PT_LOAD. 584 585 bool AIsTls = A->Flags & SHF_TLS; 586 bool BIsTls = B->Flags & SHF_TLS; 587 bool AIsNoBits = A->Type == SHT_NOBITS; 588 bool BIsNoBits = B->Type == SHT_NOBITS; 589 590 // The first requirement we have is to put (non-TLS) nobits sections last. The 591 // reason is that the only thing the dynamic linker will see about them is a 592 // p_memsz that is larger than p_filesz. Seeing that it zeros the end of the 593 // PT_LOAD, so that has to correspond to the nobits sections. 594 bool AIsNonTlsNoBits = AIsNoBits && !AIsTls; 595 bool BIsNonTlsNoBits = BIsNoBits && !BIsTls; 596 if (AIsNonTlsNoBits != BIsNonTlsNoBits) 597 return BIsNonTlsNoBits; 598 599 // We place nobits RelRo sections before plain r/w ones, and non-nobits RelRo 600 // sections after r/w ones, so that the RelRo sections are contiguous. 601 bool AIsRelRo = isRelroSection<ELFT>(A); 602 bool BIsRelRo = isRelroSection<ELFT>(B); 603 if (AIsRelRo != BIsRelRo) 604 return AIsNonTlsNoBits ? AIsRelRo : BIsRelRo; 605 606 // The TLS initialization block needs to be a single contiguous block in a R/W 607 // PT_LOAD, so stick TLS sections directly before the other RelRo R/W 608 // sections. The TLS NOBITS sections are placed here as they don't take up 609 // virtual address space in the PT_LOAD. 610 if (AIsTls != BIsTls) 611 return AIsTls; 612 613 // Within the TLS initialization block, the non-nobits sections need to appear 614 // first. 615 if (AIsNoBits != BIsNoBits) 616 return BIsNoBits; 617 618 // Some architectures have additional ordering restrictions for sections 619 // within the same PT_LOAD. 620 if (Config->EMachine == EM_PPC64) 621 return getPPC64SectionRank(A->getName()) < 622 getPPC64SectionRank(B->getName()); 623 if (Config->EMachine == EM_MIPS) 624 return getMipsSectionRank(A) < getMipsSectionRank(B); 625 626 return false; 627 } 628 629 // Output section ordering is determined by this function. 630 template <class ELFT> 631 static bool compareSections(const OutputSectionBase *A, 632 const OutputSectionBase *B) { 633 // For now, put sections mentioned in a linker script first. 634 int AIndex = Script<ELFT>::X->getSectionIndex(A->getName()); 635 int BIndex = Script<ELFT>::X->getSectionIndex(B->getName()); 636 bool AInScript = AIndex != INT_MAX; 637 bool BInScript = BIndex != INT_MAX; 638 if (AInScript != BInScript) 639 return AInScript; 640 // If both are in the script, use that order. 641 if (AInScript) 642 return AIndex < BIndex; 643 644 return compareSectionsNonScript<ELFT>(A, B); 645 } 646 647 // Program header entry 648 PhdrEntry::PhdrEntry(unsigned Type, unsigned Flags) { 649 p_type = Type; 650 p_flags = Flags; 651 } 652 653 void PhdrEntry::add(OutputSectionBase *Sec) { 654 Last = Sec; 655 if (!First) 656 First = Sec; 657 p_align = std::max(p_align, Sec->Addralign); 658 if (p_type == PT_LOAD) 659 Sec->FirstInPtLoad = First; 660 } 661 662 template <class ELFT> 663 static void addOptionalSynthetic(StringRef Name, OutputSectionBase *Sec, 664 typename ELFT::uint Val, 665 uint8_t StOther = STV_HIDDEN) { 666 if (SymbolBody *S = Symtab<ELFT>::X->find(Name)) 667 if (!S->isInCurrentDSO()) 668 Symtab<ELFT>::X->addSynthetic(Name, Sec, Val, StOther); 669 } 670 671 template <class ELFT> 672 static Symbol *addRegular(StringRef Name, InputSectionBase<ELFT> *Sec, 673 typename ELFT::uint Value) { 674 // The linker generated symbols are added as STB_WEAK to allow user defined 675 // ones to override them. 676 return Symtab<ELFT>::X->addRegular(Name, STV_HIDDEN, STT_NOTYPE, Value, 677 /*Size=*/0, STB_WEAK, Sec, 678 /*File=*/nullptr); 679 } 680 681 template <class ELFT> 682 static Symbol *addOptionalRegular(StringRef Name, InputSectionBase<ELFT> *IS, 683 typename ELFT::uint Value) { 684 SymbolBody *S = Symtab<ELFT>::X->find(Name); 685 if (!S) 686 return nullptr; 687 if (S->isInCurrentDSO()) 688 return S->symbol(); 689 return addRegular(Name, IS, Value); 690 } 691 692 // The beginning and the ending of .rel[a].plt section are marked 693 // with __rel[a]_iplt_{start,end} symbols if it is a statically linked 694 // executable. The runtime needs these symbols in order to resolve 695 // all IRELATIVE relocs on startup. For dynamic executables, we don't 696 // need these symbols, since IRELATIVE relocs are resolved through GOT 697 // and PLT. For details, see http://www.airs.com/blog/archives/403. 698 template <class ELFT> void Writer<ELFT>::addRelIpltSymbols() { 699 if (In<ELFT>::DynSymTab) 700 return; 701 StringRef S = Config->Rela ? "__rela_iplt_start" : "__rel_iplt_start"; 702 addOptionalRegular<ELFT>(S, In<ELFT>::RelaIplt, 0); 703 704 S = Config->Rela ? "__rela_iplt_end" : "__rel_iplt_end"; 705 addOptionalRegular<ELFT>(S, In<ELFT>::RelaIplt, -1); 706 } 707 708 // The linker is expected to define some symbols depending on 709 // the linking result. This function defines such symbols. 710 template <class ELFT> void Writer<ELFT>::addReservedSymbols() { 711 if (Config->EMachine == EM_MIPS) { 712 // Define _gp for MIPS. st_value of _gp symbol will be updated by Writer 713 // so that it points to an absolute address which by default is relative 714 // to GOT. Default offset is 0x7ff0. 715 // See "Global Data Symbols" in Chapter 6 in the following document: 716 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 717 ElfSym<ELFT>::MipsGp = 718 Symtab<ELFT>::X->addAbsolute("_gp", STV_HIDDEN, STB_LOCAL); 719 720 // On MIPS O32 ABI, _gp_disp is a magic symbol designates offset between 721 // start of function and 'gp' pointer into GOT. To simplify relocation 722 // calculation we assign _gp value to it and calculate corresponding 723 // relocations as relative to this value. 724 if (Symtab<ELFT>::X->find("_gp_disp")) 725 ElfSym<ELFT>::MipsGpDisp = 726 Symtab<ELFT>::X->addAbsolute("_gp_disp", STV_HIDDEN, STB_LOCAL); 727 728 // The __gnu_local_gp is a magic symbol equal to the current value of 'gp' 729 // pointer. This symbol is used in the code generated by .cpload pseudo-op 730 // in case of using -mno-shared option. 731 // https://sourceware.org/ml/binutils/2004-12/msg00094.html 732 if (Symtab<ELFT>::X->find("__gnu_local_gp")) 733 ElfSym<ELFT>::MipsLocalGp = 734 Symtab<ELFT>::X->addAbsolute("__gnu_local_gp", STV_HIDDEN, STB_LOCAL); 735 } 736 737 // In the assembly for 32 bit x86 the _GLOBAL_OFFSET_TABLE_ symbol 738 // is magical and is used to produce a R_386_GOTPC relocation. 739 // The R_386_GOTPC relocation value doesn't actually depend on the 740 // symbol value, so it could use an index of STN_UNDEF which, according 741 // to the spec, means the symbol value is 0. 742 // Unfortunately both gas and MC keep the _GLOBAL_OFFSET_TABLE_ symbol in 743 // the object file. 744 // The situation is even stranger on x86_64 where the assembly doesn't 745 // need the magical symbol, but gas still puts _GLOBAL_OFFSET_TABLE_ as 746 // an undefined symbol in the .o files. 747 // Given that the symbol is effectively unused, we just create a dummy 748 // hidden one to avoid the undefined symbol error. 749 Symtab<ELFT>::X->addIgnored("_GLOBAL_OFFSET_TABLE_"); 750 751 // __tls_get_addr is defined by the dynamic linker for dynamic ELFs. For 752 // static linking the linker is required to optimize away any references to 753 // __tls_get_addr, so it's not defined anywhere. Create a hidden definition 754 // to avoid the undefined symbol error. As usual special cases are ARM and 755 // MIPS - the libc for these targets defines __tls_get_addr itself because 756 // there are no TLS optimizations for these targets. 757 if (!In<ELFT>::DynSymTab && 758 (Config->EMachine != EM_MIPS && Config->EMachine != EM_ARM)) 759 Symtab<ELFT>::X->addIgnored("__tls_get_addr"); 760 761 // If linker script do layout we do not need to create any standart symbols. 762 if (ScriptConfig->HasSections) 763 return; 764 765 ElfSym<ELFT>::EhdrStart = Symtab<ELFT>::X->addIgnored("__ehdr_start"); 766 767 auto Define = [this](StringRef S, DefinedRegular<ELFT> *&Sym1, 768 DefinedRegular<ELFT> *&Sym2) { 769 Sym1 = Symtab<ELFT>::X->addIgnored(S, STV_DEFAULT); 770 771 // The name without the underscore is not a reserved name, 772 // so it is defined only when there is a reference against it. 773 assert(S.startswith("_")); 774 S = S.substr(1); 775 if (SymbolBody *B = Symtab<ELFT>::X->find(S)) 776 if (B->isUndefined()) 777 Sym2 = Symtab<ELFT>::X->addAbsolute(S, STV_DEFAULT); 778 }; 779 780 Define("_end", ElfSym<ELFT>::End, ElfSym<ELFT>::End2); 781 Define("_etext", ElfSym<ELFT>::Etext, ElfSym<ELFT>::Etext2); 782 Define("_edata", ElfSym<ELFT>::Edata, ElfSym<ELFT>::Edata2); 783 } 784 785 // Sort input sections by section name suffixes for 786 // __attribute__((init_priority(N))). 787 template <class ELFT> static void sortInitFini(OutputSectionBase *S) { 788 if (S) 789 reinterpret_cast<OutputSection<ELFT> *>(S)->sortInitFini(); 790 } 791 792 // Sort input sections by the special rule for .ctors and .dtors. 793 template <class ELFT> static void sortCtorsDtors(OutputSectionBase *S) { 794 if (S) 795 reinterpret_cast<OutputSection<ELFT> *>(S)->sortCtorsDtors(); 796 } 797 798 // Sort input sections using the list provided by --symbol-ordering-file. 799 template <class ELFT> 800 static void sortBySymbolsOrder(ArrayRef<OutputSectionBase *> OutputSections) { 801 if (Config->SymbolOrderingFile.empty()) 802 return; 803 804 // Build a map from symbols to their priorities. Symbols that didn't 805 // appear in the symbol ordering file have the lowest priority 0. 806 // All explicitly mentioned symbols have negative (higher) priorities. 807 DenseMap<StringRef, int> SymbolOrder; 808 int Priority = -Config->SymbolOrderingFile.size(); 809 for (StringRef S : Config->SymbolOrderingFile) 810 SymbolOrder.insert({S, Priority++}); 811 812 // Build a map from sections to their priorities. 813 DenseMap<InputSectionBase<ELFT> *, int> SectionOrder; 814 for (elf::ObjectFile<ELFT> *File : Symtab<ELFT>::X->getObjectFiles()) { 815 for (SymbolBody *Body : File->getSymbols()) { 816 auto *D = dyn_cast<DefinedRegular<ELFT>>(Body); 817 if (!D || !D->Section) 818 continue; 819 int &Priority = SectionOrder[D->Section]; 820 Priority = std::min(Priority, SymbolOrder.lookup(D->getName())); 821 } 822 } 823 824 // Sort sections by priority. 825 for (OutputSectionBase *Base : OutputSections) 826 if (auto *Sec = dyn_cast<OutputSection<ELFT>>(Base)) 827 Sec->sort([&](InputSection<ELFT> *S) { return SectionOrder.lookup(S); }); 828 } 829 830 template <class ELFT> 831 void Writer<ELFT>::forEachRelSec( 832 std::function<void(InputSectionBase<ELFT> &)> Fn) { 833 for (InputSectionBase<ELFT> *IS : Symtab<ELFT>::X->Sections) { 834 if (!IS->Live) 835 continue; 836 // Scan all relocations. Each relocation goes through a series 837 // of tests to determine if it needs special treatment, such as 838 // creating GOT, PLT, copy relocations, etc. 839 // Note that relocations for non-alloc sections are directly 840 // processed by InputSection::relocateNonAlloc. 841 if (!(IS->Flags & SHF_ALLOC)) 842 continue; 843 if (isa<InputSection<ELFT>>(IS) || isa<EhInputSection<ELFT>>(IS)) 844 Fn(*IS); 845 } 846 } 847 848 template <class ELFT> 849 void Writer<ELFT>::addInputSec(InputSectionBase<ELFT> *IS) { 850 if (!IS) 851 return; 852 853 if (!IS->Live) { 854 reportDiscarded(IS); 855 return; 856 } 857 OutputSectionBase *Sec; 858 bool IsNew; 859 StringRef OutsecName = getOutputSectionName(IS->Name); 860 std::tie(Sec, IsNew) = Factory.create(IS, OutsecName); 861 if (IsNew) 862 OutputSections.push_back(Sec); 863 Sec->addSection(IS); 864 } 865 866 template <class ELFT> void Writer<ELFT>::createSections() { 867 for (InputSectionBase<ELFT> *IS : Symtab<ELFT>::X->Sections) 868 addInputSec(IS); 869 870 sortBySymbolsOrder<ELFT>(OutputSections); 871 sortInitFini<ELFT>(findSection(".init_array")); 872 sortInitFini<ELFT>(findSection(".fini_array")); 873 sortCtorsDtors<ELFT>(findSection(".ctors")); 874 sortCtorsDtors<ELFT>(findSection(".dtors")); 875 876 for (OutputSectionBase *Sec : OutputSections) 877 Sec->assignOffsets(); 878 } 879 880 template <class ELFT> 881 static bool canSharePtLoad(const OutputSectionBase &S1, 882 const OutputSectionBase &S2) { 883 if (!(S1.Flags & SHF_ALLOC) || !(S2.Flags & SHF_ALLOC)) 884 return false; 885 886 bool S1IsWrite = S1.Flags & SHF_WRITE; 887 bool S2IsWrite = S2.Flags & SHF_WRITE; 888 if (S1IsWrite != S2IsWrite) 889 return false; 890 891 if (!S1IsWrite) 892 return true; // RO and RX share a PT_LOAD with linker scripts. 893 return (S1.Flags & SHF_EXECINSTR) == (S2.Flags & SHF_EXECINSTR); 894 } 895 896 template <class ELFT> void Writer<ELFT>::sortSections() { 897 // Don't sort if using -r. It is not necessary and we want to preserve the 898 // relative order for SHF_LINK_ORDER sections. 899 if (Config->Relocatable) 900 return; 901 if (!ScriptConfig->HasSections) { 902 std::stable_sort(OutputSections.begin(), OutputSections.end(), 903 compareSectionsNonScript<ELFT>); 904 return; 905 } 906 Script<ELFT>::X->adjustSectionsBeforeSorting(); 907 908 // The order of the sections in the script is arbitrary and may not agree with 909 // compareSectionsNonScript. This means that we cannot easily define a 910 // strict weak ordering. To see why, consider a comparison of a section in the 911 // script and one not in the script. We have a two simple options: 912 // * Make them equivalent (a is not less than b, and b is not less than a). 913 // The problem is then that equivalence has to be transitive and we can 914 // have sections a, b and c with only b in a script and a less than c 915 // which breaks this property. 916 // * Use compareSectionsNonScript. Given that the script order doesn't have 917 // to match, we can end up with sections a, b, c, d where b and c are in the 918 // script and c is compareSectionsNonScript less than b. In which case d 919 // can be equivalent to c, a to b and d < a. As a concrete example: 920 // .a (rx) # not in script 921 // .b (rx) # in script 922 // .c (ro) # in script 923 // .d (ro) # not in script 924 // 925 // The way we define an order then is: 926 // * First put script sections at the start and sort the script and 927 // non-script sections independently. 928 // * Move each non-script section to its preferred position. We try 929 // to put each section in the last position where it it can share 930 // a PT_LOAD. 931 932 std::stable_sort(OutputSections.begin(), OutputSections.end(), 933 compareSections<ELFT>); 934 935 auto I = OutputSections.begin(); 936 auto E = OutputSections.end(); 937 auto NonScriptI = 938 std::find_if(OutputSections.begin(), E, [](OutputSectionBase *S) { 939 return Script<ELFT>::X->getSectionIndex(S->getName()) == INT_MAX; 940 }); 941 while (NonScriptI != E) { 942 auto BestPos = std::max_element( 943 I, NonScriptI, [&](OutputSectionBase *&A, OutputSectionBase *&B) { 944 bool ACanSharePtLoad = canSharePtLoad<ELFT>(**NonScriptI, *A); 945 bool BCanSharePtLoad = canSharePtLoad<ELFT>(**NonScriptI, *B); 946 if (ACanSharePtLoad != BCanSharePtLoad) 947 return BCanSharePtLoad; 948 949 bool ACmp = compareSectionsNonScript<ELFT>(*NonScriptI, A); 950 bool BCmp = compareSectionsNonScript<ELFT>(*NonScriptI, B); 951 if (ACmp != BCmp) 952 return BCmp; // FIXME: missing test 953 954 size_t PosA = &A - &OutputSections[0]; 955 size_t PosB = &B - &OutputSections[0]; 956 return ACmp ? PosA > PosB : PosA < PosB; 957 }); 958 959 // max_element only returns NonScriptI if the range is empty. If the range 960 // is not empty we should consider moving the the element forward one 961 // position. 962 if (BestPos != NonScriptI && 963 !compareSectionsNonScript<ELFT>(*NonScriptI, *BestPos)) 964 ++BestPos; 965 std::rotate(BestPos, NonScriptI, NonScriptI + 1); 966 ++NonScriptI; 967 } 968 969 Script<ELFT>::X->adjustSectionsAfterSorting(); 970 } 971 972 template <class ELFT> 973 static void 974 finalizeSynthetic(const std::vector<SyntheticSection<ELFT> *> &Sections) { 975 for (SyntheticSection<ELFT> *SS : Sections) 976 if (SS && SS->OutSec && !SS->empty()) { 977 SS->finalize(); 978 SS->OutSec->Size = 0; 979 SS->OutSec->assignOffsets(); 980 } 981 } 982 983 // We need to add input synthetic sections early in createSyntheticSections() 984 // to make them visible from linkescript side. But not all sections are always 985 // required to be in output. For example we don't need dynamic section content 986 // sometimes. This function filters out such unused sections from output. 987 template <class ELFT> 988 static void removeUnusedSyntheticSections(std::vector<OutputSectionBase *> &V) { 989 // Input synthetic sections are placed after all regular ones. We iterate over 990 // them all and exit at first non-synthetic. 991 for (InputSectionBase<ELFT> *S : llvm::reverse(Symtab<ELFT>::X->Sections)) { 992 SyntheticSection<ELFT> *SS = dyn_cast<SyntheticSection<ELFT>>(S); 993 if (!SS) 994 return; 995 if (!SS->empty() || !SS->OutSec) 996 continue; 997 998 OutputSection<ELFT> *OutSec = cast<OutputSection<ELFT>>(SS->OutSec); 999 OutSec->Sections.erase( 1000 std::find(OutSec->Sections.begin(), OutSec->Sections.end(), SS)); 1001 // If there is no other sections in output section, remove it from output. 1002 if (OutSec->Sections.empty()) 1003 V.erase(std::find(V.begin(), V.end(), OutSec)); 1004 } 1005 } 1006 1007 // Create output section objects and add them to OutputSections. 1008 template <class ELFT> void Writer<ELFT>::finalizeSections() { 1009 Out<ELFT>::DebugInfo = findSection(".debug_info"); 1010 Out<ELFT>::PreinitArray = findSection(".preinit_array"); 1011 Out<ELFT>::InitArray = findSection(".init_array"); 1012 Out<ELFT>::FiniArray = findSection(".fini_array"); 1013 1014 // The linker needs to define SECNAME_start, SECNAME_end and SECNAME_stop 1015 // symbols for sections, so that the runtime can get the start and end 1016 // addresses of each section by section name. Add such symbols. 1017 if (!Config->Relocatable) { 1018 addStartEndSymbols(); 1019 for (OutputSectionBase *Sec : OutputSections) 1020 addStartStopSymbols(Sec); 1021 } 1022 1023 // Add _DYNAMIC symbol. Unlike GNU gold, our _DYNAMIC symbol has no type. 1024 // It should be okay as no one seems to care about the type. 1025 // Even the author of gold doesn't remember why gold behaves that way. 1026 // https://sourceware.org/ml/binutils/2002-03/msg00360.html 1027 if (In<ELFT>::DynSymTab) 1028 addRegular("_DYNAMIC", In<ELFT>::Dynamic, 0); 1029 1030 // Define __rel[a]_iplt_{start,end} symbols if needed. 1031 addRelIpltSymbols(); 1032 1033 if (!Out<ELFT>::EhFrame->empty()) { 1034 OutputSections.push_back(Out<ELFT>::EhFrame); 1035 Out<ELFT>::EhFrame->finalize(); 1036 } 1037 1038 // Scan relocations. This must be done after every symbol is declared so that 1039 // we can correctly decide if a dynamic relocation is needed. 1040 forEachRelSec(scanRelocations<ELFT>); 1041 1042 // Now that we have defined all possible symbols including linker- 1043 // synthesized ones. Visit all symbols to give the finishing touches. 1044 for (Symbol *S : Symtab<ELFT>::X->getSymbols()) { 1045 SymbolBody *Body = S->body(); 1046 1047 if (!includeInSymtab<ELFT>(*Body)) 1048 continue; 1049 if (In<ELFT>::SymTab) 1050 In<ELFT>::SymTab->addSymbol(Body); 1051 1052 if (In<ELFT>::DynSymTab && S->includeInDynsym()) { 1053 In<ELFT>::DynSymTab->addSymbol(Body); 1054 if (auto *SS = dyn_cast<SharedSymbol<ELFT>>(Body)) 1055 if (SS->file()->isNeeded()) 1056 In<ELFT>::VerNeed->addSymbol(SS); 1057 } 1058 } 1059 1060 // Do not proceed if there was an undefined symbol. 1061 if (ErrorCount) 1062 return; 1063 1064 // So far we have added sections from input object files. 1065 // This function adds linker-created Out<ELFT>::* sections. 1066 addPredefinedSections(); 1067 removeUnusedSyntheticSections<ELFT>(OutputSections); 1068 1069 sortSections(); 1070 1071 unsigned I = 1; 1072 for (OutputSectionBase *Sec : OutputSections) { 1073 Sec->SectionIndex = I++; 1074 Sec->ShName = In<ELFT>::ShStrTab->addString(Sec->getName()); 1075 } 1076 1077 // Binary and relocatable output does not have PHDRS. 1078 // The headers have to be created before finalize as that can influence the 1079 // image base and the dynamic section on mips includes the image base. 1080 if (!Config->Relocatable && !Config->OFormatBinary) { 1081 Phdrs = Script<ELFT>::X->hasPhdrsCommands() ? Script<ELFT>::X->createPhdrs() 1082 : createPhdrs(); 1083 addPtArmExid(Phdrs); 1084 fixHeaders(); 1085 } 1086 1087 // Fill other section headers. The dynamic table is finalized 1088 // at the end because some tags like RELSZ depend on result 1089 // of finalizing other sections. 1090 for (OutputSectionBase *Sec : OutputSections) 1091 Sec->finalize(); 1092 1093 // Dynamic section must be the last one in this list and dynamic 1094 // symbol table section (DynSymTab) must be the first one. 1095 finalizeSynthetic<ELFT>( 1096 {In<ELFT>::DynSymTab, In<ELFT>::GnuHashTab, In<ELFT>::HashTab, 1097 In<ELFT>::SymTab, In<ELFT>::ShStrTab, In<ELFT>::StrTab, 1098 In<ELFT>::VerDef, In<ELFT>::DynStrTab, In<ELFT>::GdbIndex, 1099 In<ELFT>::Got, In<ELFT>::MipsGot, In<ELFT>::IgotPlt, 1100 In<ELFT>::GotPlt, In<ELFT>::RelaDyn, In<ELFT>::RelaIplt, 1101 In<ELFT>::RelaPlt, In<ELFT>::Plt, In<ELFT>::Iplt, 1102 In<ELFT>::Plt, In<ELFT>::EhFrameHdr, In<ELFT>::VerSym, 1103 In<ELFT>::VerNeed, In<ELFT>::Dynamic}); 1104 } 1105 1106 template <class ELFT> void Writer<ELFT>::addPredefinedSections() { 1107 if (Out<ELFT>::Bss->Size > 0) 1108 OutputSections.push_back(Out<ELFT>::Bss); 1109 if (Out<ELFT>::BssRelRo->Size > 0) 1110 OutputSections.push_back(Out<ELFT>::BssRelRo); 1111 1112 auto OS = dyn_cast_or_null<OutputSection<ELFT>>(findSection(".ARM.exidx")); 1113 if (OS && !OS->Sections.empty() && !Config->Relocatable) 1114 OS->addSection(make<ARMExidxSentinelSection<ELFT>>()); 1115 } 1116 1117 // The linker is expected to define SECNAME_start and SECNAME_end 1118 // symbols for a few sections. This function defines them. 1119 template <class ELFT> void Writer<ELFT>::addStartEndSymbols() { 1120 auto Define = [&](StringRef Start, StringRef End, OutputSectionBase *OS) { 1121 // These symbols resolve to the image base if the section does not exist. 1122 // A special value -1 indicates end of the section. 1123 addOptionalSynthetic<ELFT>(Start, OS, 0); 1124 addOptionalSynthetic<ELFT>(End, OS, OS ? -1 : 0); 1125 }; 1126 1127 Define("__preinit_array_start", "__preinit_array_end", 1128 Out<ELFT>::PreinitArray); 1129 Define("__init_array_start", "__init_array_end", Out<ELFT>::InitArray); 1130 Define("__fini_array_start", "__fini_array_end", Out<ELFT>::FiniArray); 1131 1132 if (OutputSectionBase *Sec = findSection(".ARM.exidx")) 1133 Define("__exidx_start", "__exidx_end", Sec); 1134 } 1135 1136 // If a section name is valid as a C identifier (which is rare because of 1137 // the leading '.'), linkers are expected to define __start_<secname> and 1138 // __stop_<secname> symbols. They are at beginning and end of the section, 1139 // respectively. This is not requested by the ELF standard, but GNU ld and 1140 // gold provide the feature, and used by many programs. 1141 template <class ELFT> 1142 void Writer<ELFT>::addStartStopSymbols(OutputSectionBase *Sec) { 1143 StringRef S = Sec->getName(); 1144 if (!isValidCIdentifier(S)) 1145 return; 1146 addOptionalSynthetic<ELFT>(Saver.save("__start_" + S), Sec, 0, STV_DEFAULT); 1147 addOptionalSynthetic<ELFT>(Saver.save("__stop_" + S), Sec, -1, STV_DEFAULT); 1148 } 1149 1150 template <class ELFT> 1151 OutputSectionBase *Writer<ELFT>::findSection(StringRef Name) { 1152 for (OutputSectionBase *Sec : OutputSections) 1153 if (Sec->getName() == Name) 1154 return Sec; 1155 return nullptr; 1156 } 1157 1158 template <class ELFT> static bool needsPtLoad(OutputSectionBase *Sec) { 1159 if (!(Sec->Flags & SHF_ALLOC)) 1160 return false; 1161 1162 // Don't allocate VA space for TLS NOBITS sections. The PT_TLS PHDR is 1163 // responsible for allocating space for them, not the PT_LOAD that 1164 // contains the TLS initialization image. 1165 if (Sec->Flags & SHF_TLS && Sec->Type == SHT_NOBITS) 1166 return false; 1167 return true; 1168 } 1169 1170 // Linker scripts are responsible for aligning addresses. Unfortunately, most 1171 // linker scripts are designed for creating two PT_LOADs only, one RX and one 1172 // RW. This means that there is no alignment in the RO to RX transition and we 1173 // cannot create a PT_LOAD there. 1174 template <class ELFT> 1175 static typename ELFT::uint computeFlags(typename ELFT::uint F) { 1176 if (Config->OMagic) 1177 return PF_R | PF_W | PF_X; 1178 if (Config->SingleRoRx && !(F & PF_W)) 1179 return F | PF_X; 1180 return F; 1181 } 1182 1183 // Decide which program headers to create and which sections to include in each 1184 // one. 1185 template <class ELFT> std::vector<PhdrEntry> Writer<ELFT>::createPhdrs() { 1186 std::vector<PhdrEntry> Ret; 1187 auto AddHdr = [&](unsigned Type, unsigned Flags) -> PhdrEntry * { 1188 Ret.emplace_back(Type, Flags); 1189 return &Ret.back(); 1190 }; 1191 1192 // The first phdr entry is PT_PHDR which describes the program header itself. 1193 PhdrEntry &Hdr = *AddHdr(PT_PHDR, PF_R); 1194 Hdr.add(Out<ELFT>::ProgramHeaders); 1195 1196 // PT_INTERP must be the second entry if exists. 1197 if (OutputSectionBase *Sec = findSection(".interp")) { 1198 PhdrEntry &Hdr = *AddHdr(PT_INTERP, Sec->getPhdrFlags()); 1199 Hdr.add(Sec); 1200 } 1201 1202 // Add the first PT_LOAD segment for regular output sections. 1203 uintX_t Flags = computeFlags<ELFT>(PF_R); 1204 PhdrEntry *Load = AddHdr(PT_LOAD, Flags); 1205 1206 PhdrEntry TlsHdr(PT_TLS, PF_R); 1207 PhdrEntry RelRo(PT_GNU_RELRO, PF_R); 1208 PhdrEntry Note(PT_NOTE, PF_R); 1209 for (OutputSectionBase *Sec : OutputSections) { 1210 if (!(Sec->Flags & SHF_ALLOC)) 1211 break; 1212 1213 // If we meet TLS section then we create TLS header 1214 // and put all TLS sections inside for further use when 1215 // assign addresses. 1216 if (Sec->Flags & SHF_TLS) 1217 TlsHdr.add(Sec); 1218 1219 if (!needsPtLoad<ELFT>(Sec)) 1220 continue; 1221 1222 // Segments are contiguous memory regions that has the same attributes 1223 // (e.g. executable or writable). There is one phdr for each segment. 1224 // Therefore, we need to create a new phdr when the next section has 1225 // different flags or is loaded at a discontiguous address using AT linker 1226 // script command. 1227 uintX_t NewFlags = computeFlags<ELFT>(Sec->getPhdrFlags()); 1228 if (Script<ELFT>::X->hasLMA(Sec->getName()) || Flags != NewFlags) { 1229 Load = AddHdr(PT_LOAD, NewFlags); 1230 Flags = NewFlags; 1231 } 1232 1233 Load->add(Sec); 1234 1235 if (isRelroSection<ELFT>(Sec)) 1236 RelRo.add(Sec); 1237 if (Sec->Type == SHT_NOTE) 1238 Note.add(Sec); 1239 } 1240 1241 // Add the TLS segment unless it's empty. 1242 if (TlsHdr.First) 1243 Ret.push_back(std::move(TlsHdr)); 1244 1245 // Add an entry for .dynamic. 1246 if (In<ELFT>::DynSymTab) { 1247 PhdrEntry &H = 1248 *AddHdr(PT_DYNAMIC, In<ELFT>::Dynamic->OutSec->getPhdrFlags()); 1249 H.add(In<ELFT>::Dynamic->OutSec); 1250 } 1251 1252 // PT_GNU_RELRO includes all sections that should be marked as 1253 // read-only by dynamic linker after proccessing relocations. 1254 if (RelRo.First) 1255 Ret.push_back(std::move(RelRo)); 1256 1257 // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. 1258 if (!Out<ELFT>::EhFrame->empty() && In<ELFT>::EhFrameHdr) { 1259 PhdrEntry &Hdr = 1260 *AddHdr(PT_GNU_EH_FRAME, In<ELFT>::EhFrameHdr->OutSec->getPhdrFlags()); 1261 Hdr.add(In<ELFT>::EhFrameHdr->OutSec); 1262 } 1263 1264 // PT_OPENBSD_RANDOMIZE specifies the location and size of a part of the 1265 // memory image of the program that must be filled with random data before any 1266 // code in the object is executed. 1267 if (OutputSectionBase *Sec = findSection(".openbsd.randomdata")) { 1268 PhdrEntry &Hdr = *AddHdr(PT_OPENBSD_RANDOMIZE, Sec->getPhdrFlags()); 1269 Hdr.add(Sec); 1270 } 1271 1272 // PT_GNU_STACK is a special section to tell the loader to make the 1273 // pages for the stack non-executable. 1274 if (!Config->ZExecstack) { 1275 PhdrEntry &Hdr = *AddHdr(PT_GNU_STACK, PF_R | PF_W); 1276 if (Config->ZStackSize != uint64_t(-1)) 1277 Hdr.p_memsz = Config->ZStackSize; 1278 } 1279 1280 // PT_OPENBSD_WXNEEDED is a OpenBSD-specific header to mark the executable 1281 // is expected to perform W^X violations, such as calling mprotect(2) or 1282 // mmap(2) with PROT_WRITE | PROT_EXEC, which is prohibited by default on 1283 // OpenBSD. 1284 if (Config->ZWxneeded) 1285 AddHdr(PT_OPENBSD_WXNEEDED, PF_X); 1286 1287 if (Note.First) 1288 Ret.push_back(std::move(Note)); 1289 return Ret; 1290 } 1291 1292 template <class ELFT> 1293 void Writer<ELFT>::addPtArmExid(std::vector<PhdrEntry> &Phdrs) { 1294 if (Config->EMachine != EM_ARM) 1295 return; 1296 auto I = std::find_if( 1297 OutputSections.begin(), OutputSections.end(), 1298 [](OutputSectionBase *Sec) { return Sec->Type == SHT_ARM_EXIDX; }); 1299 if (I == OutputSections.end()) 1300 return; 1301 1302 // PT_ARM_EXIDX is the ARM EHABI equivalent of PT_GNU_EH_FRAME 1303 PhdrEntry ARMExidx(PT_ARM_EXIDX, PF_R); 1304 ARMExidx.add(*I); 1305 Phdrs.push_back(ARMExidx); 1306 } 1307 1308 // The first section of each PT_LOAD, the first section in PT_GNU_RELRO and the 1309 // first section after PT_GNU_RELRO have to be page aligned so that the dynamic 1310 // linker can set the permissions. 1311 template <class ELFT> void Writer<ELFT>::fixSectionAlignments() { 1312 for (const PhdrEntry &P : Phdrs) 1313 if (P.p_type == PT_LOAD && P.First) 1314 P.First->PageAlign = true; 1315 1316 for (const PhdrEntry &P : Phdrs) { 1317 if (P.p_type != PT_GNU_RELRO) 1318 continue; 1319 if (P.First) 1320 P.First->PageAlign = true; 1321 // Find the first section after PT_GNU_RELRO. If it is in a PT_LOAD we 1322 // have to align it to a page. 1323 auto End = OutputSections.end(); 1324 auto I = std::find(OutputSections.begin(), End, P.Last); 1325 if (I == End || (I + 1) == End) 1326 continue; 1327 OutputSectionBase *Sec = *(I + 1); 1328 if (needsPtLoad<ELFT>(Sec)) 1329 Sec->PageAlign = true; 1330 } 1331 } 1332 1333 template <class ELFT> 1334 void elf::allocateHeaders(MutableArrayRef<PhdrEntry> Phdrs, 1335 ArrayRef<OutputSectionBase *> OutputSections) { 1336 auto FirstPTLoad = 1337 std::find_if(Phdrs.begin(), Phdrs.end(), 1338 [](const PhdrEntry &E) { return E.p_type == PT_LOAD; }); 1339 if (FirstPTLoad == Phdrs.end()) 1340 return; 1341 if (FirstPTLoad->First) 1342 for (OutputSectionBase *Sec : OutputSections) 1343 if (Sec->FirstInPtLoad == FirstPTLoad->First) 1344 Sec->FirstInPtLoad = Out<ELFT>::ElfHeader; 1345 FirstPTLoad->First = Out<ELFT>::ElfHeader; 1346 if (!FirstPTLoad->Last) 1347 FirstPTLoad->Last = Out<ELFT>::ProgramHeaders; 1348 } 1349 1350 // We should set file offsets and VAs for elf header and program headers 1351 // sections. These are special, we do not include them into output sections 1352 // list, but have them to simplify the code. 1353 template <class ELFT> void Writer<ELFT>::fixHeaders() { 1354 Out<ELFT>::ProgramHeaders->Size = sizeof(Elf_Phdr) * Phdrs.size(); 1355 // If the script has SECTIONS, assignAddresses will compute the values. 1356 if (ScriptConfig->HasSections) 1357 return; 1358 1359 uintX_t HeaderSize = getHeaderSize<ELFT>(); 1360 // When -T<section> option is specified, lower the base to make room for those 1361 // sections. 1362 if (!Config->SectionStartMap.empty()) { 1363 uint64_t Min = -1; 1364 for (const auto &P : Config->SectionStartMap) 1365 Min = std::min(Min, P.second); 1366 if (HeaderSize < Min) 1367 Min -= HeaderSize; 1368 else 1369 AllocateHeader = false; 1370 if (Min < Config->ImageBase) 1371 Config->ImageBase = alignDown(Min, Config->MaxPageSize); 1372 } 1373 1374 if (AllocateHeader) 1375 allocateHeaders<ELFT>(Phdrs, OutputSections); 1376 1377 uintX_t BaseVA = Config->ImageBase; 1378 Out<ELFT>::ElfHeader->Addr = BaseVA; 1379 Out<ELFT>::ProgramHeaders->Addr = BaseVA + Out<ELFT>::ElfHeader->Size; 1380 } 1381 1382 // Assign VAs (addresses at run-time) to output sections. 1383 template <class ELFT> void Writer<ELFT>::assignAddresses() { 1384 uintX_t VA = Config->ImageBase; 1385 if (AllocateHeader) 1386 VA += getHeaderSize<ELFT>(); 1387 uintX_t ThreadBssOffset = 0; 1388 for (OutputSectionBase *Sec : OutputSections) { 1389 uintX_t Alignment = Sec->Addralign; 1390 if (Sec->PageAlign) 1391 Alignment = std::max<uintX_t>(Alignment, Config->MaxPageSize); 1392 1393 auto I = Config->SectionStartMap.find(Sec->getName()); 1394 if (I != Config->SectionStartMap.end()) 1395 VA = I->second; 1396 1397 // We only assign VAs to allocated sections. 1398 if (needsPtLoad<ELFT>(Sec)) { 1399 VA = alignTo(VA, Alignment); 1400 Sec->Addr = VA; 1401 VA += Sec->Size; 1402 } else if (Sec->Flags & SHF_TLS && Sec->Type == SHT_NOBITS) { 1403 uintX_t TVA = VA + ThreadBssOffset; 1404 TVA = alignTo(TVA, Alignment); 1405 Sec->Addr = TVA; 1406 ThreadBssOffset = TVA - VA + Sec->Size; 1407 } 1408 } 1409 } 1410 1411 // Adjusts the file alignment for a given output section and returns 1412 // its new file offset. The file offset must be the same with its 1413 // virtual address (modulo the page size) so that the loader can load 1414 // executables without any address adjustment. 1415 template <class ELFT, class uintX_t> 1416 static uintX_t getFileAlignment(uintX_t Off, OutputSectionBase *Sec) { 1417 OutputSectionBase *First = Sec->FirstInPtLoad; 1418 // If the section is not in a PT_LOAD, we just have to align it. 1419 if (!First) 1420 return alignTo(Off, Sec->Addralign); 1421 1422 // The first section in a PT_LOAD has to have congruent offset and address 1423 // module the page size. 1424 if (Sec == First) 1425 return alignTo(Off, Config->MaxPageSize, Sec->Addr); 1426 1427 // If two sections share the same PT_LOAD the file offset is calculated 1428 // using this formula: Off2 = Off1 + (VA2 - VA1). 1429 return First->Offset + Sec->Addr - First->Addr; 1430 } 1431 1432 template <class ELFT, class uintX_t> 1433 void setOffset(OutputSectionBase *Sec, uintX_t &Off) { 1434 if (Sec->Type == SHT_NOBITS) { 1435 Sec->Offset = Off; 1436 return; 1437 } 1438 1439 Off = getFileAlignment<ELFT>(Off, Sec); 1440 Sec->Offset = Off; 1441 Off += Sec->Size; 1442 } 1443 1444 template <class ELFT> void Writer<ELFT>::assignFileOffsetsBinary() { 1445 uintX_t Off = 0; 1446 for (OutputSectionBase *Sec : OutputSections) 1447 if (Sec->Flags & SHF_ALLOC) 1448 setOffset<ELFT>(Sec, Off); 1449 FileSize = alignTo(Off, sizeof(uintX_t)); 1450 } 1451 1452 // Assign file offsets to output sections. 1453 template <class ELFT> void Writer<ELFT>::assignFileOffsets() { 1454 uintX_t Off = 0; 1455 setOffset<ELFT>(Out<ELFT>::ElfHeader, Off); 1456 setOffset<ELFT>(Out<ELFT>::ProgramHeaders, Off); 1457 1458 for (OutputSectionBase *Sec : OutputSections) 1459 setOffset<ELFT>(Sec, Off); 1460 1461 SectionHeaderOff = alignTo(Off, sizeof(uintX_t)); 1462 FileSize = SectionHeaderOff + (OutputSections.size() + 1) * sizeof(Elf_Shdr); 1463 } 1464 1465 // Finalize the program headers. We call this function after we assign 1466 // file offsets and VAs to all sections. 1467 template <class ELFT> void Writer<ELFT>::setPhdrs() { 1468 for (PhdrEntry &P : Phdrs) { 1469 OutputSectionBase *First = P.First; 1470 OutputSectionBase *Last = P.Last; 1471 if (First) { 1472 P.p_filesz = Last->Offset - First->Offset; 1473 if (Last->Type != SHT_NOBITS) 1474 P.p_filesz += Last->Size; 1475 P.p_memsz = Last->Addr + Last->Size - First->Addr; 1476 P.p_offset = First->Offset; 1477 P.p_vaddr = First->Addr; 1478 if (!P.HasLMA) 1479 P.p_paddr = First->getLMA(); 1480 } 1481 if (P.p_type == PT_LOAD) 1482 P.p_align = Config->MaxPageSize; 1483 else if (P.p_type == PT_GNU_RELRO) { 1484 P.p_align = 1; 1485 // The glibc dynamic loader rounds the size down, so we need to round up 1486 // to protect the last page. This is a no-op on FreeBSD which always 1487 // rounds up. 1488 P.p_memsz = alignTo(P.p_memsz, Config->MaxPageSize); 1489 } 1490 1491 // The TLS pointer goes after PT_TLS. At least glibc will align it, 1492 // so round up the size to make sure the offsets are correct. 1493 if (P.p_type == PT_TLS) { 1494 Out<ELFT>::TlsPhdr = &P; 1495 if (P.p_memsz) 1496 P.p_memsz = alignTo(P.p_memsz, P.p_align); 1497 } 1498 } 1499 } 1500 1501 // The entry point address is chosen in the following ways. 1502 // 1503 // 1. the '-e' entry command-line option; 1504 // 2. the ENTRY(symbol) command in a linker control script; 1505 // 3. the value of the symbol start, if present; 1506 // 4. the address of the first byte of the .text section, if present; 1507 // 5. the address 0. 1508 template <class ELFT> typename ELFT::uint Writer<ELFT>::getEntryAddr() { 1509 // Case 1, 2 or 3. As a special case, if the symbol is actually 1510 // a number, we'll use that number as an address. 1511 if (SymbolBody *B = Symtab<ELFT>::X->find(Config->Entry)) 1512 return B->getVA<ELFT>(); 1513 uint64_t Addr; 1514 if (!Config->Entry.getAsInteger(0, Addr)) 1515 return Addr; 1516 1517 // Case 4 1518 if (OutputSectionBase *Sec = findSection(".text")) { 1519 if (Config->WarnMissingEntry) 1520 warn("cannot find entry symbol " + Config->Entry + "; defaulting to 0x" + 1521 utohexstr(Sec->Addr)); 1522 return Sec->Addr; 1523 } 1524 1525 // Case 5 1526 if (Config->WarnMissingEntry) 1527 warn("cannot find entry symbol " + Config->Entry + 1528 "; not setting start address"); 1529 return 0; 1530 } 1531 1532 template <class ELFT> static uint8_t getELFEncoding() { 1533 if (ELFT::TargetEndianness == llvm::support::little) 1534 return ELFDATA2LSB; 1535 return ELFDATA2MSB; 1536 } 1537 1538 static uint16_t getELFType() { 1539 if (Config->Pic) 1540 return ET_DYN; 1541 if (Config->Relocatable) 1542 return ET_REL; 1543 return ET_EXEC; 1544 } 1545 1546 // This function is called after we have assigned address and size 1547 // to each section. This function fixes some predefined absolute 1548 // symbol values that depend on section address and size. 1549 template <class ELFT> void Writer<ELFT>::fixAbsoluteSymbols() { 1550 // __ehdr_start is the location of program headers. 1551 if (ElfSym<ELFT>::EhdrStart) 1552 ElfSym<ELFT>::EhdrStart->Value = Out<ELFT>::ProgramHeaders->Addr; 1553 1554 auto Set = [](DefinedRegular<ELFT> *S1, DefinedRegular<ELFT> *S2, uintX_t V) { 1555 if (S1) 1556 S1->Value = V; 1557 if (S2) 1558 S2->Value = V; 1559 }; 1560 1561 // _etext is the first location after the last read-only loadable segment. 1562 // _edata is the first location after the last read-write loadable segment. 1563 // _end is the first location after the uninitialized data region. 1564 for (PhdrEntry &P : Phdrs) { 1565 if (P.p_type != PT_LOAD) 1566 continue; 1567 Set(ElfSym<ELFT>::End, ElfSym<ELFT>::End2, P.p_vaddr + P.p_memsz); 1568 1569 uintX_t Val = P.p_vaddr + P.p_filesz; 1570 if (P.p_flags & PF_W) 1571 Set(ElfSym<ELFT>::Edata, ElfSym<ELFT>::Edata2, Val); 1572 else 1573 Set(ElfSym<ELFT>::Etext, ElfSym<ELFT>::Etext2, Val); 1574 } 1575 1576 // Setup MIPS _gp_disp/__gnu_local_gp symbols which should 1577 // be equal to the _gp symbol's value. 1578 if (Config->EMachine == EM_MIPS) { 1579 if (!ElfSym<ELFT>::MipsGp->Value) { 1580 // Find GP-relative section with the lowest address 1581 // and use this address to calculate default _gp value. 1582 uintX_t Gp = -1; 1583 for (const OutputSectionBase * OS : OutputSections) 1584 if ((OS->Flags & SHF_MIPS_GPREL) && OS->Addr < Gp) 1585 Gp = OS->Addr; 1586 if (Gp != (uintX_t)-1) 1587 ElfSym<ELFT>::MipsGp->Value = Gp + 0x7ff0; 1588 } 1589 if (ElfSym<ELFT>::MipsGpDisp) 1590 ElfSym<ELFT>::MipsGpDisp->Value = ElfSym<ELFT>::MipsGp->Value; 1591 if (ElfSym<ELFT>::MipsLocalGp) 1592 ElfSym<ELFT>::MipsLocalGp->Value = ElfSym<ELFT>::MipsGp->Value; 1593 } 1594 } 1595 1596 template <class ELFT> void Writer<ELFT>::writeHeader() { 1597 uint8_t *Buf = Buffer->getBufferStart(); 1598 memcpy(Buf, "\177ELF", 4); 1599 1600 // Write the ELF header. 1601 auto *EHdr = reinterpret_cast<Elf_Ehdr *>(Buf); 1602 EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; 1603 EHdr->e_ident[EI_DATA] = getELFEncoding<ELFT>(); 1604 EHdr->e_ident[EI_VERSION] = EV_CURRENT; 1605 EHdr->e_ident[EI_OSABI] = Config->OSABI; 1606 EHdr->e_type = getELFType(); 1607 EHdr->e_machine = Config->EMachine; 1608 EHdr->e_version = EV_CURRENT; 1609 EHdr->e_entry = getEntryAddr(); 1610 EHdr->e_shoff = SectionHeaderOff; 1611 EHdr->e_ehsize = sizeof(Elf_Ehdr); 1612 EHdr->e_phnum = Phdrs.size(); 1613 EHdr->e_shentsize = sizeof(Elf_Shdr); 1614 EHdr->e_shnum = OutputSections.size() + 1; 1615 EHdr->e_shstrndx = In<ELFT>::ShStrTab->OutSec->SectionIndex; 1616 1617 if (Config->EMachine == EM_ARM) 1618 // We don't currently use any features incompatible with EF_ARM_EABI_VER5, 1619 // but we don't have any firm guarantees of conformance. Linux AArch64 1620 // kernels (as of 2016) require an EABI version to be set. 1621 EHdr->e_flags = EF_ARM_EABI_VER5; 1622 else if (Config->EMachine == EM_MIPS) 1623 EHdr->e_flags = getMipsEFlags<ELFT>(); 1624 1625 if (!Config->Relocatable) { 1626 EHdr->e_phoff = sizeof(Elf_Ehdr); 1627 EHdr->e_phentsize = sizeof(Elf_Phdr); 1628 } 1629 1630 // Write the program header table. 1631 auto *HBuf = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff); 1632 for (PhdrEntry &P : Phdrs) { 1633 HBuf->p_type = P.p_type; 1634 HBuf->p_flags = P.p_flags; 1635 HBuf->p_offset = P.p_offset; 1636 HBuf->p_vaddr = P.p_vaddr; 1637 HBuf->p_paddr = P.p_paddr; 1638 HBuf->p_filesz = P.p_filesz; 1639 HBuf->p_memsz = P.p_memsz; 1640 HBuf->p_align = P.p_align; 1641 ++HBuf; 1642 } 1643 1644 // Write the section header table. Note that the first table entry is null. 1645 auto *SHdrs = reinterpret_cast<Elf_Shdr *>(Buf + EHdr->e_shoff); 1646 for (OutputSectionBase *Sec : OutputSections) 1647 Sec->writeHeaderTo<ELFT>(++SHdrs); 1648 } 1649 1650 // Removes a given file asynchronously. This is a performance hack, 1651 // so remove this when operating systems are improved. 1652 // 1653 // On Linux (and probably on other Unix-like systems), unlink(2) is a 1654 // noticeably slow system call. As of 2016, unlink takes 250 1655 // milliseconds to remove a 1 GB file on ext4 filesystem on my machine. 1656 // 1657 // To create a new result file, we first remove existing file. So, if 1658 // you repeatedly link a 1 GB program in a regular compile-link-debug 1659 // cycle, every cycle wastes 250 milliseconds only to remove a file. 1660 // Since LLD can link a 1 GB binary in about 5 seconds, that waste 1661 // actually counts. 1662 // 1663 // This function spawns a background thread to call unlink. 1664 // The calling thread returns almost immediately. 1665 static void unlinkAsync(StringRef Path) { 1666 if (!Config->Threads || !sys::fs::exists(Config->OutputFile)) 1667 return; 1668 1669 // First, rename Path to avoid race condition. We cannot remove 1670 // Path from a different thread because we are now going to create 1671 // Path as a new file. If we do that in a different thread, the new 1672 // thread can remove the new file. 1673 SmallString<128> TempPath; 1674 if (sys::fs::createUniqueFile(Path + "tmp%%%%%%%%", TempPath)) 1675 return; 1676 if (sys::fs::rename(Path, TempPath)) { 1677 sys::fs::remove(TempPath); 1678 return; 1679 } 1680 1681 // Remove TempPath in background. 1682 std::thread([=] { ::remove(TempPath.str().str().c_str()); }).detach(); 1683 } 1684 1685 // Open a result file. 1686 template <class ELFT> void Writer<ELFT>::openFile() { 1687 unlinkAsync(Config->OutputFile); 1688 ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = 1689 FileOutputBuffer::create(Config->OutputFile, FileSize, 1690 FileOutputBuffer::F_executable); 1691 1692 if (auto EC = BufferOrErr.getError()) 1693 error("failed to open " + Config->OutputFile + ": " + EC.message()); 1694 else 1695 Buffer = std::move(*BufferOrErr); 1696 } 1697 1698 template <class ELFT> void Writer<ELFT>::writeSectionsBinary() { 1699 uint8_t *Buf = Buffer->getBufferStart(); 1700 for (OutputSectionBase *Sec : OutputSections) 1701 if (Sec->Flags & SHF_ALLOC) 1702 Sec->writeTo(Buf + Sec->Offset); 1703 } 1704 1705 // Write section contents to a mmap'ed file. 1706 template <class ELFT> void Writer<ELFT>::writeSections() { 1707 uint8_t *Buf = Buffer->getBufferStart(); 1708 1709 // PPC64 needs to process relocations in the .opd section 1710 // before processing relocations in code-containing sections. 1711 Out<ELFT>::Opd = findSection(".opd"); 1712 if (Out<ELFT>::Opd) { 1713 Out<ELFT>::OpdBuf = Buf + Out<ELFT>::Opd->Offset; 1714 Out<ELFT>::Opd->writeTo(Buf + Out<ELFT>::Opd->Offset); 1715 } 1716 1717 OutputSectionBase *EhFrameHdr = 1718 In<ELFT>::EhFrameHdr ? In<ELFT>::EhFrameHdr->OutSec : nullptr; 1719 for (OutputSectionBase *Sec : OutputSections) 1720 if (Sec != Out<ELFT>::Opd && Sec != EhFrameHdr) 1721 Sec->writeTo(Buf + Sec->Offset); 1722 1723 // The .eh_frame_hdr depends on .eh_frame section contents, therefore 1724 // it should be written after .eh_frame is written. 1725 if (!Out<ELFT>::EhFrame->empty() && EhFrameHdr) 1726 EhFrameHdr->writeTo(Buf + EhFrameHdr->Offset); 1727 } 1728 1729 template <class ELFT> void Writer<ELFT>::writeBuildId() { 1730 if (!In<ELFT>::BuildId || !In<ELFT>::BuildId->OutSec) 1731 return; 1732 1733 // Compute a hash of all sections of the output file. 1734 uint8_t *Start = Buffer->getBufferStart(); 1735 uint8_t *End = Start + FileSize; 1736 In<ELFT>::BuildId->writeBuildId({Start, End}); 1737 } 1738 1739 template void elf::writeResult<ELF32LE>(); 1740 template void elf::writeResult<ELF32BE>(); 1741 template void elf::writeResult<ELF64LE>(); 1742 template void elf::writeResult<ELF64BE>(); 1743 1744 template void elf::allocateHeaders<ELF32LE>(MutableArrayRef<PhdrEntry>, 1745 ArrayRef<OutputSectionBase *>); 1746 template void elf::allocateHeaders<ELF32BE>(MutableArrayRef<PhdrEntry>, 1747 ArrayRef<OutputSectionBase *>); 1748 template void elf::allocateHeaders<ELF64LE>(MutableArrayRef<PhdrEntry>, 1749 ArrayRef<OutputSectionBase *>); 1750 template void elf::allocateHeaders<ELF64BE>(MutableArrayRef<PhdrEntry>, 1751 ArrayRef<OutputSectionBase *>); 1752 1753 template bool elf::isRelroSection<ELF32LE>(const OutputSectionBase *); 1754 template bool elf::isRelroSection<ELF32BE>(const OutputSectionBase *); 1755 template bool elf::isRelroSection<ELF64LE>(const OutputSectionBase *); 1756 template bool elf::isRelroSection<ELF64BE>(const OutputSectionBase *); 1757 1758 template void elf::reportDiscarded<ELF32LE>(InputSectionBase<ELF32LE> *); 1759 template void elf::reportDiscarded<ELF32BE>(InputSectionBase<ELF32BE> *); 1760 template void elf::reportDiscarded<ELF64LE>(InputSectionBase<ELF64LE> *); 1761 template void elf::reportDiscarded<ELF64BE>(InputSectionBase<ELF64BE> *); 1762