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_GOT_OFF || Expr == R_MIPS_GOT || 570 Expr == R_MIPS_GOT_LOCAL || Expr == R_GOT_PAGE_PC || Expr == R_GOT_PC || 571 Expr == R_GOT_FROM_END) { 572 uint32_t T = Body.isTls() ? Target->getTlsGotRel(Type) : Type; 573 if (Config->EMachine == EM_MIPS && Expr == R_GOT_OFF) 574 Addend -= MipsGPOffset; 575 C.Relocations.push_back({Expr, T, Offset, Addend, &Body}); 576 if (Body.isInGot()) 577 continue; 578 Out<ELFT>::Got->addEntry(Body); 579 580 if (Config->EMachine == EM_MIPS) 581 // MIPS ABI has special rules to process GOT entries 582 // and doesn't require relocation entries for them. 583 // See "Global Offset Table" in Chapter 5 in the following document 584 // for detailed description: 585 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 586 continue; 587 588 if (Preemptible || (Config->Pic && !isAbsolute<ELFT>(Body))) { 589 uint32_t DynType; 590 if (Body.isTls()) 591 DynType = Target->TlsGotRel; 592 else if (Preemptible) 593 DynType = Target->GotRel; 594 else 595 DynType = Target->RelativeRel; 596 AddDyn({DynType, Out<ELFT>::Got, Body.getGotOffset<ELFT>(), 597 !Preemptible, &Body, 0}); 598 } 599 continue; 600 } 601 602 if (Preemptible) { 603 // We don't know anything about the finaly symbol. Just ask the dynamic 604 // linker to handle the relocation for us. 605 AddDyn({Target->getDynRel(Type), C.OutSec, Offset, false, &Body, Addend}); 606 continue; 607 } 608 609 if (Config->EMachine == EM_PPC64 && RI.getType(false) == R_PPC64_TOC) { 610 C.Relocations.push_back({R_PPC_TOC, Type, Offset, Addend, &Body}); 611 AddDyn({R_PPC64_RELATIVE, C.OutSec, Offset, false, nullptr, 612 (uintX_t)getPPC64TocBase() + Addend}); 613 continue; 614 } 615 616 // We know that this is the final symbol. If the program being produced 617 // is position independent, the final value is still not known. 618 // If the relocation depends on the symbol value (not the size or distances 619 // in the output), we still need some help from the dynamic linker. 620 // We can however do better than just copying the incoming relocation. We 621 // can process some of it and and just ask the dynamic linker to add the 622 // load address. 623 if (!Config->Pic || Target->isRelRelative(Type) || Expr == R_PC || 624 Expr == R_SIZE || isAbsolute<ELFT>(Body)) { 625 if (Config->EMachine == EM_MIPS && Body.isLocal() && 626 (Type == R_MIPS_GPREL16 || Type == R_MIPS_GPREL32)) 627 Expr = R_MIPS_GP0; 628 C.Relocations.push_back({Expr, Type, Offset, Addend, &Body}); 629 continue; 630 } 631 632 AddDyn({Target->RelativeRel, C.OutSec, Offset, true, &Body, Addend}); 633 C.Relocations.push_back({R_ABS, Type, Offset, Addend, &Body}); 634 } 635 636 // Scan relocations for necessary thunks. 637 if (Config->EMachine == EM_MIPS) 638 scanRelocsForThunks(File, Rels); 639 } 640 641 template <class ELFT> void Writer<ELFT>::scanRelocs(InputSection<ELFT> &C) { 642 for (const Elf_Shdr *RelSec : C.RelocSections) 643 scanRelocs(C, *RelSec); 644 } 645 646 template <class ELFT> 647 void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &S, 648 const Elf_Shdr &RelSec) { 649 ELFFile<ELFT> &EObj = S.getFile()->getObj(); 650 if (RelSec.sh_type == SHT_RELA) 651 scanRelocs(S, EObj.relas(&RelSec)); 652 else 653 scanRelocs(S, EObj.rels(&RelSec)); 654 } 655 656 template <class ELFT> 657 static void reportUndefined(SymbolTable<ELFT> &Symtab, SymbolBody *Sym) { 658 if ((Config->Relocatable || Config->Shared) && !Config->NoUndefined) 659 return; 660 661 std::string Msg = "undefined symbol: " + Sym->getName().str(); 662 if (InputFile *File = Symtab.findFile(Sym)) 663 Msg += " in " + File->getName().str(); 664 if (Config->NoinhibitExec) 665 warning(Msg); 666 else 667 error(Msg); 668 } 669 670 template <class ELFT> 671 static bool shouldKeepInSymtab(InputSectionBase<ELFT> *Sec, StringRef SymName, 672 const SymbolBody &B) { 673 if (B.isFile()) 674 return false; 675 676 // We keep sections in symtab for relocatable output. 677 if (B.isSection()) 678 return Config->Relocatable; 679 680 // If sym references a section in a discarded group, don't keep it. 681 if (Sec == &InputSection<ELFT>::Discarded) 682 return false; 683 684 if (Config->DiscardNone) 685 return true; 686 687 // In ELF assembly .L symbols are normally discarded by the assembler. 688 // If the assembler fails to do so, the linker discards them if 689 // * --discard-locals is used. 690 // * The symbol is in a SHF_MERGE section, which is normally the reason for 691 // the assembler keeping the .L symbol. 692 if (!SymName.startswith(".L") && !SymName.empty()) 693 return true; 694 695 if (Config->DiscardLocals) 696 return false; 697 698 return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE); 699 } 700 701 // Local symbols are not in the linker's symbol table. This function scans 702 // each object file's symbol table to copy local symbols to the output. 703 template <class ELFT> void Writer<ELFT>::copyLocalSymbols() { 704 if (!Out<ELFT>::SymTab) 705 return; 706 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 707 Symtab.getObjectFiles()) { 708 const char *StrTab = F->getStringTable().data(); 709 for (SymbolBody *B : F->getLocalSymbols()) { 710 auto *DR = dyn_cast<DefinedRegular<ELFT>>(B); 711 // No reason to keep local undefined symbol in symtab. 712 if (!DR) 713 continue; 714 StringRef SymName(StrTab + B->getNameOffset()); 715 InputSectionBase<ELFT> *Sec = DR->Section; 716 if (!shouldKeepInSymtab<ELFT>(Sec, SymName, *B)) 717 continue; 718 if (Sec && !Sec->Live) 719 continue; 720 ++Out<ELFT>::SymTab->NumLocals; 721 if (Config->Relocatable) 722 B->DynsymIndex = Out<ELFT>::SymTab->NumLocals; 723 F->KeptLocalSyms.push_back( 724 std::make_pair(DR, Out<ELFT>::SymTab->StrTabSec.addString(SymName))); 725 } 726 } 727 } 728 729 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections that 730 // we would like to make sure appear is a specific order to maximize their 731 // coverage by a single signed 16-bit offset from the TOC base pointer. 732 // Conversely, the special .tocbss section should be first among all SHT_NOBITS 733 // sections. This will put it next to the loaded special PPC64 sections (and, 734 // thus, within reach of the TOC base pointer). 735 static int getPPC64SectionRank(StringRef SectionName) { 736 return StringSwitch<int>(SectionName) 737 .Case(".tocbss", 0) 738 .Case(".branch_lt", 2) 739 .Case(".toc", 3) 740 .Case(".toc1", 4) 741 .Case(".opd", 5) 742 .Default(1); 743 } 744 745 template <class ELFT> static bool isRelroSection(OutputSectionBase<ELFT> *Sec) { 746 if (!Config->ZRelro) 747 return false; 748 typename OutputSectionBase<ELFT>::uintX_t Flags = Sec->getFlags(); 749 if (!(Flags & SHF_ALLOC) || !(Flags & SHF_WRITE)) 750 return false; 751 if (Flags & SHF_TLS) 752 return true; 753 uint32_t Type = Sec->getType(); 754 if (Type == SHT_INIT_ARRAY || Type == SHT_FINI_ARRAY || 755 Type == SHT_PREINIT_ARRAY) 756 return true; 757 if (Sec == Out<ELFT>::GotPlt) 758 return Config->ZNow; 759 if (Sec == Out<ELFT>::Dynamic || Sec == Out<ELFT>::Got) 760 return true; 761 StringRef S = Sec->getName(); 762 return S == ".data.rel.ro" || S == ".ctors" || S == ".dtors" || S == ".jcr" || 763 S == ".eh_frame"; 764 } 765 766 // Output section ordering is determined by this function. 767 template <class ELFT> 768 static bool compareSections(OutputSectionBase<ELFT> *A, 769 OutputSectionBase<ELFT> *B) { 770 typedef typename ELFT::uint uintX_t; 771 772 int Comp = Script->compareSections(A->getName(), B->getName()); 773 if (Comp != 0) 774 return Comp < 0; 775 776 uintX_t AFlags = A->getFlags(); 777 uintX_t BFlags = B->getFlags(); 778 779 // Allocatable sections go first to reduce the total PT_LOAD size and 780 // so debug info doesn't change addresses in actual code. 781 bool AIsAlloc = AFlags & SHF_ALLOC; 782 bool BIsAlloc = BFlags & SHF_ALLOC; 783 if (AIsAlloc != BIsAlloc) 784 return AIsAlloc; 785 786 // We don't have any special requirements for the relative order of 787 // two non allocatable sections. 788 if (!AIsAlloc) 789 return false; 790 791 // We want the read only sections first so that they go in the PT_LOAD 792 // covering the program headers at the start of the file. 793 bool AIsWritable = AFlags & SHF_WRITE; 794 bool BIsWritable = BFlags & SHF_WRITE; 795 if (AIsWritable != BIsWritable) 796 return BIsWritable; 797 798 // For a corresponding reason, put non exec sections first (the program 799 // header PT_LOAD is not executable). 800 bool AIsExec = AFlags & SHF_EXECINSTR; 801 bool BIsExec = BFlags & SHF_EXECINSTR; 802 if (AIsExec != BIsExec) 803 return BIsExec; 804 805 // If we got here we know that both A and B are in the same PT_LOAD. 806 807 // The TLS initialization block needs to be a single contiguous block in a R/W 808 // PT_LOAD, so stick TLS sections directly before R/W sections. The TLS NOBITS 809 // sections are placed here as they don't take up virtual address space in the 810 // PT_LOAD. 811 bool AIsTls = AFlags & SHF_TLS; 812 bool BIsTls = BFlags & SHF_TLS; 813 if (AIsTls != BIsTls) 814 return AIsTls; 815 816 // The next requirement we have is to put nobits sections last. The 817 // reason is that the only thing the dynamic linker will see about 818 // them is a p_memsz that is larger than p_filesz. Seeing that it 819 // zeros the end of the PT_LOAD, so that has to correspond to the 820 // nobits sections. 821 bool AIsNoBits = A->getType() == SHT_NOBITS; 822 bool BIsNoBits = B->getType() == SHT_NOBITS; 823 if (AIsNoBits != BIsNoBits) 824 return BIsNoBits; 825 826 // We place RelRo section before plain r/w ones. 827 bool AIsRelRo = isRelroSection(A); 828 bool BIsRelRo = isRelroSection(B); 829 if (AIsRelRo != BIsRelRo) 830 return AIsRelRo; 831 832 // Some architectures have additional ordering restrictions for sections 833 // within the same PT_LOAD. 834 if (Config->EMachine == EM_PPC64) 835 return getPPC64SectionRank(A->getName()) < 836 getPPC64SectionRank(B->getName()); 837 838 return false; 839 } 840 841 // The .bss section does not exist if no input file has a .bss section. 842 // This function creates one if that's the case. 843 template <class ELFT> void Writer<ELFT>::ensureBss() { 844 if (Out<ELFT>::Bss) 845 return; 846 Out<ELFT>::Bss = 847 new OutputSection<ELFT>(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE); 848 OwningSections.emplace_back(Out<ELFT>::Bss); 849 OutputSections.push_back(Out<ELFT>::Bss); 850 } 851 852 // Until this function is called, common symbols do not belong to any section. 853 // This function adds them to end of BSS section. 854 template <class ELFT> 855 void Writer<ELFT>::addCommonSymbols(std::vector<DefinedCommon *> &Syms) { 856 if (Syms.empty()) 857 return; 858 859 // Sort the common symbols by alignment as an heuristic to pack them better. 860 std::stable_sort(Syms.begin(), Syms.end(), 861 [](const DefinedCommon *A, const DefinedCommon *B) { 862 return A->Alignment > B->Alignment; 863 }); 864 865 ensureBss(); 866 uintX_t Off = Out<ELFT>::Bss->getSize(); 867 for (DefinedCommon *C : Syms) { 868 Off = alignTo(Off, C->Alignment); 869 Out<ELFT>::Bss->updateAlign(C->Alignment); 870 C->OffsetInBss = Off; 871 Off += C->Size; 872 } 873 874 Out<ELFT>::Bss->setSize(Off); 875 } 876 877 template <class ELFT> static uint32_t getAlignment(SharedSymbol<ELFT> *SS) { 878 typedef typename ELFFile<ELFT>::uintX_t uintX_t; 879 880 uintX_t SecAlign = SS->File->getSection(SS->Sym)->sh_addralign; 881 uintX_t SymValue = SS->Sym.st_value; 882 int TrailingZeros = 883 std::min(countTrailingZeros(SecAlign), countTrailingZeros(SymValue)); 884 return 1 << TrailingZeros; 885 } 886 887 // Reserve space in .bss for copy relocation. 888 template <class ELFT> 889 void Writer<ELFT>::addCopyRelSymbol(SharedSymbol<ELFT> *SS) { 890 ensureBss(); 891 uintX_t Align = getAlignment(SS); 892 uintX_t Off = alignTo(Out<ELFT>::Bss->getSize(), Align); 893 Out<ELFT>::Bss->setSize(Off + SS->template getSize<ELFT>()); 894 Out<ELFT>::Bss->updateAlign(Align); 895 uintX_t Shndx = SS->Sym.st_shndx; 896 uintX_t Value = SS->Sym.st_value; 897 // Look through the DSO's dynamic symbol for aliases and create a dynamic 898 // symbol for each one. This causes the copy relocation to correctly interpose 899 // any aliases. 900 for (SharedSymbol<ELFT> &S : SS->File->getSharedSymbols()) { 901 if (S.Sym.st_shndx != Shndx || S.Sym.st_value != Value) 902 continue; 903 S.OffsetInBss = Off; 904 S.NeedsCopyOrPltAddr = true; 905 S.setUsedInRegularObj(); 906 S.MustBeInDynSym = true; 907 } 908 Out<ELFT>::RelaDyn->addReloc( 909 {Target->CopyRel, Out<ELFT>::Bss, SS->OffsetInBss, false, SS, 0}); 910 } 911 912 template <class ELFT> 913 StringRef Writer<ELFT>::getOutputSectionName(InputSectionBase<ELFT> *S) const { 914 StringRef Dest = Script->getOutputSection<ELFT>(S); 915 if (!Dest.empty()) 916 return Dest; 917 918 StringRef Name = S->getSectionName(); 919 for (StringRef V : {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.", 920 ".init_array.", ".fini_array.", ".ctors.", ".dtors.", 921 ".tbss.", ".gcc_except_table.", ".tdata."}) 922 if (Name.startswith(V)) 923 return V.drop_back(); 924 return Name; 925 } 926 927 template <class ELFT> 928 void reportDiscarded(InputSectionBase<ELFT> *IS, 929 const std::unique_ptr<elf::ObjectFile<ELFT>> &File) { 930 if (!Config->PrintGcSections || !IS || IS->Live) 931 return; 932 llvm::errs() << "removing unused section from '" << IS->getSectionName() 933 << "' in file '" << File->getName() << "'\n"; 934 } 935 936 template <class ELFT> 937 bool Writer<ELFT>::isDiscarded(InputSectionBase<ELFT> *S) const { 938 return !S || S == &InputSection<ELFT>::Discarded || !S->Live || 939 Script->isDiscarded(S); 940 } 941 942 template <class ELFT> 943 static SymbolBody * 944 addOptionalSynthetic(SymbolTable<ELFT> &Table, StringRef Name, 945 OutputSectionBase<ELFT> &Sec, typename ELFT::uint Val) { 946 if (!Table.find(Name)) 947 return nullptr; 948 return Table.addSynthetic(Name, Sec, Val); 949 } 950 951 // The beginning and the ending of .rel[a].plt section are marked 952 // with __rel[a]_iplt_{start,end} symbols if it is a statically linked 953 // executable. The runtime needs these symbols in order to resolve 954 // all IRELATIVE relocs on startup. For dynamic executables, we don't 955 // need these symbols, since IRELATIVE relocs are resolved through GOT 956 // and PLT. For details, see http://www.airs.com/blog/archives/403. 957 template <class ELFT> void Writer<ELFT>::addRelIpltSymbols() { 958 if (isOutputDynamic() || !Out<ELFT>::RelaPlt) 959 return; 960 StringRef S = Config->Rela ? "__rela_iplt_start" : "__rel_iplt_start"; 961 ElfSym<ELFT>::RelaIpltStart = 962 addOptionalSynthetic(Symtab, S, *Out<ELFT>::RelaPlt, 0); 963 964 S = Config->Rela ? "__rela_iplt_end" : "__rel_iplt_end"; 965 ElfSym<ELFT>::RelaIpltEnd = addOptionalSynthetic( 966 Symtab, S, *Out<ELFT>::RelaPlt, DefinedSynthetic<ELFT>::SectionEnd); 967 } 968 969 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) { 970 if (!B.isUsedInRegularObj()) 971 return false; 972 973 if (auto *D = dyn_cast<DefinedRegular<ELFT>>(&B)) { 974 // Exclude symbols pointing to garbage-collected sections. 975 if (D->Section && !D->Section->Live) 976 return false; 977 } 978 return true; 979 } 980 981 static bool includeInDynsym(const SymbolBody &B) { 982 if (B.MustBeInDynSym) 983 return true; 984 uint8_t V = B.getVisibility(); 985 if (V != STV_DEFAULT && V != STV_PROTECTED) 986 return false; 987 return Config->ExportDynamic || Config->Shared; 988 } 989 990 // This class knows how to create an output section for a given 991 // input section. Output section type is determined by various 992 // factors, including input section's sh_flags, sh_type and 993 // linker scripts. 994 namespace { 995 template <class ELFT> class OutputSectionFactory { 996 typedef typename ELFT::Shdr Elf_Shdr; 997 typedef typename ELFT::uint uintX_t; 998 999 public: 1000 std::pair<OutputSectionBase<ELFT> *, bool> create(InputSectionBase<ELFT> *C, 1001 StringRef OutsecName); 1002 1003 OutputSectionBase<ELFT> *lookup(StringRef Name, uint32_t Type, 1004 uintX_t Flags) { 1005 return Map.lookup({Name, Type, Flags, 0}); 1006 } 1007 1008 private: 1009 SectionKey<ELFT::Is64Bits> createKey(InputSectionBase<ELFT> *C, 1010 StringRef OutsecName); 1011 1012 SmallDenseMap<SectionKey<ELFT::Is64Bits>, OutputSectionBase<ELFT> *> Map; 1013 }; 1014 } 1015 1016 template <class ELFT> 1017 std::pair<OutputSectionBase<ELFT> *, bool> 1018 OutputSectionFactory<ELFT>::create(InputSectionBase<ELFT> *C, 1019 StringRef OutsecName) { 1020 SectionKey<ELFT::Is64Bits> Key = createKey(C, OutsecName); 1021 OutputSectionBase<ELFT> *&Sec = Map[Key]; 1022 if (Sec) 1023 return {Sec, false}; 1024 1025 switch (C->SectionKind) { 1026 case InputSectionBase<ELFT>::Regular: 1027 Sec = new OutputSection<ELFT>(Key.Name, Key.Type, Key.Flags); 1028 break; 1029 case InputSectionBase<ELFT>::EHFrame: 1030 Sec = new EHOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags); 1031 break; 1032 case InputSectionBase<ELFT>::Merge: 1033 Sec = new MergeOutputSection<ELFT>(Key.Name, Key.Type, Key.Flags, 1034 Key.Alignment); 1035 break; 1036 case InputSectionBase<ELFT>::MipsReginfo: 1037 Sec = new MipsReginfoOutputSection<ELFT>(); 1038 break; 1039 } 1040 return {Sec, true}; 1041 } 1042 1043 template <class ELFT> 1044 SectionKey<ELFT::Is64Bits> 1045 OutputSectionFactory<ELFT>::createKey(InputSectionBase<ELFT> *C, 1046 StringRef OutsecName) { 1047 const Elf_Shdr *H = C->getSectionHdr(); 1048 uintX_t Flags = H->sh_flags & ~SHF_GROUP; 1049 1050 // For SHF_MERGE we create different output sections for each alignment. 1051 // This makes each output section simple and keeps a single level mapping from 1052 // input to output. 1053 uintX_t Alignment = 0; 1054 if (isa<MergeInputSection<ELFT>>(C)) 1055 Alignment = std::max(H->sh_addralign, H->sh_entsize); 1056 1057 // GNU as can give .eh_frame secion type SHT_PROGBITS or SHT_X86_64_UNWIND 1058 // depending on the construct. We want to canonicalize it so that 1059 // there is only one .eh_frame in the end. 1060 uint32_t Type = H->sh_type; 1061 if (Type == SHT_PROGBITS && Config->EMachine == EM_X86_64 && 1062 isa<EHInputSection<ELFT>>(C)) 1063 Type = SHT_X86_64_UNWIND; 1064 1065 return SectionKey<ELFT::Is64Bits>{OutsecName, Type, Flags, Alignment}; 1066 } 1067 1068 // The linker is expected to define some symbols depending on 1069 // the linking result. This function defines such symbols. 1070 template <class ELFT> void Writer<ELFT>::addReservedSymbols() { 1071 if (Config->EMachine == EM_MIPS) { 1072 // Define _gp for MIPS. st_value of _gp symbol will be updated by Writer 1073 // so that it points to an absolute address which is relative to GOT. 1074 // See "Global Data Symbols" in Chapter 6 in the following document: 1075 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 1076 ElfSym<ELFT>::MipsGp = 1077 Symtab.addSynthetic("_gp", *Out<ELFT>::Got, MipsGPOffset); 1078 1079 // On MIPS O32 ABI, _gp_disp is a magic symbol designates offset between 1080 // start of function and 'gp' pointer into GOT. 1081 ElfSym<ELFT>::MipsGpDisp = 1082 addOptionalSynthetic(Symtab, "_gp_disp", *Out<ELFT>::Got, MipsGPOffset); 1083 // The __gnu_local_gp is a magic symbol equal to the current value of 'gp' 1084 // pointer. This symbol is used in the code generated by .cpload pseudo-op 1085 // in case of using -mno-shared option. 1086 // https://sourceware.org/ml/binutils/2004-12/msg00094.html 1087 ElfSym<ELFT>::MipsLocalGp = addOptionalSynthetic( 1088 Symtab, "__gnu_local_gp", *Out<ELFT>::Got, MipsGPOffset); 1089 } 1090 1091 // In the assembly for 32 bit x86 the _GLOBAL_OFFSET_TABLE_ symbol 1092 // is magical and is used to produce a R_386_GOTPC relocation. 1093 // The R_386_GOTPC relocation value doesn't actually depend on the 1094 // symbol value, so it could use an index of STN_UNDEF which, according 1095 // to the spec, means the symbol value is 0. 1096 // Unfortunately both gas and MC keep the _GLOBAL_OFFSET_TABLE_ symbol in 1097 // the object file. 1098 // The situation is even stranger on x86_64 where the assembly doesn't 1099 // need the magical symbol, but gas still puts _GLOBAL_OFFSET_TABLE_ as 1100 // an undefined symbol in the .o files. 1101 // Given that the symbol is effectively unused, we just create a dummy 1102 // hidden one to avoid the undefined symbol error. 1103 if (!Config->Relocatable) 1104 Symtab.addIgnored("_GLOBAL_OFFSET_TABLE_"); 1105 1106 // __tls_get_addr is defined by the dynamic linker for dynamic ELFs. For 1107 // static linking the linker is required to optimize away any references to 1108 // __tls_get_addr, so it's not defined anywhere. Create a hidden definition 1109 // to avoid the undefined symbol error. 1110 if (!isOutputDynamic()) 1111 Symtab.addIgnored("__tls_get_addr"); 1112 1113 auto Define = [this](StringRef S, typename ElfSym<ELFT>::SymPair &Sym) { 1114 Sym.first = Symtab.addIgnored(S, STV_DEFAULT); 1115 1116 // The name without the underscore is not a reserved name, 1117 // so it is defined only when there is a reference against it. 1118 assert(S.startswith("_")); 1119 S = S.substr(1); 1120 if (SymbolBody *B = Symtab.find(S)) 1121 if (B->isUndefined()) 1122 Sym.second = Symtab.addAbsolute(S, STV_DEFAULT); 1123 }; 1124 1125 Define("_end", ElfSym<ELFT>::End); 1126 Define("_etext", ElfSym<ELFT>::Etext); 1127 Define("_edata", ElfSym<ELFT>::Edata); 1128 } 1129 1130 // Sort input sections by section name suffixes for 1131 // __attribute__((init_priority(N))). 1132 template <class ELFT> static void sortInitFini(OutputSectionBase<ELFT> *S) { 1133 if (S) 1134 reinterpret_cast<OutputSection<ELFT> *>(S)->sortInitFini(); 1135 } 1136 1137 // Sort input sections by the special rule for .ctors and .dtors. 1138 template <class ELFT> static void sortCtorsDtors(OutputSectionBase<ELFT> *S) { 1139 if (S) 1140 reinterpret_cast<OutputSection<ELFT> *>(S)->sortCtorsDtors(); 1141 } 1142 1143 // Create output section objects and add them to OutputSections. 1144 template <class ELFT> void Writer<ELFT>::createSections() { 1145 // Add .interp first because some loaders want to see that section 1146 // on the first page of the executable file when loaded into memory. 1147 if (needsInterpSection()) 1148 OutputSections.push_back(Out<ELFT>::Interp); 1149 1150 // A core file does not usually contain unmodified segments except 1151 // the first page of the executable. Add the build ID section now 1152 // so that the section is included in the first page. 1153 if (Out<ELFT>::BuildId) 1154 OutputSections.push_back(Out<ELFT>::BuildId); 1155 1156 // Create output sections for input object file sections. 1157 std::vector<OutputSectionBase<ELFT> *> RegularSections; 1158 OutputSectionFactory<ELFT> Factory; 1159 for (const std::unique_ptr<elf::ObjectFile<ELFT>> &F : 1160 Symtab.getObjectFiles()) { 1161 for (InputSectionBase<ELFT> *C : F->getSections()) { 1162 if (isDiscarded(C)) { 1163 reportDiscarded(C, F); 1164 continue; 1165 } 1166 OutputSectionBase<ELFT> *Sec; 1167 bool IsNew; 1168 std::tie(Sec, IsNew) = Factory.create(C, getOutputSectionName(C)); 1169 if (IsNew) { 1170 OwningSections.emplace_back(Sec); 1171 OutputSections.push_back(Sec); 1172 RegularSections.push_back(Sec); 1173 } 1174 Sec->addSection(C); 1175 } 1176 } 1177 1178 Out<ELFT>::Bss = static_cast<OutputSection<ELFT> *>( 1179 Factory.lookup(".bss", SHT_NOBITS, SHF_ALLOC | SHF_WRITE)); 1180 1181 // If we have a .opd section (used under PPC64 for function descriptors), 1182 // store a pointer to it here so that we can use it later when processing 1183 // relocations. 1184 Out<ELFT>::Opd = Factory.lookup(".opd", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC); 1185 1186 Out<ELFT>::Dynamic->PreInitArraySec = Factory.lookup( 1187 ".preinit_array", SHT_PREINIT_ARRAY, SHF_WRITE | SHF_ALLOC); 1188 Out<ELFT>::Dynamic->InitArraySec = 1189 Factory.lookup(".init_array", SHT_INIT_ARRAY, SHF_WRITE | SHF_ALLOC); 1190 Out<ELFT>::Dynamic->FiniArraySec = 1191 Factory.lookup(".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC); 1192 1193 // Sort section contents for __attribute__((init_priority(N)). 1194 sortInitFini(Out<ELFT>::Dynamic->InitArraySec); 1195 sortInitFini(Out<ELFT>::Dynamic->FiniArraySec); 1196 sortCtorsDtors(Factory.lookup(".ctors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 1197 sortCtorsDtors(Factory.lookup(".dtors", SHT_PROGBITS, SHF_WRITE | SHF_ALLOC)); 1198 1199 // The linker needs to define SECNAME_start, SECNAME_end and SECNAME_stop 1200 // symbols for sections, so that the runtime can get the start and end 1201 // addresses of each section by section name. Add such symbols. 1202 if (!Config->Relocatable) { 1203 addStartEndSymbols(); 1204 for (OutputSectionBase<ELFT> *Sec : RegularSections) 1205 addStartStopSymbols(Sec); 1206 } 1207 1208 // Add _DYNAMIC symbol. Unlike GNU gold, our _DYNAMIC symbol has no type. 1209 // It should be okay as no one seems to care about the type. 1210 // Even the author of gold doesn't remember why gold behaves that way. 1211 // https://sourceware.org/ml/binutils/2002-03/msg00360.html 1212 if (isOutputDynamic()) 1213 Symtab.addSynthetic("_DYNAMIC", *Out<ELFT>::Dynamic, 0); 1214 1215 // Define __rel[a]_iplt_{start,end} symbols if needed. 1216 addRelIpltSymbols(); 1217 1218 if (Out<ELFT>::EhFrameHdr->Sec) 1219 Out<ELFT>::EhFrameHdr->Sec->finalize(); 1220 1221 // Scan relocations. This must be done after every symbol is declared so that 1222 // we can correctly decide if a dynamic relocation is needed. 1223 // Check size() each time to guard against .bss being created. 1224 for (unsigned I = 0; I < OutputSections.size(); ++I) { 1225 OutputSectionBase<ELFT> *Sec = OutputSections[I]; 1226 Sec->forEachInputSection([&](InputSectionBase<ELFT> *S) { 1227 if (auto *IS = dyn_cast<InputSection<ELFT>>(S)) { 1228 // Set OutSecOff so that scanRelocs can use it. 1229 uintX_t Off = alignTo(Sec->getSize(), S->Align); 1230 IS->OutSecOff = Off; 1231 1232 scanRelocs(*IS); 1233 1234 // Now that scan relocs possibly changed the size, update the offset. 1235 Sec->setSize(Off + S->getSize()); 1236 } else if (auto *EH = dyn_cast<EHInputSection<ELFT>>(S)) { 1237 if (EH->RelocSection) 1238 scanRelocs(*EH, *EH->RelocSection); 1239 } 1240 }); 1241 } 1242 1243 // Now that we have defined all possible symbols including linker- 1244 // synthesized ones. Visit all symbols to give the finishing touches. 1245 std::vector<DefinedCommon *> CommonSymbols; 1246 for (Symbol *S : Symtab.getSymbols()) { 1247 SymbolBody *Body = S->Body; 1248 if (Body->isUndefined() && !Body->isWeak()) { 1249 auto *U = dyn_cast<UndefinedElf<ELFT>>(Body); 1250 if (!U || !U->canKeepUndefined()) 1251 reportUndefined<ELFT>(Symtab, Body); 1252 } 1253 1254 if (auto *C = dyn_cast<DefinedCommon>(Body)) 1255 CommonSymbols.push_back(C); 1256 1257 if (!includeInSymtab<ELFT>(*Body)) 1258 continue; 1259 if (Out<ELFT>::SymTab) 1260 Out<ELFT>::SymTab->addSymbol(Body); 1261 1262 if (isOutputDynamic() && includeInDynsym(*Body)) 1263 Out<ELFT>::DynSymTab->addSymbol(Body); 1264 } 1265 1266 // Do not proceed if there was an undefined symbol. 1267 if (HasError) 1268 return; 1269 1270 addCommonSymbols(CommonSymbols); 1271 1272 // So far we have added sections from input object files. 1273 // This function adds linker-created Out<ELFT>::* sections. 1274 addPredefinedSections(); 1275 1276 std::stable_sort(OutputSections.begin(), OutputSections.end(), 1277 compareSections<ELFT>); 1278 1279 unsigned I = 1; 1280 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1281 Sec->SectionIndex = I++; 1282 Sec->setSHName(Out<ELFT>::ShStrTab->addString(Sec->getName())); 1283 } 1284 1285 // Finalizers fix each section's size. 1286 // .dynsym is finalized early since that may fill up .gnu.hash. 1287 if (isOutputDynamic()) 1288 Out<ELFT>::DynSymTab->finalize(); 1289 1290 // Fill other section headers. The dynamic table is finalized 1291 // at the end because some tags like RELSZ depend on result 1292 // of finalizing other sections. The dynamic string table is 1293 // finalized once the .dynamic finalizer has added a few last 1294 // strings. See DynamicSection::finalize() 1295 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1296 if (Sec != Out<ELFT>::DynStrTab && Sec != Out<ELFT>::Dynamic) 1297 Sec->finalize(); 1298 1299 if (isOutputDynamic()) 1300 Out<ELFT>::Dynamic->finalize(); 1301 } 1302 1303 template <class ELFT> bool Writer<ELFT>::needsGot() { 1304 if (!Out<ELFT>::Got->empty()) 1305 return true; 1306 1307 // We add the .got section to the result for dynamic MIPS target because 1308 // its address and properties are mentioned in the .dynamic section. 1309 if (Config->EMachine == EM_MIPS) 1310 return true; 1311 1312 // If we have a relocation that is relative to GOT (such as GOTOFFREL), 1313 // we need to emit a GOT even if it's empty. 1314 return HasGotOffRel; 1315 } 1316 1317 // This function add Out<ELFT>::* sections to OutputSections. 1318 template <class ELFT> void Writer<ELFT>::addPredefinedSections() { 1319 auto Add = [&](OutputSectionBase<ELFT> *C) { 1320 if (C) 1321 OutputSections.push_back(C); 1322 }; 1323 1324 // This order is not the same as the final output order 1325 // because we sort the sections using their attributes below. 1326 Add(Out<ELFT>::SymTab); 1327 Add(Out<ELFT>::ShStrTab); 1328 Add(Out<ELFT>::StrTab); 1329 if (isOutputDynamic()) { 1330 Add(Out<ELFT>::DynSymTab); 1331 Add(Out<ELFT>::GnuHashTab); 1332 Add(Out<ELFT>::HashTab); 1333 Add(Out<ELFT>::Dynamic); 1334 Add(Out<ELFT>::DynStrTab); 1335 if (Out<ELFT>::RelaDyn->hasRelocs()) 1336 Add(Out<ELFT>::RelaDyn); 1337 Add(Out<ELFT>::MipsRldMap); 1338 } 1339 1340 // We always need to add rel[a].plt to output if it has entries. 1341 // Even during static linking it can contain R_[*]_IRELATIVE relocations. 1342 if (Out<ELFT>::RelaPlt && Out<ELFT>::RelaPlt->hasRelocs()) { 1343 Add(Out<ELFT>::RelaPlt); 1344 Out<ELFT>::RelaPlt->Static = !isOutputDynamic(); 1345 } 1346 1347 if (needsGot()) 1348 Add(Out<ELFT>::Got); 1349 if (Out<ELFT>::GotPlt && !Out<ELFT>::GotPlt->empty()) 1350 Add(Out<ELFT>::GotPlt); 1351 if (!Out<ELFT>::Plt->empty()) 1352 Add(Out<ELFT>::Plt); 1353 if (Out<ELFT>::EhFrameHdr->Live) 1354 Add(Out<ELFT>::EhFrameHdr); 1355 } 1356 1357 // The linker is expected to define SECNAME_start and SECNAME_end 1358 // symbols for a few sections. This function defines them. 1359 template <class ELFT> void Writer<ELFT>::addStartEndSymbols() { 1360 auto Define = [&](StringRef Start, StringRef End, 1361 OutputSectionBase<ELFT> *OS) { 1362 if (OS) { 1363 Symtab.addSynthetic(Start, *OS, 0); 1364 Symtab.addSynthetic(End, *OS, DefinedSynthetic<ELFT>::SectionEnd); 1365 } else { 1366 Symtab.addIgnored(Start); 1367 Symtab.addIgnored(End); 1368 } 1369 }; 1370 1371 Define("__preinit_array_start", "__preinit_array_end", 1372 Out<ELFT>::Dynamic->PreInitArraySec); 1373 Define("__init_array_start", "__init_array_end", 1374 Out<ELFT>::Dynamic->InitArraySec); 1375 Define("__fini_array_start", "__fini_array_end", 1376 Out<ELFT>::Dynamic->FiniArraySec); 1377 } 1378 1379 // If a section name is valid as a C identifier (which is rare because of 1380 // the leading '.'), linkers are expected to define __start_<secname> and 1381 // __stop_<secname> symbols. They are at beginning and end of the section, 1382 // respectively. This is not requested by the ELF standard, but GNU ld and 1383 // gold provide the feature, and used by many programs. 1384 template <class ELFT> 1385 void Writer<ELFT>::addStartStopSymbols(OutputSectionBase<ELFT> *Sec) { 1386 StringRef S = Sec->getName(); 1387 if (!isValidCIdentifier(S)) 1388 return; 1389 StringSaver Saver(Alloc); 1390 StringRef Start = Saver.save("__start_" + S); 1391 StringRef Stop = Saver.save("__stop_" + S); 1392 if (SymbolBody *B = Symtab.find(Start)) 1393 if (B->isUndefined()) 1394 Symtab.addSynthetic(Start, *Sec, 0); 1395 if (SymbolBody *B = Symtab.find(Stop)) 1396 if (B->isUndefined()) 1397 Symtab.addSynthetic(Stop, *Sec, DefinedSynthetic<ELFT>::SectionEnd); 1398 } 1399 1400 template <class ELFT> static bool needsPtLoad(OutputSectionBase<ELFT> *Sec) { 1401 if (!(Sec->getFlags() & SHF_ALLOC)) 1402 return false; 1403 1404 // Don't allocate VA space for TLS NOBITS sections. The PT_TLS PHDR is 1405 // responsible for allocating space for them, not the PT_LOAD that 1406 // contains the TLS initialization image. 1407 if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) 1408 return false; 1409 return true; 1410 } 1411 1412 static uint32_t toPhdrFlags(uint64_t Flags) { 1413 uint32_t Ret = PF_R; 1414 if (Flags & SHF_WRITE) 1415 Ret |= PF_W; 1416 if (Flags & SHF_EXECINSTR) 1417 Ret |= PF_X; 1418 return Ret; 1419 } 1420 1421 // Decide which program headers to create and which sections to include in each 1422 // one. 1423 template <class ELFT> void Writer<ELFT>::createPhdrs() { 1424 auto AddHdr = [this](unsigned Type, unsigned Flags) { 1425 return &*Phdrs.emplace(Phdrs.end(), Type, Flags); 1426 }; 1427 1428 auto AddSec = [](Phdr &Hdr, OutputSectionBase<ELFT> *Sec) { 1429 Hdr.Last = Sec; 1430 if (!Hdr.First) 1431 Hdr.First = Sec; 1432 Hdr.H.p_align = std::max<uintX_t>(Hdr.H.p_align, Sec->getAlign()); 1433 }; 1434 1435 // The first phdr entry is PT_PHDR which describes the program header itself. 1436 Phdr &Hdr = *AddHdr(PT_PHDR, PF_R); 1437 AddSec(Hdr, Out<ELFT>::ProgramHeaders); 1438 1439 // PT_INTERP must be the second entry if exists. 1440 if (needsInterpSection()) { 1441 Phdr &Hdr = *AddHdr(PT_INTERP, toPhdrFlags(Out<ELFT>::Interp->getFlags())); 1442 AddSec(Hdr, Out<ELFT>::Interp); 1443 } 1444 1445 // Add the first PT_LOAD segment for regular output sections. 1446 uintX_t Flags = PF_R; 1447 Phdr *Load = AddHdr(PT_LOAD, Flags); 1448 AddSec(*Load, Out<ELFT>::ElfHeader); 1449 AddSec(*Load, Out<ELFT>::ProgramHeaders); 1450 1451 Phdr TlsHdr(PT_TLS, PF_R); 1452 Phdr RelRo(PT_GNU_RELRO, PF_R); 1453 Phdr Note(PT_NOTE, PF_R); 1454 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1455 if (!(Sec->getFlags() & SHF_ALLOC)) 1456 break; 1457 1458 // If we meet TLS section then we create TLS header 1459 // and put all TLS sections inside for futher use when 1460 // assign addresses. 1461 if (Sec->getFlags() & SHF_TLS) 1462 AddSec(TlsHdr, Sec); 1463 1464 if (!needsPtLoad<ELFT>(Sec)) 1465 continue; 1466 1467 // If flags changed then we want new load segment. 1468 uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); 1469 if (Flags != NewFlags) { 1470 Load = AddHdr(PT_LOAD, NewFlags); 1471 Flags = NewFlags; 1472 } 1473 1474 AddSec(*Load, Sec); 1475 1476 if (isRelroSection(Sec)) 1477 AddSec(RelRo, Sec); 1478 if (Sec->getType() == SHT_NOTE) 1479 AddSec(Note, Sec); 1480 } 1481 1482 // Add the TLS segment unless it's empty. 1483 if (TlsHdr.First) 1484 Phdrs.push_back(std::move(TlsHdr)); 1485 1486 // Add an entry for .dynamic. 1487 if (isOutputDynamic()) { 1488 Phdr &H = *AddHdr(PT_DYNAMIC, toPhdrFlags(Out<ELFT>::Dynamic->getFlags())); 1489 AddSec(H, Out<ELFT>::Dynamic); 1490 } 1491 1492 // PT_GNU_RELRO includes all sections that should be marked as 1493 // read-only by dynamic linker after proccessing relocations. 1494 if (RelRo.First) 1495 Phdrs.push_back(std::move(RelRo)); 1496 1497 // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. 1498 if (Out<ELFT>::EhFrameHdr->Live) { 1499 Phdr &Hdr = *AddHdr(PT_GNU_EH_FRAME, 1500 toPhdrFlags(Out<ELFT>::EhFrameHdr->getFlags())); 1501 AddSec(Hdr, Out<ELFT>::EhFrameHdr); 1502 } 1503 1504 // PT_GNU_STACK is a special section to tell the loader to make the 1505 // pages for the stack non-executable. 1506 if (!Config->ZExecStack) 1507 AddHdr(PT_GNU_STACK, PF_R | PF_W); 1508 1509 if (Note.First) 1510 Phdrs.push_back(std::move(Note)); 1511 1512 Out<ELFT>::ProgramHeaders->setSize(sizeof(Elf_Phdr) * Phdrs.size()); 1513 } 1514 1515 // The first section of each PT_LOAD and the first section after PT_GNU_RELRO 1516 // have to be page aligned so that the dynamic linker can set the permissions. 1517 template <class ELFT> void Writer<ELFT>::fixSectionAlignments() { 1518 for (const Phdr &P : Phdrs) 1519 if (P.H.p_type == PT_LOAD) 1520 P.First->PageAlign = true; 1521 1522 for (const Phdr &P : Phdrs) { 1523 if (P.H.p_type != PT_GNU_RELRO) 1524 continue; 1525 // Find the first section after PT_GNU_RELRO. If it is in a PT_LOAD we 1526 // have to align it to a page. 1527 auto End = OutputSections.end(); 1528 auto I = std::find(OutputSections.begin(), End, P.Last); 1529 if (I == End || (I + 1) == End) 1530 continue; 1531 OutputSectionBase<ELFT> *Sec = *(I + 1); 1532 if (needsPtLoad(Sec)) 1533 Sec->PageAlign = true; 1534 } 1535 } 1536 1537 // We should set file offsets and VAs for elf header and program headers 1538 // sections. These are special, we do not include them into output sections 1539 // list, but have them to simplify the code. 1540 template <class ELFT> void Writer<ELFT>::fixHeaders() { 1541 uintX_t BaseVA = Script->DoLayout ? 0 : Target->getVAStart(); 1542 Out<ELFT>::ElfHeader->setVA(BaseVA); 1543 Out<ELFT>::ElfHeader->setFileOffset(0); 1544 uintX_t Off = Out<ELFT>::ElfHeader->getSize(); 1545 Out<ELFT>::ProgramHeaders->setVA(Off + BaseVA); 1546 Out<ELFT>::ProgramHeaders->setFileOffset(Off); 1547 } 1548 1549 // Assign VAs (addresses at run-time) to output sections. 1550 template <class ELFT> void Writer<ELFT>::assignAddresses() { 1551 uintX_t VA = Target->getVAStart() + Out<ELFT>::ElfHeader->getSize() + 1552 Out<ELFT>::ProgramHeaders->getSize(); 1553 1554 uintX_t ThreadBssOffset = 0; 1555 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1556 uintX_t Align = Sec->getAlign(); 1557 if (Sec->PageAlign) 1558 Align = std::max<uintX_t>(Align, Target->PageSize); 1559 1560 // We only assign VAs to allocated sections. 1561 if (needsPtLoad<ELFT>(Sec)) { 1562 VA = alignTo(VA, Align); 1563 Sec->setVA(VA); 1564 VA += Sec->getSize(); 1565 } else if (Sec->getFlags() & SHF_TLS && Sec->getType() == SHT_NOBITS) { 1566 uintX_t TVA = VA + ThreadBssOffset; 1567 TVA = alignTo(TVA, Align); 1568 Sec->setVA(TVA); 1569 ThreadBssOffset = TVA - VA + Sec->getSize(); 1570 } 1571 } 1572 } 1573 1574 // Assign file offsets to output sections. 1575 template <class ELFT> void Writer<ELFT>::assignFileOffsets() { 1576 uintX_t Off = 1577 Out<ELFT>::ElfHeader->getSize() + Out<ELFT>::ProgramHeaders->getSize(); 1578 1579 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1580 if (Sec->getType() == SHT_NOBITS) { 1581 Sec->setFileOffset(Off); 1582 continue; 1583 } 1584 uintX_t Align = Sec->getAlign(); 1585 if (Sec->PageAlign) 1586 Align = std::max<uintX_t>(Align, Target->PageSize); 1587 Off = alignTo(Off, Align); 1588 Sec->setFileOffset(Off); 1589 Off += Sec->getSize(); 1590 } 1591 SectionHeaderOff = alignTo(Off, sizeof(uintX_t)); 1592 FileSize = SectionHeaderOff + (OutputSections.size() + 1) * sizeof(Elf_Shdr); 1593 } 1594 1595 // Finalize the program headers. We call this function after we assign 1596 // file offsets and VAs to all sections. 1597 template <class ELFT> void Writer<ELFT>::setPhdrs() { 1598 for (Phdr &P : Phdrs) { 1599 Elf_Phdr &H = P.H; 1600 OutputSectionBase<ELFT> *First = P.First; 1601 OutputSectionBase<ELFT> *Last = P.Last; 1602 if (First) { 1603 H.p_filesz = Last->getFileOff() - First->getFileOff(); 1604 if (Last->getType() != SHT_NOBITS) 1605 H.p_filesz += Last->getSize(); 1606 H.p_memsz = Last->getVA() + Last->getSize() - First->getVA(); 1607 H.p_offset = First->getFileOff(); 1608 H.p_vaddr = First->getVA(); 1609 } 1610 if (H.p_type == PT_LOAD) 1611 H.p_align = Target->PageSize; 1612 else if (H.p_type == PT_GNU_RELRO) 1613 H.p_align = 1; 1614 H.p_paddr = H.p_vaddr; 1615 1616 // The TLS pointer goes after PT_TLS. At least glibc will align it, 1617 // so round up the size to make sure the offsets are correct. 1618 if (H.p_type == PT_TLS) { 1619 Out<ELFT>::TlsPhdr = &H; 1620 H.p_memsz = alignTo(H.p_memsz, H.p_align); 1621 } 1622 } 1623 } 1624 1625 static uint32_t getMipsEFlags() { 1626 // FIXME: In fact ELF flags depends on ELF flags of input object files 1627 // and selected emulation. For now just use hard coded values. 1628 uint32_t V = EF_MIPS_ABI_O32 | EF_MIPS_CPIC | EF_MIPS_ARCH_32R2; 1629 if (Config->Shared) 1630 V |= EF_MIPS_PIC; 1631 return V; 1632 } 1633 1634 template <class ELFT> static typename ELFT::uint getEntryAddr() { 1635 if (Symbol *S = Config->EntrySym) 1636 return S->Body->getVA<ELFT>(); 1637 if (Config->EntryAddr != uint64_t(-1)) 1638 return Config->EntryAddr; 1639 return 0; 1640 } 1641 1642 template <class ELFT> static uint8_t getELFEncoding() { 1643 if (ELFT::TargetEndianness == llvm::support::little) 1644 return ELFDATA2LSB; 1645 return ELFDATA2MSB; 1646 } 1647 1648 static uint16_t getELFType() { 1649 if (Config->Pic) 1650 return ET_DYN; 1651 if (Config->Relocatable) 1652 return ET_REL; 1653 return ET_EXEC; 1654 } 1655 1656 template <class ELFT, class SymPair, class uintX_t> 1657 static void assignSymValue(SymPair &Sym, uintX_t Val) { 1658 if (Sym.first) 1659 Sym.first->Value = Val; 1660 if (Sym.second) 1661 Sym.second->Value = Val; 1662 } 1663 1664 // This function is called after we have assigned address and size 1665 // to each section. This function fixes some predefined absolute 1666 // symbol values that depend on section address and size. 1667 template <class ELFT> void Writer<ELFT>::fixAbsoluteSymbols() { 1668 // _etext is the first location after the last read-only loadable segment. 1669 // _edata is the first location after the last read-write loadable segment. 1670 // _end is the first location after the uninitialized data region. 1671 for (Phdr &P : Phdrs) { 1672 Elf_Phdr &H = P.H; 1673 if (H.p_type != PT_LOAD) 1674 continue; 1675 assignSymValue<ELFT>(ElfSym<ELFT>::End, H.p_vaddr + H.p_memsz); 1676 1677 uintX_t Val = H.p_vaddr + H.p_filesz; 1678 if (H.p_flags & PF_W) 1679 assignSymValue<ELFT>(ElfSym<ELFT>::Edata, Val); 1680 else 1681 assignSymValue<ELFT>(ElfSym<ELFT>::Etext, Val); 1682 } 1683 } 1684 1685 template <class ELFT> void Writer<ELFT>::writeHeader() { 1686 uint8_t *Buf = Buffer->getBufferStart(); 1687 memcpy(Buf, "\177ELF", 4); 1688 1689 auto &FirstObj = cast<ELFFileBase<ELFT>>(*Config->FirstElf); 1690 1691 // Write the ELF header. 1692 auto *EHdr = reinterpret_cast<Elf_Ehdr *>(Buf); 1693 EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; 1694 EHdr->e_ident[EI_DATA] = getELFEncoding<ELFT>(); 1695 EHdr->e_ident[EI_VERSION] = EV_CURRENT; 1696 EHdr->e_ident[EI_OSABI] = FirstObj.getOSABI(); 1697 EHdr->e_type = getELFType(); 1698 EHdr->e_machine = FirstObj.getEMachine(); 1699 EHdr->e_version = EV_CURRENT; 1700 EHdr->e_entry = getEntryAddr<ELFT>(); 1701 EHdr->e_shoff = SectionHeaderOff; 1702 EHdr->e_ehsize = sizeof(Elf_Ehdr); 1703 EHdr->e_phnum = Phdrs.size(); 1704 EHdr->e_shentsize = sizeof(Elf_Shdr); 1705 EHdr->e_shnum = OutputSections.size() + 1; 1706 EHdr->e_shstrndx = Out<ELFT>::ShStrTab->SectionIndex; 1707 1708 if (Config->EMachine == EM_MIPS) 1709 EHdr->e_flags = getMipsEFlags(); 1710 1711 if (!Config->Relocatable) { 1712 EHdr->e_phoff = sizeof(Elf_Ehdr); 1713 EHdr->e_phentsize = sizeof(Elf_Phdr); 1714 } 1715 1716 // Write the program header table. 1717 auto *HBuf = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff); 1718 for (Phdr &P : Phdrs) 1719 *HBuf++ = P.H; 1720 1721 // Write the section header table. Note that the first table entry is null. 1722 auto *SHdrs = reinterpret_cast<Elf_Shdr *>(Buf + EHdr->e_shoff); 1723 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1724 Sec->writeHeaderTo(++SHdrs); 1725 } 1726 1727 template <class ELFT> void Writer<ELFT>::openFile() { 1728 ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = 1729 FileOutputBuffer::create(Config->OutputFile, FileSize, 1730 FileOutputBuffer::F_executable); 1731 if (BufferOrErr) 1732 Buffer = std::move(*BufferOrErr); 1733 else 1734 error(BufferOrErr, "failed to open " + Config->OutputFile); 1735 } 1736 1737 // Write section contents to a mmap'ed file. 1738 template <class ELFT> void Writer<ELFT>::writeSections() { 1739 uint8_t *Buf = Buffer->getBufferStart(); 1740 1741 // PPC64 needs to process relocations in the .opd section before processing 1742 // relocations in code-containing sections. 1743 if (OutputSectionBase<ELFT> *Sec = Out<ELFT>::Opd) { 1744 Out<ELFT>::OpdBuf = Buf + Sec->getFileOff(); 1745 Sec->writeTo(Buf + Sec->getFileOff()); 1746 } 1747 1748 for (OutputSectionBase<ELFT> *Sec : OutputSections) 1749 if (Sec != Out<ELFT>::Opd) 1750 Sec->writeTo(Buf + Sec->getFileOff()); 1751 } 1752 1753 template <class ELFT> void Writer<ELFT>::writeBuildId() { 1754 BuildIdSection<ELFT> *S = Out<ELFT>::BuildId; 1755 if (!S) 1756 return; 1757 1758 // Compute a hash of all sections except .debug_* sections. 1759 // We skip debug sections because they tend to be very large 1760 // and their contents are very likely to be the same as long as 1761 // other sections are the same. 1762 uint8_t *Start = Buffer->getBufferStart(); 1763 uint8_t *Last = Start; 1764 for (OutputSectionBase<ELFT> *Sec : OutputSections) { 1765 uint8_t *End = Start + Sec->getFileOff(); 1766 if (!Sec->getName().startswith(".debug_")) 1767 S->update({Last, End}); 1768 Last = End; 1769 } 1770 S->update({Last, Start + FileSize}); 1771 1772 // Fill the hash value field in the .note.gnu.build-id section. 1773 S->writeBuildId(); 1774 } 1775 1776 template void elf::writeResult<ELF32LE>(SymbolTable<ELF32LE> *Symtab); 1777 template void elf::writeResult<ELF32BE>(SymbolTable<ELF32BE> *Symtab); 1778 template void elf::writeResult<ELF64LE>(SymbolTable<ELF64LE> *Symtab); 1779 template void elf::writeResult<ELF64BE>(SymbolTable<ELF64BE> *Symtab); 1780