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