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