1 //===- Writer.cpp ---------------------------------------------------------===// 2 // 3 // The LLVM Linker 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "Writer.h" 11 #include "Config.h" 12 #include "LinkerScript.h" 13 #include "OutputSections.h" 14 #include "Relocations.h" 15 #include "Strings.h" 16 #include "SymbolTable.h" 17 #include "Target.h" 18 19 #include "llvm/ADT/StringMap.h" 20 #include "llvm/ADT/StringSwitch.h" 21 #include "llvm/Support/FileOutputBuffer.h" 22 #include "llvm/Support/StringSaver.h" 23 #include "llvm/Support/raw_ostream.h" 24 25 using namespace llvm; 26 using namespace llvm::ELF; 27 using namespace llvm::object; 28 29 using namespace lld; 30 using namespace lld::elf; 31 32 namespace { 33 // The writer writes a SymbolTable result to a file. 34 template <class ELFT> class Writer { 35 public: 36 typedef typename ELFT::uint uintX_t; 37 typedef typename ELFT::Shdr Elf_Shdr; 38 typedef typename ELFT::Ehdr Elf_Ehdr; 39 typedef typename ELFT::Phdr Elf_Phdr; 40 typedef typename ELFT::Sym Elf_Sym; 41 typedef typename ELFT::SymRange Elf_Sym_Range; 42 typedef typename ELFT::Rela Elf_Rela; 43 Writer(SymbolTable<ELFT> &S) : Symtab(S) {} 44 void run(); 45 46 private: 47 typedef PhdrEntry<ELFT> Phdr; 48 49 void copyLocalSymbols(); 50 void addReservedSymbols(); 51 std::vector<OutputSectionBase<ELFT> *> createSections(); 52 void forEachRelSec( 53 std::function<void(InputSectionBase<ELFT> &, const typename ELFT::Shdr &)> 54 Fn); 55 void finalizeSections(); 56 void addPredefinedSections(); 57 bool needsGot(); 58 59 std::vector<Phdr> createPhdrs(); 60 void assignAddresses(); 61 void assignFileOffsets(); 62 void setPhdrs(); 63 void fixHeaders(); 64 void fixSectionAlignments(); 65 void fixAbsoluteSymbols(); 66 void openFile(); 67 void writeHeader(); 68 void writeSections(); 69 void writeBuildId(); 70 71 void addCommonSymbols(std::vector<DefinedCommon *> &Syms); 72 73 std::unique_ptr<FileOutputBuffer> Buffer; 74 75 BumpPtrAllocator Alloc; 76 std::vector<OutputSectionBase<ELFT> *> OutputSections; 77 OutputSectionFactory<ELFT> Factory; 78 79 void addRelIpltSymbols(); 80 void addStartEndSymbols(); 81 void addStartStopSymbols(OutputSectionBase<ELFT> *Sec); 82 83 SymbolTable<ELFT> &Symtab; 84 std::vector<Phdr> Phdrs; 85 86 uintX_t FileSize; 87 uintX_t SectionHeaderOff; 88 }; 89 } // anonymous namespace 90 91 template <class ELFT> 92 StringRef elf::getOutputSectionName(InputSectionBase<ELFT> *S) { 93 StringRef Name = S->getSectionName(); 94 for (StringRef V : {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.", 95 ".init_array.", ".fini_array.", ".ctors.", ".dtors.", 96 ".tbss.", ".gcc_except_table.", ".tdata."}) 97 if (Name.startswith(V)) 98 return V.drop_back(); 99 return Name; 100 } 101 102 template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) { 103 if (!Config->PrintGcSections || !IS || IS->Live) 104 return; 105 errs() << "removing unused section from '" << IS->getSectionName() 106 << "' in file '" << IS->getFile()->getName() << "'\n"; 107 } 108 109 template <class ELFT> static bool needsInterpSection() { 110 return !Symtab<ELFT>::X->getSharedFiles().empty() && 111 !Config->DynamicLinker.empty(); 112 } 113 114 template <class ELFT> void elf::writeResult(SymbolTable<ELFT> *Symtab) { 115 typedef typename ELFT::uint uintX_t; 116 typedef typename ELFT::Ehdr Elf_Ehdr; 117 118 // Create singleton output sections. 119 OutputSection<ELFT> Bss(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE); 120 DynamicSection<ELFT> Dynamic; 121 EhOutputSection<ELFT> EhFrame; 122 GotSection<ELFT> Got; 123 PltSection<ELFT> Plt; 124 RelocationSection<ELFT> RelaDyn(Config->Rela ? ".rela.dyn" : ".rel.dyn", 125 Config->ZCombreloc); 126 StringTableSection<ELFT> DynStrTab(".dynstr", true); 127 StringTableSection<ELFT> ShStrTab(".shstrtab", false); 128 SymbolTableSection<ELFT> DynSymTab(DynStrTab); 129 VersionTableSection<ELFT> VerSym; 130 VersionNeedSection<ELFT> VerNeed; 131 132 OutputSectionBase<ELFT> ElfHeader("", 0, SHF_ALLOC); 133 ElfHeader.setSize(sizeof(Elf_Ehdr)); 134 OutputSectionBase<ELFT> ProgramHeaders("", 0, SHF_ALLOC); 135 ProgramHeaders.updateAlignment(sizeof(uintX_t)); 136 137 // Instantiate optional output sections if they are needed. 138 std::unique_ptr<InterpSection<ELFT>> Interp; 139 std::unique_ptr<BuildIdSection<ELFT>> BuildId; 140 std::unique_ptr<EhFrameHeader<ELFT>> EhFrameHdr; 141 std::unique_ptr<GnuHashTableSection<ELFT>> GnuHashTab; 142 std::unique_ptr<GotPltSection<ELFT>> GotPlt; 143 std::unique_ptr<HashTableSection<ELFT>> HashTab; 144 std::unique_ptr<RelocationSection<ELFT>> RelaPlt; 145 std::unique_ptr<StringTableSection<ELFT>> StrTab; 146 std::unique_ptr<SymbolTableSection<ELFT>> SymTabSec; 147 std::unique_ptr<OutputSection<ELFT>> MipsRldMap; 148 std::unique_ptr<VersionDefinitionSection<ELFT>> VerDef; 149 150 if (needsInterpSection<ELFT>()) 151 Interp.reset(new InterpSection<ELFT>); 152 153 if (Config->BuildId == BuildIdKind::Fnv1) 154 BuildId.reset(new BuildIdFnv1<ELFT>); 155 else if (Config->BuildId == BuildIdKind::Md5) 156 BuildId.reset(new BuildIdMd5<ELFT>); 157 else if (Config->BuildId == BuildIdKind::Sha1) 158 BuildId.reset(new BuildIdSha1<ELFT>); 159 else if (Config->BuildId == BuildIdKind::Hexstring) 160 BuildId.reset(new BuildIdHexstring<ELFT>); 161 162 if (Config->EhFrameHdr) 163 EhFrameHdr.reset(new EhFrameHeader<ELFT>); 164 165 if (Config->GnuHash) 166 GnuHashTab.reset(new GnuHashTableSection<ELFT>); 167 if (Config->SysvHash) 168 HashTab.reset(new HashTableSection<ELFT>); 169 StringRef S = Config->Rela ? ".rela.plt" : ".rel.plt"; 170 GotPlt.reset(new GotPltSection<ELFT>); 171 RelaPlt.reset(new RelocationSection<ELFT>(S, false /*Sort*/)); 172 if (!Config->StripAll) { 173 StrTab.reset(new StringTableSection<ELFT>(".strtab", false)); 174 SymTabSec.reset(new SymbolTableSection<ELFT>(*StrTab)); 175 } 176 if (Config->EMachine == EM_MIPS && !Config->Shared) { 177 // This is a MIPS specific section to hold a space within the data segment 178 // of executable file which is pointed to by the DT_MIPS_RLD_MAP entry. 179 // See "Dynamic section" in Chapter 5 in the following document: 180 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 181 MipsRldMap.reset(new OutputSection<ELFT>(".rld_map", SHT_PROGBITS, 182 SHF_ALLOC | SHF_WRITE)); 183 MipsRldMap->setSize(sizeof(uintX_t)); 184 MipsRldMap->updateAlignment(sizeof(uintX_t)); 185 } 186 if (!Config->VersionDefinitions.empty()) 187 VerDef.reset(new VersionDefinitionSection<ELFT>()); 188 189 Out<ELFT>::Bss = &Bss; 190 Out<ELFT>::BuildId = BuildId.get(); 191 Out<ELFT>::DynStrTab = &DynStrTab; 192 Out<ELFT>::DynSymTab = &DynSymTab; 193 Out<ELFT>::Dynamic = &Dynamic; 194 Out<ELFT>::EhFrame = &EhFrame; 195 Out<ELFT>::EhFrameHdr = EhFrameHdr.get(); 196 Out<ELFT>::GnuHashTab = GnuHashTab.get(); 197 Out<ELFT>::Got = &Got; 198 Out<ELFT>::GotPlt = GotPlt.get(); 199 Out<ELFT>::HashTab = HashTab.get(); 200 Out<ELFT>::Interp = Interp.get(); 201 Out<ELFT>::Plt = &Plt; 202 Out<ELFT>::RelaDyn = &RelaDyn; 203 Out<ELFT>::RelaPlt = RelaPlt.get(); 204 Out<ELFT>::ShStrTab = &ShStrTab; 205 Out<ELFT>::StrTab = StrTab.get(); 206 Out<ELFT>::SymTab = SymTabSec.get(); 207 Out<ELFT>::VerDef = VerDef.get(); 208 Out<ELFT>::VerSym = &VerSym; 209 Out<ELFT>::VerNeed = &VerNeed; 210 Out<ELFT>::MipsRldMap = MipsRldMap.get(); 211 Out<ELFT>::Opd = nullptr; 212 Out<ELFT>::OpdBuf = nullptr; 213 Out<ELFT>::TlsPhdr = nullptr; 214 Out<ELFT>::ElfHeader = &ElfHeader; 215 Out<ELFT>::ProgramHeaders = &ProgramHeaders; 216 217 Writer<ELFT>(*Symtab).run(); 218 } 219 220 // The main function of the writer. 221 template <class ELFT> void Writer<ELFT>::run() { 222 if (!Config->DiscardAll) 223 copyLocalSymbols(); 224 addReservedSymbols(); 225 226 OutputSections = ScriptConfig->DoLayout 227 ? Script<ELFT>::X->createSections(Factory) 228 : createSections(); 229 finalizeSections(); 230 if (HasError) 231 return; 232 233 if (Config->Relocatable) { 234 assignFileOffsets(); 235 } else { 236 Phdrs = Script<ELFT>::X->hasPhdrsCommands() 237 ? Script<ELFT>::X->createPhdrs(OutputSections) 238 : createPhdrs(); 239 fixHeaders(); 240 if (ScriptConfig->DoLayout) { 241 Script<ELFT>::X->assignAddresses(OutputSections); 242 } else { 243 fixSectionAlignments(); 244 assignAddresses(); 245 } 246 assignFileOffsets(); 247 setPhdrs(); 248 fixAbsoluteSymbols(); 249 } 250 251 openFile(); 252 if (HasError) 253 return; 254 writeHeader(); 255 writeSections(); 256 writeBuildId(); 257 if (HasError) 258 return; 259 if (auto EC = Buffer->commit()) 260 error(EC, "failed to write to the output file"); 261 } 262 263 template <class ELFT> 264 static void reportUndefined(SymbolTable<ELFT> &Symtab, SymbolBody *Sym) { 265 if (Config->UnresolvedSymbols == UnresolvedPolicy::Ignore) 266 return; 267 268 if (Config->Shared && Sym->symbol()->Visibility == STV_DEFAULT && 269 Config->UnresolvedSymbols != UnresolvedPolicy::NoUndef) 270 return; 271 272 std::string Msg = "undefined symbol: " + Sym->getName().str(); 273 if (Sym->File) 274 Msg += " in " + getFilename(Sym->File); 275 if (Config->UnresolvedSymbols == UnresolvedPolicy::Warn) 276 warning(Msg); 277 else 278 error(Msg); 279 } 280 281 template <class ELFT> 282 static bool shouldKeepInSymtab(InputSectionBase<ELFT> *Sec, StringRef SymName, 283 const SymbolBody &B) { 284 if (B.isFile()) 285 return false; 286 287 // We keep sections in symtab for relocatable output. 288 if (B.isSection()) 289 return Config->Relocatable; 290 291 // If sym references a section in a discarded group, don't keep it. 292 if (Sec == &InputSection<ELFT>::Discarded) 293 return false; 294 295 if (Config->DiscardNone) 296 return true; 297 298 // In ELF assembly .L symbols are normally discarded by the assembler. 299 // If the assembler fails to do so, the linker discards them if 300 // * --discard-locals is used. 301 // * The symbol is in a SHF_MERGE section, which is normally the reason for 302 // the assembler keeping the .L symbol. 303 if (!SymName.startswith(".L") && !SymName.empty()) 304 return true; 305 306 if (Config->DiscardLocals) 307 return false; 308 309 return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE); 310 } 311 312 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) { 313 if (!B.isLocal() && !B.symbol()->IsUsedInRegularObj) 314 return false; 315 316 if (auto *D = dyn_cast<DefinedRegular<ELFT>>(&B)) { 317 // Always include absolute symbols. 318 if (!D->Section) 319 return true; 320 // Exclude symbols pointing to garbage-collected sections. 321 if (!D->Section->Live) 322 return false; 323 if (auto *S = dyn_cast<MergeInputSection<ELFT>>(D->Section)) 324 if (!S->getSectionPiece(D->Value)->Live) 325 return false; 326 } 327 return true; 328 } 329 330 // Local symbols are not in the linker's symbol table. This function scans 331 // each object file's symbol table to copy local symbols to the output. 332 template <class ELFT> void Writer<ELFT>::copyLocalSymbols() { 333 if (!Out<ELFT>::SymTab) 334 return; 335 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 336 Symtab.getObjectFiles()) { 337 const char *StrTab = F->getStringTable().data(); 338 for (SymbolBody *B : F->getLocalSymbols()) { 339 auto *DR = dyn_cast<DefinedRegular<ELFT>>(B); 340 // No reason to keep local undefined symbol in symtab. 341 if (!DR) 342 continue; 343 if (!includeInSymtab<ELFT>(*B)) 344 continue; 345 StringRef SymName(StrTab + B->getNameOffset()); 346 InputSectionBase<ELFT> *Sec = DR->Section; 347 if (!shouldKeepInSymtab<ELFT>(Sec, SymName, *B)) 348 continue; 349 ++Out<ELFT>::SymTab->NumLocals; 350 if (Config->Relocatable) 351 B->DynsymIndex = Out<ELFT>::SymTab->NumLocals; 352 F->KeptLocalSyms.push_back( 353 std::make_pair(DR, Out<ELFT>::SymTab->StrTabSec.addString(SymName))); 354 } 355 } 356 } 357 358 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections that 359 // we would like to make sure appear is a specific order to maximize their 360 // coverage by a single signed 16-bit offset from the TOC base pointer. 361 // Conversely, the special .tocbss section should be first among all SHT_NOBITS 362 // sections. This will put it next to the loaded special PPC64 sections (and, 363 // thus, within reach of the TOC base pointer). 364 static int getPPC64SectionRank(StringRef SectionName) { 365 return StringSwitch<int>(SectionName) 366 .Case(".tocbss", 0) 367 .Case(".branch_lt", 2) 368 .Case(".toc", 3) 369 .Case(".toc1", 4) 370 .Case(".opd", 5) 371 .Default(1); 372 } 373 374 template <class ELFT> bool elf::isRelroSection(OutputSectionBase<ELFT> *Sec) { 375 if (!Config->ZRelro) 376 return false; 377 typename ELFT::uint Flags = Sec->getFlags(); 378 if (!(Flags & SHF_ALLOC) || !(Flags & SHF_WRITE)) 379 return false; 380 if (Flags & SHF_TLS) 381 return true; 382 uint32_t Type = Sec->getType(); 383 if (Type == SHT_INIT_ARRAY || Type == SHT_FINI_ARRAY || 384 Type == SHT_PREINIT_ARRAY) 385 return true; 386 if (Sec == Out<ELFT>::GotPlt) 387 return Config->ZNow; 388 if (Sec == Out<ELFT>::Dynamic || Sec == Out<ELFT>::Got) 389 return true; 390 StringRef S = Sec->getName(); 391 return S == ".data.rel.ro" || S == ".ctors" || S == ".dtors" || S == ".jcr" || 392 S == ".eh_frame"; 393 } 394 395 // Output section ordering is determined by this function. 396 template <class ELFT> 397 static bool compareSections(OutputSectionBase<ELFT> *A, 398 OutputSectionBase<ELFT> *B) { 399 typedef typename ELFT::uint uintX_t; 400 401 int Comp = Script<ELFT>::X->compareSections(A->getName(), B->getName()); 402 if (Comp != 0) 403 return Comp < 0; 404 405 uintX_t AFlags = A->getFlags(); 406 uintX_t BFlags = B->getFlags(); 407 408 // Allocatable sections go first to reduce the total PT_LOAD size and 409 // so debug info doesn't change addresses in actual code. 410 bool AIsAlloc = AFlags & SHF_ALLOC; 411 bool BIsAlloc = BFlags & SHF_ALLOC; 412 if (AIsAlloc != BIsAlloc) 413 return AIsAlloc; 414 415 // We don't have any special requirements for the relative order of 416 // two non allocatable sections. 417 if (!AIsAlloc) 418 return false; 419 420 // We want the read only sections first so that they go in the PT_LOAD 421 // covering the program headers at the start of the file. 422 bool AIsWritable = AFlags & SHF_WRITE; 423 bool BIsWritable = BFlags & SHF_WRITE; 424 if (AIsWritable != BIsWritable) 425 return BIsWritable; 426 427 // For a corresponding reason, put non exec sections first (the program 428 // header PT_LOAD is not executable). 429 bool AIsExec = AFlags & SHF_EXECINSTR; 430 bool BIsExec = BFlags & SHF_EXECINSTR; 431 if (AIsExec != BIsExec) 432 return BIsExec; 433 434 // If we got here we know that both A and B are in the same PT_LOAD. 435 436 // The TLS initialization block needs to be a single contiguous block in a R/W 437 // PT_LOAD, so stick TLS sections directly before R/W sections. The TLS NOBITS 438 // sections are placed here as they don't take up virtual address space in the 439 // PT_LOAD. 440 bool AIsTls = AFlags & SHF_TLS; 441 bool BIsTls = BFlags & SHF_TLS; 442 if (AIsTls != BIsTls) 443 return AIsTls; 444 445 // The next requirement we have is to put nobits sections last. The 446 // reason is that the only thing the dynamic linker will see about 447 // them is a p_memsz that is larger than p_filesz. Seeing that it 448 // zeros the end of the PT_LOAD, so that has to correspond to the 449 // nobits sections. 450 bool AIsNoBits = A->getType() == SHT_NOBITS; 451 bool BIsNoBits = B->getType() == SHT_NOBITS; 452 if (AIsNoBits != BIsNoBits) 453 return BIsNoBits; 454 455 // We place RelRo section before plain r/w ones. 456 bool AIsRelRo = isRelroSection(A); 457 bool BIsRelRo = isRelroSection(B); 458 if (AIsRelRo != BIsRelRo) 459 return AIsRelRo; 460 461 // Some architectures have additional ordering restrictions for sections 462 // within the same PT_LOAD. 463 if (Config->EMachine == EM_PPC64) 464 return getPPC64SectionRank(A->getName()) < 465 getPPC64SectionRank(B->getName()); 466 467 return false; 468 } 469 470 uint32_t elf::toPhdrFlags(uint64_t Flags) { 471 uint32_t Ret = PF_R; 472 if (Flags & SHF_WRITE) 473 Ret |= PF_W; 474 if (Flags & SHF_EXECINSTR) 475 Ret |= PF_X; 476 return Ret; 477 } 478 479 template <class ELFT> bool elf::isOutputDynamic() { 480 return !Symtab<ELFT>::X->getSharedFiles().empty() || Config->Pic; 481 } 482 483 template <class ELFT> static bool isDiscarded(InputSectionBase<ELFT> *S) { 484 return !S || S == &InputSection<ELFT>::Discarded || !S->Live; 485 } 486 487 // Program header entry 488 template<class ELFT> 489 PhdrEntry<ELFT>::PhdrEntry(unsigned Type, unsigned Flags) { 490 H.p_type = Type; 491 H.p_flags = Flags; 492 } 493 494 template<class ELFT> 495 void PhdrEntry<ELFT>::add(OutputSectionBase<ELFT> *Sec) { 496 Last = Sec; 497 if (!First) 498 First = Sec; 499 H.p_align = std::max<typename ELFT::uint>(H.p_align, Sec->getAlignment()); 500 } 501 502 // Until this function is called, common symbols do not belong to any section. 503 // This function adds them to end of BSS section. 504 template <class ELFT> 505 void Writer<ELFT>::addCommonSymbols(std::vector<DefinedCommon *> &Syms) { 506 if (Syms.empty()) 507 return; 508 509 // Sort the common symbols by alignment as an heuristic to pack them better. 510 std::stable_sort(Syms.begin(), Syms.end(), 511 [](const DefinedCommon *A, const DefinedCommon *B) { 512 return A->Alignment > B->Alignment; 513 }); 514 515 uintX_t Off = Out<ELFT>::Bss->getSize(); 516 for (DefinedCommon *C : Syms) { 517 Off = alignTo(Off, C->Alignment); 518 Out<ELFT>::Bss->updateAlignment(C->Alignment); 519 C->OffsetInBss = Off; 520 Off += C->Size; 521 } 522 523 Out<ELFT>::Bss->setSize(Off); 524 } 525 526 template <class ELFT> 527 static Symbol *addOptionalSynthetic(SymbolTable<ELFT> &Table, StringRef Name, 528 OutputSectionBase<ELFT> *Sec, 529 typename ELFT::uint Val) { 530 SymbolBody *S = Table.find(Name); 531 if (!S) 532 return nullptr; 533 if (!S->isUndefined() && !S->isShared()) 534 return S->symbol(); 535 return Table.addSynthetic(Name, Sec, Val); 536 } 537 538 // The beginning and the ending of .rel[a].plt section are marked 539 // with __rel[a]_iplt_{start,end} symbols if it is a statically linked 540 // executable. The runtime needs these symbols in order to resolve 541 // all IRELATIVE relocs on startup. For dynamic executables, we don't 542 // need these symbols, since IRELATIVE relocs are resolved through GOT 543 // and PLT. For details, see http://www.airs.com/blog/archives/403. 544 template <class ELFT> void Writer<ELFT>::addRelIpltSymbols() { 545 if (isOutputDynamic<ELFT>() || !Out<ELFT>::RelaPlt) 546 return; 547 StringRef S = Config->Rela ? "__rela_iplt_start" : "__rel_iplt_start"; 548 addOptionalSynthetic(Symtab, S, Out<ELFT>::RelaPlt, 0); 549 550 S = Config->Rela ? "__rela_iplt_end" : "__rel_iplt_end"; 551 addOptionalSynthetic(Symtab, S, Out<ELFT>::RelaPlt, 552 DefinedSynthetic<ELFT>::SectionEnd); 553 } 554 555 // The linker is expected to define some symbols depending on 556 // the linking result. This function defines such symbols. 557 template <class ELFT> void Writer<ELFT>::addReservedSymbols() { 558 if (Config->EMachine == EM_MIPS) { 559 // Define _gp for MIPS. st_value of _gp symbol will be updated by Writer 560 // so that it points to an absolute address which is relative to GOT. 561 // See "Global Data Symbols" in Chapter 6 in the following document: 562 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 563 Symtab.addSynthetic("_gp", Out<ELFT>::Got, MipsGPOffset); 564 565 // On MIPS O32 ABI, _gp_disp is a magic symbol designates offset between 566 // start of function and 'gp' pointer into GOT. 567 Symbol *Sym = 568 addOptionalSynthetic(Symtab, "_gp_disp", Out<ELFT>::Got, MipsGPOffset); 569 if (Sym) 570 ElfSym<ELFT>::MipsGpDisp = Sym->body(); 571 572 // The __gnu_local_gp is a magic symbol equal to the current value of 'gp' 573 // pointer. This symbol is used in the code generated by .cpload pseudo-op 574 // in case of using -mno-shared option. 575 // https://sourceware.org/ml/binutils/2004-12/msg00094.html 576 addOptionalSynthetic(Symtab, "__gnu_local_gp", Out<ELFT>::Got, 577 MipsGPOffset); 578 } 579 580 // In the assembly for 32 bit x86 the _GLOBAL_OFFSET_TABLE_ symbol 581 // is magical and is used to produce a R_386_GOTPC relocation. 582 // The R_386_GOTPC relocation value doesn't actually depend on the 583 // symbol value, so it could use an index of STN_UNDEF which, according 584 // to the spec, means the symbol value is 0. 585 // Unfortunately both gas and MC keep the _GLOBAL_OFFSET_TABLE_ symbol in 586 // the object file. 587 // The situation is even stranger on x86_64 where the assembly doesn't 588 // need the magical symbol, but gas still puts _GLOBAL_OFFSET_TABLE_ as 589 // an undefined symbol in the .o files. 590 // Given that the symbol is effectively unused, we just create a dummy 591 // hidden one to avoid the undefined symbol error. 592 if (!Config->Relocatable) 593 Symtab.addIgnored("_GLOBAL_OFFSET_TABLE_"); 594 595 // __tls_get_addr is defined by the dynamic linker for dynamic ELFs. For 596 // static linking the linker is required to optimize away any references to 597 // __tls_get_addr, so it's not defined anywhere. Create a hidden definition 598 // to avoid the undefined symbol error. 599 if (!isOutputDynamic<ELFT>()) 600 Symtab.addIgnored("__tls_get_addr"); 601 602 auto Define = [this](StringRef S, DefinedRegular<ELFT> *&Sym1, 603 DefinedRegular<ELFT> *&Sym2) { 604 Sym1 = Symtab.addIgnored(S, STV_DEFAULT); 605 606 // The name without the underscore is not a reserved name, 607 // so it is defined only when there is a reference against it. 608 assert(S.startswith("_")); 609 S = S.substr(1); 610 if (SymbolBody *B = Symtab.find(S)) 611 if (B->isUndefined()) 612 Sym2 = Symtab.addAbsolute(S, STV_DEFAULT); 613 }; 614 615 Define("_end", ElfSym<ELFT>::End, ElfSym<ELFT>::End2); 616 Define("_etext", ElfSym<ELFT>::Etext, ElfSym<ELFT>::Etext2); 617 Define("_edata", ElfSym<ELFT>::Edata, ElfSym<ELFT>::Edata2); 618 } 619 620 // Sort input sections by section name suffixes for 621 // __attribute__((init_priority(N))). 622 template <class ELFT> static void sortInitFini(OutputSectionBase<ELFT> *S) { 623 if (S) 624 reinterpret_cast<OutputSection<ELFT> *>(S)->sortInitFini(); 625 } 626 627 // Sort input sections by the special rule for .ctors and .dtors. 628 template <class ELFT> static void sortCtorsDtors(OutputSectionBase<ELFT> *S) { 629 if (S) 630 reinterpret_cast<OutputSection<ELFT> *>(S)->sortCtorsDtors(); 631 } 632 633 template <class ELFT> 634 void Writer<ELFT>::forEachRelSec( 635 std::function<void(InputSectionBase<ELFT> &, const typename ELFT::Shdr &)> 636 Fn) { 637 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 638 Symtab.getObjectFiles()) { 639 for (InputSectionBase<ELFT> *C : F->getSections()) { 640 if (isDiscarded(C)) 641 continue; 642 // Scan all relocations. Each relocation goes through a series 643 // of tests to determine if it needs special treatment, such as 644 // creating GOT, PLT, copy relocations, etc. 645 // Note that relocations for non-alloc sections are directly 646 // processed by InputSection::relocateNonAlloc. 647 if (!(C->getSectionHdr()->sh_flags & SHF_ALLOC)) 648 continue; 649 if (auto *S = dyn_cast<InputSection<ELFT>>(C)) { 650 for (const Elf_Shdr *RelSec : S->RelocSections) 651 Fn(*S, *RelSec); 652 continue; 653 } 654 if (auto *S = dyn_cast<EhInputSection<ELFT>>(C)) 655 if (S->RelocSection) 656 Fn(*S, *S->RelocSection); 657 } 658 } 659 } 660 661 template <class ELFT> 662 std::vector<OutputSectionBase<ELFT> *> Writer<ELFT>::createSections() { 663 std::vector<OutputSectionBase<ELFT> *> Result; 664 665 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 666 Symtab.getObjectFiles()) { 667 for (InputSectionBase<ELFT> *C : F->getSections()) { 668 if (isDiscarded(C)) { 669 reportDiscarded(C); 670 continue; 671 } 672 OutputSectionBase<ELFT> *Sec; 673 bool IsNew; 674 std::tie(Sec, IsNew) = Factory.create(C, getOutputSectionName(C)); 675 if (IsNew) 676 Result.push_back(Sec); 677 Sec->addSection(C); 678 } 679 } 680 return Result; 681 } 682 683 // Create output section objects and add them to OutputSections. 684 template <class ELFT> void Writer<ELFT>::finalizeSections() { 685 // Create output sections for input object file sections. 686 std::vector<OutputSectionBase<ELFT> *> RegularSections = OutputSections; 687 688 // If we have a .opd section (used under PPC64 for function descriptors), 689 // store a pointer to it here so that we can use it later when processing 690 // relocations. 691 Out<ELFT>::Opd = Factory.lookup(".opd", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC); 692 693 Out<ELFT>::Dynamic->PreInitArraySec = Factory.lookup( 694 ".preinit_array", SHT_PREINIT_ARRAY, SHF_WRITE | SHF_ALLOC); 695 Out<ELFT>::Dynamic->InitArraySec = 696 Factory.lookup(".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC); 697 Out<ELFT>::Dynamic->FiniArraySec = 698 Factory.lookup(".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC); 699 700 // Sort section contents for __attribute__((init_priority(N)). 701 sortInitFini(Out<ELFT>::Dynamic->InitArraySec); 702 sortInitFini(Out<ELFT>::Dynamic->FiniArraySec); 703 sortCtorsDtors(Factory.lookup(".ctors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 704 sortCtorsDtors(Factory.lookup(".dtors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 705 706 // The linker needs to define SECNAME_start, SECNAME_end and SECNAME_stop 707 // symbols for sections, so that the runtime can get the start and end 708 // addresses of each section by section name. Add such symbols. 709 if (!Config->Relocatable) { 710 addStartEndSymbols(); 711 for (OutputSectionBase<ELFT> *Sec : RegularSections) 712 addStartStopSymbols(Sec); 713 } 714 715 // Add _DYNAMIC symbol. Unlike GNU gold, our _DYNAMIC symbol has no type. 716 // It should be okay as no one seems to care about the type. 717 // Even the author of gold doesn't remember why gold behaves that way. 718 // https://sourceware.org/ml/binutils/2002-03/msg00360.html 719 if (isOutputDynamic<ELFT>()) 720 Symtab.addSynthetic("_DYNAMIC", Out<ELFT>::Dynamic, 0); 721 722 // Define __rel[a]_iplt_{start,end} symbols if needed. 723 addRelIpltSymbols(); 724 725 // Add scripted symbols with zero values now. 726 // Real values will be assigned later 727 Script<ELFT>::X->addScriptedSymbols(); 728 729 if (!Out<ELFT>::EhFrame->empty()) { 730 OutputSections.push_back(Out<ELFT>::EhFrame); 731 Out<ELFT>::EhFrame->finalize(); 732 } 733 734 if (Target->NeedsThunks) 735 forEachRelSec(createThunks<ELFT>); 736 737 for (OutputSectionBase<ELFT> *Sec : OutputSections) 738 Sec->assignOffsets(); 739 740 // Scan relocations. This must be done after every symbol is declared so that 741 // we can correctly decide if a dynamic relocation is needed. 742 forEachRelSec(scanRelocations<ELFT>); 743 744 // Now that we have defined all possible symbols including linker- 745 // synthesized ones. Visit all symbols to give the finishing touches. 746 std::vector<DefinedCommon *> CommonSymbols; 747 for (Symbol *S : Symtab.getSymbols()) { 748 SymbolBody *Body = S->body(); 749 750 // We only report undefined symbols in regular objects. This means that we 751 // will accept an undefined reference in bitcode if it can be optimized out. 752 if (S->IsUsedInRegularObj && Body->isUndefined() && !S->isWeak()) 753 reportUndefined<ELFT>(Symtab, Body); 754 755 if (auto *C = dyn_cast<DefinedCommon>(Body)) 756 CommonSymbols.push_back(C); 757 758 if (!includeInSymtab<ELFT>(*Body)) 759 continue; 760 if (Out<ELFT>::SymTab) 761 Out<ELFT>::SymTab->addSymbol(Body); 762 763 if (isOutputDynamic<ELFT>() && S->includeInDynsym()) { 764 Out<ELFT>::DynSymTab->addSymbol(Body); 765 if (auto *SS = dyn_cast<SharedSymbol<ELFT>>(Body)) 766 if (SS->file()->isNeeded()) 767 Out<ELFT>::VerNeed->addSymbol(SS); 768 } 769 } 770 771 // Do not proceed if there was an undefined symbol. 772 if (HasError) 773 return; 774 775 addCommonSymbols(CommonSymbols); 776 777 // So far we have added sections from input object files. 778 // This function adds linker-created Out<ELFT>::* sections. 779 addPredefinedSections(); 780 781 std::stable_sort(OutputSections.begin(), OutputSections.end(), 782 compareSections<ELFT>); 783 784 unsigned I = 1; 785 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 786 Sec->SectionIndex = I++; 787 Sec->setSHName(Out<ELFT>::ShStrTab->addString(Sec->getName())); 788 } 789 790 // Finalizers fix each section's size. 791 // .dynsym is finalized early since that may fill up .gnu.hash. 792 if (isOutputDynamic<ELFT>()) 793 Out<ELFT>::DynSymTab->finalize(); 794 795 // Fill other section headers. The dynamic table is finalized 796 // at the end because some tags like RELSZ depend on result 797 // of finalizing other sections. The dynamic string table is 798 // finalized once the .dynamic finalizer has added a few last 799 // strings. See DynamicSection::finalize() 800 for (OutputSectionBase<ELFT> *Sec : OutputSections) 801 if (Sec != Out<ELFT>::DynStrTab && Sec != Out<ELFT>::Dynamic) 802 Sec->finalize(); 803 804 if (isOutputDynamic<ELFT>()) 805 Out<ELFT>::Dynamic->finalize(); 806 807 // Now that all output offsets are fixed. Finalize mergeable sections 808 // to fix their maps from input offsets to output offsets. 809 for (OutputSectionBase<ELFT> *Sec : OutputSections) 810 Sec->finalizePieces(); 811 } 812 813 template <class ELFT> bool Writer<ELFT>::needsGot() { 814 if (!Out<ELFT>::Got->empty()) 815 return true; 816 817 // We add the .got section to the result for dynamic MIPS target because 818 // its address and properties are mentioned in the .dynamic section. 819 if (Config->EMachine == EM_MIPS) 820 return true; 821 822 // If we have a relocation that is relative to GOT (such as GOTOFFREL), 823 // we need to emit a GOT even if it's empty. 824 return Out<ELFT>::Got->HasGotOffRel; 825 } 826 827 // This function add Out<ELFT>::* sections to OutputSections. 828 template <class ELFT> void Writer<ELFT>::addPredefinedSections() { 829 auto Add = [&](OutputSectionBase<ELFT> *C) { 830 if (C) 831 OutputSections.push_back(C); 832 }; 833 834 // A core file does not usually contain unmodified segments except 835 // the first page of the executable. Add the build ID section to beginning of 836 // the file so that the section is included in the first page. 837 if (Out<ELFT>::BuildId) 838 OutputSections.insert(OutputSections.begin(), Out<ELFT>::BuildId); 839 840 // Add .interp at first because some loaders want to see that section 841 // on the first page of the executable file when loaded into memory. 842 if (Out<ELFT>::Interp) 843 OutputSections.insert(OutputSections.begin(), Out<ELFT>::Interp); 844 845 // This order is not the same as the final output order 846 // because we sort the sections using their attributes below. 847 Add(Out<ELFT>::SymTab); 848 Add(Out<ELFT>::ShStrTab); 849 Add(Out<ELFT>::StrTab); 850 if (isOutputDynamic<ELFT>()) { 851 Add(Out<ELFT>::DynSymTab); 852 853 bool HasVerNeed = Out<ELFT>::VerNeed->getNeedNum() != 0; 854 if (Out<ELFT>::VerDef || HasVerNeed) 855 Add(Out<ELFT>::VerSym); 856 Add(Out<ELFT>::VerDef); 857 if (HasVerNeed) 858 Add(Out<ELFT>::VerNeed); 859 860 Add(Out<ELFT>::GnuHashTab); 861 Add(Out<ELFT>::HashTab); 862 Add(Out<ELFT>::Dynamic); 863 Add(Out<ELFT>::DynStrTab); 864 if (Out<ELFT>::RelaDyn->hasRelocs()) 865 Add(Out<ELFT>::RelaDyn); 866 Add(Out<ELFT>::MipsRldMap); 867 } 868 869 // We always need to add rel[a].plt to output if it has entries. 870 // Even during static linking it can contain R_[*]_IRELATIVE relocations. 871 if (Out<ELFT>::RelaPlt && Out<ELFT>::RelaPlt->hasRelocs()) { 872 Add(Out<ELFT>::RelaPlt); 873 Out<ELFT>::RelaPlt->Static = !isOutputDynamic<ELFT>(); 874 } 875 876 if (needsGot()) 877 Add(Out<ELFT>::Got); 878 if (Out<ELFT>::GotPlt && !Out<ELFT>::GotPlt->empty()) 879 Add(Out<ELFT>::GotPlt); 880 if (!Out<ELFT>::Plt->empty()) 881 Add(Out<ELFT>::Plt); 882 if (!Out<ELFT>::EhFrame->empty()) 883 Add(Out<ELFT>::EhFrameHdr); 884 if (Out<ELFT>::Bss->getSize() > 0) 885 Add(Out<ELFT>::Bss); 886 } 887 888 // The linker is expected to define SECNAME_start and SECNAME_end 889 // symbols for a few sections. This function defines them. 890 template <class ELFT> void Writer<ELFT>::addStartEndSymbols() { 891 auto Define = [&](StringRef Start, StringRef End, 892 OutputSectionBase<ELFT> *OS) { 893 if (OS) { 894 this->Symtab.addSynthetic(Start, OS, 0); 895 this->Symtab.addSynthetic(End, OS, DefinedSynthetic<ELFT>::SectionEnd); 896 } else { 897 addOptionalSynthetic(this->Symtab, Start, 898 (OutputSectionBase<ELFT> *)nullptr, 0); 899 addOptionalSynthetic(this->Symtab, End, 900 (OutputSectionBase<ELFT> *)nullptr, 0); 901 } 902 }; 903 904 Define("__preinit_array_start", "__preinit_array_end", 905 Out<ELFT>::Dynamic->PreInitArraySec); 906 Define("__init_array_start", "__init_array_end", 907 Out<ELFT>::Dynamic->InitArraySec); 908 Define("__fini_array_start", "__fini_array_end", 909 Out<ELFT>::Dynamic->FiniArraySec); 910 } 911 912 // If a section name is valid as a C identifier (which is rare because of 913 // the leading '.'), linkers are expected to define __start_<secname> and 914 // __stop_<secname> symbols. They are at beginning and end of the section, 915 // respectively. This is not requested by the ELF standard, but GNU ld and 916 // gold provide the feature, and used by many programs. 917 template <class ELFT> 918 void Writer<ELFT>::addStartStopSymbols(OutputSectionBase<ELFT> *Sec) { 919 StringRef S = Sec->getName(); 920 if (!isValidCIdentifier(S)) 921 return; 922 StringSaver Saver(Alloc); 923 StringRef Start = Saver.save("__start_" + S); 924 StringRef Stop = Saver.save("__stop_" + S); 925 if (SymbolBody *B = Symtab.find(Start)) 926 if (B->isUndefined()) 927 Symtab.addSynthetic(Start, Sec, 0); 928 if (SymbolBody *B = Symtab.find(Stop)) 929 if (B->isUndefined()) 930 Symtab.addSynthetic(Stop, Sec, DefinedSynthetic<ELFT>::SectionEnd); 931 } 932 933 template <class ELFT> bool elf::needsPtLoad(OutputSectionBase<ELFT> *Sec) { 934 if (!(Sec->getFlags() & SHF_ALLOC)) 935 return false; 936 937 // Don't allocate VA space for TLS NOBITS sections. The PT_TLS PHDR is 938 // responsible for allocating space for them, not the PT_LOAD that 939 // contains the TLS initialization image. 940 if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) 941 return false; 942 return true; 943 } 944 945 // Decide which program headers to create and which sections to include in each 946 // one. 947 template <class ELFT> 948 std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { 949 std::vector<Phdr> Ret; 950 951 auto AddHdr = [&](unsigned Type, unsigned Flags) -> Phdr * { 952 Ret.emplace_back(Type, Flags); 953 return &Ret.back(); 954 }; 955 956 // The first phdr entry is PT_PHDR which describes the program header itself. 957 Phdr &Hdr = *AddHdr(PT_PHDR, PF_R); 958 Hdr.add(Out<ELFT>::ProgramHeaders); 959 960 // PT_INTERP must be the second entry if exists. 961 if (Out<ELFT>::Interp) { 962 Phdr &Hdr = *AddHdr(PT_INTERP, toPhdrFlags(Out<ELFT>::Interp->getFlags())); 963 Hdr.add(Out<ELFT>::Interp); 964 } 965 966 // Add the first PT_LOAD segment for regular output sections. 967 uintX_t Flags = PF_R; 968 Phdr *Load = AddHdr(PT_LOAD, Flags); 969 Load->add(Out<ELFT>::ElfHeader); 970 Load->add(Out<ELFT>::ProgramHeaders); 971 972 Phdr TlsHdr(PT_TLS, PF_R); 973 Phdr RelRo(PT_GNU_RELRO, PF_R); 974 Phdr Note(PT_NOTE, PF_R); 975 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 976 if (!(Sec->getFlags() & SHF_ALLOC)) 977 break; 978 979 // If we meet TLS section then we create TLS header 980 // and put all TLS sections inside for futher use when 981 // assign addresses. 982 if (Sec->getFlags() & SHF_TLS) 983 TlsHdr.add(Sec); 984 985 if (!needsPtLoad<ELFT>(Sec)) 986 continue; 987 988 // If flags changed then we want new load segment. 989 uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); 990 if (Flags != NewFlags) { 991 Load = AddHdr(PT_LOAD, NewFlags); 992 Flags = NewFlags; 993 } 994 995 Load->add(Sec); 996 997 if (isRelroSection(Sec)) 998 RelRo.add(Sec); 999 if (Sec->getType() == SHT_NOTE) 1000 Note.add(Sec); 1001 } 1002 1003 // Add the TLS segment unless it's empty. 1004 if (TlsHdr.First) 1005 Ret.push_back(std::move(TlsHdr)); 1006 1007 // Add an entry for .dynamic. 1008 if (isOutputDynamic<ELFT>()) { 1009 Phdr &H = *AddHdr(PT_DYNAMIC, toPhdrFlags(Out<ELFT>::Dynamic->getFlags())); 1010 H.add(Out<ELFT>::Dynamic); 1011 } 1012 1013 // PT_GNU_RELRO includes all sections that should be marked as 1014 // read-only by dynamic linker after proccessing relocations. 1015 if (RelRo.First) 1016 Ret.push_back(std::move(RelRo)); 1017 1018 // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. 1019 if (!Out<ELFT>::EhFrame->empty() && Out<ELFT>::EhFrameHdr) { 1020 Phdr &Hdr = *AddHdr(PT_GNU_EH_FRAME, 1021 toPhdrFlags(Out<ELFT>::EhFrameHdr->getFlags())); 1022 Hdr.add(Out<ELFT>::EhFrameHdr); 1023 } 1024 1025 // PT_GNU_STACK is a special section to tell the loader to make the 1026 // pages for the stack non-executable. 1027 if (!Config->ZExecStack) 1028 AddHdr(PT_GNU_STACK, PF_R | PF_W); 1029 1030 if (Note.First) 1031 Ret.push_back(std::move(Note)); 1032 return Ret; 1033 } 1034 1035 // The first section of each PT_LOAD and the first section after PT_GNU_RELRO 1036 // have to be page aligned so that the dynamic linker can set the permissions. 1037 template <class ELFT> void Writer<ELFT>::fixSectionAlignments() { 1038 for (const Phdr &P : Phdrs) 1039 if (P.H.p_type == PT_LOAD) 1040 P.First->PageAlign = true; 1041 1042 for (const Phdr &P : Phdrs) { 1043 if (P.H.p_type != PT_GNU_RELRO) 1044 continue; 1045 // Find the first section after PT_GNU_RELRO. If it is in a PT_LOAD we 1046 // have to align it to a page. 1047 auto End = OutputSections.end(); 1048 auto I = std::find(OutputSections.begin(), End, P.Last); 1049 if (I == End || (I + 1) == End) 1050 continue; 1051 OutputSectionBase<ELFT> *Sec = *(I + 1); 1052 if (needsPtLoad(Sec)) 1053 Sec->PageAlign = true; 1054 } 1055 } 1056 1057 // We should set file offsets and VAs for elf header and program headers 1058 // sections. These are special, we do not include them into output sections 1059 // list, but have them to simplify the code. 1060 template <class ELFT> void Writer<ELFT>::fixHeaders() { 1061 uintX_t BaseVA = ScriptConfig->DoLayout ? 0 : Config->ImageBase; 1062 Out<ELFT>::ElfHeader->setVA(BaseVA); 1063 uintX_t Off = Out<ELFT>::ElfHeader->getSize(); 1064 Out<ELFT>::ProgramHeaders->setVA(Off + BaseVA); 1065 Out<ELFT>::ProgramHeaders->setSize(sizeof(Elf_Phdr) * Phdrs.size()); 1066 } 1067 1068 // Assign VAs (addresses at run-time) to output sections. 1069 template <class ELFT> void Writer<ELFT>::assignAddresses() { 1070 uintX_t VA = Config->ImageBase + Out<ELFT>::ElfHeader->getSize() + 1071 Out<ELFT>::ProgramHeaders->getSize(); 1072 1073 uintX_t ThreadBssOffset = 0; 1074 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1075 uintX_t Alignment = Sec->getAlignment(); 1076 if (Sec->PageAlign) 1077 Alignment = std::max<uintX_t>(Alignment, Target->PageSize); 1078 1079 // We only assign VAs to allocated sections. 1080 if (needsPtLoad<ELFT>(Sec)) { 1081 VA = alignTo(VA, Alignment); 1082 Sec->setVA(VA); 1083 VA += Sec->getSize(); 1084 } else if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) { 1085 uintX_t TVA = VA + ThreadBssOffset; 1086 TVA = alignTo(TVA, Alignment); 1087 Sec->setVA(TVA); 1088 ThreadBssOffset = TVA - VA + Sec->getSize(); 1089 } 1090 } 1091 } 1092 1093 // Adjusts the file alignment for a given output section and returns 1094 // its new file offset. The file offset must be the same with its 1095 // virtual address (modulo the page size) so that the loader can load 1096 // executables without any address adjustment. 1097 template <class ELFT, class uintX_t> 1098 static uintX_t getFileAlignment(uintX_t Off, OutputSectionBase<ELFT> *Sec) { 1099 uintX_t Alignment = Sec->getAlignment(); 1100 if (Sec->PageAlign) 1101 Alignment = std::max<uintX_t>(Alignment, Target->PageSize); 1102 Off = alignTo(Off, Alignment); 1103 1104 // Relocatable output does not have program headers 1105 // and does not need any other offset adjusting. 1106 if (Config->Relocatable || !(Sec->getFlags() & SHF_ALLOC)) 1107 return Off; 1108 return alignTo(Off, Target->PageSize, Sec->getVA()); 1109 } 1110 1111 // Assign file offsets to output sections. 1112 template <class ELFT> void Writer<ELFT>::assignFileOffsets() { 1113 uintX_t Off = 0; 1114 1115 auto Set = [&](OutputSectionBase<ELFT> *Sec) { 1116 if (Sec->getType() == SHT_NOBITS) { 1117 Sec->setFileOffset(Off); 1118 return; 1119 } 1120 1121 Off = getFileAlignment<ELFT>(Off, Sec); 1122 Sec->setFileOffset(Off); 1123 Off += Sec->getSize(); 1124 }; 1125 1126 Set(Out<ELFT>::ElfHeader); 1127 Set(Out<ELFT>::ProgramHeaders); 1128 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1129 Set(Sec); 1130 1131 SectionHeaderOff = alignTo(Off, sizeof(uintX_t)); 1132 FileSize = SectionHeaderOff + (OutputSections.size() + 1) * sizeof(Elf_Shdr); 1133 } 1134 1135 // Finalize the program headers. We call this function after we assign 1136 // file offsets and VAs to all sections. 1137 template <class ELFT> void Writer<ELFT>::setPhdrs() { 1138 for (Phdr &P : Phdrs) { 1139 Elf_Phdr &H = P.H; 1140 OutputSectionBase<ELFT> *First = P.First; 1141 OutputSectionBase<ELFT> *Last = P.Last; 1142 if (First) { 1143 H.p_filesz = Last->getFileOff() - First->getFileOff(); 1144 if (Last->getType() != SHT_NOBITS) 1145 H.p_filesz += Last->getSize(); 1146 H.p_memsz = Last->getVA() + Last->getSize() - First->getVA(); 1147 H.p_offset = First->getFileOff(); 1148 H.p_vaddr = First->getVA(); 1149 } 1150 if (H.p_type == PT_LOAD) 1151 H.p_align = Target->PageSize; 1152 else if (H.p_type == PT_GNU_RELRO) 1153 H.p_align = 1; 1154 H.p_paddr = H.p_vaddr; 1155 1156 // The TLS pointer goes after PT_TLS. At least glibc will align it, 1157 // so round up the size to make sure the offsets are correct. 1158 if (H.p_type == PT_TLS) { 1159 Out<ELFT>::TlsPhdr = &H; 1160 H.p_memsz = alignTo(H.p_memsz, H.p_align); 1161 } 1162 } 1163 } 1164 1165 template <class ELFT> static uint32_t getMipsEFlags() { 1166 // FIXME: ELF flags depends on ELF flags of all input object files and 1167 // selected emulation. For now pick the arch flag from the fisrt input file 1168 // and use hard coded values for other flags. 1169 uint32_t FirstElfFlags = 1170 cast<ELFFileBase<ELFT>>(Config->FirstElf)->getObj().getHeader()->e_flags; 1171 uint32_t ElfFlags = FirstElfFlags & EF_MIPS_ARCH; 1172 if (ELFT::Is64Bits) 1173 ElfFlags |= EF_MIPS_CPIC | EF_MIPS_PIC; 1174 else { 1175 ElfFlags |= EF_MIPS_CPIC | EF_MIPS_ABI_O32; 1176 if (Config->Shared) 1177 ElfFlags |= EF_MIPS_PIC; 1178 } 1179 return ElfFlags; 1180 } 1181 1182 template <class ELFT> static typename ELFT::uint getEntryAddr() { 1183 if (Symbol *S = Config->EntrySym) 1184 return S->body()->getVA<ELFT>(); 1185 if (Config->EntryAddr != uint64_t(-1)) 1186 return Config->EntryAddr; 1187 return 0; 1188 } 1189 1190 template <class ELFT> static uint8_t getELFEncoding() { 1191 if (ELFT::TargetEndianness == llvm::support::little) 1192 return ELFDATA2LSB; 1193 return ELFDATA2MSB; 1194 } 1195 1196 static uint16_t getELFType() { 1197 if (Config->Pic) 1198 return ET_DYN; 1199 if (Config->Relocatable) 1200 return ET_REL; 1201 return ET_EXEC; 1202 } 1203 1204 // This function is called after we have assigned address and size 1205 // to each section. This function fixes some predefined absolute 1206 // symbol values that depend on section address and size. 1207 template <class ELFT> void Writer<ELFT>::fixAbsoluteSymbols() { 1208 auto Set = [](DefinedRegular<ELFT> *S1, DefinedRegular<ELFT> *S2, uintX_t V) { 1209 if (S1) 1210 S1->Value = V; 1211 if (S2) 1212 S2->Value = V; 1213 }; 1214 1215 // _etext is the first location after the last read-only loadable segment. 1216 // _edata is the first location after the last read-write loadable segment. 1217 // _end is the first location after the uninitialized data region. 1218 for (Phdr &P : Phdrs) { 1219 Elf_Phdr &H = P.H; 1220 if (H.p_type != PT_LOAD) 1221 continue; 1222 Set(ElfSym<ELFT>::End, ElfSym<ELFT>::End2, H.p_vaddr + H.p_memsz); 1223 1224 uintX_t Val = H.p_vaddr + H.p_filesz; 1225 if (H.p_flags & PF_W) 1226 Set(ElfSym<ELFT>::Edata, ElfSym<ELFT>::Edata2, Val); 1227 else 1228 Set(ElfSym<ELFT>::Etext, ElfSym<ELFT>::Etext2, Val); 1229 } 1230 } 1231 1232 template <class ELFT> void Writer<ELFT>::writeHeader() { 1233 uint8_t *Buf = Buffer->getBufferStart(); 1234 memcpy(Buf, "\177ELF", 4); 1235 1236 auto &FirstObj = cast<ELFFileBase<ELFT>>(*Config->FirstElf); 1237 1238 // Write the ELF header. 1239 auto *EHdr = reinterpret_cast<Elf_Ehdr *>(Buf); 1240 EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; 1241 EHdr->e_ident[EI_DATA] = getELFEncoding<ELFT>(); 1242 EHdr->e_ident[EI_VERSION] = EV_CURRENT; 1243 EHdr->e_ident[EI_OSABI] = FirstObj.getOSABI(); 1244 EHdr->e_type = getELFType(); 1245 EHdr->e_machine = FirstObj.EMachine; 1246 EHdr->e_version = EV_CURRENT; 1247 EHdr->e_entry = getEntryAddr<ELFT>(); 1248 EHdr->e_shoff = SectionHeaderOff; 1249 EHdr->e_ehsize = sizeof(Elf_Ehdr); 1250 EHdr->e_phnum = Phdrs.size(); 1251 EHdr->e_shentsize = sizeof(Elf_Shdr); 1252 EHdr->e_shnum = OutputSections.size() + 1; 1253 EHdr->e_shstrndx = Out<ELFT>::ShStrTab->SectionIndex; 1254 1255 if (Config->EMachine == EM_MIPS) 1256 EHdr->e_flags = getMipsEFlags<ELFT>(); 1257 1258 if (!Config->Relocatable) { 1259 EHdr->e_phoff = sizeof(Elf_Ehdr); 1260 EHdr->e_phentsize = sizeof(Elf_Phdr); 1261 } 1262 1263 // Write the program header table. 1264 auto *HBuf = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff); 1265 for (Phdr &P : Phdrs) 1266 *HBuf++ = P.H; 1267 1268 // Write the section header table. Note that the first table entry is null. 1269 auto *SHdrs = reinterpret_cast<Elf_Shdr *>(Buf + EHdr->e_shoff); 1270 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1271 Sec->writeHeaderTo(++SHdrs); 1272 } 1273 1274 template <class ELFT> void Writer<ELFT>::openFile() { 1275 ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = 1276 FileOutputBuffer::create(Config->OutputFile, FileSize, 1277 FileOutputBuffer::F_executable); 1278 if (auto EC = BufferOrErr.getError()) 1279 error(EC, "failed to open " + Config->OutputFile); 1280 else 1281 Buffer = std::move(*BufferOrErr); 1282 } 1283 1284 // Write section contents to a mmap'ed file. 1285 template <class ELFT> void Writer<ELFT>::writeSections() { 1286 uint8_t *Buf = Buffer->getBufferStart(); 1287 1288 // PPC64 needs to process relocations in the .opd section before processing 1289 // relocations in code-containing sections. 1290 if (OutputSectionBase<ELFT> *Sec = Out<ELFT>::Opd) { 1291 Out<ELFT>::OpdBuf = Buf + Sec->getFileOff(); 1292 Sec->writeTo(Buf + Sec->getFileOff()); 1293 } 1294 1295 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1296 if (Sec != Out<ELFT>::Opd) 1297 Sec->writeTo(Buf + Sec->getFileOff()); 1298 } 1299 1300 template <class ELFT> void Writer<ELFT>::writeBuildId() { 1301 if (!Out<ELFT>::BuildId) 1302 return; 1303 1304 // Compute a hash of all sections except .debug_* sections. 1305 // We skip debug sections because they tend to be very large 1306 // and their contents are very likely to be the same as long as 1307 // other sections are the same. 1308 uint8_t *Start = Buffer->getBufferStart(); 1309 uint8_t *Last = Start; 1310 std::vector<ArrayRef<uint8_t>> Regions; 1311 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1312 uint8_t *End = Start + Sec->getFileOff(); 1313 if (!Sec->getName().startswith(".debug_")) 1314 Regions.push_back({Last, End}); 1315 Last = End; 1316 } 1317 Regions.push_back({Last, Start + FileSize}); 1318 Out<ELFT>::BuildId->writeBuildId(Regions); 1319 } 1320 1321 template void elf::writeResult<ELF32LE>(SymbolTable<ELF32LE> *Symtab); 1322 template void elf::writeResult<ELF32BE>(SymbolTable<ELF32BE> *Symtab); 1323 template void elf::writeResult<ELF64LE>(SymbolTable<ELF64LE> *Symtab); 1324 template void elf::writeResult<ELF64BE>(SymbolTable<ELF64BE> *Symtab); 1325 1326 template struct elf::PhdrEntry<ELF32LE>; 1327 template struct elf::PhdrEntry<ELF32BE>; 1328 template struct elf::PhdrEntry<ELF64LE>; 1329 template struct elf::PhdrEntry<ELF64BE>; 1330 1331 template bool elf::isOutputDynamic<ELF32LE>(); 1332 template bool elf::isOutputDynamic<ELF32BE>(); 1333 template bool elf::isOutputDynamic<ELF64LE>(); 1334 template bool elf::isOutputDynamic<ELF64BE>(); 1335 1336 template bool elf::isRelroSection<ELF32LE>(OutputSectionBase<ELF32LE> *); 1337 template bool elf::isRelroSection<ELF32BE>(OutputSectionBase<ELF32BE> *); 1338 template bool elf::isRelroSection<ELF64LE>(OutputSectionBase<ELF64LE> *); 1339 template bool elf::isRelroSection<ELF64BE>(OutputSectionBase<ELF64BE> *); 1340 1341 template bool elf::needsPtLoad<ELF32LE>(OutputSectionBase<ELF32LE> *); 1342 template bool elf::needsPtLoad<ELF32BE>(OutputSectionBase<ELF32BE> *); 1343 template bool elf::needsPtLoad<ELF64LE>(OutputSectionBase<ELF64LE> *); 1344 template bool elf::needsPtLoad<ELF64BE>(OutputSectionBase<ELF64BE> *); 1345 1346 template StringRef elf::getOutputSectionName<ELF32LE>(InputSectionBase<ELF32LE> *); 1347 template StringRef elf::getOutputSectionName<ELF32BE>(InputSectionBase<ELF32BE> *); 1348 template StringRef elf::getOutputSectionName<ELF64LE>(InputSectionBase<ELF64LE> *); 1349 template StringRef elf::getOutputSectionName<ELF64BE>(InputSectionBase<ELF64BE> *); 1350 1351 template void elf::reportDiscarded<ELF32LE>(InputSectionBase<ELF32LE> *); 1352 template void elf::reportDiscarded<ELF32BE>(InputSectionBase<ELF32BE> *); 1353 template void elf::reportDiscarded<ELF64LE>(InputSectionBase<ELF64LE> *); 1354 template void elf::reportDiscarded<ELF64BE>(InputSectionBase<ELF64BE> *); 1355