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