1 //===- Writer.cpp ---------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "Writer.h" 10 #include "AArch64ErrataFix.h" 11 #include "ARMErrataFix.h" 12 #include "CallGraphSort.h" 13 #include "Config.h" 14 #include "InputFiles.h" 15 #include "LinkerScript.h" 16 #include "MapFile.h" 17 #include "OutputSections.h" 18 #include "Relocations.h" 19 #include "SymbolTable.h" 20 #include "Symbols.h" 21 #include "SyntheticSections.h" 22 #include "Target.h" 23 #include "lld/Common/Arrays.h" 24 #include "lld/Common/CommonLinkerContext.h" 25 #include "lld/Common/Filesystem.h" 26 #include "lld/Common/Strings.h" 27 #include "llvm/ADT/STLExtras.h" 28 #include "llvm/ADT/StringMap.h" 29 #include "llvm/Support/BLAKE3.h" 30 #include "llvm/Support/Parallel.h" 31 #include "llvm/Support/RandomNumberGenerator.h" 32 #include "llvm/Support/TimeProfiler.h" 33 #include "llvm/Support/xxhash.h" 34 #include <climits> 35 36 #define DEBUG_TYPE "lld" 37 38 using namespace llvm; 39 using namespace llvm::ELF; 40 using namespace llvm::object; 41 using namespace llvm::support; 42 using namespace llvm::support::endian; 43 using namespace lld; 44 using namespace lld::elf; 45 46 namespace { 47 // The writer writes a SymbolTable result to a file. 48 template <class ELFT> class Writer { 49 public: 50 LLVM_ELF_IMPORT_TYPES_ELFT(ELFT) 51 52 Writer() : buffer(errorHandler().outputBuffer) {} 53 54 void run(); 55 56 private: 57 void addSectionSymbols(); 58 void sortSections(); 59 void resolveShfLinkOrder(); 60 void finalizeAddressDependentContent(); 61 void optimizeBasicBlockJumps(); 62 void sortInputSections(); 63 void sortOrphanSections(); 64 void finalizeSections(); 65 void checkExecuteOnly(); 66 void setReservedSymbolSections(); 67 68 SmallVector<PhdrEntry *, 0> createPhdrs(Partition &part); 69 void addPhdrForSection(Partition &part, unsigned shType, unsigned pType, 70 unsigned pFlags); 71 void assignFileOffsets(); 72 void assignFileOffsetsBinary(); 73 void setPhdrs(Partition &part); 74 void checkSections(); 75 void fixSectionAlignments(); 76 void openFile(); 77 void writeTrapInstr(); 78 void writeHeader(); 79 void writeSections(); 80 void writeSectionsBinary(); 81 void writeBuildId(); 82 83 std::unique_ptr<FileOutputBuffer> &buffer; 84 85 void addRelIpltSymbols(); 86 void addStartEndSymbols(); 87 void addStartStopSymbols(OutputSection &osec); 88 89 uint64_t fileSize; 90 uint64_t sectionHeaderOff; 91 }; 92 } // anonymous namespace 93 94 template <class ELFT> void elf::writeResult() { 95 Writer<ELFT>().run(); 96 } 97 98 static void removeEmptyPTLoad(SmallVector<PhdrEntry *, 0> &phdrs) { 99 auto it = std::stable_partition( 100 phdrs.begin(), phdrs.end(), [&](const PhdrEntry *p) { 101 if (p->p_type != PT_LOAD) 102 return true; 103 if (!p->firstSec) 104 return false; 105 uint64_t size = p->lastSec->addr + p->lastSec->size - p->firstSec->addr; 106 return size != 0; 107 }); 108 109 // Clear OutputSection::ptLoad for sections contained in removed 110 // segments. 111 DenseSet<PhdrEntry *> removed(it, phdrs.end()); 112 for (OutputSection *sec : outputSections) 113 if (removed.count(sec->ptLoad)) 114 sec->ptLoad = nullptr; 115 phdrs.erase(it, phdrs.end()); 116 } 117 118 void elf::copySectionsIntoPartitions() { 119 SmallVector<InputSectionBase *, 0> newSections; 120 const size_t ehSize = ctx.ehInputSections.size(); 121 for (unsigned part = 2; part != partitions.size() + 1; ++part) { 122 for (InputSectionBase *s : ctx.inputSections) { 123 if (!(s->flags & SHF_ALLOC) || !s->isLive() || s->type != SHT_NOTE) 124 continue; 125 auto *copy = make<InputSection>(cast<InputSection>(*s)); 126 copy->partition = part; 127 newSections.push_back(copy); 128 } 129 for (size_t i = 0; i != ehSize; ++i) { 130 assert(ctx.ehInputSections[i]->isLive()); 131 auto *copy = make<EhInputSection>(*ctx.ehInputSections[i]); 132 copy->partition = part; 133 ctx.ehInputSections.push_back(copy); 134 } 135 } 136 137 ctx.inputSections.insert(ctx.inputSections.end(), newSections.begin(), 138 newSections.end()); 139 } 140 141 static Defined *addOptionalRegular(StringRef name, SectionBase *sec, 142 uint64_t val, uint8_t stOther = STV_HIDDEN) { 143 Symbol *s = symtab.find(name); 144 if (!s || s->isDefined() || s->isCommon()) 145 return nullptr; 146 147 s->resolve(Defined{ctx.internalFile, StringRef(), STB_GLOBAL, stOther, 148 STT_NOTYPE, val, 149 /*size=*/0, sec}); 150 s->isUsedInRegularObj = true; 151 return cast<Defined>(s); 152 } 153 154 // The linker is expected to define some symbols depending on 155 // the linking result. This function defines such symbols. 156 void elf::addReservedSymbols() { 157 if (config->emachine == EM_MIPS) { 158 auto addAbsolute = [](StringRef name) { 159 Symbol *sym = 160 symtab.addSymbol(Defined{ctx.internalFile, name, STB_GLOBAL, 161 STV_HIDDEN, STT_NOTYPE, 0, 0, nullptr}); 162 sym->isUsedInRegularObj = true; 163 return cast<Defined>(sym); 164 }; 165 // Define _gp for MIPS. st_value of _gp symbol will be updated by Writer 166 // so that it points to an absolute address which by default is relative 167 // to GOT. Default offset is 0x7ff0. 168 // See "Global Data Symbols" in Chapter 6 in the following document: 169 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf 170 ElfSym::mipsGp = addAbsolute("_gp"); 171 172 // On MIPS O32 ABI, _gp_disp is a magic symbol designates offset between 173 // start of function and 'gp' pointer into GOT. 174 if (symtab.find("_gp_disp")) 175 ElfSym::mipsGpDisp = addAbsolute("_gp_disp"); 176 177 // The __gnu_local_gp is a magic symbol equal to the current value of 'gp' 178 // pointer. This symbol is used in the code generated by .cpload pseudo-op 179 // in case of using -mno-shared option. 180 // https://sourceware.org/ml/binutils/2004-12/msg00094.html 181 if (symtab.find("__gnu_local_gp")) 182 ElfSym::mipsLocalGp = addAbsolute("__gnu_local_gp"); 183 } else if (config->emachine == EM_PPC) { 184 // glibc *crt1.o has a undefined reference to _SDA_BASE_. Since we don't 185 // support Small Data Area, define it arbitrarily as 0. 186 addOptionalRegular("_SDA_BASE_", nullptr, 0, STV_HIDDEN); 187 } else if (config->emachine == EM_PPC64) { 188 addPPC64SaveRestore(); 189 } 190 191 // The Power Architecture 64-bit v2 ABI defines a TableOfContents (TOC) which 192 // combines the typical ELF GOT with the small data sections. It commonly 193 // includes .got .toc .sdata .sbss. The .TOC. symbol replaces both 194 // _GLOBAL_OFFSET_TABLE_ and _SDA_BASE_ from the 32-bit ABI. It is used to 195 // represent the TOC base which is offset by 0x8000 bytes from the start of 196 // the .got section. 197 // We do not allow _GLOBAL_OFFSET_TABLE_ to be defined by input objects as the 198 // correctness of some relocations depends on its value. 199 StringRef gotSymName = 200 (config->emachine == EM_PPC64) ? ".TOC." : "_GLOBAL_OFFSET_TABLE_"; 201 202 if (Symbol *s = symtab.find(gotSymName)) { 203 if (s->isDefined()) { 204 error(toString(s->file) + " cannot redefine linker defined symbol '" + 205 gotSymName + "'"); 206 return; 207 } 208 209 uint64_t gotOff = 0; 210 if (config->emachine == EM_PPC64) 211 gotOff = 0x8000; 212 213 s->resolve(Defined{ctx.internalFile, StringRef(), STB_GLOBAL, STV_HIDDEN, 214 STT_NOTYPE, gotOff, /*size=*/0, Out::elfHeader}); 215 ElfSym::globalOffsetTable = cast<Defined>(s); 216 } 217 218 // __ehdr_start is the location of ELF file headers. Note that we define 219 // this symbol unconditionally even when using a linker script, which 220 // differs from the behavior implemented by GNU linker which only define 221 // this symbol if ELF headers are in the memory mapped segment. 222 addOptionalRegular("__ehdr_start", Out::elfHeader, 0, STV_HIDDEN); 223 224 // __executable_start is not documented, but the expectation of at 225 // least the Android libc is that it points to the ELF header. 226 addOptionalRegular("__executable_start", Out::elfHeader, 0, STV_HIDDEN); 227 228 // __dso_handle symbol is passed to cxa_finalize as a marker to identify 229 // each DSO. The address of the symbol doesn't matter as long as they are 230 // different in different DSOs, so we chose the start address of the DSO. 231 addOptionalRegular("__dso_handle", Out::elfHeader, 0, STV_HIDDEN); 232 233 // If linker script do layout we do not need to create any standard symbols. 234 if (script->hasSectionsCommand) 235 return; 236 237 auto add = [](StringRef s, int64_t pos) { 238 return addOptionalRegular(s, Out::elfHeader, pos, STV_DEFAULT); 239 }; 240 241 ElfSym::bss = add("__bss_start", 0); 242 ElfSym::end1 = add("end", -1); 243 ElfSym::end2 = add("_end", -1); 244 ElfSym::etext1 = add("etext", -1); 245 ElfSym::etext2 = add("_etext", -1); 246 ElfSym::edata1 = add("edata", -1); 247 ElfSym::edata2 = add("_edata", -1); 248 } 249 250 static void demoteDefined(Defined &sym, DenseMap<SectionBase *, size_t> &map) { 251 if (map.empty()) 252 for (auto [i, sec] : llvm::enumerate(sym.file->getSections())) 253 map.try_emplace(sec, i); 254 // Change WEAK to GLOBAL so that if a scanned relocation references sym, 255 // maybeReportUndefined will report an error. 256 uint8_t binding = sym.isWeak() ? uint8_t(STB_GLOBAL) : sym.binding; 257 Undefined(sym.file, sym.getName(), binding, sym.stOther, sym.type, 258 /*discardedSecIdx=*/map.lookup(sym.section)) 259 .overwrite(sym); 260 // Eliminate from the symbol table, otherwise we would leave an undefined 261 // symbol if the symbol is unreferenced in the absence of GC. 262 sym.isUsedInRegularObj = false; 263 } 264 265 // If all references to a DSO happen to be weak, the DSO is not added to 266 // DT_NEEDED. If that happens, replace ShardSymbol with Undefined to avoid 267 // dangling references to an unneeded DSO. Use a weak binding to avoid 268 // --no-allow-shlib-undefined diagnostics. Similarly, demote lazy symbols. 269 // 270 // In addition, demote symbols defined in discarded sections, so that 271 // references to /DISCARD/ discarded symbols will lead to errors. 272 static void demoteSymbolsAndComputeIsPreemptible() { 273 llvm::TimeTraceScope timeScope("Demote symbols"); 274 DenseMap<InputFile *, DenseMap<SectionBase *, size_t>> sectionIndexMap; 275 for (Symbol *sym : symtab.getSymbols()) { 276 if (auto *d = dyn_cast<Defined>(sym)) { 277 if (d->section && !d->section->isLive()) 278 demoteDefined(*d, sectionIndexMap[d->file]); 279 } else { 280 auto *s = dyn_cast<SharedSymbol>(sym); 281 if (sym->isLazy() || (s && !cast<SharedFile>(s->file)->isNeeded)) { 282 uint8_t binding = sym->isLazy() ? sym->binding : uint8_t(STB_WEAK); 283 Undefined(ctx.internalFile, sym->getName(), binding, sym->stOther, 284 sym->type) 285 .overwrite(*sym); 286 sym->versionId = VER_NDX_GLOBAL; 287 } 288 } 289 290 if (config->hasDynSymTab) 291 sym->isPreemptible = computeIsPreemptible(*sym); 292 } 293 } 294 295 static OutputSection *findSection(StringRef name, unsigned partition = 1) { 296 for (SectionCommand *cmd : script->sectionCommands) 297 if (auto *osd = dyn_cast<OutputDesc>(cmd)) 298 if (osd->osec.name == name && osd->osec.partition == partition) 299 return &osd->osec; 300 return nullptr; 301 } 302 303 // The main function of the writer. 304 template <class ELFT> void Writer<ELFT>::run() { 305 // Now that we have a complete set of output sections. This function 306 // completes section contents. For example, we need to add strings 307 // to the string table, and add entries to .got and .plt. 308 // finalizeSections does that. 309 finalizeSections(); 310 checkExecuteOnly(); 311 312 // If --compressed-debug-sections is specified, compress .debug_* sections. 313 // Do it right now because it changes the size of output sections. 314 for (OutputSection *sec : outputSections) 315 sec->maybeCompress<ELFT>(); 316 317 if (script->hasSectionsCommand) 318 script->allocateHeaders(mainPart->phdrs); 319 320 // Remove empty PT_LOAD to avoid causing the dynamic linker to try to mmap a 321 // 0 sized region. This has to be done late since only after assignAddresses 322 // we know the size of the sections. 323 for (Partition &part : partitions) 324 removeEmptyPTLoad(part.phdrs); 325 326 if (!config->oFormatBinary) 327 assignFileOffsets(); 328 else 329 assignFileOffsetsBinary(); 330 331 for (Partition &part : partitions) 332 setPhdrs(part); 333 334 // Handle --print-map(-M)/--Map and --cref. Dump them before checkSections() 335 // because the files may be useful in case checkSections() or openFile() 336 // fails, for example, due to an erroneous file size. 337 writeMapAndCref(); 338 339 // Handle --print-memory-usage option. 340 if (config->printMemoryUsage) 341 script->printMemoryUsage(lld::outs()); 342 343 if (config->checkSections) 344 checkSections(); 345 346 // It does not make sense try to open the file if we have error already. 347 if (errorCount()) 348 return; 349 350 { 351 llvm::TimeTraceScope timeScope("Write output file"); 352 // Write the result down to a file. 353 openFile(); 354 if (errorCount()) 355 return; 356 357 if (!config->oFormatBinary) { 358 if (config->zSeparate != SeparateSegmentKind::None) 359 writeTrapInstr(); 360 writeHeader(); 361 writeSections(); 362 } else { 363 writeSectionsBinary(); 364 } 365 366 // Backfill .note.gnu.build-id section content. This is done at last 367 // because the content is usually a hash value of the entire output file. 368 writeBuildId(); 369 if (errorCount()) 370 return; 371 372 if (auto e = buffer->commit()) 373 fatal("failed to write output '" + buffer->getPath() + 374 "': " + toString(std::move(e))); 375 376 if (!config->cmseOutputLib.empty()) 377 writeARMCmseImportLib<ELFT>(); 378 } 379 } 380 381 template <class ELFT, class RelTy> 382 static void markUsedLocalSymbolsImpl(ObjFile<ELFT> *file, 383 llvm::ArrayRef<RelTy> rels) { 384 for (const RelTy &rel : rels) { 385 Symbol &sym = file->getRelocTargetSym(rel); 386 if (sym.isLocal()) 387 sym.used = true; 388 } 389 } 390 391 // The function ensures that the "used" field of local symbols reflects the fact 392 // that the symbol is used in a relocation from a live section. 393 template <class ELFT> static void markUsedLocalSymbols() { 394 // With --gc-sections, the field is already filled. 395 // See MarkLive<ELFT>::resolveReloc(). 396 if (config->gcSections) 397 return; 398 for (ELFFileBase *file : ctx.objectFiles) { 399 ObjFile<ELFT> *f = cast<ObjFile<ELFT>>(file); 400 for (InputSectionBase *s : f->getSections()) { 401 InputSection *isec = dyn_cast_or_null<InputSection>(s); 402 if (!isec) 403 continue; 404 if (isec->type == SHT_REL) { 405 markUsedLocalSymbolsImpl(f, isec->getDataAs<typename ELFT::Rel>()); 406 } else if (isec->type == SHT_RELA) { 407 markUsedLocalSymbolsImpl(f, isec->getDataAs<typename ELFT::Rela>()); 408 } else if (isec->type == SHT_CREL) { 409 // The is64=true variant also works with ELF32 since only the r_symidx 410 // member is used. 411 for (Elf_Crel_Impl<true> r : RelocsCrel<true>(isec->content_)) { 412 Symbol &sym = file->getSymbol(r.r_symidx); 413 if (sym.isLocal()) 414 sym.used = true; 415 } 416 } 417 } 418 } 419 } 420 421 static bool shouldKeepInSymtab(const Defined &sym) { 422 if (sym.isSection()) 423 return false; 424 425 // If --emit-reloc or -r is given, preserve symbols referenced by relocations 426 // from live sections. 427 if (sym.used && config->copyRelocs) 428 return true; 429 430 // Exclude local symbols pointing to .ARM.exidx sections. 431 // They are probably mapping symbols "$d", which are optional for these 432 // sections. After merging the .ARM.exidx sections, some of these symbols 433 // may become dangling. The easiest way to avoid the issue is not to add 434 // them to the symbol table from the beginning. 435 if (config->emachine == EM_ARM && sym.section && 436 sym.section->type == SHT_ARM_EXIDX) 437 return false; 438 439 if (config->discard == DiscardPolicy::None) 440 return true; 441 if (config->discard == DiscardPolicy::All) 442 return false; 443 444 // In ELF assembly .L symbols are normally discarded by the assembler. 445 // If the assembler fails to do so, the linker discards them if 446 // * --discard-locals is used. 447 // * The symbol is in a SHF_MERGE section, which is normally the reason for 448 // the assembler keeping the .L symbol. 449 if (sym.getName().starts_with(".L") && 450 (config->discard == DiscardPolicy::Locals || 451 (sym.section && (sym.section->flags & SHF_MERGE)))) 452 return false; 453 return true; 454 } 455 456 bool lld::elf::includeInSymtab(const Symbol &b) { 457 if (auto *d = dyn_cast<Defined>(&b)) { 458 // Always include absolute symbols. 459 SectionBase *sec = d->section; 460 if (!sec) 461 return true; 462 assert(sec->isLive()); 463 464 if (auto *s = dyn_cast<MergeInputSection>(sec)) 465 return s->getSectionPiece(d->value).live; 466 return true; 467 } 468 return b.used || !config->gcSections; 469 } 470 471 // Scan local symbols to: 472 // 473 // - demote symbols defined relative to /DISCARD/ discarded input sections so 474 // that relocations referencing them will lead to errors. 475 // - copy eligible symbols to .symTab 476 static void demoteAndCopyLocalSymbols() { 477 llvm::TimeTraceScope timeScope("Add local symbols"); 478 for (ELFFileBase *file : ctx.objectFiles) { 479 DenseMap<SectionBase *, size_t> sectionIndexMap; 480 for (Symbol *b : file->getLocalSymbols()) { 481 assert(b->isLocal() && "should have been caught in initializeSymbols()"); 482 auto *dr = dyn_cast<Defined>(b); 483 if (!dr) 484 continue; 485 486 if (dr->section && !dr->section->isLive()) 487 demoteDefined(*dr, sectionIndexMap); 488 else if (in.symTab && includeInSymtab(*b) && shouldKeepInSymtab(*dr)) 489 in.symTab->addSymbol(b); 490 } 491 } 492 } 493 494 // Create a section symbol for each output section so that we can represent 495 // relocations that point to the section. If we know that no relocation is 496 // referring to a section (that happens if the section is a synthetic one), we 497 // don't create a section symbol for that section. 498 template <class ELFT> void Writer<ELFT>::addSectionSymbols() { 499 for (SectionCommand *cmd : script->sectionCommands) { 500 auto *osd = dyn_cast<OutputDesc>(cmd); 501 if (!osd) 502 continue; 503 OutputSection &osec = osd->osec; 504 InputSectionBase *isec = nullptr; 505 // Iterate over all input sections and add a STT_SECTION symbol if any input 506 // section may be a relocation target. 507 for (SectionCommand *cmd : osec.commands) { 508 auto *isd = dyn_cast<InputSectionDescription>(cmd); 509 if (!isd) 510 continue; 511 for (InputSectionBase *s : isd->sections) { 512 // Relocations are not using REL[A] section symbols. 513 if (isStaticRelSecType(s->type)) 514 continue; 515 516 // Unlike other synthetic sections, mergeable output sections contain 517 // data copied from input sections, and there may be a relocation 518 // pointing to its contents if -r or --emit-reloc is given. 519 if (isa<SyntheticSection>(s) && !(s->flags & SHF_MERGE)) 520 continue; 521 522 isec = s; 523 break; 524 } 525 } 526 if (!isec) 527 continue; 528 529 // Set the symbol to be relative to the output section so that its st_value 530 // equals the output section address. Note, there may be a gap between the 531 // start of the output section and isec. 532 in.symTab->addSymbol(makeDefined(isec->file, "", STB_LOCAL, /*stOther=*/0, 533 STT_SECTION, 534 /*value=*/0, /*size=*/0, &osec)); 535 } 536 } 537 538 // Today's loaders have a feature to make segments read-only after 539 // processing dynamic relocations to enhance security. PT_GNU_RELRO 540 // is defined for that. 541 // 542 // This function returns true if a section needs to be put into a 543 // PT_GNU_RELRO segment. 544 static bool isRelroSection(const OutputSection *sec) { 545 if (!config->zRelro) 546 return false; 547 if (sec->relro) 548 return true; 549 550 uint64_t flags = sec->flags; 551 552 // Non-allocatable or non-writable sections don't need RELRO because 553 // they are not writable or not even mapped to memory in the first place. 554 // RELRO is for sections that are essentially read-only but need to 555 // be writable only at process startup to allow dynamic linker to 556 // apply relocations. 557 if (!(flags & SHF_ALLOC) || !(flags & SHF_WRITE)) 558 return false; 559 560 // Once initialized, TLS data segments are used as data templates 561 // for a thread-local storage. For each new thread, runtime 562 // allocates memory for a TLS and copy templates there. No thread 563 // are supposed to use templates directly. Thus, it can be in RELRO. 564 if (flags & SHF_TLS) 565 return true; 566 567 // .init_array, .preinit_array and .fini_array contain pointers to 568 // functions that are executed on process startup or exit. These 569 // pointers are set by the static linker, and they are not expected 570 // to change at runtime. But if you are an attacker, you could do 571 // interesting things by manipulating pointers in .fini_array, for 572 // example. So they are put into RELRO. 573 uint32_t type = sec->type; 574 if (type == SHT_INIT_ARRAY || type == SHT_FINI_ARRAY || 575 type == SHT_PREINIT_ARRAY) 576 return true; 577 578 // .got contains pointers to external symbols. They are resolved by 579 // the dynamic linker when a module is loaded into memory, and after 580 // that they are not expected to change. So, it can be in RELRO. 581 if (in.got && sec == in.got->getParent()) 582 return true; 583 584 // .toc is a GOT-ish section for PowerPC64. Their contents are accessed 585 // through r2 register, which is reserved for that purpose. Since r2 is used 586 // for accessing .got as well, .got and .toc need to be close enough in the 587 // virtual address space. Usually, .toc comes just after .got. Since we place 588 // .got into RELRO, .toc needs to be placed into RELRO too. 589 if (sec->name == ".toc") 590 return true; 591 592 // .got.plt contains pointers to external function symbols. They are 593 // by default resolved lazily, so we usually cannot put it into RELRO. 594 // However, if "-z now" is given, the lazy symbol resolution is 595 // disabled, which enables us to put it into RELRO. 596 if (sec == in.gotPlt->getParent()) 597 return config->zNow; 598 599 if (in.relroPadding && sec == in.relroPadding->getParent()) 600 return true; 601 602 // .dynamic section contains data for the dynamic linker, and 603 // there's no need to write to it at runtime, so it's better to put 604 // it into RELRO. 605 if (sec->name == ".dynamic") 606 return true; 607 608 // Sections with some special names are put into RELRO. This is a 609 // bit unfortunate because section names shouldn't be significant in 610 // ELF in spirit. But in reality many linker features depend on 611 // magic section names. 612 StringRef s = sec->name; 613 614 bool abiAgnostic = s == ".data.rel.ro" || s == ".bss.rel.ro" || 615 s == ".ctors" || s == ".dtors" || s == ".jcr" || 616 s == ".eh_frame" || s == ".fini_array" || 617 s == ".init_array" || s == ".preinit_array"; 618 619 bool abiSpecific = 620 config->osabi == ELFOSABI_OPENBSD && s == ".openbsd.randomdata"; 621 622 return abiAgnostic || abiSpecific; 623 } 624 625 // We compute a rank for each section. The rank indicates where the 626 // section should be placed in the file. Instead of using simple 627 // numbers (0,1,2...), we use a series of flags. One for each decision 628 // point when placing the section. 629 // Using flags has two key properties: 630 // * It is easy to check if a give branch was taken. 631 // * It is easy two see how similar two ranks are (see getRankProximity). 632 enum RankFlags { 633 RF_NOT_ADDR_SET = 1 << 27, 634 RF_NOT_ALLOC = 1 << 26, 635 RF_PARTITION = 1 << 18, // Partition number (8 bits) 636 RF_LARGE_ALT = 1 << 15, 637 RF_WRITE = 1 << 14, 638 RF_EXEC_WRITE = 1 << 13, 639 RF_EXEC = 1 << 12, 640 RF_RODATA = 1 << 11, 641 RF_LARGE = 1 << 10, 642 RF_NOT_RELRO = 1 << 9, 643 RF_NOT_TLS = 1 << 8, 644 RF_BSS = 1 << 7, 645 }; 646 647 unsigned elf::getSectionRank(OutputSection &osec) { 648 unsigned rank = osec.partition * RF_PARTITION; 649 650 // We want to put section specified by -T option first, so we 651 // can start assigning VA starting from them later. 652 if (config->sectionStartMap.count(osec.name)) 653 return rank; 654 rank |= RF_NOT_ADDR_SET; 655 656 // Allocatable sections go first to reduce the total PT_LOAD size and 657 // so debug info doesn't change addresses in actual code. 658 if (!(osec.flags & SHF_ALLOC)) 659 return rank | RF_NOT_ALLOC; 660 661 // Sort sections based on their access permission in the following 662 // order: R, RX, RXW, RW(RELRO), RW(non-RELRO). 663 // 664 // Read-only sections come first such that they go in the PT_LOAD covering the 665 // program headers at the start of the file. 666 // 667 // The layout for writable sections is PT_LOAD(PT_GNU_RELRO(.data.rel.ro 668 // .bss.rel.ro) | .data .bss), where | marks where page alignment happens. 669 // An alternative ordering is PT_LOAD(.data | PT_GNU_RELRO( .data.rel.ro 670 // .bss.rel.ro) | .bss), but it may waste more bytes due to 2 alignment 671 // places. 672 bool isExec = osec.flags & SHF_EXECINSTR; 673 bool isWrite = osec.flags & SHF_WRITE; 674 675 if (!isWrite && !isExec) { 676 // Among PROGBITS sections, place .lrodata further from .text. 677 // For -z lrodata-after-bss, place .lrodata after .lbss like GNU ld. This 678 // layout has one extra PT_LOAD, but alleviates relocation overflow 679 // pressure for absolute relocations referencing small data from -fno-pic 680 // relocatable files. 681 if (osec.flags & SHF_X86_64_LARGE && config->emachine == EM_X86_64) 682 rank |= config->zLrodataAfterBss ? RF_LARGE_ALT : 0; 683 else 684 rank |= config->zLrodataAfterBss ? 0 : RF_LARGE; 685 686 if (osec.type == SHT_LLVM_PART_EHDR) 687 ; 688 else if (osec.type == SHT_LLVM_PART_PHDR) 689 rank |= 1; 690 else if (osec.name == ".interp") 691 rank |= 2; 692 // Put .note sections at the beginning so that they are likely to be 693 // included in a truncate core file. In particular, .note.gnu.build-id, if 694 // available, can identify the object file. 695 else if (osec.type == SHT_NOTE) 696 rank |= 3; 697 // Make PROGBITS sections (e.g .rodata .eh_frame) closer to .text to 698 // alleviate relocation overflow pressure. Large special sections such as 699 // .dynstr and .dynsym can be away from .text. 700 else if (osec.type != SHT_PROGBITS) 701 rank |= 4; 702 else 703 rank |= RF_RODATA; 704 } else if (isExec) { 705 rank |= isWrite ? RF_EXEC_WRITE : RF_EXEC; 706 } else { 707 rank |= RF_WRITE; 708 // The TLS initialization block needs to be a single contiguous block. Place 709 // TLS sections directly before the other RELRO sections. 710 if (!(osec.flags & SHF_TLS)) 711 rank |= RF_NOT_TLS; 712 if (isRelroSection(&osec)) 713 osec.relro = true; 714 else 715 rank |= RF_NOT_RELRO; 716 // Place .ldata and .lbss after .bss. Making .bss closer to .text 717 // alleviates relocation overflow pressure. 718 // For -z lrodata-after-bss, place .lbss/.lrodata/.ldata after .bss. 719 // .bss/.lbss being adjacent reuses the NOBITS size optimization. 720 if (osec.flags & SHF_X86_64_LARGE && config->emachine == EM_X86_64) { 721 rank |= config->zLrodataAfterBss 722 ? (osec.type == SHT_NOBITS ? 1 : RF_LARGE_ALT) 723 : RF_LARGE; 724 } 725 } 726 727 // Within TLS sections, or within other RelRo sections, or within non-RelRo 728 // sections, place non-NOBITS sections first. 729 if (osec.type == SHT_NOBITS) 730 rank |= RF_BSS; 731 732 // Some architectures have additional ordering restrictions for sections 733 // within the same PT_LOAD. 734 if (config->emachine == EM_PPC64) { 735 // PPC64 has a number of special SHT_PROGBITS+SHF_ALLOC+SHF_WRITE sections 736 // that we would like to make sure appear is a specific order to maximize 737 // their coverage by a single signed 16-bit offset from the TOC base 738 // pointer. 739 StringRef name = osec.name; 740 if (name == ".got") 741 rank |= 1; 742 else if (name == ".toc") 743 rank |= 2; 744 } 745 746 if (config->emachine == EM_MIPS) { 747 if (osec.name != ".got") 748 rank |= 1; 749 // All sections with SHF_MIPS_GPREL flag should be grouped together 750 // because data in these sections is addressable with a gp relative address. 751 if (osec.flags & SHF_MIPS_GPREL) 752 rank |= 2; 753 } 754 755 if (config->emachine == EM_RISCV) { 756 // .sdata and .sbss are placed closer to make GP relaxation more profitable 757 // and match GNU ld. 758 StringRef name = osec.name; 759 if (name == ".sdata" || (osec.type == SHT_NOBITS && name != ".sbss")) 760 rank |= 1; 761 } 762 763 return rank; 764 } 765 766 static bool compareSections(const SectionCommand *aCmd, 767 const SectionCommand *bCmd) { 768 const OutputSection *a = &cast<OutputDesc>(aCmd)->osec; 769 const OutputSection *b = &cast<OutputDesc>(bCmd)->osec; 770 771 if (a->sortRank != b->sortRank) 772 return a->sortRank < b->sortRank; 773 774 if (!(a->sortRank & RF_NOT_ADDR_SET)) 775 return config->sectionStartMap.lookup(a->name) < 776 config->sectionStartMap.lookup(b->name); 777 return false; 778 } 779 780 void PhdrEntry::add(OutputSection *sec) { 781 lastSec = sec; 782 if (!firstSec) 783 firstSec = sec; 784 p_align = std::max(p_align, sec->addralign); 785 if (p_type == PT_LOAD) 786 sec->ptLoad = this; 787 } 788 789 // A statically linked position-dependent executable should only contain 790 // IRELATIVE relocations and no other dynamic relocations. Encapsulation symbols 791 // __rel[a]_iplt_{start,end} will be defined for .rel[a].dyn, to be 792 // processed by the libc runtime. Other executables or DSOs use dynamic tags 793 // instead. 794 template <class ELFT> void Writer<ELFT>::addRelIpltSymbols() { 795 if (config->isPic) 796 return; 797 798 // __rela_iplt_{start,end} are initially defined relative to dummy section 0. 799 // We'll override Out::elfHeader with relaDyn later when we are sure that 800 // .rela.dyn will be present in the output. 801 std::string name = config->isRela ? "__rela_iplt_start" : "__rel_iplt_start"; 802 ElfSym::relaIpltStart = 803 addOptionalRegular(name, Out::elfHeader, 0, STV_HIDDEN); 804 name.replace(name.size() - 5, 5, "end"); 805 ElfSym::relaIpltEnd = addOptionalRegular(name, Out::elfHeader, 0, STV_HIDDEN); 806 } 807 808 // This function generates assignments for predefined symbols (e.g. _end or 809 // _etext) and inserts them into the commands sequence to be processed at the 810 // appropriate time. This ensures that the value is going to be correct by the 811 // time any references to these symbols are processed and is equivalent to 812 // defining these symbols explicitly in the linker script. 813 template <class ELFT> void Writer<ELFT>::setReservedSymbolSections() { 814 if (ElfSym::globalOffsetTable) { 815 // The _GLOBAL_OFFSET_TABLE_ symbol is defined by target convention usually 816 // to the start of the .got or .got.plt section. 817 InputSection *sec = in.gotPlt.get(); 818 if (!target->gotBaseSymInGotPlt) 819 sec = in.mipsGot ? cast<InputSection>(in.mipsGot.get()) 820 : cast<InputSection>(in.got.get()); 821 ElfSym::globalOffsetTable->section = sec; 822 } 823 824 // .rela_iplt_{start,end} mark the start and the end of .rel[a].dyn. 825 if (ElfSym::relaIpltStart && mainPart->relaDyn->isNeeded()) { 826 ElfSym::relaIpltStart->section = mainPart->relaDyn.get(); 827 ElfSym::relaIpltEnd->section = mainPart->relaDyn.get(); 828 ElfSym::relaIpltEnd->value = mainPart->relaDyn->getSize(); 829 } 830 831 PhdrEntry *last = nullptr; 832 OutputSection *lastRO = nullptr; 833 auto isLarge = [](OutputSection *osec) { 834 return config->emachine == EM_X86_64 && osec->flags & SHF_X86_64_LARGE; 835 }; 836 for (Partition &part : partitions) { 837 for (PhdrEntry *p : part.phdrs) { 838 if (p->p_type != PT_LOAD) 839 continue; 840 last = p; 841 if (!(p->p_flags & PF_W) && p->lastSec && !isLarge(p->lastSec)) 842 lastRO = p->lastSec; 843 } 844 } 845 846 if (lastRO) { 847 // _etext is the first location after the last read-only loadable segment 848 // that does not contain large sections. 849 if (ElfSym::etext1) 850 ElfSym::etext1->section = lastRO; 851 if (ElfSym::etext2) 852 ElfSym::etext2->section = lastRO; 853 } 854 855 if (last) { 856 // _edata points to the end of the last non-large mapped initialized 857 // section. 858 OutputSection *edata = nullptr; 859 for (OutputSection *os : outputSections) { 860 if (os->type != SHT_NOBITS && !isLarge(os)) 861 edata = os; 862 if (os == last->lastSec) 863 break; 864 } 865 866 if (ElfSym::edata1) 867 ElfSym::edata1->section = edata; 868 if (ElfSym::edata2) 869 ElfSym::edata2->section = edata; 870 871 // _end is the first location after the uninitialized data region. 872 if (ElfSym::end1) 873 ElfSym::end1->section = last->lastSec; 874 if (ElfSym::end2) 875 ElfSym::end2->section = last->lastSec; 876 } 877 878 if (ElfSym::bss) { 879 // On RISC-V, set __bss_start to the start of .sbss if present. 880 OutputSection *sbss = 881 config->emachine == EM_RISCV ? findSection(".sbss") : nullptr; 882 ElfSym::bss->section = sbss ? sbss : findSection(".bss"); 883 } 884 885 // Setup MIPS _gp_disp/__gnu_local_gp symbols which should 886 // be equal to the _gp symbol's value. 887 if (ElfSym::mipsGp) { 888 // Find GP-relative section with the lowest address 889 // and use this address to calculate default _gp value. 890 for (OutputSection *os : outputSections) { 891 if (os->flags & SHF_MIPS_GPREL) { 892 ElfSym::mipsGp->section = os; 893 ElfSym::mipsGp->value = 0x7ff0; 894 break; 895 } 896 } 897 } 898 } 899 900 // We want to find how similar two ranks are. 901 // The more branches in getSectionRank that match, the more similar they are. 902 // Since each branch corresponds to a bit flag, we can just use 903 // countLeadingZeros. 904 static int getRankProximity(OutputSection *a, SectionCommand *b) { 905 auto *osd = dyn_cast<OutputDesc>(b); 906 return (osd && osd->osec.hasInputSections) 907 ? llvm::countl_zero(a->sortRank ^ osd->osec.sortRank) 908 : -1; 909 } 910 911 // When placing orphan sections, we want to place them after symbol assignments 912 // so that an orphan after 913 // begin_foo = .; 914 // foo : { *(foo) } 915 // end_foo = .; 916 // doesn't break the intended meaning of the begin/end symbols. 917 // We don't want to go over sections since findOrphanPos is the 918 // one in charge of deciding the order of the sections. 919 // We don't want to go over changes to '.', since doing so in 920 // rx_sec : { *(rx_sec) } 921 // . = ALIGN(0x1000); 922 // /* The RW PT_LOAD starts here*/ 923 // rw_sec : { *(rw_sec) } 924 // would mean that the RW PT_LOAD would become unaligned. 925 static bool shouldSkip(SectionCommand *cmd) { 926 if (auto *assign = dyn_cast<SymbolAssignment>(cmd)) 927 return assign->name != "."; 928 return false; 929 } 930 931 // We want to place orphan sections so that they share as much 932 // characteristics with their neighbors as possible. For example, if 933 // both are rw, or both are tls. 934 static SmallVectorImpl<SectionCommand *>::iterator 935 findOrphanPos(SmallVectorImpl<SectionCommand *>::iterator b, 936 SmallVectorImpl<SectionCommand *>::iterator e) { 937 // Place non-alloc orphan sections at the end. This matches how we assign file 938 // offsets to non-alloc sections. 939 OutputSection *sec = &cast<OutputDesc>(*e)->osec; 940 if (!(sec->flags & SHF_ALLOC)) 941 return e; 942 943 // As a special case, place .relro_padding before the SymbolAssignment using 944 // DATA_SEGMENT_RELRO_END, if present. 945 if (in.relroPadding && sec == in.relroPadding->getParent()) { 946 auto i = std::find_if(b, e, [=](SectionCommand *a) { 947 if (auto *assign = dyn_cast<SymbolAssignment>(a)) 948 return assign->dataSegmentRelroEnd; 949 return false; 950 }); 951 if (i != e) 952 return i; 953 } 954 955 // Find the most similar output section as the anchor. Rank Proximity is a 956 // value in the range [-1, 32] where [0, 32] indicates potential anchors (0: 957 // least similar; 32: identical). -1 means not an anchor. 958 // 959 // In the event of proximity ties, we select the first or last section 960 // depending on whether the orphan's rank is smaller. 961 int maxP = 0; 962 auto i = e; 963 for (auto j = b; j != e; ++j) { 964 int p = getRankProximity(sec, *j); 965 if (p > maxP || 966 (p == maxP && cast<OutputDesc>(*j)->osec.sortRank <= sec->sortRank)) { 967 maxP = p; 968 i = j; 969 } 970 } 971 if (i == e) 972 return e; 973 974 auto isOutputSecWithInputSections = [](SectionCommand *cmd) { 975 auto *osd = dyn_cast<OutputDesc>(cmd); 976 return osd && osd->osec.hasInputSections; 977 }; 978 979 // Then, scan backward or forward through the script for a suitable insertion 980 // point. If i's rank is larger, the orphan section can be placed before i. 981 // 982 // However, don't do this if custom program headers are defined. Otherwise, 983 // adding the orphan to a previous segment can change its flags, for example, 984 // making a read-only segment writable. If memory regions are defined, an 985 // orphan section should continue the same region as the found section to 986 // better resemble the behavior of GNU ld. 987 bool mustAfter = script->hasPhdrsCommands() || !script->memoryRegions.empty(); 988 if (cast<OutputDesc>(*i)->osec.sortRank <= sec->sortRank || mustAfter) { 989 for (auto j = ++i; j != e; ++j) { 990 if (!isOutputSecWithInputSections(*j)) 991 continue; 992 if (getRankProximity(sec, *j) != maxP) 993 break; 994 i = j + 1; 995 } 996 } else { 997 for (; i != b; --i) 998 if (isOutputSecWithInputSections(i[-1])) 999 break; 1000 } 1001 1002 // As a special case, if the orphan section is the last section, put 1003 // it at the very end, past any other commands. 1004 // This matches bfd's behavior and is convenient when the linker script fully 1005 // specifies the start of the file, but doesn't care about the end (the non 1006 // alloc sections for example). 1007 if (std::find_if(i, e, isOutputSecWithInputSections) == e) 1008 return e; 1009 1010 while (i != e && shouldSkip(*i)) 1011 ++i; 1012 return i; 1013 } 1014 1015 // Adds random priorities to sections not already in the map. 1016 static void maybeShuffle(DenseMap<const InputSectionBase *, int> &order) { 1017 if (config->shuffleSections.empty()) 1018 return; 1019 1020 SmallVector<InputSectionBase *, 0> matched, sections = ctx.inputSections; 1021 matched.reserve(sections.size()); 1022 for (const auto &patAndSeed : config->shuffleSections) { 1023 matched.clear(); 1024 for (InputSectionBase *sec : sections) 1025 if (patAndSeed.first.match(sec->name)) 1026 matched.push_back(sec); 1027 const uint32_t seed = patAndSeed.second; 1028 if (seed == UINT32_MAX) { 1029 // If --shuffle-sections <section-glob>=-1, reverse the section order. The 1030 // section order is stable even if the number of sections changes. This is 1031 // useful to catch issues like static initialization order fiasco 1032 // reliably. 1033 std::reverse(matched.begin(), matched.end()); 1034 } else { 1035 std::mt19937 g(seed ? seed : std::random_device()()); 1036 llvm::shuffle(matched.begin(), matched.end(), g); 1037 } 1038 size_t i = 0; 1039 for (InputSectionBase *&sec : sections) 1040 if (patAndSeed.first.match(sec->name)) 1041 sec = matched[i++]; 1042 } 1043 1044 // Existing priorities are < 0, so use priorities >= 0 for the missing 1045 // sections. 1046 int prio = 0; 1047 for (InputSectionBase *sec : sections) { 1048 if (order.try_emplace(sec, prio).second) 1049 ++prio; 1050 } 1051 } 1052 1053 // Builds section order for handling --symbol-ordering-file. 1054 static DenseMap<const InputSectionBase *, int> buildSectionOrder() { 1055 DenseMap<const InputSectionBase *, int> sectionOrder; 1056 // Use the rarely used option --call-graph-ordering-file to sort sections. 1057 if (!config->callGraphProfile.empty()) 1058 return computeCallGraphProfileOrder(); 1059 1060 if (config->symbolOrderingFile.empty()) 1061 return sectionOrder; 1062 1063 struct SymbolOrderEntry { 1064 int priority; 1065 bool present; 1066 }; 1067 1068 // Build a map from symbols to their priorities. Symbols that didn't 1069 // appear in the symbol ordering file have the lowest priority 0. 1070 // All explicitly mentioned symbols have negative (higher) priorities. 1071 DenseMap<CachedHashStringRef, SymbolOrderEntry> symbolOrder; 1072 int priority = -config->symbolOrderingFile.size(); 1073 for (StringRef s : config->symbolOrderingFile) 1074 symbolOrder.insert({CachedHashStringRef(s), {priority++, false}}); 1075 1076 // Build a map from sections to their priorities. 1077 auto addSym = [&](Symbol &sym) { 1078 auto it = symbolOrder.find(CachedHashStringRef(sym.getName())); 1079 if (it == symbolOrder.end()) 1080 return; 1081 SymbolOrderEntry &ent = it->second; 1082 ent.present = true; 1083 1084 maybeWarnUnorderableSymbol(&sym); 1085 1086 if (auto *d = dyn_cast<Defined>(&sym)) { 1087 if (auto *sec = dyn_cast_or_null<InputSectionBase>(d->section)) { 1088 int &priority = sectionOrder[cast<InputSectionBase>(sec)]; 1089 priority = std::min(priority, ent.priority); 1090 } 1091 } 1092 }; 1093 1094 // We want both global and local symbols. We get the global ones from the 1095 // symbol table and iterate the object files for the local ones. 1096 for (Symbol *sym : symtab.getSymbols()) 1097 addSym(*sym); 1098 1099 for (ELFFileBase *file : ctx.objectFiles) 1100 for (Symbol *sym : file->getLocalSymbols()) 1101 addSym(*sym); 1102 1103 if (config->warnSymbolOrdering) 1104 for (auto orderEntry : symbolOrder) 1105 if (!orderEntry.second.present) 1106 warn("symbol ordering file: no such symbol: " + orderEntry.first.val()); 1107 1108 return sectionOrder; 1109 } 1110 1111 // Sorts the sections in ISD according to the provided section order. 1112 static void 1113 sortISDBySectionOrder(InputSectionDescription *isd, 1114 const DenseMap<const InputSectionBase *, int> &order, 1115 bool executableOutputSection) { 1116 SmallVector<InputSection *, 0> unorderedSections; 1117 SmallVector<std::pair<InputSection *, int>, 0> orderedSections; 1118 uint64_t unorderedSize = 0; 1119 uint64_t totalSize = 0; 1120 1121 for (InputSection *isec : isd->sections) { 1122 if (executableOutputSection) 1123 totalSize += isec->getSize(); 1124 auto i = order.find(isec); 1125 if (i == order.end()) { 1126 unorderedSections.push_back(isec); 1127 unorderedSize += isec->getSize(); 1128 continue; 1129 } 1130 orderedSections.push_back({isec, i->second}); 1131 } 1132 llvm::sort(orderedSections, llvm::less_second()); 1133 1134 // Find an insertion point for the ordered section list in the unordered 1135 // section list. On targets with limited-range branches, this is the mid-point 1136 // of the unordered section list. This decreases the likelihood that a range 1137 // extension thunk will be needed to enter or exit the ordered region. If the 1138 // ordered section list is a list of hot functions, we can generally expect 1139 // the ordered functions to be called more often than the unordered functions, 1140 // making it more likely that any particular call will be within range, and 1141 // therefore reducing the number of thunks required. 1142 // 1143 // For example, imagine that you have 8MB of hot code and 32MB of cold code. 1144 // If the layout is: 1145 // 1146 // 8MB hot 1147 // 32MB cold 1148 // 1149 // only the first 8-16MB of the cold code (depending on which hot function it 1150 // is actually calling) can call the hot code without a range extension thunk. 1151 // However, if we use this layout: 1152 // 1153 // 16MB cold 1154 // 8MB hot 1155 // 16MB cold 1156 // 1157 // both the last 8-16MB of the first block of cold code and the first 8-16MB 1158 // of the second block of cold code can call the hot code without a thunk. So 1159 // we effectively double the amount of code that could potentially call into 1160 // the hot code without a thunk. 1161 // 1162 // The above is not necessary if total size of input sections in this "isd" 1163 // is small. Note that we assume all input sections are executable if the 1164 // output section is executable (which is not always true but supposed to 1165 // cover most cases). 1166 size_t insPt = 0; 1167 if (executableOutputSection && !orderedSections.empty() && 1168 target->getThunkSectionSpacing() && 1169 totalSize >= target->getThunkSectionSpacing()) { 1170 uint64_t unorderedPos = 0; 1171 for (; insPt != unorderedSections.size(); ++insPt) { 1172 unorderedPos += unorderedSections[insPt]->getSize(); 1173 if (unorderedPos > unorderedSize / 2) 1174 break; 1175 } 1176 } 1177 1178 isd->sections.clear(); 1179 for (InputSection *isec : ArrayRef(unorderedSections).slice(0, insPt)) 1180 isd->sections.push_back(isec); 1181 for (std::pair<InputSection *, int> p : orderedSections) 1182 isd->sections.push_back(p.first); 1183 for (InputSection *isec : ArrayRef(unorderedSections).slice(insPt)) 1184 isd->sections.push_back(isec); 1185 } 1186 1187 static void sortSection(OutputSection &osec, 1188 const DenseMap<const InputSectionBase *, int> &order) { 1189 StringRef name = osec.name; 1190 1191 // Never sort these. 1192 if (name == ".init" || name == ".fini") 1193 return; 1194 1195 // Sort input sections by priority using the list provided by 1196 // --symbol-ordering-file or --shuffle-sections=. This is a least significant 1197 // digit radix sort. The sections may be sorted stably again by a more 1198 // significant key. 1199 if (!order.empty()) 1200 for (SectionCommand *b : osec.commands) 1201 if (auto *isd = dyn_cast<InputSectionDescription>(b)) 1202 sortISDBySectionOrder(isd, order, osec.flags & SHF_EXECINSTR); 1203 1204 if (script->hasSectionsCommand) 1205 return; 1206 1207 if (name == ".init_array" || name == ".fini_array") { 1208 osec.sortInitFini(); 1209 } else if (name == ".ctors" || name == ".dtors") { 1210 osec.sortCtorsDtors(); 1211 } else if (config->emachine == EM_PPC64 && name == ".toc") { 1212 // .toc is allocated just after .got and is accessed using GOT-relative 1213 // relocations. Object files compiled with small code model have an 1214 // addressable range of [.got, .got + 0xFFFC] for GOT-relative relocations. 1215 // To reduce the risk of relocation overflow, .toc contents are sorted so 1216 // that sections having smaller relocation offsets are at beginning of .toc 1217 assert(osec.commands.size() == 1); 1218 auto *isd = cast<InputSectionDescription>(osec.commands[0]); 1219 llvm::stable_sort(isd->sections, 1220 [](const InputSection *a, const InputSection *b) -> bool { 1221 return a->file->ppc64SmallCodeModelTocRelocs && 1222 !b->file->ppc64SmallCodeModelTocRelocs; 1223 }); 1224 } 1225 } 1226 1227 // If no layout was provided by linker script, we want to apply default 1228 // sorting for special input sections. This also handles --symbol-ordering-file. 1229 template <class ELFT> void Writer<ELFT>::sortInputSections() { 1230 // Build the order once since it is expensive. 1231 DenseMap<const InputSectionBase *, int> order = buildSectionOrder(); 1232 maybeShuffle(order); 1233 for (SectionCommand *cmd : script->sectionCommands) 1234 if (auto *osd = dyn_cast<OutputDesc>(cmd)) 1235 sortSection(osd->osec, order); 1236 } 1237 1238 template <class ELFT> void Writer<ELFT>::sortSections() { 1239 llvm::TimeTraceScope timeScope("Sort sections"); 1240 1241 // Don't sort if using -r. It is not necessary and we want to preserve the 1242 // relative order for SHF_LINK_ORDER sections. 1243 if (config->relocatable) { 1244 script->adjustOutputSections(); 1245 return; 1246 } 1247 1248 sortInputSections(); 1249 1250 for (SectionCommand *cmd : script->sectionCommands) 1251 if (auto *osd = dyn_cast<OutputDesc>(cmd)) 1252 osd->osec.sortRank = getSectionRank(osd->osec); 1253 if (!script->hasSectionsCommand) { 1254 // OutputDescs are mostly contiguous, but may be interleaved with 1255 // SymbolAssignments in the presence of INSERT commands. 1256 auto mid = std::stable_partition( 1257 script->sectionCommands.begin(), script->sectionCommands.end(), 1258 [](SectionCommand *cmd) { return isa<OutputDesc>(cmd); }); 1259 std::stable_sort(script->sectionCommands.begin(), mid, compareSections); 1260 } 1261 1262 // Process INSERT commands and update output section attributes. From this 1263 // point onwards the order of script->sectionCommands is fixed. 1264 script->processInsertCommands(); 1265 script->adjustOutputSections(); 1266 1267 if (script->hasSectionsCommand) 1268 sortOrphanSections(); 1269 1270 script->adjustSectionsAfterSorting(); 1271 } 1272 1273 template <class ELFT> void Writer<ELFT>::sortOrphanSections() { 1274 // Orphan sections are sections present in the input files which are 1275 // not explicitly placed into the output file by the linker script. 1276 // 1277 // The sections in the linker script are already in the correct 1278 // order. We have to figuere out where to insert the orphan 1279 // sections. 1280 // 1281 // The order of the sections in the script is arbitrary and may not agree with 1282 // compareSections. This means that we cannot easily define a strict weak 1283 // ordering. To see why, consider a comparison of a section in the script and 1284 // one not in the script. We have a two simple options: 1285 // * Make them equivalent (a is not less than b, and b is not less than a). 1286 // The problem is then that equivalence has to be transitive and we can 1287 // have sections a, b and c with only b in a script and a less than c 1288 // which breaks this property. 1289 // * Use compareSectionsNonScript. Given that the script order doesn't have 1290 // to match, we can end up with sections a, b, c, d where b and c are in the 1291 // script and c is compareSectionsNonScript less than b. In which case d 1292 // can be equivalent to c, a to b and d < a. As a concrete example: 1293 // .a (rx) # not in script 1294 // .b (rx) # in script 1295 // .c (ro) # in script 1296 // .d (ro) # not in script 1297 // 1298 // The way we define an order then is: 1299 // * Sort only the orphan sections. They are in the end right now. 1300 // * Move each orphan section to its preferred position. We try 1301 // to put each section in the last position where it can share 1302 // a PT_LOAD. 1303 // 1304 // There is some ambiguity as to where exactly a new entry should be 1305 // inserted, because Commands contains not only output section 1306 // commands but also other types of commands such as symbol assignment 1307 // expressions. There's no correct answer here due to the lack of the 1308 // formal specification of the linker script. We use heuristics to 1309 // determine whether a new output command should be added before or 1310 // after another commands. For the details, look at shouldSkip 1311 // function. 1312 1313 auto i = script->sectionCommands.begin(); 1314 auto e = script->sectionCommands.end(); 1315 auto nonScriptI = std::find_if(i, e, [](SectionCommand *cmd) { 1316 if (auto *osd = dyn_cast<OutputDesc>(cmd)) 1317 return osd->osec.sectionIndex == UINT32_MAX; 1318 return false; 1319 }); 1320 1321 // Sort the orphan sections. 1322 std::stable_sort(nonScriptI, e, compareSections); 1323 1324 // As a horrible special case, skip the first . assignment if it is before any 1325 // section. We do this because it is common to set a load address by starting 1326 // the script with ". = 0xabcd" and the expectation is that every section is 1327 // after that. 1328 auto firstSectionOrDotAssignment = 1329 std::find_if(i, e, [](SectionCommand *cmd) { return !shouldSkip(cmd); }); 1330 if (firstSectionOrDotAssignment != e && 1331 isa<SymbolAssignment>(**firstSectionOrDotAssignment)) 1332 ++firstSectionOrDotAssignment; 1333 i = firstSectionOrDotAssignment; 1334 1335 while (nonScriptI != e) { 1336 auto pos = findOrphanPos(i, nonScriptI); 1337 OutputSection *orphan = &cast<OutputDesc>(*nonScriptI)->osec; 1338 1339 // As an optimization, find all sections with the same sort rank 1340 // and insert them with one rotate. 1341 unsigned rank = orphan->sortRank; 1342 auto end = std::find_if(nonScriptI + 1, e, [=](SectionCommand *cmd) { 1343 return cast<OutputDesc>(cmd)->osec.sortRank != rank; 1344 }); 1345 std::rotate(pos, nonScriptI, end); 1346 nonScriptI = end; 1347 } 1348 } 1349 1350 static bool compareByFilePosition(InputSection *a, InputSection *b) { 1351 InputSection *la = a->flags & SHF_LINK_ORDER ? a->getLinkOrderDep() : nullptr; 1352 InputSection *lb = b->flags & SHF_LINK_ORDER ? b->getLinkOrderDep() : nullptr; 1353 // SHF_LINK_ORDER sections with non-zero sh_link are ordered before 1354 // non-SHF_LINK_ORDER sections and SHF_LINK_ORDER sections with zero sh_link. 1355 if (!la || !lb) 1356 return la && !lb; 1357 OutputSection *aOut = la->getParent(); 1358 OutputSection *bOut = lb->getParent(); 1359 1360 if (aOut == bOut) 1361 return la->outSecOff < lb->outSecOff; 1362 if (aOut->addr == bOut->addr) 1363 return aOut->sectionIndex < bOut->sectionIndex; 1364 return aOut->addr < bOut->addr; 1365 } 1366 1367 template <class ELFT> void Writer<ELFT>::resolveShfLinkOrder() { 1368 llvm::TimeTraceScope timeScope("Resolve SHF_LINK_ORDER"); 1369 for (OutputSection *sec : outputSections) { 1370 if (!(sec->flags & SHF_LINK_ORDER)) 1371 continue; 1372 1373 // The ARM.exidx section use SHF_LINK_ORDER, but we have consolidated 1374 // this processing inside the ARMExidxsyntheticsection::finalizeContents(). 1375 if (!config->relocatable && config->emachine == EM_ARM && 1376 sec->type == SHT_ARM_EXIDX) 1377 continue; 1378 1379 // Link order may be distributed across several InputSectionDescriptions. 1380 // Sorting is performed separately. 1381 SmallVector<InputSection **, 0> scriptSections; 1382 SmallVector<InputSection *, 0> sections; 1383 for (SectionCommand *cmd : sec->commands) { 1384 auto *isd = dyn_cast<InputSectionDescription>(cmd); 1385 if (!isd) 1386 continue; 1387 bool hasLinkOrder = false; 1388 scriptSections.clear(); 1389 sections.clear(); 1390 for (InputSection *&isec : isd->sections) { 1391 if (isec->flags & SHF_LINK_ORDER) { 1392 InputSection *link = isec->getLinkOrderDep(); 1393 if (link && !link->getParent()) 1394 error(toString(isec) + ": sh_link points to discarded section " + 1395 toString(link)); 1396 hasLinkOrder = true; 1397 } 1398 scriptSections.push_back(&isec); 1399 sections.push_back(isec); 1400 } 1401 if (hasLinkOrder && errorCount() == 0) { 1402 llvm::stable_sort(sections, compareByFilePosition); 1403 for (int i = 0, n = sections.size(); i != n; ++i) 1404 *scriptSections[i] = sections[i]; 1405 } 1406 } 1407 } 1408 } 1409 1410 static void finalizeSynthetic(SyntheticSection *sec) { 1411 if (sec && sec->isNeeded() && sec->getParent()) { 1412 llvm::TimeTraceScope timeScope("Finalize synthetic sections", sec->name); 1413 sec->finalizeContents(); 1414 } 1415 } 1416 1417 // We need to generate and finalize the content that depends on the address of 1418 // InputSections. As the generation of the content may also alter InputSection 1419 // addresses we must converge to a fixed point. We do that here. See the comment 1420 // in Writer<ELFT>::finalizeSections(). 1421 template <class ELFT> void Writer<ELFT>::finalizeAddressDependentContent() { 1422 llvm::TimeTraceScope timeScope("Finalize address dependent content"); 1423 ThunkCreator tc; 1424 AArch64Err843419Patcher a64p; 1425 ARMErr657417Patcher a32p; 1426 script->assignAddresses(); 1427 1428 // .ARM.exidx and SHF_LINK_ORDER do not require precise addresses, but they 1429 // do require the relative addresses of OutputSections because linker scripts 1430 // can assign Virtual Addresses to OutputSections that are not monotonically 1431 // increasing. Anything here must be repeatable, since spilling may change 1432 // section order. 1433 const auto finalizeOrderDependentContent = [this] { 1434 for (Partition &part : partitions) 1435 finalizeSynthetic(part.armExidx.get()); 1436 resolveShfLinkOrder(); 1437 }; 1438 finalizeOrderDependentContent(); 1439 1440 // Converts call x@GDPLT to call __tls_get_addr 1441 if (config->emachine == EM_HEXAGON) 1442 hexagonTLSSymbolUpdate(outputSections); 1443 1444 uint32_t pass = 0, assignPasses = 0; 1445 for (;;) { 1446 bool changed = target->needsThunks ? tc.createThunks(pass, outputSections) 1447 : target->relaxOnce(pass); 1448 bool spilled = script->spillSections(); 1449 changed |= spilled; 1450 ++pass; 1451 1452 // With Thunk Size much smaller than branch range we expect to 1453 // converge quickly; if we get to 30 something has gone wrong. 1454 if (changed && pass >= 30) { 1455 error(target->needsThunks ? "thunk creation not converged" 1456 : "relaxation not converged"); 1457 break; 1458 } 1459 1460 if (config->fixCortexA53Errata843419) { 1461 if (changed) 1462 script->assignAddresses(); 1463 changed |= a64p.createFixes(); 1464 } 1465 if (config->fixCortexA8) { 1466 if (changed) 1467 script->assignAddresses(); 1468 changed |= a32p.createFixes(); 1469 } 1470 1471 finalizeSynthetic(in.got.get()); 1472 if (in.mipsGot) 1473 in.mipsGot->updateAllocSize(); 1474 1475 for (Partition &part : partitions) { 1476 // The R_AARCH64_AUTH_RELATIVE has a smaller addend field as bits [63:32] 1477 // encode the signing schema. We've put relocations in .relr.auth.dyn 1478 // during RelocationScanner::processAux, but the target VA for some of 1479 // them might be wider than 32 bits. We can only know the final VA at this 1480 // point, so move relocations with large values from .relr.auth.dyn to 1481 // .rela.dyn. See also AArch64::relocate. 1482 if (part.relrAuthDyn) { 1483 auto it = llvm::remove_if( 1484 part.relrAuthDyn->relocs, [&part](const RelativeReloc &elem) { 1485 const Relocation &reloc = elem.inputSec->relocs()[elem.relocIdx]; 1486 if (isInt<32>(reloc.sym->getVA(reloc.addend))) 1487 return false; 1488 part.relaDyn->addReloc({R_AARCH64_AUTH_RELATIVE, elem.inputSec, 1489 reloc.offset, 1490 DynamicReloc::AddendOnlyWithTargetVA, 1491 *reloc.sym, reloc.addend, R_ABS}); 1492 return true; 1493 }); 1494 changed |= (it != part.relrAuthDyn->relocs.end()); 1495 part.relrAuthDyn->relocs.erase(it, part.relrAuthDyn->relocs.end()); 1496 } 1497 if (part.relaDyn) 1498 changed |= part.relaDyn->updateAllocSize(); 1499 if (part.relrDyn) 1500 changed |= part.relrDyn->updateAllocSize(); 1501 if (part.relrAuthDyn) 1502 changed |= part.relrAuthDyn->updateAllocSize(); 1503 if (part.memtagGlobalDescriptors) 1504 changed |= part.memtagGlobalDescriptors->updateAllocSize(); 1505 } 1506 1507 std::pair<const OutputSection *, const Defined *> changes = 1508 script->assignAddresses(); 1509 if (!changed) { 1510 // Some symbols may be dependent on section addresses. When we break the 1511 // loop, the symbol values are finalized because a previous 1512 // assignAddresses() finalized section addresses. 1513 if (!changes.first && !changes.second) 1514 break; 1515 if (++assignPasses == 5) { 1516 if (changes.first) 1517 errorOrWarn("address (0x" + Twine::utohexstr(changes.first->addr) + 1518 ") of section '" + changes.first->name + 1519 "' does not converge"); 1520 if (changes.second) 1521 errorOrWarn("assignment to symbol " + toString(*changes.second) + 1522 " does not converge"); 1523 break; 1524 } 1525 } else if (spilled) { 1526 // Spilling can change relative section order. 1527 finalizeOrderDependentContent(); 1528 } 1529 } 1530 if (!config->relocatable) 1531 target->finalizeRelax(pass); 1532 1533 if (config->relocatable) 1534 for (OutputSection *sec : outputSections) 1535 sec->addr = 0; 1536 1537 // If addrExpr is set, the address may not be a multiple of the alignment. 1538 // Warn because this is error-prone. 1539 for (SectionCommand *cmd : script->sectionCommands) 1540 if (auto *osd = dyn_cast<OutputDesc>(cmd)) { 1541 OutputSection *osec = &osd->osec; 1542 if (osec->addr % osec->addralign != 0) 1543 warn("address (0x" + Twine::utohexstr(osec->addr) + ") of section " + 1544 osec->name + " is not a multiple of alignment (" + 1545 Twine(osec->addralign) + ")"); 1546 } 1547 1548 // Sizes are no longer allowed to grow, so all allowable spills have been 1549 // taken. Remove any leftover potential spills. 1550 script->erasePotentialSpillSections(); 1551 } 1552 1553 // If Input Sections have been shrunk (basic block sections) then 1554 // update symbol values and sizes associated with these sections. With basic 1555 // block sections, input sections can shrink when the jump instructions at 1556 // the end of the section are relaxed. 1557 static void fixSymbolsAfterShrinking() { 1558 for (InputFile *File : ctx.objectFiles) { 1559 parallelForEach(File->getSymbols(), [&](Symbol *Sym) { 1560 auto *def = dyn_cast<Defined>(Sym); 1561 if (!def) 1562 return; 1563 1564 const SectionBase *sec = def->section; 1565 if (!sec) 1566 return; 1567 1568 const InputSectionBase *inputSec = dyn_cast<InputSectionBase>(sec); 1569 if (!inputSec || !inputSec->bytesDropped) 1570 return; 1571 1572 const size_t OldSize = inputSec->content().size(); 1573 const size_t NewSize = OldSize - inputSec->bytesDropped; 1574 1575 if (def->value > NewSize && def->value <= OldSize) { 1576 LLVM_DEBUG(llvm::dbgs() 1577 << "Moving symbol " << Sym->getName() << " from " 1578 << def->value << " to " 1579 << def->value - inputSec->bytesDropped << " bytes\n"); 1580 def->value -= inputSec->bytesDropped; 1581 return; 1582 } 1583 1584 if (def->value + def->size > NewSize && def->value <= OldSize && 1585 def->value + def->size <= OldSize) { 1586 LLVM_DEBUG(llvm::dbgs() 1587 << "Shrinking symbol " << Sym->getName() << " from " 1588 << def->size << " to " << def->size - inputSec->bytesDropped 1589 << " bytes\n"); 1590 def->size -= inputSec->bytesDropped; 1591 } 1592 }); 1593 } 1594 } 1595 1596 // If basic block sections exist, there are opportunities to delete fall thru 1597 // jumps and shrink jump instructions after basic block reordering. This 1598 // relaxation pass does that. It is only enabled when --optimize-bb-jumps 1599 // option is used. 1600 template <class ELFT> void Writer<ELFT>::optimizeBasicBlockJumps() { 1601 assert(config->optimizeBBJumps); 1602 SmallVector<InputSection *, 0> storage; 1603 1604 script->assignAddresses(); 1605 // For every output section that has executable input sections, this 1606 // does the following: 1607 // 1. Deletes all direct jump instructions in input sections that 1608 // jump to the following section as it is not required. 1609 // 2. If there are two consecutive jump instructions, it checks 1610 // if they can be flipped and one can be deleted. 1611 for (OutputSection *osec : outputSections) { 1612 if (!(osec->flags & SHF_EXECINSTR)) 1613 continue; 1614 ArrayRef<InputSection *> sections = getInputSections(*osec, storage); 1615 size_t numDeleted = 0; 1616 // Delete all fall through jump instructions. Also, check if two 1617 // consecutive jump instructions can be flipped so that a fall 1618 // through jmp instruction can be deleted. 1619 for (size_t i = 0, e = sections.size(); i != e; ++i) { 1620 InputSection *next = i + 1 < sections.size() ? sections[i + 1] : nullptr; 1621 InputSection &sec = *sections[i]; 1622 numDeleted += target->deleteFallThruJmpInsn(sec, sec.file, next); 1623 } 1624 if (numDeleted > 0) { 1625 script->assignAddresses(); 1626 LLVM_DEBUG(llvm::dbgs() 1627 << "Removing " << numDeleted << " fall through jumps\n"); 1628 } 1629 } 1630 1631 fixSymbolsAfterShrinking(); 1632 1633 for (OutputSection *osec : outputSections) 1634 for (InputSection *is : getInputSections(*osec, storage)) 1635 is->trim(); 1636 } 1637 1638 // In order to allow users to manipulate linker-synthesized sections, 1639 // we had to add synthetic sections to the input section list early, 1640 // even before we make decisions whether they are needed. This allows 1641 // users to write scripts like this: ".mygot : { .got }". 1642 // 1643 // Doing it has an unintended side effects. If it turns out that we 1644 // don't need a .got (for example) at all because there's no 1645 // relocation that needs a .got, we don't want to emit .got. 1646 // 1647 // To deal with the above problem, this function is called after 1648 // scanRelocations is called to remove synthetic sections that turn 1649 // out to be empty. 1650 static void removeUnusedSyntheticSections() { 1651 // All input synthetic sections that can be empty are placed after 1652 // all regular ones. Reverse iterate to find the first synthetic section 1653 // after a non-synthetic one which will be our starting point. 1654 auto start = 1655 llvm::find_if(llvm::reverse(ctx.inputSections), [](InputSectionBase *s) { 1656 return !isa<SyntheticSection>(s); 1657 }).base(); 1658 1659 // Remove unused synthetic sections from ctx.inputSections; 1660 DenseSet<InputSectionBase *> unused; 1661 auto end = 1662 std::remove_if(start, ctx.inputSections.end(), [&](InputSectionBase *s) { 1663 auto *sec = cast<SyntheticSection>(s); 1664 if (sec->getParent() && sec->isNeeded()) 1665 return false; 1666 // .relr.auth.dyn relocations may be moved to .rela.dyn in 1667 // finalizeAddressDependentContent, making .rela.dyn no longer empty. 1668 // Conservatively keep .rela.dyn. .relr.auth.dyn can be made empty, but 1669 // we would fail to remove it here. 1670 if (config->emachine == EM_AARCH64 && config->relrPackDynRelocs) 1671 if (auto *relSec = dyn_cast<RelocationBaseSection>(sec)) 1672 if (relSec == mainPart->relaDyn.get()) 1673 return false; 1674 unused.insert(sec); 1675 return true; 1676 }); 1677 ctx.inputSections.erase(end, ctx.inputSections.end()); 1678 1679 // Remove unused synthetic sections from the corresponding input section 1680 // description and orphanSections. 1681 for (auto *sec : unused) 1682 if (OutputSection *osec = cast<SyntheticSection>(sec)->getParent()) 1683 for (SectionCommand *cmd : osec->commands) 1684 if (auto *isd = dyn_cast<InputSectionDescription>(cmd)) 1685 llvm::erase_if(isd->sections, [&](InputSection *isec) { 1686 return unused.count(isec); 1687 }); 1688 llvm::erase_if(script->orphanSections, [&](const InputSectionBase *sec) { 1689 return unused.count(sec); 1690 }); 1691 } 1692 1693 // Create output section objects and add them to OutputSections. 1694 template <class ELFT> void Writer<ELFT>::finalizeSections() { 1695 if (!config->relocatable) { 1696 Out::preinitArray = findSection(".preinit_array"); 1697 Out::initArray = findSection(".init_array"); 1698 Out::finiArray = findSection(".fini_array"); 1699 1700 // The linker needs to define SECNAME_start, SECNAME_end and SECNAME_stop 1701 // symbols for sections, so that the runtime can get the start and end 1702 // addresses of each section by section name. Add such symbols. 1703 addStartEndSymbols(); 1704 for (SectionCommand *cmd : script->sectionCommands) 1705 if (auto *osd = dyn_cast<OutputDesc>(cmd)) 1706 addStartStopSymbols(osd->osec); 1707 1708 // Add _DYNAMIC symbol. Unlike GNU gold, our _DYNAMIC symbol has no type. 1709 // It should be okay as no one seems to care about the type. 1710 // Even the author of gold doesn't remember why gold behaves that way. 1711 // https://sourceware.org/ml/binutils/2002-03/msg00360.html 1712 if (mainPart->dynamic->parent) { 1713 Symbol *s = symtab.addSymbol(Defined{ 1714 ctx.internalFile, "_DYNAMIC", STB_WEAK, STV_HIDDEN, STT_NOTYPE, 1715 /*value=*/0, /*size=*/0, mainPart->dynamic.get()}); 1716 s->isUsedInRegularObj = true; 1717 } 1718 1719 // Define __rel[a]_iplt_{start,end} symbols if needed. 1720 addRelIpltSymbols(); 1721 1722 // RISC-V's gp can address +/- 2 KiB, set it to .sdata + 0x800. This symbol 1723 // should only be defined in an executable. If .sdata does not exist, its 1724 // value/section does not matter but it has to be relative, so set its 1725 // st_shndx arbitrarily to 1 (Out::elfHeader). 1726 if (config->emachine == EM_RISCV) { 1727 ElfSym::riscvGlobalPointer = nullptr; 1728 if (!config->shared) { 1729 OutputSection *sec = findSection(".sdata"); 1730 addOptionalRegular( 1731 "__global_pointer$", sec ? sec : Out::elfHeader, 0x800, STV_DEFAULT); 1732 // Set riscvGlobalPointer to be used by the optional global pointer 1733 // relaxation. 1734 if (config->relaxGP) { 1735 Symbol *s = symtab.find("__global_pointer$"); 1736 if (s && s->isDefined()) 1737 ElfSym::riscvGlobalPointer = cast<Defined>(s); 1738 } 1739 } 1740 } 1741 1742 if (config->emachine == EM_386 || config->emachine == EM_X86_64) { 1743 // On targets that support TLSDESC, _TLS_MODULE_BASE_ is defined in such a 1744 // way that: 1745 // 1746 // 1) Without relaxation: it produces a dynamic TLSDESC relocation that 1747 // computes 0. 1748 // 2) With LD->LE relaxation: _TLS_MODULE_BASE_@tpoff = 0 (lowest address 1749 // in the TLS block). 1750 // 1751 // 2) is special cased in @tpoff computation. To satisfy 1), we define it 1752 // as an absolute symbol of zero. This is different from GNU linkers which 1753 // define _TLS_MODULE_BASE_ relative to the first TLS section. 1754 Symbol *s = symtab.find("_TLS_MODULE_BASE_"); 1755 if (s && s->isUndefined()) { 1756 s->resolve(Defined{ctx.internalFile, StringRef(), STB_GLOBAL, 1757 STV_HIDDEN, STT_TLS, /*value=*/0, 0, 1758 /*section=*/nullptr}); 1759 ElfSym::tlsModuleBase = cast<Defined>(s); 1760 } 1761 } 1762 1763 // This responsible for splitting up .eh_frame section into 1764 // pieces. The relocation scan uses those pieces, so this has to be 1765 // earlier. 1766 { 1767 llvm::TimeTraceScope timeScope("Finalize .eh_frame"); 1768 for (Partition &part : partitions) 1769 finalizeSynthetic(part.ehFrame.get()); 1770 } 1771 } 1772 1773 demoteSymbolsAndComputeIsPreemptible(); 1774 1775 if (config->copyRelocs && config->discard != DiscardPolicy::None) 1776 markUsedLocalSymbols<ELFT>(); 1777 demoteAndCopyLocalSymbols(); 1778 1779 if (config->copyRelocs) 1780 addSectionSymbols(); 1781 1782 // Change values of linker-script-defined symbols from placeholders (assigned 1783 // by declareSymbols) to actual definitions. 1784 script->processSymbolAssignments(); 1785 1786 if (!config->relocatable) { 1787 llvm::TimeTraceScope timeScope("Scan relocations"); 1788 // Scan relocations. This must be done after every symbol is declared so 1789 // that we can correctly decide if a dynamic relocation is needed. This is 1790 // called after processSymbolAssignments() because it needs to know whether 1791 // a linker-script-defined symbol is absolute. 1792 ppc64noTocRelax.clear(); 1793 scanRelocations<ELFT>(); 1794 reportUndefinedSymbols(); 1795 postScanRelocations(); 1796 1797 if (in.plt && in.plt->isNeeded()) 1798 in.plt->addSymbols(); 1799 if (in.iplt && in.iplt->isNeeded()) 1800 in.iplt->addSymbols(); 1801 1802 if (config->unresolvedSymbolsInShlib != UnresolvedPolicy::Ignore) { 1803 auto diagnose = 1804 config->unresolvedSymbolsInShlib == UnresolvedPolicy::ReportError 1805 ? errorOrWarn 1806 : warn; 1807 // Error on undefined symbols in a shared object, if all of its DT_NEEDED 1808 // entries are seen. These cases would otherwise lead to runtime errors 1809 // reported by the dynamic linker. 1810 // 1811 // ld.bfd traces all DT_NEEDED to emulate the logic of the dynamic linker 1812 // to catch more cases. That is too much for us. Our approach resembles 1813 // the one used in ld.gold, achieves a good balance to be useful but not 1814 // too smart. 1815 // 1816 // If a DSO reference is resolved by a SharedSymbol, but the SharedSymbol 1817 // is overridden by a hidden visibility Defined (which is later discarded 1818 // due to GC), don't report the diagnostic. However, this may indicate an 1819 // unintended SharedSymbol. 1820 for (SharedFile *file : ctx.sharedFiles) { 1821 bool allNeededIsKnown = 1822 llvm::all_of(file->dtNeeded, [&](StringRef needed) { 1823 return symtab.soNames.count(CachedHashStringRef(needed)); 1824 }); 1825 if (!allNeededIsKnown) 1826 continue; 1827 for (Symbol *sym : file->requiredSymbols) { 1828 if (sym->dsoDefined) 1829 continue; 1830 if (sym->isUndefined() && !sym->isWeak()) { 1831 diagnose("undefined reference: " + toString(*sym) + 1832 "\n>>> referenced by " + toString(file) + 1833 " (disallowed by --no-allow-shlib-undefined)"); 1834 } else if (sym->isDefined() && sym->computeBinding() == STB_LOCAL) { 1835 diagnose("non-exported symbol '" + toString(*sym) + "' in '" + 1836 toString(sym->file) + "' is referenced by DSO '" + 1837 toString(file) + "'"); 1838 } 1839 } 1840 } 1841 } 1842 } 1843 1844 { 1845 llvm::TimeTraceScope timeScope("Add symbols to symtabs"); 1846 // Now that we have defined all possible global symbols including linker- 1847 // synthesized ones. Visit all symbols to give the finishing touches. 1848 for (Symbol *sym : symtab.getSymbols()) { 1849 if (!sym->isUsedInRegularObj || !includeInSymtab(*sym)) 1850 continue; 1851 if (!config->relocatable) 1852 sym->binding = sym->computeBinding(); 1853 if (in.symTab) 1854 in.symTab->addSymbol(sym); 1855 1856 if (sym->includeInDynsym()) { 1857 partitions[sym->partition - 1].dynSymTab->addSymbol(sym); 1858 if (auto *file = dyn_cast_or_null<SharedFile>(sym->file)) 1859 if (file->isNeeded && !sym->isUndefined()) 1860 addVerneed(sym); 1861 } 1862 } 1863 1864 // We also need to scan the dynamic relocation tables of the other 1865 // partitions and add any referenced symbols to the partition's dynsym. 1866 for (Partition &part : MutableArrayRef<Partition>(partitions).slice(1)) { 1867 DenseSet<Symbol *> syms; 1868 for (const SymbolTableEntry &e : part.dynSymTab->getSymbols()) 1869 syms.insert(e.sym); 1870 for (DynamicReloc &reloc : part.relaDyn->relocs) 1871 if (reloc.sym && reloc.needsDynSymIndex() && 1872 syms.insert(reloc.sym).second) 1873 part.dynSymTab->addSymbol(reloc.sym); 1874 } 1875 } 1876 1877 if (in.mipsGot) 1878 in.mipsGot->build(); 1879 1880 removeUnusedSyntheticSections(); 1881 script->diagnoseOrphanHandling(); 1882 script->diagnoseMissingSGSectionAddress(); 1883 1884 sortSections(); 1885 1886 // Create a list of OutputSections, assign sectionIndex, and populate 1887 // in.shStrTab. 1888 for (SectionCommand *cmd : script->sectionCommands) 1889 if (auto *osd = dyn_cast<OutputDesc>(cmd)) { 1890 OutputSection *osec = &osd->osec; 1891 outputSections.push_back(osec); 1892 osec->sectionIndex = outputSections.size(); 1893 osec->shName = in.shStrTab->addString(osec->name); 1894 } 1895 1896 // Prefer command line supplied address over other constraints. 1897 for (OutputSection *sec : outputSections) { 1898 auto i = config->sectionStartMap.find(sec->name); 1899 if (i != config->sectionStartMap.end()) 1900 sec->addrExpr = [=] { return i->second; }; 1901 } 1902 1903 // With the outputSections available check for GDPLT relocations 1904 // and add __tls_get_addr symbol if needed. 1905 if (config->emachine == EM_HEXAGON && hexagonNeedsTLSSymbol(outputSections)) { 1906 Symbol *sym = 1907 symtab.addSymbol(Undefined{ctx.internalFile, "__tls_get_addr", 1908 STB_GLOBAL, STV_DEFAULT, STT_NOTYPE}); 1909 sym->isPreemptible = true; 1910 partitions[0].dynSymTab->addSymbol(sym); 1911 } 1912 1913 // This is a bit of a hack. A value of 0 means undef, so we set it 1914 // to 1 to make __ehdr_start defined. The section number is not 1915 // particularly relevant. 1916 Out::elfHeader->sectionIndex = 1; 1917 Out::elfHeader->size = sizeof(typename ELFT::Ehdr); 1918 1919 // Binary and relocatable output does not have PHDRS. 1920 // The headers have to be created before finalize as that can influence the 1921 // image base and the dynamic section on mips includes the image base. 1922 if (!config->relocatable && !config->oFormatBinary) { 1923 for (Partition &part : partitions) { 1924 part.phdrs = script->hasPhdrsCommands() ? script->createPhdrs() 1925 : createPhdrs(part); 1926 if (config->emachine == EM_ARM) { 1927 // PT_ARM_EXIDX is the ARM EHABI equivalent of PT_GNU_EH_FRAME 1928 addPhdrForSection(part, SHT_ARM_EXIDX, PT_ARM_EXIDX, PF_R); 1929 } 1930 if (config->emachine == EM_MIPS) { 1931 // Add separate segments for MIPS-specific sections. 1932 addPhdrForSection(part, SHT_MIPS_REGINFO, PT_MIPS_REGINFO, PF_R); 1933 addPhdrForSection(part, SHT_MIPS_OPTIONS, PT_MIPS_OPTIONS, PF_R); 1934 addPhdrForSection(part, SHT_MIPS_ABIFLAGS, PT_MIPS_ABIFLAGS, PF_R); 1935 } 1936 if (config->emachine == EM_RISCV) 1937 addPhdrForSection(part, SHT_RISCV_ATTRIBUTES, PT_RISCV_ATTRIBUTES, 1938 PF_R); 1939 } 1940 Out::programHeaders->size = sizeof(Elf_Phdr) * mainPart->phdrs.size(); 1941 1942 // Find the TLS segment. This happens before the section layout loop so that 1943 // Android relocation packing can look up TLS symbol addresses. We only need 1944 // to care about the main partition here because all TLS symbols were moved 1945 // to the main partition (see MarkLive.cpp). 1946 for (PhdrEntry *p : mainPart->phdrs) 1947 if (p->p_type == PT_TLS) 1948 Out::tlsPhdr = p; 1949 } 1950 1951 // Some symbols are defined in term of program headers. Now that we 1952 // have the headers, we can find out which sections they point to. 1953 setReservedSymbolSections(); 1954 1955 if (script->noCrossRefs.size()) { 1956 llvm::TimeTraceScope timeScope("Check NOCROSSREFS"); 1957 checkNoCrossRefs<ELFT>(); 1958 } 1959 1960 { 1961 llvm::TimeTraceScope timeScope("Finalize synthetic sections"); 1962 1963 finalizeSynthetic(in.bss.get()); 1964 finalizeSynthetic(in.bssRelRo.get()); 1965 finalizeSynthetic(in.symTabShndx.get()); 1966 finalizeSynthetic(in.shStrTab.get()); 1967 finalizeSynthetic(in.strTab.get()); 1968 finalizeSynthetic(in.got.get()); 1969 finalizeSynthetic(in.mipsGot.get()); 1970 finalizeSynthetic(in.igotPlt.get()); 1971 finalizeSynthetic(in.gotPlt.get()); 1972 finalizeSynthetic(in.relaPlt.get()); 1973 finalizeSynthetic(in.plt.get()); 1974 finalizeSynthetic(in.iplt.get()); 1975 finalizeSynthetic(in.ppc32Got2.get()); 1976 finalizeSynthetic(in.partIndex.get()); 1977 1978 // Dynamic section must be the last one in this list and dynamic 1979 // symbol table section (dynSymTab) must be the first one. 1980 for (Partition &part : partitions) { 1981 if (part.relaDyn) { 1982 part.relaDyn->mergeRels(); 1983 // Compute DT_RELACOUNT to be used by part.dynamic. 1984 part.relaDyn->partitionRels(); 1985 finalizeSynthetic(part.relaDyn.get()); 1986 } 1987 if (part.relrDyn) { 1988 part.relrDyn->mergeRels(); 1989 finalizeSynthetic(part.relrDyn.get()); 1990 } 1991 if (part.relrAuthDyn) { 1992 part.relrAuthDyn->mergeRels(); 1993 finalizeSynthetic(part.relrAuthDyn.get()); 1994 } 1995 1996 finalizeSynthetic(part.dynSymTab.get()); 1997 finalizeSynthetic(part.gnuHashTab.get()); 1998 finalizeSynthetic(part.hashTab.get()); 1999 finalizeSynthetic(part.verDef.get()); 2000 finalizeSynthetic(part.ehFrameHdr.get()); 2001 finalizeSynthetic(part.verSym.get()); 2002 finalizeSynthetic(part.verNeed.get()); 2003 finalizeSynthetic(part.dynamic.get()); 2004 } 2005 } 2006 2007 if (!script->hasSectionsCommand && !config->relocatable) 2008 fixSectionAlignments(); 2009 2010 // This is used to: 2011 // 1) Create "thunks": 2012 // Jump instructions in many ISAs have small displacements, and therefore 2013 // they cannot jump to arbitrary addresses in memory. For example, RISC-V 2014 // JAL instruction can target only +-1 MiB from PC. It is a linker's 2015 // responsibility to create and insert small pieces of code between 2016 // sections to extend the ranges if jump targets are out of range. Such 2017 // code pieces are called "thunks". 2018 // 2019 // We add thunks at this stage. We couldn't do this before this point 2020 // because this is the earliest point where we know sizes of sections and 2021 // their layouts (that are needed to determine if jump targets are in 2022 // range). 2023 // 2024 // 2) Update the sections. We need to generate content that depends on the 2025 // address of InputSections. For example, MIPS GOT section content or 2026 // android packed relocations sections content. 2027 // 2028 // 3) Assign the final values for the linker script symbols. Linker scripts 2029 // sometimes using forward symbol declarations. We want to set the correct 2030 // values. They also might change after adding the thunks. 2031 finalizeAddressDependentContent(); 2032 2033 // All information needed for OutputSection part of Map file is available. 2034 if (errorCount()) 2035 return; 2036 2037 { 2038 llvm::TimeTraceScope timeScope("Finalize synthetic sections"); 2039 // finalizeAddressDependentContent may have added local symbols to the 2040 // static symbol table. 2041 finalizeSynthetic(in.symTab.get()); 2042 finalizeSynthetic(in.debugNames.get()); 2043 finalizeSynthetic(in.ppc64LongBranchTarget.get()); 2044 finalizeSynthetic(in.armCmseSGSection.get()); 2045 } 2046 2047 // Relaxation to delete inter-basic block jumps created by basic block 2048 // sections. Run after in.symTab is finalized as optimizeBasicBlockJumps 2049 // can relax jump instructions based on symbol offset. 2050 if (config->optimizeBBJumps) 2051 optimizeBasicBlockJumps(); 2052 2053 // Fill other section headers. The dynamic table is finalized 2054 // at the end because some tags like RELSZ depend on result 2055 // of finalizing other sections. 2056 for (OutputSection *sec : outputSections) 2057 sec->finalize(); 2058 2059 script->checkFinalScriptConditions(); 2060 2061 if (config->emachine == EM_ARM && !config->isLE && config->armBe8) { 2062 addArmInputSectionMappingSymbols(); 2063 sortArmMappingSymbols(); 2064 } 2065 } 2066 2067 // Ensure data sections are not mixed with executable sections when 2068 // --execute-only is used. --execute-only make pages executable but not 2069 // readable. 2070 template <class ELFT> void Writer<ELFT>::checkExecuteOnly() { 2071 if (!config->executeOnly) 2072 return; 2073 2074 SmallVector<InputSection *, 0> storage; 2075 for (OutputSection *osec : outputSections) 2076 if (osec->flags & SHF_EXECINSTR) 2077 for (InputSection *isec : getInputSections(*osec, storage)) 2078 if (!(isec->flags & SHF_EXECINSTR)) 2079 error("cannot place " + toString(isec) + " into " + 2080 toString(osec->name) + 2081 ": --execute-only does not support intermingling data and code"); 2082 } 2083 2084 // The linker is expected to define SECNAME_start and SECNAME_end 2085 // symbols for a few sections. This function defines them. 2086 template <class ELFT> void Writer<ELFT>::addStartEndSymbols() { 2087 // If the associated output section does not exist, there is ambiguity as to 2088 // how we define _start and _end symbols for an init/fini section. Users 2089 // expect no "undefined symbol" linker errors and loaders expect equal 2090 // st_value but do not particularly care whether the symbols are defined or 2091 // not. We retain the output section so that the section indexes will be 2092 // correct. 2093 auto define = [=](StringRef start, StringRef end, OutputSection *os) { 2094 if (os) { 2095 Defined *startSym = addOptionalRegular(start, os, 0); 2096 Defined *stopSym = addOptionalRegular(end, os, -1); 2097 if (startSym || stopSym) 2098 os->usedInExpression = true; 2099 } else { 2100 addOptionalRegular(start, Out::elfHeader, 0); 2101 addOptionalRegular(end, Out::elfHeader, 0); 2102 } 2103 }; 2104 2105 define("__preinit_array_start", "__preinit_array_end", Out::preinitArray); 2106 define("__init_array_start", "__init_array_end", Out::initArray); 2107 define("__fini_array_start", "__fini_array_end", Out::finiArray); 2108 2109 // As a special case, don't unnecessarily retain .ARM.exidx, which would 2110 // create an empty PT_ARM_EXIDX. 2111 if (OutputSection *sec = findSection(".ARM.exidx")) 2112 define("__exidx_start", "__exidx_end", sec); 2113 } 2114 2115 // If a section name is valid as a C identifier (which is rare because of 2116 // the leading '.'), linkers are expected to define __start_<secname> and 2117 // __stop_<secname> symbols. They are at beginning and end of the section, 2118 // respectively. This is not requested by the ELF standard, but GNU ld and 2119 // gold provide the feature, and used by many programs. 2120 template <class ELFT> 2121 void Writer<ELFT>::addStartStopSymbols(OutputSection &osec) { 2122 StringRef s = osec.name; 2123 if (!isValidCIdentifier(s)) 2124 return; 2125 Defined *startSym = addOptionalRegular(saver().save("__start_" + s), &osec, 0, 2126 config->zStartStopVisibility); 2127 Defined *stopSym = addOptionalRegular(saver().save("__stop_" + s), &osec, -1, 2128 config->zStartStopVisibility); 2129 if (startSym || stopSym) 2130 osec.usedInExpression = true; 2131 } 2132 2133 static bool needsPtLoad(OutputSection *sec) { 2134 if (!(sec->flags & SHF_ALLOC)) 2135 return false; 2136 2137 // Don't allocate VA space for TLS NOBITS sections. The PT_TLS PHDR is 2138 // responsible for allocating space for them, not the PT_LOAD that 2139 // contains the TLS initialization image. 2140 if ((sec->flags & SHF_TLS) && sec->type == SHT_NOBITS) 2141 return false; 2142 return true; 2143 } 2144 2145 // Adjust phdr flags according to certain options. 2146 static uint64_t computeFlags(uint64_t flags) { 2147 if (config->omagic) 2148 return PF_R | PF_W | PF_X; 2149 if (config->executeOnly && (flags & PF_X)) 2150 return flags & ~PF_R; 2151 return flags; 2152 } 2153 2154 // Decide which program headers to create and which sections to include in each 2155 // one. 2156 template <class ELFT> 2157 SmallVector<PhdrEntry *, 0> Writer<ELFT>::createPhdrs(Partition &part) { 2158 SmallVector<PhdrEntry *, 0> ret; 2159 auto addHdr = [&](unsigned type, unsigned flags) -> PhdrEntry * { 2160 ret.push_back(make<PhdrEntry>(type, flags)); 2161 return ret.back(); 2162 }; 2163 2164 unsigned partNo = part.getNumber(); 2165 bool isMain = partNo == 1; 2166 2167 // Add the first PT_LOAD segment for regular output sections. 2168 uint64_t flags = computeFlags(PF_R); 2169 PhdrEntry *load = nullptr; 2170 2171 // nmagic or omagic output does not have PT_PHDR, PT_INTERP, or the readonly 2172 // PT_LOAD. 2173 if (!config->nmagic && !config->omagic) { 2174 // The first phdr entry is PT_PHDR which describes the program header 2175 // itself. 2176 if (isMain) 2177 addHdr(PT_PHDR, PF_R)->add(Out::programHeaders); 2178 else 2179 addHdr(PT_PHDR, PF_R)->add(part.programHeaders->getParent()); 2180 2181 // PT_INTERP must be the second entry if exists. 2182 if (OutputSection *cmd = findSection(".interp", partNo)) 2183 addHdr(PT_INTERP, cmd->getPhdrFlags())->add(cmd); 2184 2185 // Add the headers. We will remove them if they don't fit. 2186 // In the other partitions the headers are ordinary sections, so they don't 2187 // need to be added here. 2188 if (isMain) { 2189 load = addHdr(PT_LOAD, flags); 2190 load->add(Out::elfHeader); 2191 load->add(Out::programHeaders); 2192 } 2193 } 2194 2195 // PT_GNU_RELRO includes all sections that should be marked as 2196 // read-only by dynamic linker after processing relocations. 2197 // Current dynamic loaders only support one PT_GNU_RELRO PHDR, give 2198 // an error message if more than one PT_GNU_RELRO PHDR is required. 2199 PhdrEntry *relRo = make<PhdrEntry>(PT_GNU_RELRO, PF_R); 2200 bool inRelroPhdr = false; 2201 OutputSection *relroEnd = nullptr; 2202 for (OutputSection *sec : outputSections) { 2203 if (sec->partition != partNo || !needsPtLoad(sec)) 2204 continue; 2205 if (isRelroSection(sec)) { 2206 inRelroPhdr = true; 2207 if (!relroEnd) 2208 relRo->add(sec); 2209 else 2210 error("section: " + sec->name + " is not contiguous with other relro" + 2211 " sections"); 2212 } else if (inRelroPhdr) { 2213 inRelroPhdr = false; 2214 relroEnd = sec; 2215 } 2216 } 2217 relRo->p_align = 1; 2218 2219 for (OutputSection *sec : outputSections) { 2220 if (!needsPtLoad(sec)) 2221 continue; 2222 2223 // Normally, sections in partitions other than the current partition are 2224 // ignored. But partition number 255 is a special case: it contains the 2225 // partition end marker (.part.end). It needs to be added to the main 2226 // partition so that a segment is created for it in the main partition, 2227 // which will cause the dynamic loader to reserve space for the other 2228 // partitions. 2229 if (sec->partition != partNo) { 2230 if (isMain && sec->partition == 255) 2231 addHdr(PT_LOAD, computeFlags(sec->getPhdrFlags()))->add(sec); 2232 continue; 2233 } 2234 2235 // Segments are contiguous memory regions that has the same attributes 2236 // (e.g. executable or writable). There is one phdr for each segment. 2237 // Therefore, we need to create a new phdr when the next section has 2238 // incompatible flags or is loaded at a discontiguous address or memory 2239 // region using AT or AT> linker script command, respectively. 2240 // 2241 // As an exception, we don't create a separate load segment for the ELF 2242 // headers, even if the first "real" output has an AT or AT> attribute. 2243 // 2244 // In addition, NOBITS sections should only be placed at the end of a LOAD 2245 // segment (since it's represented as p_filesz < p_memsz). If we have a 2246 // not-NOBITS section after a NOBITS, we create a new LOAD for the latter 2247 // even if flags match, so as not to require actually writing the 2248 // supposed-to-be-NOBITS section to the output file. (However, we cannot do 2249 // so when hasSectionsCommand, since we cannot introduce the extra alignment 2250 // needed to create a new LOAD) 2251 uint64_t newFlags = computeFlags(sec->getPhdrFlags()); 2252 // When --no-rosegment is specified, RO and RX sections are compatible. 2253 uint32_t incompatible = flags ^ newFlags; 2254 if (config->singleRoRx && !(newFlags & PF_W)) 2255 incompatible &= ~PF_X; 2256 if (incompatible) 2257 load = nullptr; 2258 2259 bool sameLMARegion = 2260 load && !sec->lmaExpr && sec->lmaRegion == load->firstSec->lmaRegion; 2261 if (load && sec != relroEnd && 2262 sec->memRegion == load->firstSec->memRegion && 2263 (sameLMARegion || load->lastSec == Out::programHeaders) && 2264 (script->hasSectionsCommand || sec->type == SHT_NOBITS || 2265 load->lastSec->type != SHT_NOBITS)) { 2266 load->p_flags |= newFlags; 2267 } else { 2268 load = addHdr(PT_LOAD, newFlags); 2269 flags = newFlags; 2270 } 2271 2272 load->add(sec); 2273 } 2274 2275 // Add a TLS segment if any. 2276 PhdrEntry *tlsHdr = make<PhdrEntry>(PT_TLS, PF_R); 2277 for (OutputSection *sec : outputSections) 2278 if (sec->partition == partNo && sec->flags & SHF_TLS) 2279 tlsHdr->add(sec); 2280 if (tlsHdr->firstSec) 2281 ret.push_back(tlsHdr); 2282 2283 // Add an entry for .dynamic. 2284 if (OutputSection *sec = part.dynamic->getParent()) 2285 addHdr(PT_DYNAMIC, sec->getPhdrFlags())->add(sec); 2286 2287 if (relRo->firstSec) 2288 ret.push_back(relRo); 2289 2290 // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. 2291 if (part.ehFrame->isNeeded() && part.ehFrameHdr && 2292 part.ehFrame->getParent() && part.ehFrameHdr->getParent()) 2293 addHdr(PT_GNU_EH_FRAME, part.ehFrameHdr->getParent()->getPhdrFlags()) 2294 ->add(part.ehFrameHdr->getParent()); 2295 2296 if (config->osabi == ELFOSABI_OPENBSD) { 2297 // PT_OPENBSD_MUTABLE makes the dynamic linker fill the segment with 2298 // zero data, like bss, but it can be treated differently. 2299 if (OutputSection *cmd = findSection(".openbsd.mutable", partNo)) 2300 addHdr(PT_OPENBSD_MUTABLE, cmd->getPhdrFlags())->add(cmd); 2301 2302 // PT_OPENBSD_RANDOMIZE makes the dynamic linker fill the segment 2303 // with random data. 2304 if (OutputSection *cmd = findSection(".openbsd.randomdata", partNo)) 2305 addHdr(PT_OPENBSD_RANDOMIZE, cmd->getPhdrFlags())->add(cmd); 2306 2307 // PT_OPENBSD_SYSCALLS makes the kernel and dynamic linker register 2308 // system call sites. 2309 if (OutputSection *cmd = findSection(".openbsd.syscalls", partNo)) 2310 addHdr(PT_OPENBSD_SYSCALLS, cmd->getPhdrFlags())->add(cmd); 2311 } 2312 2313 if (config->zGnustack != GnuStackKind::None) { 2314 // PT_GNU_STACK is a special section to tell the loader to make the 2315 // pages for the stack non-executable. If you really want an executable 2316 // stack, you can pass -z execstack, but that's not recommended for 2317 // security reasons. 2318 unsigned perm = PF_R | PF_W; 2319 if (config->zGnustack == GnuStackKind::Exec) 2320 perm |= PF_X; 2321 addHdr(PT_GNU_STACK, perm)->p_memsz = config->zStackSize; 2322 } 2323 2324 // PT_OPENBSD_WXNEEDED is a OpenBSD-specific header to mark the executable 2325 // is expected to perform W^X violations, such as calling mprotect(2) or 2326 // mmap(2) with PROT_WRITE | PROT_EXEC, which is prohibited by default on 2327 // OpenBSD. 2328 if (config->zWxneeded) 2329 addHdr(PT_OPENBSD_WXNEEDED, PF_X); 2330 2331 if (OutputSection *cmd = findSection(".note.gnu.property", partNo)) 2332 addHdr(PT_GNU_PROPERTY, PF_R)->add(cmd); 2333 2334 // Create one PT_NOTE per a group of contiguous SHT_NOTE sections with the 2335 // same alignment. 2336 PhdrEntry *note = nullptr; 2337 for (OutputSection *sec : outputSections) { 2338 if (sec->partition != partNo) 2339 continue; 2340 if (sec->type == SHT_NOTE && (sec->flags & SHF_ALLOC)) { 2341 if (!note || sec->lmaExpr || note->lastSec->addralign != sec->addralign) 2342 note = addHdr(PT_NOTE, PF_R); 2343 note->add(sec); 2344 } else { 2345 note = nullptr; 2346 } 2347 } 2348 return ret; 2349 } 2350 2351 template <class ELFT> 2352 void Writer<ELFT>::addPhdrForSection(Partition &part, unsigned shType, 2353 unsigned pType, unsigned pFlags) { 2354 unsigned partNo = part.getNumber(); 2355 auto i = llvm::find_if(outputSections, [=](OutputSection *cmd) { 2356 return cmd->partition == partNo && cmd->type == shType; 2357 }); 2358 if (i == outputSections.end()) 2359 return; 2360 2361 PhdrEntry *entry = make<PhdrEntry>(pType, pFlags); 2362 entry->add(*i); 2363 part.phdrs.push_back(entry); 2364 } 2365 2366 // Place the first section of each PT_LOAD to a different page (of maxPageSize). 2367 // This is achieved by assigning an alignment expression to addrExpr of each 2368 // such section. 2369 template <class ELFT> void Writer<ELFT>::fixSectionAlignments() { 2370 const PhdrEntry *prev; 2371 auto pageAlign = [&](const PhdrEntry *p) { 2372 OutputSection *cmd = p->firstSec; 2373 if (!cmd) 2374 return; 2375 cmd->alignExpr = [align = cmd->addralign]() { return align; }; 2376 if (!cmd->addrExpr) { 2377 // Prefer advancing to align(dot, maxPageSize) + dot%maxPageSize to avoid 2378 // padding in the file contents. 2379 // 2380 // When -z separate-code is used we must not have any overlap in pages 2381 // between an executable segment and a non-executable segment. We align to 2382 // the next maximum page size boundary on transitions between executable 2383 // and non-executable segments. 2384 // 2385 // SHT_LLVM_PART_EHDR marks the start of a partition. The partition 2386 // sections will be extracted to a separate file. Align to the next 2387 // maximum page size boundary so that we can find the ELF header at the 2388 // start. We cannot benefit from overlapping p_offset ranges with the 2389 // previous segment anyway. 2390 if (config->zSeparate == SeparateSegmentKind::Loadable || 2391 (config->zSeparate == SeparateSegmentKind::Code && prev && 2392 (prev->p_flags & PF_X) != (p->p_flags & PF_X)) || 2393 cmd->type == SHT_LLVM_PART_EHDR) 2394 cmd->addrExpr = [] { 2395 return alignToPowerOf2(script->getDot(), config->maxPageSize); 2396 }; 2397 // PT_TLS is at the start of the first RW PT_LOAD. If `p` includes PT_TLS, 2398 // it must be the RW. Align to p_align(PT_TLS) to make sure 2399 // p_vaddr(PT_LOAD)%p_align(PT_LOAD) = 0. Otherwise, if 2400 // sh_addralign(.tdata) < sh_addralign(.tbss), we will set p_align(PT_TLS) 2401 // to sh_addralign(.tbss), while p_vaddr(PT_TLS)=p_vaddr(PT_LOAD) may not 2402 // be congruent to 0 modulo p_align(PT_TLS). 2403 // 2404 // Technically this is not required, but as of 2019, some dynamic loaders 2405 // don't handle p_vaddr%p_align != 0 correctly, e.g. glibc (i386 and 2406 // x86-64) doesn't make runtime address congruent to p_vaddr modulo 2407 // p_align for dynamic TLS blocks (PR/24606), FreeBSD rtld has the same 2408 // bug, musl (TLS Variant 1 architectures) before 1.1.23 handled TLS 2409 // blocks correctly. We need to keep the workaround for a while. 2410 else if (Out::tlsPhdr && Out::tlsPhdr->firstSec == p->firstSec) 2411 cmd->addrExpr = [] { 2412 return alignToPowerOf2(script->getDot(), config->maxPageSize) + 2413 alignToPowerOf2(script->getDot() % config->maxPageSize, 2414 Out::tlsPhdr->p_align); 2415 }; 2416 else 2417 cmd->addrExpr = [] { 2418 return alignToPowerOf2(script->getDot(), config->maxPageSize) + 2419 script->getDot() % config->maxPageSize; 2420 }; 2421 } 2422 }; 2423 2424 for (Partition &part : partitions) { 2425 prev = nullptr; 2426 for (const PhdrEntry *p : part.phdrs) 2427 if (p->p_type == PT_LOAD && p->firstSec) { 2428 pageAlign(p); 2429 prev = p; 2430 } 2431 } 2432 } 2433 2434 // Compute an in-file position for a given section. The file offset must be the 2435 // same with its virtual address modulo the page size, so that the loader can 2436 // load executables without any address adjustment. 2437 static uint64_t computeFileOffset(OutputSection *os, uint64_t off) { 2438 // The first section in a PT_LOAD has to have congruent offset and address 2439 // modulo the maximum page size. 2440 if (os->ptLoad && os->ptLoad->firstSec == os) 2441 return alignTo(off, os->ptLoad->p_align, os->addr); 2442 2443 // File offsets are not significant for .bss sections other than the first one 2444 // in a PT_LOAD/PT_TLS. By convention, we keep section offsets monotonically 2445 // increasing rather than setting to zero. 2446 if (os->type == SHT_NOBITS && 2447 (!Out::tlsPhdr || Out::tlsPhdr->firstSec != os)) 2448 return off; 2449 2450 // If the section is not in a PT_LOAD, we just have to align it. 2451 if (!os->ptLoad) 2452 return alignToPowerOf2(off, os->addralign); 2453 2454 // If two sections share the same PT_LOAD the file offset is calculated 2455 // using this formula: Off2 = Off1 + (VA2 - VA1). 2456 OutputSection *first = os->ptLoad->firstSec; 2457 return first->offset + os->addr - first->addr; 2458 } 2459 2460 template <class ELFT> void Writer<ELFT>::assignFileOffsetsBinary() { 2461 // Compute the minimum LMA of all non-empty non-NOBITS sections as minAddr. 2462 auto needsOffset = [](OutputSection &sec) { 2463 return sec.type != SHT_NOBITS && (sec.flags & SHF_ALLOC) && sec.size > 0; 2464 }; 2465 uint64_t minAddr = UINT64_MAX; 2466 for (OutputSection *sec : outputSections) 2467 if (needsOffset(*sec)) { 2468 sec->offset = sec->getLMA(); 2469 minAddr = std::min(minAddr, sec->offset); 2470 } 2471 2472 // Sections are laid out at LMA minus minAddr. 2473 fileSize = 0; 2474 for (OutputSection *sec : outputSections) 2475 if (needsOffset(*sec)) { 2476 sec->offset -= minAddr; 2477 fileSize = std::max(fileSize, sec->offset + sec->size); 2478 } 2479 } 2480 2481 static std::string rangeToString(uint64_t addr, uint64_t len) { 2482 return "[0x" + utohexstr(addr) + ", 0x" + utohexstr(addr + len - 1) + "]"; 2483 } 2484 2485 // Assign file offsets to output sections. 2486 template <class ELFT> void Writer<ELFT>::assignFileOffsets() { 2487 Out::programHeaders->offset = Out::elfHeader->size; 2488 uint64_t off = Out::elfHeader->size + Out::programHeaders->size; 2489 2490 PhdrEntry *lastRX = nullptr; 2491 for (Partition &part : partitions) 2492 for (PhdrEntry *p : part.phdrs) 2493 if (p->p_type == PT_LOAD && (p->p_flags & PF_X)) 2494 lastRX = p; 2495 2496 // Layout SHF_ALLOC sections before non-SHF_ALLOC sections. A non-SHF_ALLOC 2497 // will not occupy file offsets contained by a PT_LOAD. 2498 for (OutputSection *sec : outputSections) { 2499 if (!(sec->flags & SHF_ALLOC)) 2500 continue; 2501 off = computeFileOffset(sec, off); 2502 sec->offset = off; 2503 if (sec->type != SHT_NOBITS) 2504 off += sec->size; 2505 2506 // If this is a last section of the last executable segment and that 2507 // segment is the last loadable segment, align the offset of the 2508 // following section to avoid loading non-segments parts of the file. 2509 if (config->zSeparate != SeparateSegmentKind::None && lastRX && 2510 lastRX->lastSec == sec) 2511 off = alignToPowerOf2(off, config->maxPageSize); 2512 } 2513 for (OutputSection *osec : outputSections) { 2514 if (osec->flags & SHF_ALLOC) 2515 continue; 2516 osec->offset = alignToPowerOf2(off, osec->addralign); 2517 off = osec->offset + osec->size; 2518 } 2519 2520 sectionHeaderOff = alignToPowerOf2(off, config->wordsize); 2521 fileSize = sectionHeaderOff + (outputSections.size() + 1) * sizeof(Elf_Shdr); 2522 2523 // Our logic assumes that sections have rising VA within the same segment. 2524 // With use of linker scripts it is possible to violate this rule and get file 2525 // offset overlaps or overflows. That should never happen with a valid script 2526 // which does not move the location counter backwards and usually scripts do 2527 // not do that. Unfortunately, there are apps in the wild, for example, Linux 2528 // kernel, which control segment distribution explicitly and move the counter 2529 // backwards, so we have to allow doing that to support linking them. We 2530 // perform non-critical checks for overlaps in checkSectionOverlap(), but here 2531 // we want to prevent file size overflows because it would crash the linker. 2532 for (OutputSection *sec : outputSections) { 2533 if (sec->type == SHT_NOBITS) 2534 continue; 2535 if ((sec->offset > fileSize) || (sec->offset + sec->size > fileSize)) 2536 error("unable to place section " + sec->name + " at file offset " + 2537 rangeToString(sec->offset, sec->size) + 2538 "; check your linker script for overflows"); 2539 } 2540 } 2541 2542 // Finalize the program headers. We call this function after we assign 2543 // file offsets and VAs to all sections. 2544 template <class ELFT> void Writer<ELFT>::setPhdrs(Partition &part) { 2545 for (PhdrEntry *p : part.phdrs) { 2546 OutputSection *first = p->firstSec; 2547 OutputSection *last = p->lastSec; 2548 2549 // .ARM.exidx sections may not be within a single .ARM.exidx 2550 // output section. We always want to describe just the 2551 // SyntheticSection. 2552 if (part.armExidx && p->p_type == PT_ARM_EXIDX) { 2553 p->p_filesz = part.armExidx->getSize(); 2554 p->p_memsz = part.armExidx->getSize(); 2555 p->p_offset = first->offset + part.armExidx->outSecOff; 2556 p->p_vaddr = first->addr + part.armExidx->outSecOff; 2557 p->p_align = part.armExidx->addralign; 2558 if (part.elfHeader) 2559 p->p_offset -= part.elfHeader->getParent()->offset; 2560 2561 if (!p->hasLMA) 2562 p->p_paddr = first->getLMA() + part.armExidx->outSecOff; 2563 return; 2564 } 2565 2566 if (first) { 2567 p->p_filesz = last->offset - first->offset; 2568 if (last->type != SHT_NOBITS) 2569 p->p_filesz += last->size; 2570 2571 p->p_memsz = last->addr + last->size - first->addr; 2572 p->p_offset = first->offset; 2573 p->p_vaddr = first->addr; 2574 2575 // File offsets in partitions other than the main partition are relative 2576 // to the offset of the ELF headers. Perform that adjustment now. 2577 if (part.elfHeader) 2578 p->p_offset -= part.elfHeader->getParent()->offset; 2579 2580 if (!p->hasLMA) 2581 p->p_paddr = first->getLMA(); 2582 } 2583 } 2584 } 2585 2586 // A helper struct for checkSectionOverlap. 2587 namespace { 2588 struct SectionOffset { 2589 OutputSection *sec; 2590 uint64_t offset; 2591 }; 2592 } // namespace 2593 2594 // Check whether sections overlap for a specific address range (file offsets, 2595 // load and virtual addresses). 2596 static void checkOverlap(StringRef name, std::vector<SectionOffset> §ions, 2597 bool isVirtualAddr) { 2598 llvm::sort(sections, [=](const SectionOffset &a, const SectionOffset &b) { 2599 return a.offset < b.offset; 2600 }); 2601 2602 // Finding overlap is easy given a vector is sorted by start position. 2603 // If an element starts before the end of the previous element, they overlap. 2604 for (size_t i = 1, end = sections.size(); i < end; ++i) { 2605 SectionOffset a = sections[i - 1]; 2606 SectionOffset b = sections[i]; 2607 if (b.offset >= a.offset + a.sec->size) 2608 continue; 2609 2610 // If both sections are in OVERLAY we allow the overlapping of virtual 2611 // addresses, because it is what OVERLAY was designed for. 2612 if (isVirtualAddr && a.sec->inOverlay && b.sec->inOverlay) 2613 continue; 2614 2615 errorOrWarn("section " + a.sec->name + " " + name + 2616 " range overlaps with " + b.sec->name + "\n>>> " + a.sec->name + 2617 " range is " + rangeToString(a.offset, a.sec->size) + "\n>>> " + 2618 b.sec->name + " range is " + 2619 rangeToString(b.offset, b.sec->size)); 2620 } 2621 } 2622 2623 // Check for overlapping sections and address overflows. 2624 // 2625 // In this function we check that none of the output sections have overlapping 2626 // file offsets. For SHF_ALLOC sections we also check that the load address 2627 // ranges and the virtual address ranges don't overlap 2628 template <class ELFT> void Writer<ELFT>::checkSections() { 2629 // First, check that section's VAs fit in available address space for target. 2630 for (OutputSection *os : outputSections) 2631 if ((os->addr + os->size < os->addr) || 2632 (!ELFT::Is64Bits && os->addr + os->size > uint64_t(UINT32_MAX) + 1)) 2633 errorOrWarn("section " + os->name + " at 0x" + utohexstr(os->addr) + 2634 " of size 0x" + utohexstr(os->size) + 2635 " exceeds available address space"); 2636 2637 // Check for overlapping file offsets. In this case we need to skip any 2638 // section marked as SHT_NOBITS. These sections don't actually occupy space in 2639 // the file so Sec->Offset + Sec->Size can overlap with others. If --oformat 2640 // binary is specified only add SHF_ALLOC sections are added to the output 2641 // file so we skip any non-allocated sections in that case. 2642 std::vector<SectionOffset> fileOffs; 2643 for (OutputSection *sec : outputSections) 2644 if (sec->size > 0 && sec->type != SHT_NOBITS && 2645 (!config->oFormatBinary || (sec->flags & SHF_ALLOC))) 2646 fileOffs.push_back({sec, sec->offset}); 2647 checkOverlap("file", fileOffs, false); 2648 2649 // When linking with -r there is no need to check for overlapping virtual/load 2650 // addresses since those addresses will only be assigned when the final 2651 // executable/shared object is created. 2652 if (config->relocatable) 2653 return; 2654 2655 // Checking for overlapping virtual and load addresses only needs to take 2656 // into account SHF_ALLOC sections since others will not be loaded. 2657 // Furthermore, we also need to skip SHF_TLS sections since these will be 2658 // mapped to other addresses at runtime and can therefore have overlapping 2659 // ranges in the file. 2660 std::vector<SectionOffset> vmas; 2661 for (OutputSection *sec : outputSections) 2662 if (sec->size > 0 && (sec->flags & SHF_ALLOC) && !(sec->flags & SHF_TLS)) 2663 vmas.push_back({sec, sec->addr}); 2664 checkOverlap("virtual address", vmas, true); 2665 2666 // Finally, check that the load addresses don't overlap. This will usually be 2667 // the same as the virtual addresses but can be different when using a linker 2668 // script with AT(). 2669 std::vector<SectionOffset> lmas; 2670 for (OutputSection *sec : outputSections) 2671 if (sec->size > 0 && (sec->flags & SHF_ALLOC) && !(sec->flags & SHF_TLS)) 2672 lmas.push_back({sec, sec->getLMA()}); 2673 checkOverlap("load address", lmas, false); 2674 } 2675 2676 // The entry point address is chosen in the following ways. 2677 // 2678 // 1. the '-e' entry command-line option; 2679 // 2. the ENTRY(symbol) command in a linker control script; 2680 // 3. the value of the symbol _start, if present; 2681 // 4. the number represented by the entry symbol, if it is a number; 2682 // 5. the address 0. 2683 static uint64_t getEntryAddr() { 2684 // Case 1, 2 or 3 2685 if (Symbol *b = symtab.find(config->entry)) 2686 return b->getVA(); 2687 2688 // Case 4 2689 uint64_t addr; 2690 if (to_integer(config->entry, addr)) 2691 return addr; 2692 2693 // Case 5 2694 if (config->warnMissingEntry) 2695 warn("cannot find entry symbol " + config->entry + 2696 "; not setting start address"); 2697 return 0; 2698 } 2699 2700 static uint16_t getELFType() { 2701 if (config->isPic) 2702 return ET_DYN; 2703 if (config->relocatable) 2704 return ET_REL; 2705 return ET_EXEC; 2706 } 2707 2708 template <class ELFT> void Writer<ELFT>::writeHeader() { 2709 writeEhdr<ELFT>(Out::bufferStart, *mainPart); 2710 writePhdrs<ELFT>(Out::bufferStart + sizeof(Elf_Ehdr), *mainPart); 2711 2712 auto *eHdr = reinterpret_cast<Elf_Ehdr *>(Out::bufferStart); 2713 eHdr->e_type = getELFType(); 2714 eHdr->e_entry = getEntryAddr(); 2715 eHdr->e_shoff = sectionHeaderOff; 2716 2717 // Write the section header table. 2718 // 2719 // The ELF header can only store numbers up to SHN_LORESERVE in the e_shnum 2720 // and e_shstrndx fields. When the value of one of these fields exceeds 2721 // SHN_LORESERVE ELF requires us to put sentinel values in the ELF header and 2722 // use fields in the section header at index 0 to store 2723 // the value. The sentinel values and fields are: 2724 // e_shnum = 0, SHdrs[0].sh_size = number of sections. 2725 // e_shstrndx = SHN_XINDEX, SHdrs[0].sh_link = .shstrtab section index. 2726 auto *sHdrs = reinterpret_cast<Elf_Shdr *>(Out::bufferStart + eHdr->e_shoff); 2727 size_t num = outputSections.size() + 1; 2728 if (num >= SHN_LORESERVE) 2729 sHdrs->sh_size = num; 2730 else 2731 eHdr->e_shnum = num; 2732 2733 uint32_t strTabIndex = in.shStrTab->getParent()->sectionIndex; 2734 if (strTabIndex >= SHN_LORESERVE) { 2735 sHdrs->sh_link = strTabIndex; 2736 eHdr->e_shstrndx = SHN_XINDEX; 2737 } else { 2738 eHdr->e_shstrndx = strTabIndex; 2739 } 2740 2741 for (OutputSection *sec : outputSections) 2742 sec->writeHeaderTo<ELFT>(++sHdrs); 2743 } 2744 2745 // Open a result file. 2746 template <class ELFT> void Writer<ELFT>::openFile() { 2747 uint64_t maxSize = config->is64 ? INT64_MAX : UINT32_MAX; 2748 if (fileSize != size_t(fileSize) || maxSize < fileSize) { 2749 std::string msg; 2750 raw_string_ostream s(msg); 2751 s << "output file too large: " << Twine(fileSize) << " bytes\n" 2752 << "section sizes:\n"; 2753 for (OutputSection *os : outputSections) 2754 s << os->name << ' ' << os->size << "\n"; 2755 error(s.str()); 2756 return; 2757 } 2758 2759 unlinkAsync(config->outputFile); 2760 unsigned flags = 0; 2761 if (!config->relocatable) 2762 flags |= FileOutputBuffer::F_executable; 2763 if (!config->mmapOutputFile) 2764 flags |= FileOutputBuffer::F_no_mmap; 2765 Expected<std::unique_ptr<FileOutputBuffer>> bufferOrErr = 2766 FileOutputBuffer::create(config->outputFile, fileSize, flags); 2767 2768 if (!bufferOrErr) { 2769 error("failed to open " + config->outputFile + ": " + 2770 llvm::toString(bufferOrErr.takeError())); 2771 return; 2772 } 2773 buffer = std::move(*bufferOrErr); 2774 Out::bufferStart = buffer->getBufferStart(); 2775 } 2776 2777 template <class ELFT> void Writer<ELFT>::writeSectionsBinary() { 2778 parallel::TaskGroup tg; 2779 for (OutputSection *sec : outputSections) 2780 if (sec->flags & SHF_ALLOC) 2781 sec->writeTo<ELFT>(Out::bufferStart + sec->offset, tg); 2782 } 2783 2784 static void fillTrap(uint8_t *i, uint8_t *end) { 2785 for (; i + 4 <= end; i += 4) 2786 memcpy(i, &target->trapInstr, 4); 2787 } 2788 2789 // Fill the last page of executable segments with trap instructions 2790 // instead of leaving them as zero. Even though it is not required by any 2791 // standard, it is in general a good thing to do for security reasons. 2792 // 2793 // We'll leave other pages in segments as-is because the rest will be 2794 // overwritten by output sections. 2795 template <class ELFT> void Writer<ELFT>::writeTrapInstr() { 2796 for (Partition &part : partitions) { 2797 // Fill the last page. 2798 for (PhdrEntry *p : part.phdrs) 2799 if (p->p_type == PT_LOAD && (p->p_flags & PF_X)) 2800 fillTrap(Out::bufferStart + 2801 alignDown(p->firstSec->offset + p->p_filesz, 4), 2802 Out::bufferStart + 2803 alignToPowerOf2(p->firstSec->offset + p->p_filesz, 2804 config->maxPageSize)); 2805 2806 // Round up the file size of the last segment to the page boundary iff it is 2807 // an executable segment to ensure that other tools don't accidentally 2808 // trim the instruction padding (e.g. when stripping the file). 2809 PhdrEntry *last = nullptr; 2810 for (PhdrEntry *p : part.phdrs) 2811 if (p->p_type == PT_LOAD) 2812 last = p; 2813 2814 if (last && (last->p_flags & PF_X)) 2815 last->p_memsz = last->p_filesz = 2816 alignToPowerOf2(last->p_filesz, config->maxPageSize); 2817 } 2818 } 2819 2820 // Write section contents to a mmap'ed file. 2821 template <class ELFT> void Writer<ELFT>::writeSections() { 2822 llvm::TimeTraceScope timeScope("Write sections"); 2823 2824 { 2825 // In -r or --emit-relocs mode, write the relocation sections first as in 2826 // ELf_Rel targets we might find out that we need to modify the relocated 2827 // section while doing it. 2828 parallel::TaskGroup tg; 2829 for (OutputSection *sec : outputSections) 2830 if (isStaticRelSecType(sec->type)) 2831 sec->writeTo<ELFT>(Out::bufferStart + sec->offset, tg); 2832 } 2833 { 2834 parallel::TaskGroup tg; 2835 for (OutputSection *sec : outputSections) 2836 if (!isStaticRelSecType(sec->type)) 2837 sec->writeTo<ELFT>(Out::bufferStart + sec->offset, tg); 2838 } 2839 2840 // Finally, check that all dynamic relocation addends were written correctly. 2841 if (config->checkDynamicRelocs && config->writeAddends) { 2842 for (OutputSection *sec : outputSections) 2843 if (isStaticRelSecType(sec->type)) 2844 sec->checkDynRelAddends(Out::bufferStart); 2845 } 2846 } 2847 2848 // Computes a hash value of Data using a given hash function. 2849 // In order to utilize multiple cores, we first split data into 1MB 2850 // chunks, compute a hash for each chunk, and then compute a hash value 2851 // of the hash values. 2852 static void 2853 computeHash(llvm::MutableArrayRef<uint8_t> hashBuf, 2854 llvm::ArrayRef<uint8_t> data, 2855 std::function<void(uint8_t *dest, ArrayRef<uint8_t> arr)> hashFn) { 2856 std::vector<ArrayRef<uint8_t>> chunks = split(data, 1024 * 1024); 2857 const size_t hashesSize = chunks.size() * hashBuf.size(); 2858 std::unique_ptr<uint8_t[]> hashes(new uint8_t[hashesSize]); 2859 2860 // Compute hash values. 2861 parallelFor(0, chunks.size(), [&](size_t i) { 2862 hashFn(hashes.get() + i * hashBuf.size(), chunks[i]); 2863 }); 2864 2865 // Write to the final output buffer. 2866 hashFn(hashBuf.data(), ArrayRef(hashes.get(), hashesSize)); 2867 } 2868 2869 template <class ELFT> void Writer<ELFT>::writeBuildId() { 2870 if (!mainPart->buildId || !mainPart->buildId->getParent()) 2871 return; 2872 2873 if (config->buildId == BuildIdKind::Hexstring) { 2874 for (Partition &part : partitions) 2875 part.buildId->writeBuildId(config->buildIdVector); 2876 return; 2877 } 2878 2879 // Compute a hash of all sections of the output file. 2880 size_t hashSize = mainPart->buildId->hashSize; 2881 std::unique_ptr<uint8_t[]> buildId(new uint8_t[hashSize]); 2882 MutableArrayRef<uint8_t> output(buildId.get(), hashSize); 2883 llvm::ArrayRef<uint8_t> input{Out::bufferStart, size_t(fileSize)}; 2884 2885 // Fedora introduced build ID as "approximation of true uniqueness across all 2886 // binaries that might be used by overlapping sets of people". It does not 2887 // need some security goals that some hash algorithms strive to provide, e.g. 2888 // (second-)preimage and collision resistance. In practice people use 'md5' 2889 // and 'sha1' just for different lengths. Implement them with the more 2890 // efficient BLAKE3. 2891 switch (config->buildId) { 2892 case BuildIdKind::Fast: 2893 computeHash(output, input, [](uint8_t *dest, ArrayRef<uint8_t> arr) { 2894 write64le(dest, xxh3_64bits(arr)); 2895 }); 2896 break; 2897 case BuildIdKind::Md5: 2898 computeHash(output, input, [&](uint8_t *dest, ArrayRef<uint8_t> arr) { 2899 memcpy(dest, BLAKE3::hash<16>(arr).data(), hashSize); 2900 }); 2901 break; 2902 case BuildIdKind::Sha1: 2903 computeHash(output, input, [&](uint8_t *dest, ArrayRef<uint8_t> arr) { 2904 memcpy(dest, BLAKE3::hash<20>(arr).data(), hashSize); 2905 }); 2906 break; 2907 case BuildIdKind::Uuid: 2908 if (auto ec = llvm::getRandomBytes(buildId.get(), hashSize)) 2909 error("entropy source failure: " + ec.message()); 2910 break; 2911 default: 2912 llvm_unreachable("unknown BuildIdKind"); 2913 } 2914 for (Partition &part : partitions) 2915 part.buildId->writeBuildId(output); 2916 } 2917 2918 template void elf::writeResult<ELF32LE>(); 2919 template void elf::writeResult<ELF32BE>(); 2920 template void elf::writeResult<ELF64LE>(); 2921 template void elf::writeResult<ELF64BE>(); 2922