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