1 //===- Driver.cpp ---------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // The driver drives the entire linking process. It is responsible for
10 // parsing command line options and doing whatever it is instructed to do.
12 // One notable thing in the LLD's driver when compared to other linkers is
13 // that the LLD's driver is agnostic on the host operating system.
14 // Other linkers usually have implicit default values (such as a dynamic
15 // linker path or library paths) for each host OS.
17 // I don't think implicit default values are useful because they are
18 // usually explicitly specified by the compiler ctx.driver. They can even
19 // be harmful when you are doing cross-linking. Therefore, in LLD, we
20 // simply trust the compiler driver to pass all required options and
21 // don't try to make effort on our side.
23 //===----------------------------------------------------------------------===//
28 #include "InputFiles.h"
29 #include "InputSection.h"
31 #include "LinkerScript.h"
33 #include "OutputSections.h"
34 #include "ScriptParser.h"
35 #include "SymbolTable.h"
37 #include "SyntheticSections.h"
40 #include "lld/Common/Args.h"
41 #include "lld/Common/CommonLinkerContext.h"
42 #include "lld/Common/Driver.h"
43 #include "lld/Common/ErrorHandler.h"
44 #include "lld/Common/Filesystem.h"
45 #include "lld/Common/Memory.h"
46 #include "lld/Common/Strings.h"
47 #include "lld/Common/TargetOptionsCommandFlags.h"
48 #include "lld/Common/Version.h"
49 #include "llvm/ADT/SetVector.h"
50 #include "llvm/ADT/StringExtras.h"
51 #include "llvm/ADT/StringSwitch.h"
52 #include "llvm/Config/llvm-config.h"
53 #include "llvm/LTO/LTO.h"
54 #include "llvm/Object/Archive.h"
55 #include "llvm/Object/IRObjectFile.h"
56 #include "llvm/Remarks/HotnessThresholdParser.h"
57 #include "llvm/Support/CommandLine.h"
58 #include "llvm/Support/Compression.h"
59 #include "llvm/Support/FileSystem.h"
60 #include "llvm/Support/GlobPattern.h"
61 #include "llvm/Support/LEB128.h"
62 #include "llvm/Support/Parallel.h"
63 #include "llvm/Support/Path.h"
64 #include "llvm/Support/TarWriter.h"
65 #include "llvm/Support/TargetSelect.h"
66 #include "llvm/Support/TimeProfiler.h"
67 #include "llvm/Support/raw_ostream.h"
73 using namespace llvm::ELF
;
74 using namespace llvm::object
;
75 using namespace llvm::sys
;
76 using namespace llvm::support
;
78 using namespace lld::elf
;
80 ConfigWrapper
elf::config
;
83 static void setConfigs(opt::InputArgList
&args
);
84 static void readConfigs(opt::InputArgList
&args
);
86 void elf::errorOrWarn(const Twine
&msg
) {
87 if (config
->noinhibitExec
)
94 driver
= LinkerDriver();
95 memoryBuffers
.clear();
100 lazyBitcodeFiles
.clear();
101 inputSections
.clear();
102 ehInputSections
.clear();
104 nonPrevailingSyms
.clear();
105 whyExtractRecords
.clear();
106 backwardReferences
.clear();
107 auxiliaryFiles
.clear();
108 hasSympart
.store(false, std::memory_order_relaxed
);
109 hasTlsIe
.store(false, std::memory_order_relaxed
);
110 needsTlsLd
.store(false, std::memory_order_relaxed
);
111 scriptSymOrderCounter
= 1;
112 scriptSymOrder
.clear();
113 ltoAllVtablesHaveTypeInfos
= false;
116 llvm::raw_fd_ostream
Ctx::openAuxiliaryFile(llvm::StringRef filename
,
117 std::error_code
&ec
) {
118 using namespace llvm::sys::fs
;
120 auxiliaryFiles
.insert(filename
).second
? OF_None
: OF_Append
;
121 return {filename
, ec
, flags
};
126 bool link(ArrayRef
<const char *> args
, llvm::raw_ostream
&stdoutOS
,
127 llvm::raw_ostream
&stderrOS
, bool exitEarly
, bool disableOutput
) {
128 // This driver-specific context will be freed later by unsafeLldMain().
129 auto *ctx
= new CommonLinkerContext
;
131 ctx
->e
.initialize(stdoutOS
, stderrOS
, exitEarly
, disableOutput
);
132 ctx
->e
.cleanupCallback
= []() {
134 symtab
= SymbolTable();
136 outputSections
.clear();
143 partitions
.emplace_back();
145 SharedFile::vernauxNum
= 0;
147 ctx
->e
.logName
= args::getFilenameWithoutExe(args
[0]);
148 ctx
->e
.errorLimitExceededMsg
= "too many errors emitted, stopping now (use "
149 "--error-limit=0 to see all errors)";
151 config
= ConfigWrapper();
152 script
= std::make_unique
<LinkerScript
>();
154 symAux
.emplace_back();
157 partitions
.emplace_back();
159 config
->progName
= args
[0];
161 elf::ctx
.driver
.linkerMain(args
);
163 return errorCount() == 0;
168 // Parses a linker -m option.
169 static std::tuple
<ELFKind
, uint16_t, uint8_t> parseEmulation(StringRef emul
) {
172 if (s
.ends_with("_fbsd")) {
174 osabi
= ELFOSABI_FREEBSD
;
177 std::pair
<ELFKind
, uint16_t> ret
=
178 StringSwitch
<std::pair
<ELFKind
, uint16_t>>(s
)
179 .Cases("aarch64elf", "aarch64linux", {ELF64LEKind
, EM_AARCH64
})
180 .Cases("aarch64elfb", "aarch64linuxb", {ELF64BEKind
, EM_AARCH64
})
181 .Cases("armelf", "armelf_linux_eabi", {ELF32LEKind
, EM_ARM
})
182 .Cases("armelfb", "armelfb_linux_eabi", {ELF32BEKind
, EM_ARM
})
183 .Case("elf32_x86_64", {ELF32LEKind
, EM_X86_64
})
184 .Cases("elf32btsmip", "elf32btsmipn32", {ELF32BEKind
, EM_MIPS
})
185 .Cases("elf32ltsmip", "elf32ltsmipn32", {ELF32LEKind
, EM_MIPS
})
186 .Case("elf32lriscv", {ELF32LEKind
, EM_RISCV
})
187 .Cases("elf32ppc", "elf32ppclinux", {ELF32BEKind
, EM_PPC
})
188 .Cases("elf32lppc", "elf32lppclinux", {ELF32LEKind
, EM_PPC
})
189 .Case("elf32loongarch", {ELF32LEKind
, EM_LOONGARCH
})
190 .Case("elf64btsmip", {ELF64BEKind
, EM_MIPS
})
191 .Case("elf64ltsmip", {ELF64LEKind
, EM_MIPS
})
192 .Case("elf64lriscv", {ELF64LEKind
, EM_RISCV
})
193 .Case("elf64ppc", {ELF64BEKind
, EM_PPC64
})
194 .Case("elf64lppc", {ELF64LEKind
, EM_PPC64
})
195 .Cases("elf_amd64", "elf_x86_64", {ELF64LEKind
, EM_X86_64
})
196 .Case("elf_i386", {ELF32LEKind
, EM_386
})
197 .Case("elf_iamcu", {ELF32LEKind
, EM_IAMCU
})
198 .Case("elf64_sparc", {ELF64BEKind
, EM_SPARCV9
})
199 .Case("msp430elf", {ELF32LEKind
, EM_MSP430
})
200 .Case("elf64_amdgpu", {ELF64LEKind
, EM_AMDGPU
})
201 .Case("elf64loongarch", {ELF64LEKind
, EM_LOONGARCH
})
202 .Default({ELFNoneKind
, EM_NONE
});
204 if (ret
.first
== ELFNoneKind
)
205 error("unknown emulation: " + emul
);
206 if (ret
.second
== EM_MSP430
)
207 osabi
= ELFOSABI_STANDALONE
;
208 else if (ret
.second
== EM_AMDGPU
)
209 osabi
= ELFOSABI_AMDGPU_HSA
;
210 return std::make_tuple(ret
.first
, ret
.second
, osabi
);
213 // Returns slices of MB by parsing MB as an archive file.
214 // Each slice consists of a member file in the archive.
215 std::vector
<std::pair
<MemoryBufferRef
, uint64_t>> static getArchiveMembers(
216 MemoryBufferRef mb
) {
217 std::unique_ptr
<Archive
> file
=
218 CHECK(Archive::create(mb
),
219 mb
.getBufferIdentifier() + ": failed to parse archive");
221 std::vector
<std::pair
<MemoryBufferRef
, uint64_t>> v
;
222 Error err
= Error::success();
223 bool addToTar
= file
->isThin() && tar
;
224 for (const Archive::Child
&c
: file
->children(err
)) {
225 MemoryBufferRef mbref
=
226 CHECK(c
.getMemoryBufferRef(),
227 mb
.getBufferIdentifier() +
228 ": could not get the buffer for a child of the archive");
230 tar
->append(relativeToRoot(check(c
.getFullName())), mbref
.getBuffer());
231 v
.push_back(std::make_pair(mbref
, c
.getChildOffset()));
234 fatal(mb
.getBufferIdentifier() + ": Archive::children failed: " +
235 toString(std::move(err
)));
237 // Take ownership of memory buffers created for members of thin archives.
238 std::vector
<std::unique_ptr
<MemoryBuffer
>> mbs
= file
->takeThinBuffers();
239 std::move(mbs
.begin(), mbs
.end(), std::back_inserter(ctx
.memoryBuffers
));
244 static bool isBitcode(MemoryBufferRef mb
) {
245 return identify_magic(mb
.getBuffer()) == llvm::file_magic::bitcode
;
248 bool LinkerDriver::tryAddFatLTOFile(MemoryBufferRef mb
, StringRef archiveName
,
249 uint64_t offsetInArchive
, bool lazy
) {
250 if (!config
->fatLTOObjects
)
252 Expected
<MemoryBufferRef
> fatLTOData
=
253 IRObjectFile::findBitcodeInMemBuffer(mb
);
254 if (errorToBool(fatLTOData
.takeError()))
257 make
<BitcodeFile
>(*fatLTOData
, archiveName
, offsetInArchive
, lazy
));
261 // Opens a file and create a file object. Path has to be resolved already.
262 void LinkerDriver::addFile(StringRef path
, bool withLOption
) {
263 using namespace sys::fs
;
265 std::optional
<MemoryBufferRef
> buffer
= readFile(path
);
268 MemoryBufferRef mbref
= *buffer
;
270 if (config
->formatBinary
) {
271 files
.push_back(make
<BinaryFile
>(mbref
));
275 switch (identify_magic(mbref
.getBuffer())) {
276 case file_magic::unknown
:
277 readLinkerScript(mbref
);
279 case file_magic::archive
: {
280 auto members
= getArchiveMembers(mbref
);
281 if (inWholeArchive
) {
282 for (const std::pair
<MemoryBufferRef
, uint64_t> &p
: members
) {
283 if (isBitcode(p
.first
))
284 files
.push_back(make
<BitcodeFile
>(p
.first
, path
, p
.second
, false));
285 else if (!tryAddFatLTOFile(p
.first
, path
, p
.second
, false))
286 files
.push_back(createObjFile(p
.first
, path
));
291 archiveFiles
.emplace_back(path
, members
.size());
293 // Handle archives and --start-lib/--end-lib using the same code path. This
294 // scans all the ELF relocatable object files and bitcode files in the
295 // archive rather than just the index file, with the benefit that the
296 // symbols are only loaded once. For many projects archives see high
297 // utilization rates and it is a net performance win. --start-lib scans
298 // symbols in the same order that llvm-ar adds them to the index, so in the
299 // common case the semantics are identical. If the archive symbol table was
300 // created in a different order, or is incomplete, this strategy has
301 // different semantics. Such output differences are considered user error.
303 // All files within the archive get the same group ID to allow mutual
304 // references for --warn-backrefs.
305 bool saved
= InputFile::isInGroup
;
306 InputFile::isInGroup
= true;
307 for (const std::pair
<MemoryBufferRef
, uint64_t> &p
: members
) {
308 auto magic
= identify_magic(p
.first
.getBuffer());
309 if (magic
== file_magic::elf_relocatable
) {
310 if (!tryAddFatLTOFile(p
.first
, path
, p
.second
, true))
311 files
.push_back(createObjFile(p
.first
, path
, true));
312 } else if (magic
== file_magic::bitcode
)
313 files
.push_back(make
<BitcodeFile
>(p
.first
, path
, p
.second
, true));
315 warn(path
+ ": archive member '" + p
.first
.getBufferIdentifier() +
316 "' is neither ET_REL nor LLVM bitcode");
318 InputFile::isInGroup
= saved
;
320 ++InputFile::nextGroupId
;
323 case file_magic::elf_shared_object
: {
324 if (config
->isStatic
|| config
->relocatable
) {
325 error("attempted static link of dynamic object " + path
);
329 // Shared objects are identified by soname. soname is (if specified)
330 // DT_SONAME and falls back to filename. If a file was specified by -lfoo,
331 // the directory part is ignored. Note that path may be a temporary and
332 // cannot be stored into SharedFile::soName.
333 path
= mbref
.getBufferIdentifier();
335 make
<SharedFile
>(mbref
, withLOption
? path::filename(path
) : path
);
340 case file_magic::bitcode
:
341 files
.push_back(make
<BitcodeFile
>(mbref
, "", 0, inLib
));
343 case file_magic::elf_relocatable
:
344 if (!tryAddFatLTOFile(mbref
, "", 0, inLib
))
345 files
.push_back(createObjFile(mbref
, "", inLib
));
348 error(path
+ ": unknown file type");
352 // Add a given library by searching it from input search paths.
353 void LinkerDriver::addLibrary(StringRef name
) {
354 if (std::optional
<std::string
> path
= searchLibrary(name
))
355 addFile(saver().save(*path
), /*withLOption=*/true);
357 error("unable to find library -l" + name
, ErrorTag::LibNotFound
, {name
});
360 // This function is called on startup. We need this for LTO since
361 // LTO calls LLVM functions to compile bitcode files to native code.
362 // Technically this can be delayed until we read bitcode files, but
363 // we don't bother to do lazily because the initialization is fast.
364 static void initLLVM() {
365 InitializeAllTargets();
366 InitializeAllTargetMCs();
367 InitializeAllAsmPrinters();
368 InitializeAllAsmParsers();
371 // Some command line options or some combinations of them are not allowed.
372 // This function checks for such errors.
373 static void checkOptions() {
374 // The MIPS ABI as of 2016 does not support the GNU-style symbol lookup
375 // table which is a relatively new feature.
376 if (config
->emachine
== EM_MIPS
&& config
->gnuHash
)
377 error("the .gnu.hash section is not compatible with the MIPS target");
379 if (config
->emachine
== EM_ARM
) {
380 if (!config
->cmseImplib
) {
381 if (!config
->cmseInputLib
.empty())
382 error("--in-implib may not be used without --cmse-implib");
383 if (!config
->cmseOutputLib
.empty())
384 error("--out-implib may not be used without --cmse-implib");
387 if (config
->cmseImplib
)
388 error("--cmse-implib is only supported on ARM targets");
389 if (!config
->cmseInputLib
.empty())
390 error("--in-implib is only supported on ARM targets");
391 if (!config
->cmseOutputLib
.empty())
392 error("--out-implib is only supported on ARM targets");
395 if (config
->fixCortexA53Errata843419
&& config
->emachine
!= EM_AARCH64
)
396 error("--fix-cortex-a53-843419 is only supported on AArch64 targets");
398 if (config
->fixCortexA8
&& config
->emachine
!= EM_ARM
)
399 error("--fix-cortex-a8 is only supported on ARM targets");
401 if (config
->armBe8
&& config
->emachine
!= EM_ARM
)
402 error("--be8 is only supported on ARM targets");
404 if (config
->fixCortexA8
&& !config
->isLE
)
405 error("--fix-cortex-a8 is not supported on big endian targets");
407 if (config
->tocOptimize
&& config
->emachine
!= EM_PPC64
)
408 error("--toc-optimize is only supported on PowerPC64 targets");
410 if (config
->pcRelOptimize
&& config
->emachine
!= EM_PPC64
)
411 error("--pcrel-optimize is only supported on PowerPC64 targets");
413 if (config
->relaxGP
&& config
->emachine
!= EM_RISCV
)
414 error("--relax-gp is only supported on RISC-V targets");
416 if (config
->pie
&& config
->shared
)
417 error("-shared and -pie may not be used together");
419 if (!config
->shared
&& !config
->filterList
.empty())
420 error("-F may not be used without -shared");
422 if (!config
->shared
&& !config
->auxiliaryList
.empty())
423 error("-f may not be used without -shared");
425 if (config
->strip
== StripPolicy::All
&& config
->emitRelocs
)
426 error("--strip-all and --emit-relocs may not be used together");
428 if (config
->zText
&& config
->zIfuncNoplt
)
429 error("-z text and -z ifunc-noplt may not be used together");
431 if (config
->relocatable
) {
433 error("-r and -shared may not be used together");
434 if (config
->gdbIndex
)
435 error("-r and --gdb-index may not be used together");
436 if (config
->icf
!= ICFLevel::None
)
437 error("-r and --icf may not be used together");
439 error("-r and -pie may not be used together");
440 if (config
->exportDynamic
)
441 error("-r and --export-dynamic may not be used together");
444 if (config
->executeOnly
) {
445 if (config
->emachine
!= EM_AARCH64
)
446 error("--execute-only is only supported on AArch64 targets");
448 if (config
->singleRoRx
&& !script
->hasSectionsCommand
)
449 error("--execute-only and --no-rosegment cannot be used together");
452 if (config
->zRetpolineplt
&& config
->zForceIbt
)
453 error("-z force-ibt may not be used with -z retpolineplt");
455 if (config
->emachine
!= EM_AARCH64
) {
457 error("-z pac-plt only supported on AArch64");
458 if (config
->zForceBti
)
459 error("-z force-bti only supported on AArch64");
460 if (config
->zBtiReport
!= "none")
461 error("-z bti-report only supported on AArch64");
464 if (config
->emachine
!= EM_386
&& config
->emachine
!= EM_X86_64
&&
465 config
->zCetReport
!= "none")
466 error("-z cet-report only supported on X86 and X86_64");
469 static const char *getReproduceOption(opt::InputArgList
&args
) {
470 if (auto *arg
= args
.getLastArg(OPT_reproduce
))
471 return arg
->getValue();
472 return getenv("LLD_REPRODUCE");
475 static bool hasZOption(opt::InputArgList
&args
, StringRef key
) {
476 for (auto *arg
: args
.filtered(OPT_z
))
477 if (key
== arg
->getValue())
482 static bool getZFlag(opt::InputArgList
&args
, StringRef k1
, StringRef k2
,
484 for (auto *arg
: args
.filtered_reverse(OPT_z
)) {
485 if (k1
== arg
->getValue())
487 if (k2
== arg
->getValue())
493 static SeparateSegmentKind
getZSeparate(opt::InputArgList
&args
) {
494 for (auto *arg
: args
.filtered_reverse(OPT_z
)) {
495 StringRef v
= arg
->getValue();
496 if (v
== "noseparate-code")
497 return SeparateSegmentKind::None
;
498 if (v
== "separate-code")
499 return SeparateSegmentKind::Code
;
500 if (v
== "separate-loadable-segments")
501 return SeparateSegmentKind::Loadable
;
503 return SeparateSegmentKind::None
;
506 static GnuStackKind
getZGnuStack(opt::InputArgList
&args
) {
507 for (auto *arg
: args
.filtered_reverse(OPT_z
)) {
508 if (StringRef("execstack") == arg
->getValue())
509 return GnuStackKind::Exec
;
510 if (StringRef("noexecstack") == arg
->getValue())
511 return GnuStackKind::NoExec
;
512 if (StringRef("nognustack") == arg
->getValue())
513 return GnuStackKind::None
;
516 return GnuStackKind::NoExec
;
519 static uint8_t getZStartStopVisibility(opt::InputArgList
&args
) {
520 for (auto *arg
: args
.filtered_reverse(OPT_z
)) {
521 std::pair
<StringRef
, StringRef
> kv
= StringRef(arg
->getValue()).split('=');
522 if (kv
.first
== "start-stop-visibility") {
523 if (kv
.second
== "default")
525 else if (kv
.second
== "internal")
527 else if (kv
.second
== "hidden")
529 else if (kv
.second
== "protected")
530 return STV_PROTECTED
;
531 error("unknown -z start-stop-visibility= value: " + StringRef(kv
.second
));
534 return STV_PROTECTED
;
537 constexpr const char *knownZFlags
[] = {
549 "keep-text-section-prefix",
559 "nokeep-text-section-prefix",
560 "nopack-relative-relocs",
568 "pack-relative-relocs",
575 "separate-loadable-segments",
583 static bool isKnownZFlag(StringRef s
) {
584 return llvm::is_contained(knownZFlags
, s
) ||
585 s
.starts_with("common-page-size=") || s
.starts_with("bti-report=") ||
586 s
.starts_with("cet-report=") ||
587 s
.starts_with("dead-reloc-in-nonalloc=") ||
588 s
.starts_with("max-page-size=") || s
.starts_with("stack-size=") ||
589 s
.starts_with("start-stop-visibility=");
592 // Report a warning for an unknown -z option.
593 static void checkZOptions(opt::InputArgList
&args
) {
594 for (auto *arg
: args
.filtered(OPT_z
))
595 if (!isKnownZFlag(arg
->getValue()))
596 warn("unknown -z value: " + StringRef(arg
->getValue()));
599 constexpr const char *saveTempsValues
[] = {
600 "resolution", "preopt", "promote", "internalize", "import",
601 "opt", "precodegen", "prelink", "combinedindex"};
603 void LinkerDriver::linkerMain(ArrayRef
<const char *> argsArr
) {
605 opt::InputArgList args
= parser
.parse(argsArr
.slice(1));
607 // Interpret these flags early because error()/warn() depend on them.
608 errorHandler().errorLimit
= args::getInteger(args
, OPT_error_limit
, 20);
609 errorHandler().fatalWarnings
=
610 args
.hasFlag(OPT_fatal_warnings
, OPT_no_fatal_warnings
, false) &&
611 !args
.hasArg(OPT_no_warnings
);
612 errorHandler().suppressWarnings
= args
.hasArg(OPT_no_warnings
);
616 if (args
.hasArg(OPT_help
)) {
621 // Handle -v or -version.
623 // A note about "compatible with GNU linkers" message: this is a hack for
624 // scripts generated by GNU Libtool up to 2021-10 to recognize LLD as
625 // a GNU compatible linker. See
626 // <https://lists.gnu.org/archive/html/libtool/2017-01/msg00007.html>.
628 // This is somewhat ugly hack, but in reality, we had no choice other
629 // than doing this. Considering the very long release cycle of Libtool,
630 // it is not easy to improve it to recognize LLD as a GNU compatible
631 // linker in a timely manner. Even if we can make it, there are still a
632 // lot of "configure" scripts out there that are generated by old version
633 // of Libtool. We cannot convince every software developer to migrate to
634 // the latest version and re-generate scripts. So we have this hack.
635 if (args
.hasArg(OPT_v
) || args
.hasArg(OPT_version
))
636 message(getLLDVersion() + " (compatible with GNU linkers)");
638 if (const char *path
= getReproduceOption(args
)) {
639 // Note that --reproduce is a debug option so you can ignore it
640 // if you are trying to understand the whole picture of the code.
641 Expected
<std::unique_ptr
<TarWriter
>> errOrWriter
=
642 TarWriter::create(path
, path::stem(path
));
644 tar
= std::move(*errOrWriter
);
645 tar
->append("response.txt", createResponseFile(args
));
646 tar
->append("version.txt", getLLDVersion() + "\n");
647 StringRef ltoSampleProfile
= args
.getLastArgValue(OPT_lto_sample_profile
);
648 if (!ltoSampleProfile
.empty())
649 readFile(ltoSampleProfile
);
651 error("--reproduce: " + toString(errOrWriter
.takeError()));
657 // The behavior of -v or --version is a bit strange, but this is
658 // needed for compatibility with GNU linkers.
659 if (args
.hasArg(OPT_v
) && !args
.hasArg(OPT_INPUT
))
661 if (args
.hasArg(OPT_version
))
664 // Initialize time trace profiler.
665 if (config
->timeTraceEnabled
)
666 timeTraceProfilerInitialize(config
->timeTraceGranularity
, config
->progName
);
669 llvm::TimeTraceScope
timeScope("ExecuteLinker");
685 if (config
->timeTraceEnabled
) {
686 checkError(timeTraceProfilerWrite(
687 args
.getLastArgValue(OPT_time_trace_eq
).str(), config
->outputFile
));
688 timeTraceProfilerCleanup();
692 static std::string
getRpath(opt::InputArgList
&args
) {
693 SmallVector
<StringRef
, 0> v
= args::getStrings(args
, OPT_rpath
);
694 return llvm::join(v
.begin(), v
.end(), ":");
697 // Determines what we should do if there are remaining unresolved
698 // symbols after the name resolution.
699 static void setUnresolvedSymbolPolicy(opt::InputArgList
&args
) {
700 UnresolvedPolicy errorOrWarn
= args
.hasFlag(OPT_error_unresolved_symbols
,
701 OPT_warn_unresolved_symbols
, true)
702 ? UnresolvedPolicy::ReportError
703 : UnresolvedPolicy::Warn
;
704 // -shared implies --unresolved-symbols=ignore-all because missing
705 // symbols are likely to be resolved at runtime.
706 bool diagRegular
= !config
->shared
, diagShlib
= !config
->shared
;
708 for (const opt::Arg
*arg
: args
) {
709 switch (arg
->getOption().getID()) {
710 case OPT_unresolved_symbols
: {
711 StringRef s
= arg
->getValue();
712 if (s
== "ignore-all") {
715 } else if (s
== "ignore-in-object-files") {
718 } else if (s
== "ignore-in-shared-libs") {
721 } else if (s
== "report-all") {
725 error("unknown --unresolved-symbols value: " + s
);
729 case OPT_no_undefined
:
733 if (StringRef(arg
->getValue()) == "defs")
735 else if (StringRef(arg
->getValue()) == "undefs")
738 case OPT_allow_shlib_undefined
:
741 case OPT_no_allow_shlib_undefined
:
747 config
->unresolvedSymbols
=
748 diagRegular
? errorOrWarn
: UnresolvedPolicy::Ignore
;
749 config
->unresolvedSymbolsInShlib
=
750 diagShlib
? errorOrWarn
: UnresolvedPolicy::Ignore
;
753 static Target2Policy
getTarget2(opt::InputArgList
&args
) {
754 StringRef s
= args
.getLastArgValue(OPT_target2
, "got-rel");
756 return Target2Policy::Rel
;
758 return Target2Policy::Abs
;
760 return Target2Policy::GotRel
;
761 error("unknown --target2 option: " + s
);
762 return Target2Policy::GotRel
;
765 static bool isOutputFormatBinary(opt::InputArgList
&args
) {
766 StringRef s
= args
.getLastArgValue(OPT_oformat
, "elf");
769 if (!s
.starts_with("elf"))
770 error("unknown --oformat value: " + s
);
774 static DiscardPolicy
getDiscard(opt::InputArgList
&args
) {
776 args
.getLastArg(OPT_discard_all
, OPT_discard_locals
, OPT_discard_none
);
778 return DiscardPolicy::Default
;
779 if (arg
->getOption().getID() == OPT_discard_all
)
780 return DiscardPolicy::All
;
781 if (arg
->getOption().getID() == OPT_discard_locals
)
782 return DiscardPolicy::Locals
;
783 return DiscardPolicy::None
;
786 static StringRef
getDynamicLinker(opt::InputArgList
&args
) {
787 auto *arg
= args
.getLastArg(OPT_dynamic_linker
, OPT_no_dynamic_linker
);
790 if (arg
->getOption().getID() == OPT_no_dynamic_linker
) {
791 // --no-dynamic-linker suppresses undefined weak symbols in .dynsym
792 config
->noDynamicLinker
= true;
795 return arg
->getValue();
798 static int getMemtagMode(opt::InputArgList
&args
) {
799 StringRef memtagModeArg
= args
.getLastArgValue(OPT_android_memtag_mode
);
800 if (memtagModeArg
.empty()) {
801 if (config
->androidMemtagStack
)
802 warn("--android-memtag-mode is unspecified, leaving "
803 "--android-memtag-stack a no-op");
804 else if (config
->androidMemtagHeap
)
805 warn("--android-memtag-mode is unspecified, leaving "
806 "--android-memtag-heap a no-op");
807 return ELF::NT_MEMTAG_LEVEL_NONE
;
810 if (memtagModeArg
== "sync")
811 return ELF::NT_MEMTAG_LEVEL_SYNC
;
812 if (memtagModeArg
== "async")
813 return ELF::NT_MEMTAG_LEVEL_ASYNC
;
814 if (memtagModeArg
== "none")
815 return ELF::NT_MEMTAG_LEVEL_NONE
;
817 error("unknown --android-memtag-mode value: \"" + memtagModeArg
+
818 "\", should be one of {async, sync, none}");
819 return ELF::NT_MEMTAG_LEVEL_NONE
;
822 static ICFLevel
getICF(opt::InputArgList
&args
) {
823 auto *arg
= args
.getLastArg(OPT_icf_none
, OPT_icf_safe
, OPT_icf_all
);
824 if (!arg
|| arg
->getOption().getID() == OPT_icf_none
)
825 return ICFLevel::None
;
826 if (arg
->getOption().getID() == OPT_icf_safe
)
827 return ICFLevel::Safe
;
828 return ICFLevel::All
;
831 static StripPolicy
getStrip(opt::InputArgList
&args
) {
832 if (args
.hasArg(OPT_relocatable
))
833 return StripPolicy::None
;
835 auto *arg
= args
.getLastArg(OPT_strip_all
, OPT_strip_debug
);
837 return StripPolicy::None
;
838 if (arg
->getOption().getID() == OPT_strip_all
)
839 return StripPolicy::All
;
840 return StripPolicy::Debug
;
843 static uint64_t parseSectionAddress(StringRef s
, opt::InputArgList
&args
,
844 const opt::Arg
&arg
) {
846 if (s
.starts_with("0x"))
848 if (!to_integer(s
, va
, 16))
849 error("invalid argument: " + arg
.getAsString(args
));
853 static StringMap
<uint64_t> getSectionStartMap(opt::InputArgList
&args
) {
854 StringMap
<uint64_t> ret
;
855 for (auto *arg
: args
.filtered(OPT_section_start
)) {
858 std::tie(name
, addr
) = StringRef(arg
->getValue()).split('=');
859 ret
[name
] = parseSectionAddress(addr
, args
, *arg
);
862 if (auto *arg
= args
.getLastArg(OPT_Ttext
))
863 ret
[".text"] = parseSectionAddress(arg
->getValue(), args
, *arg
);
864 if (auto *arg
= args
.getLastArg(OPT_Tdata
))
865 ret
[".data"] = parseSectionAddress(arg
->getValue(), args
, *arg
);
866 if (auto *arg
= args
.getLastArg(OPT_Tbss
))
867 ret
[".bss"] = parseSectionAddress(arg
->getValue(), args
, *arg
);
871 static SortSectionPolicy
getSortSection(opt::InputArgList
&args
) {
872 StringRef s
= args
.getLastArgValue(OPT_sort_section
);
873 if (s
== "alignment")
874 return SortSectionPolicy::Alignment
;
876 return SortSectionPolicy::Name
;
878 error("unknown --sort-section rule: " + s
);
879 return SortSectionPolicy::Default
;
882 static OrphanHandlingPolicy
getOrphanHandling(opt::InputArgList
&args
) {
883 StringRef s
= args
.getLastArgValue(OPT_orphan_handling
, "place");
885 return OrphanHandlingPolicy::Warn
;
887 return OrphanHandlingPolicy::Error
;
889 error("unknown --orphan-handling mode: " + s
);
890 return OrphanHandlingPolicy::Place
;
893 // Parse --build-id or --build-id=<style>. We handle "tree" as a
894 // synonym for "sha1" because all our hash functions including
895 // --build-id=sha1 are actually tree hashes for performance reasons.
896 static std::pair
<BuildIdKind
, SmallVector
<uint8_t, 0>>
897 getBuildId(opt::InputArgList
&args
) {
898 auto *arg
= args
.getLastArg(OPT_build_id
);
900 return {BuildIdKind::None
, {}};
902 StringRef s
= arg
->getValue();
904 return {BuildIdKind::Fast
, {}};
906 return {BuildIdKind::Md5
, {}};
907 if (s
== "sha1" || s
== "tree")
908 return {BuildIdKind::Sha1
, {}};
910 return {BuildIdKind::Uuid
, {}};
911 if (s
.starts_with("0x"))
912 return {BuildIdKind::Hexstring
, parseHex(s
.substr(2))};
915 error("unknown --build-id style: " + s
);
916 return {BuildIdKind::None
, {}};
919 static std::pair
<bool, bool> getPackDynRelocs(opt::InputArgList
&args
) {
920 StringRef s
= args
.getLastArgValue(OPT_pack_dyn_relocs
, "none");
922 return {true, false};
924 return {false, true};
925 if (s
== "android+relr")
929 error("unknown --pack-dyn-relocs format: " + s
);
930 return {false, false};
933 static void readCallGraph(MemoryBufferRef mb
) {
934 // Build a map from symbol name to section
935 DenseMap
<StringRef
, Symbol
*> map
;
936 for (ELFFileBase
*file
: ctx
.objectFiles
)
937 for (Symbol
*sym
: file
->getSymbols())
938 map
[sym
->getName()] = sym
;
940 auto findSection
= [&](StringRef name
) -> InputSectionBase
* {
941 Symbol
*sym
= map
.lookup(name
);
943 if (config
->warnSymbolOrdering
)
944 warn(mb
.getBufferIdentifier() + ": no such symbol: " + name
);
947 maybeWarnUnorderableSymbol(sym
);
949 if (Defined
*dr
= dyn_cast_or_null
<Defined
>(sym
))
950 return dyn_cast_or_null
<InputSectionBase
>(dr
->section
);
954 for (StringRef line
: args::getLines(mb
)) {
955 SmallVector
<StringRef
, 3> fields
;
956 line
.split(fields
, ' ');
959 if (fields
.size() != 3 || !to_integer(fields
[2], count
)) {
960 error(mb
.getBufferIdentifier() + ": parse error");
964 if (InputSectionBase
*from
= findSection(fields
[0]))
965 if (InputSectionBase
*to
= findSection(fields
[1]))
966 config
->callGraphProfile
[std::make_pair(from
, to
)] += count
;
970 // If SHT_LLVM_CALL_GRAPH_PROFILE and its relocation section exist, returns
971 // true and populates cgProfile and symbolIndices.
972 template <class ELFT
>
974 processCallGraphRelocations(SmallVector
<uint32_t, 32> &symbolIndices
,
975 ArrayRef
<typename
ELFT::CGProfile
> &cgProfile
,
976 ObjFile
<ELFT
> *inputObj
) {
977 if (inputObj
->cgProfileSectionIndex
== SHN_UNDEF
)
980 ArrayRef
<Elf_Shdr_Impl
<ELFT
>> objSections
=
981 inputObj
->template getELFShdrs
<ELFT
>();
982 symbolIndices
.clear();
983 const ELFFile
<ELFT
> &obj
= inputObj
->getObj();
985 check(obj
.template getSectionContentsAsArray
<typename
ELFT::CGProfile
>(
986 objSections
[inputObj
->cgProfileSectionIndex
]));
988 for (size_t i
= 0, e
= objSections
.size(); i
< e
; ++i
) {
989 const Elf_Shdr_Impl
<ELFT
> &sec
= objSections
[i
];
990 if (sec
.sh_info
== inputObj
->cgProfileSectionIndex
) {
991 if (sec
.sh_type
== SHT_RELA
) {
992 ArrayRef
<typename
ELFT::Rela
> relas
=
993 CHECK(obj
.relas(sec
), "could not retrieve cg profile rela section");
994 for (const typename
ELFT::Rela
&rel
: relas
)
995 symbolIndices
.push_back(rel
.getSymbol(config
->isMips64EL
));
998 if (sec
.sh_type
== SHT_REL
) {
999 ArrayRef
<typename
ELFT::Rel
> rels
=
1000 CHECK(obj
.rels(sec
), "could not retrieve cg profile rel section");
1001 for (const typename
ELFT::Rel
&rel
: rels
)
1002 symbolIndices
.push_back(rel
.getSymbol(config
->isMips64EL
));
1007 if (symbolIndices
.empty())
1008 warn("SHT_LLVM_CALL_GRAPH_PROFILE exists, but relocation section doesn't");
1009 return !symbolIndices
.empty();
1012 template <class ELFT
> static void readCallGraphsFromObjectFiles() {
1013 SmallVector
<uint32_t, 32> symbolIndices
;
1014 ArrayRef
<typename
ELFT::CGProfile
> cgProfile
;
1015 for (auto file
: ctx
.objectFiles
) {
1016 auto *obj
= cast
<ObjFile
<ELFT
>>(file
);
1017 if (!processCallGraphRelocations(symbolIndices
, cgProfile
, obj
))
1020 if (symbolIndices
.size() != cgProfile
.size() * 2)
1021 fatal("number of relocations doesn't match Weights");
1023 for (uint32_t i
= 0, size
= cgProfile
.size(); i
< size
; ++i
) {
1024 const Elf_CGProfile_Impl
<ELFT
> &cgpe
= cgProfile
[i
];
1025 uint32_t fromIndex
= symbolIndices
[i
* 2];
1026 uint32_t toIndex
= symbolIndices
[i
* 2 + 1];
1027 auto *fromSym
= dyn_cast
<Defined
>(&obj
->getSymbol(fromIndex
));
1028 auto *toSym
= dyn_cast
<Defined
>(&obj
->getSymbol(toIndex
));
1029 if (!fromSym
|| !toSym
)
1032 auto *from
= dyn_cast_or_null
<InputSectionBase
>(fromSym
->section
);
1033 auto *to
= dyn_cast_or_null
<InputSectionBase
>(toSym
->section
);
1035 config
->callGraphProfile
[{from
, to
}] += cgpe
.cgp_weight
;
1040 template <class ELFT
>
1041 static void ltoValidateAllVtablesHaveTypeInfos(opt::InputArgList
&args
) {
1042 DenseSet
<StringRef
> typeInfoSymbols
;
1043 SmallSetVector
<StringRef
, 0> vtableSymbols
;
1044 auto processVtableAndTypeInfoSymbols
= [&](StringRef name
) {
1045 if (name
.consume_front("_ZTI"))
1046 typeInfoSymbols
.insert(name
);
1047 else if (name
.consume_front("_ZTV"))
1048 vtableSymbols
.insert(name
);
1051 // Examine all native symbol tables.
1052 for (ELFFileBase
*f
: ctx
.objectFiles
) {
1053 using Elf_Sym
= typename
ELFT::Sym
;
1054 for (const Elf_Sym
&s
: f
->template getGlobalELFSyms
<ELFT
>()) {
1055 if (s
.st_shndx
!= SHN_UNDEF
) {
1056 StringRef name
= check(s
.getName(f
->getStringTable()));
1057 processVtableAndTypeInfoSymbols(name
);
1062 for (SharedFile
*f
: ctx
.sharedFiles
) {
1063 using Elf_Sym
= typename
ELFT::Sym
;
1064 for (const Elf_Sym
&s
: f
->template getELFSyms
<ELFT
>()) {
1065 if (s
.st_shndx
!= SHN_UNDEF
) {
1066 StringRef name
= check(s
.getName(f
->getStringTable()));
1067 processVtableAndTypeInfoSymbols(name
);
1072 SmallSetVector
<StringRef
, 0> vtableSymbolsWithNoRTTI
;
1073 for (StringRef s
: vtableSymbols
)
1074 if (!typeInfoSymbols
.count(s
))
1075 vtableSymbolsWithNoRTTI
.insert(s
);
1077 // Remove known safe symbols.
1078 for (auto *arg
: args
.filtered(OPT_lto_known_safe_vtables
)) {
1079 StringRef knownSafeName
= arg
->getValue();
1080 if (!knownSafeName
.consume_front("_ZTV"))
1081 error("--lto-known-safe-vtables=: expected symbol to start with _ZTV, "
1084 vtableSymbolsWithNoRTTI
.remove(knownSafeName
);
1087 ctx
.ltoAllVtablesHaveTypeInfos
= vtableSymbolsWithNoRTTI
.empty();
1088 // Check for unmatched RTTI symbols
1089 for (StringRef s
: vtableSymbolsWithNoRTTI
) {
1091 "--lto-validate-all-vtables-have-type-infos: RTTI missing for vtable "
1093 s
+ ", --lto-whole-program-visibility disabled");
1097 static CGProfileSortKind
getCGProfileSortKind(opt::InputArgList
&args
) {
1098 StringRef s
= args
.getLastArgValue(OPT_call_graph_profile_sort
, "hfsort");
1100 return CGProfileSortKind::Hfsort
;
1102 return CGProfileSortKind::Cdsort
;
1104 error("unknown --call-graph-profile-sort= value: " + s
);
1105 return CGProfileSortKind::None
;
1108 static DebugCompressionType
getCompressionType(StringRef s
, StringRef option
) {
1109 DebugCompressionType type
= StringSwitch
<DebugCompressionType
>(s
)
1110 .Case("zlib", DebugCompressionType::Zlib
)
1111 .Case("zstd", DebugCompressionType::Zstd
)
1112 .Default(DebugCompressionType::None
);
1113 if (type
== DebugCompressionType::None
) {
1115 error("unknown " + option
+ " value: " + s
);
1116 } else if (const char *reason
= compression::getReasonIfUnsupported(
1117 compression::formatFor(type
))) {
1118 error(option
+ ": " + reason
);
1123 static StringRef
getAliasSpelling(opt::Arg
*arg
) {
1124 if (const opt::Arg
*alias
= arg
->getAlias())
1125 return alias
->getSpelling();
1126 return arg
->getSpelling();
1129 static std::pair
<StringRef
, StringRef
> getOldNewOptions(opt::InputArgList
&args
,
1131 auto *arg
= args
.getLastArg(id
);
1135 StringRef s
= arg
->getValue();
1136 std::pair
<StringRef
, StringRef
> ret
= s
.split(';');
1137 if (ret
.second
.empty())
1138 error(getAliasSpelling(arg
) + " expects 'old;new' format, but got " + s
);
1142 // Parse options of the form "old;new[;extra]".
1143 static std::tuple
<StringRef
, StringRef
, StringRef
>
1144 getOldNewOptionsExtra(opt::InputArgList
&args
, unsigned id
) {
1145 auto [oldDir
, second
] = getOldNewOptions(args
, id
);
1146 auto [newDir
, extraDir
] = second
.split(';');
1147 return {oldDir
, newDir
, extraDir
};
1150 // Parse the symbol ordering file and warn for any duplicate entries.
1151 static SmallVector
<StringRef
, 0> getSymbolOrderingFile(MemoryBufferRef mb
) {
1152 SetVector
<StringRef
, SmallVector
<StringRef
, 0>> names
;
1153 for (StringRef s
: args::getLines(mb
))
1154 if (!names
.insert(s
) && config
->warnSymbolOrdering
)
1155 warn(mb
.getBufferIdentifier() + ": duplicate ordered symbol: " + s
);
1157 return names
.takeVector();
1160 static bool getIsRela(opt::InputArgList
&args
) {
1161 // If -z rel or -z rela is specified, use the last option.
1162 for (auto *arg
: args
.filtered_reverse(OPT_z
)) {
1163 StringRef
s(arg
->getValue());
1170 // Otherwise use the psABI defined relocation entry format.
1171 uint16_t m
= config
->emachine
;
1172 return m
== EM_AARCH64
|| m
== EM_AMDGPU
|| m
== EM_HEXAGON
||
1173 m
== EM_LOONGARCH
|| m
== EM_PPC
|| m
== EM_PPC64
|| m
== EM_RISCV
||
1177 static void parseClangOption(StringRef opt
, const Twine
&msg
) {
1179 raw_string_ostream
os(err
);
1181 const char *argv
[] = {config
->progName
.data(), opt
.data()};
1182 if (cl::ParseCommandLineOptions(2, argv
, "", &os
))
1185 error(msg
+ ": " + StringRef(err
).trim());
1188 // Checks the parameter of the bti-report and cet-report options.
1189 static bool isValidReportString(StringRef arg
) {
1190 return arg
== "none" || arg
== "warning" || arg
== "error";
1193 // Process a remap pattern 'from-glob=to-file'.
1194 static bool remapInputs(StringRef line
, const Twine
&location
) {
1195 SmallVector
<StringRef
, 0> fields
;
1196 line
.split(fields
, '=');
1197 if (fields
.size() != 2 || fields
[1].empty()) {
1198 error(location
+ ": parse error, not 'from-glob=to-file'");
1201 if (!hasWildcard(fields
[0]))
1202 config
->remapInputs
[fields
[0]] = fields
[1];
1203 else if (Expected
<GlobPattern
> pat
= GlobPattern::create(fields
[0]))
1204 config
->remapInputsWildcards
.emplace_back(std::move(*pat
), fields
[1]);
1206 error(location
+ ": " + toString(pat
.takeError()) + ": " + fields
[0]);
1212 // Initializes Config members by the command line options.
1213 static void readConfigs(opt::InputArgList
&args
) {
1214 errorHandler().verbose
= args
.hasArg(OPT_verbose
);
1215 errorHandler().vsDiagnostics
=
1216 args
.hasArg(OPT_visual_studio_diagnostics_format
, false);
1218 config
->allowMultipleDefinition
=
1219 args
.hasFlag(OPT_allow_multiple_definition
,
1220 OPT_no_allow_multiple_definition
, false) ||
1221 hasZOption(args
, "muldefs");
1222 config
->androidMemtagHeap
=
1223 args
.hasFlag(OPT_android_memtag_heap
, OPT_no_android_memtag_heap
, false);
1224 config
->androidMemtagStack
= args
.hasFlag(OPT_android_memtag_stack
,
1225 OPT_no_android_memtag_stack
, false);
1226 config
->fatLTOObjects
=
1227 args
.hasFlag(OPT_fat_lto_objects
, OPT_no_fat_lto_objects
, false);
1228 config
->androidMemtagMode
= getMemtagMode(args
);
1229 config
->auxiliaryList
= args::getStrings(args
, OPT_auxiliary
);
1230 config
->armBe8
= args
.hasArg(OPT_be8
);
1231 if (opt::Arg
*arg
= args
.getLastArg(
1232 OPT_Bno_symbolic
, OPT_Bsymbolic_non_weak_functions
,
1233 OPT_Bsymbolic_functions
, OPT_Bsymbolic_non_weak
, OPT_Bsymbolic
)) {
1234 if (arg
->getOption().matches(OPT_Bsymbolic_non_weak_functions
))
1235 config
->bsymbolic
= BsymbolicKind::NonWeakFunctions
;
1236 else if (arg
->getOption().matches(OPT_Bsymbolic_functions
))
1237 config
->bsymbolic
= BsymbolicKind::Functions
;
1238 else if (arg
->getOption().matches(OPT_Bsymbolic_non_weak
))
1239 config
->bsymbolic
= BsymbolicKind::NonWeak
;
1240 else if (arg
->getOption().matches(OPT_Bsymbolic
))
1241 config
->bsymbolic
= BsymbolicKind::All
;
1243 config
->callGraphProfileSort
= getCGProfileSortKind(args
);
1244 config
->checkSections
=
1245 args
.hasFlag(OPT_check_sections
, OPT_no_check_sections
, true);
1246 config
->chroot
= args
.getLastArgValue(OPT_chroot
);
1247 config
->compressDebugSections
= getCompressionType(
1248 args
.getLastArgValue(OPT_compress_debug_sections
, "none"),
1249 "--compress-debug-sections");
1250 config
->cref
= args
.hasArg(OPT_cref
);
1251 config
->optimizeBBJumps
=
1252 args
.hasFlag(OPT_optimize_bb_jumps
, OPT_no_optimize_bb_jumps
, false);
1253 config
->demangle
= args
.hasFlag(OPT_demangle
, OPT_no_demangle
, true);
1254 config
->dependencyFile
= args
.getLastArgValue(OPT_dependency_file
);
1255 config
->dependentLibraries
= args
.hasFlag(OPT_dependent_libraries
, OPT_no_dependent_libraries
, true);
1256 config
->disableVerify
= args
.hasArg(OPT_disable_verify
);
1257 config
->discard
= getDiscard(args
);
1258 config
->dwoDir
= args
.getLastArgValue(OPT_plugin_opt_dwo_dir_eq
);
1259 config
->dynamicLinker
= getDynamicLinker(args
);
1260 config
->ehFrameHdr
=
1261 args
.hasFlag(OPT_eh_frame_hdr
, OPT_no_eh_frame_hdr
, false);
1262 config
->emitLLVM
= args
.hasArg(OPT_plugin_opt_emit_llvm
, false);
1263 config
->emitRelocs
= args
.hasArg(OPT_emit_relocs
);
1264 config
->enableNewDtags
=
1265 args
.hasFlag(OPT_enable_new_dtags
, OPT_disable_new_dtags
, true);
1266 config
->entry
= args
.getLastArgValue(OPT_entry
);
1268 errorHandler().errorHandlingScript
=
1269 args
.getLastArgValue(OPT_error_handling_script
);
1271 config
->executeOnly
=
1272 args
.hasFlag(OPT_execute_only
, OPT_no_execute_only
, false);
1273 config
->exportDynamic
=
1274 args
.hasFlag(OPT_export_dynamic
, OPT_no_export_dynamic
, false) ||
1275 args
.hasArg(OPT_shared
);
1276 config
->filterList
= args::getStrings(args
, OPT_filter
);
1277 config
->fini
= args
.getLastArgValue(OPT_fini
, "_fini");
1278 config
->fixCortexA53Errata843419
= args
.hasArg(OPT_fix_cortex_a53_843419
) &&
1279 !args
.hasArg(OPT_relocatable
);
1280 config
->cmseImplib
= args
.hasArg(OPT_cmse_implib
);
1281 config
->cmseInputLib
= args
.getLastArgValue(OPT_in_implib
);
1282 config
->cmseOutputLib
= args
.getLastArgValue(OPT_out_implib
);
1283 config
->fixCortexA8
=
1284 args
.hasArg(OPT_fix_cortex_a8
) && !args
.hasArg(OPT_relocatable
);
1285 config
->fortranCommon
=
1286 args
.hasFlag(OPT_fortran_common
, OPT_no_fortran_common
, false);
1287 config
->gcSections
= args
.hasFlag(OPT_gc_sections
, OPT_no_gc_sections
, false);
1288 config
->gnuUnique
= args
.hasFlag(OPT_gnu_unique
, OPT_no_gnu_unique
, true);
1289 config
->gdbIndex
= args
.hasFlag(OPT_gdb_index
, OPT_no_gdb_index
, false);
1290 config
->icf
= getICF(args
);
1291 config
->ignoreDataAddressEquality
=
1292 args
.hasArg(OPT_ignore_data_address_equality
);
1293 config
->ignoreFunctionAddressEquality
=
1294 args
.hasArg(OPT_ignore_function_address_equality
);
1295 config
->init
= args
.getLastArgValue(OPT_init
, "_init");
1296 config
->ltoAAPipeline
= args
.getLastArgValue(OPT_lto_aa_pipeline
);
1297 config
->ltoCSProfileGenerate
= args
.hasArg(OPT_lto_cs_profile_generate
);
1298 config
->ltoCSProfileFile
= args
.getLastArgValue(OPT_lto_cs_profile_file
);
1299 config
->ltoPGOWarnMismatch
= args
.hasFlag(OPT_lto_pgo_warn_mismatch
,
1300 OPT_no_lto_pgo_warn_mismatch
, true);
1301 config
->ltoDebugPassManager
= args
.hasArg(OPT_lto_debug_pass_manager
);
1302 config
->ltoEmitAsm
= args
.hasArg(OPT_lto_emit_asm
);
1303 config
->ltoNewPmPasses
= args
.getLastArgValue(OPT_lto_newpm_passes
);
1304 config
->ltoWholeProgramVisibility
=
1305 args
.hasFlag(OPT_lto_whole_program_visibility
,
1306 OPT_no_lto_whole_program_visibility
, false);
1307 config
->ltoValidateAllVtablesHaveTypeInfos
=
1308 args
.hasFlag(OPT_lto_validate_all_vtables_have_type_infos
,
1309 OPT_no_lto_validate_all_vtables_have_type_infos
, false);
1310 config
->ltoo
= args::getInteger(args
, OPT_lto_O
, 2);
1311 if (config
->ltoo
> 3)
1312 error("invalid optimization level for LTO: " + Twine(config
->ltoo
));
1314 args::getInteger(args
, OPT_lto_CGO
, args::getCGOptLevel(config
->ltoo
));
1315 if (auto level
= CodeGenOpt::getLevel(ltoCgo
))
1316 config
->ltoCgo
= *level
;
1318 error("invalid codegen optimization level for LTO: " + Twine(ltoCgo
));
1319 config
->ltoObjPath
= args
.getLastArgValue(OPT_lto_obj_path_eq
);
1320 config
->ltoPartitions
= args::getInteger(args
, OPT_lto_partitions
, 1);
1321 config
->ltoSampleProfile
= args
.getLastArgValue(OPT_lto_sample_profile
);
1322 config
->ltoBasicBlockSections
=
1323 args
.getLastArgValue(OPT_lto_basic_block_sections
);
1324 config
->ltoUniqueBasicBlockSectionNames
=
1325 args
.hasFlag(OPT_lto_unique_basic_block_section_names
,
1326 OPT_no_lto_unique_basic_block_section_names
, false);
1327 config
->mapFile
= args
.getLastArgValue(OPT_Map
);
1328 config
->mipsGotSize
= args::getInteger(args
, OPT_mips_got_size
, 0xfff0);
1329 config
->mergeArmExidx
=
1330 args
.hasFlag(OPT_merge_exidx_entries
, OPT_no_merge_exidx_entries
, true);
1331 config
->mmapOutputFile
=
1332 args
.hasFlag(OPT_mmap_output_file
, OPT_no_mmap_output_file
, true);
1333 config
->nmagic
= args
.hasFlag(OPT_nmagic
, OPT_no_nmagic
, false);
1334 config
->noinhibitExec
= args
.hasArg(OPT_noinhibit_exec
);
1335 config
->nostdlib
= args
.hasArg(OPT_nostdlib
);
1336 config
->oFormatBinary
= isOutputFormatBinary(args
);
1337 config
->omagic
= args
.hasFlag(OPT_omagic
, OPT_no_omagic
, false);
1338 config
->optRemarksFilename
= args
.getLastArgValue(OPT_opt_remarks_filename
);
1339 config
->optStatsFilename
= args
.getLastArgValue(OPT_plugin_opt_stats_file
);
1341 // Parse remarks hotness threshold. Valid value is either integer or 'auto'.
1342 if (auto *arg
= args
.getLastArg(OPT_opt_remarks_hotness_threshold
)) {
1343 auto resultOrErr
= remarks::parseHotnessThresholdOption(arg
->getValue());
1345 error(arg
->getSpelling() + ": invalid argument '" + arg
->getValue() +
1346 "', only integer or 'auto' is supported");
1348 config
->optRemarksHotnessThreshold
= *resultOrErr
;
1351 config
->optRemarksPasses
= args
.getLastArgValue(OPT_opt_remarks_passes
);
1352 config
->optRemarksWithHotness
= args
.hasArg(OPT_opt_remarks_with_hotness
);
1353 config
->optRemarksFormat
= args
.getLastArgValue(OPT_opt_remarks_format
);
1354 config
->optimize
= args::getInteger(args
, OPT_O
, 1);
1355 config
->orphanHandling
= getOrphanHandling(args
);
1356 config
->outputFile
= args
.getLastArgValue(OPT_o
);
1357 config
->packageMetadata
= args
.getLastArgValue(OPT_package_metadata
);
1358 config
->pie
= args
.hasFlag(OPT_pie
, OPT_no_pie
, false);
1359 config
->printIcfSections
=
1360 args
.hasFlag(OPT_print_icf_sections
, OPT_no_print_icf_sections
, false);
1361 config
->printGcSections
=
1362 args
.hasFlag(OPT_print_gc_sections
, OPT_no_print_gc_sections
, false);
1363 config
->printMemoryUsage
= args
.hasArg(OPT_print_memory_usage
);
1364 config
->printArchiveStats
= args
.getLastArgValue(OPT_print_archive_stats
);
1365 config
->printSymbolOrder
=
1366 args
.getLastArgValue(OPT_print_symbol_order
);
1367 config
->relax
= args
.hasFlag(OPT_relax
, OPT_no_relax
, true);
1368 config
->relaxGP
= args
.hasFlag(OPT_relax_gp
, OPT_no_relax_gp
, false);
1369 config
->rpath
= getRpath(args
);
1370 config
->relocatable
= args
.hasArg(OPT_relocatable
);
1372 if (args
.hasArg(OPT_save_temps
)) {
1373 // --save-temps implies saving all temps.
1374 for (const char *s
: saveTempsValues
)
1375 config
->saveTempsArgs
.insert(s
);
1377 for (auto *arg
: args
.filtered(OPT_save_temps_eq
)) {
1378 StringRef s
= arg
->getValue();
1379 if (llvm::is_contained(saveTempsValues
, s
))
1380 config
->saveTempsArgs
.insert(s
);
1382 error("unknown --save-temps value: " + s
);
1386 config
->searchPaths
= args::getStrings(args
, OPT_library_path
);
1387 config
->sectionStartMap
= getSectionStartMap(args
);
1388 config
->shared
= args
.hasArg(OPT_shared
);
1389 config
->singleRoRx
= !args
.hasFlag(OPT_rosegment
, OPT_no_rosegment
, true);
1390 config
->soName
= args
.getLastArgValue(OPT_soname
);
1391 config
->sortSection
= getSortSection(args
);
1392 config
->splitStackAdjustSize
= args::getInteger(args
, OPT_split_stack_adjust_size
, 16384);
1393 config
->strip
= getStrip(args
);
1394 config
->sysroot
= args
.getLastArgValue(OPT_sysroot
);
1395 config
->target1Rel
= args
.hasFlag(OPT_target1_rel
, OPT_target1_abs
, false);
1396 config
->target2
= getTarget2(args
);
1397 config
->thinLTOCacheDir
= args
.getLastArgValue(OPT_thinlto_cache_dir
);
1398 config
->thinLTOCachePolicy
= CHECK(
1399 parseCachePruningPolicy(args
.getLastArgValue(OPT_thinlto_cache_policy
)),
1400 "--thinlto-cache-policy: invalid cache policy");
1401 config
->thinLTOEmitImportsFiles
= args
.hasArg(OPT_thinlto_emit_imports_files
);
1402 config
->thinLTOEmitIndexFiles
= args
.hasArg(OPT_thinlto_emit_index_files
) ||
1403 args
.hasArg(OPT_thinlto_index_only
) ||
1404 args
.hasArg(OPT_thinlto_index_only_eq
);
1405 config
->thinLTOIndexOnly
= args
.hasArg(OPT_thinlto_index_only
) ||
1406 args
.hasArg(OPT_thinlto_index_only_eq
);
1407 config
->thinLTOIndexOnlyArg
= args
.getLastArgValue(OPT_thinlto_index_only_eq
);
1408 config
->thinLTOObjectSuffixReplace
=
1409 getOldNewOptions(args
, OPT_thinlto_object_suffix_replace_eq
);
1410 std::tie(config
->thinLTOPrefixReplaceOld
, config
->thinLTOPrefixReplaceNew
,
1411 config
->thinLTOPrefixReplaceNativeObject
) =
1412 getOldNewOptionsExtra(args
, OPT_thinlto_prefix_replace_eq
);
1413 if (config
->thinLTOEmitIndexFiles
&& !config
->thinLTOIndexOnly
) {
1414 if (args
.hasArg(OPT_thinlto_object_suffix_replace_eq
))
1415 error("--thinlto-object-suffix-replace is not supported with "
1416 "--thinlto-emit-index-files");
1417 else if (args
.hasArg(OPT_thinlto_prefix_replace_eq
))
1418 error("--thinlto-prefix-replace is not supported with "
1419 "--thinlto-emit-index-files");
1421 if (!config
->thinLTOPrefixReplaceNativeObject
.empty() &&
1422 config
->thinLTOIndexOnlyArg
.empty()) {
1423 error("--thinlto-prefix-replace=old_dir;new_dir;obj_dir must be used with "
1424 "--thinlto-index-only=");
1426 config
->thinLTOModulesToCompile
=
1427 args::getStrings(args
, OPT_thinlto_single_module_eq
);
1428 config
->timeTraceEnabled
= args
.hasArg(OPT_time_trace_eq
);
1429 config
->timeTraceGranularity
=
1430 args::getInteger(args
, OPT_time_trace_granularity
, 500);
1431 config
->trace
= args
.hasArg(OPT_trace
);
1432 config
->undefined
= args::getStrings(args
, OPT_undefined
);
1433 config
->undefinedVersion
=
1434 args
.hasFlag(OPT_undefined_version
, OPT_no_undefined_version
, false);
1435 config
->unique
= args
.hasArg(OPT_unique
);
1436 config
->useAndroidRelrTags
= args
.hasFlag(
1437 OPT_use_android_relr_tags
, OPT_no_use_android_relr_tags
, false);
1438 config
->warnBackrefs
=
1439 args
.hasFlag(OPT_warn_backrefs
, OPT_no_warn_backrefs
, false);
1440 config
->warnCommon
= args
.hasFlag(OPT_warn_common
, OPT_no_warn_common
, false);
1441 config
->warnSymbolOrdering
=
1442 args
.hasFlag(OPT_warn_symbol_ordering
, OPT_no_warn_symbol_ordering
, true);
1443 config
->whyExtract
= args
.getLastArgValue(OPT_why_extract
);
1444 config
->zCombreloc
= getZFlag(args
, "combreloc", "nocombreloc", true);
1445 config
->zCopyreloc
= getZFlag(args
, "copyreloc", "nocopyreloc", true);
1446 config
->zForceBti
= hasZOption(args
, "force-bti");
1447 config
->zForceIbt
= hasZOption(args
, "force-ibt");
1448 config
->zGlobal
= hasZOption(args
, "global");
1449 config
->zGnustack
= getZGnuStack(args
);
1450 config
->zHazardplt
= hasZOption(args
, "hazardplt");
1451 config
->zIfuncNoplt
= hasZOption(args
, "ifunc-noplt");
1452 config
->zInitfirst
= hasZOption(args
, "initfirst");
1453 config
->zInterpose
= hasZOption(args
, "interpose");
1454 config
->zKeepTextSectionPrefix
= getZFlag(
1455 args
, "keep-text-section-prefix", "nokeep-text-section-prefix", false);
1456 config
->zNodefaultlib
= hasZOption(args
, "nodefaultlib");
1457 config
->zNodelete
= hasZOption(args
, "nodelete");
1458 config
->zNodlopen
= hasZOption(args
, "nodlopen");
1459 config
->zNow
= getZFlag(args
, "now", "lazy", false);
1460 config
->zOrigin
= hasZOption(args
, "origin");
1461 config
->zPacPlt
= hasZOption(args
, "pac-plt");
1462 config
->zRelro
= getZFlag(args
, "relro", "norelro", true);
1463 config
->zRetpolineplt
= hasZOption(args
, "retpolineplt");
1464 config
->zRodynamic
= hasZOption(args
, "rodynamic");
1465 config
->zSeparate
= getZSeparate(args
);
1466 config
->zShstk
= hasZOption(args
, "shstk");
1467 config
->zStackSize
= args::getZOptionValue(args
, OPT_z
, "stack-size", 0);
1468 config
->zStartStopGC
=
1469 getZFlag(args
, "start-stop-gc", "nostart-stop-gc", true);
1470 config
->zStartStopVisibility
= getZStartStopVisibility(args
);
1471 config
->zText
= getZFlag(args
, "text", "notext", true);
1472 config
->zWxneeded
= hasZOption(args
, "wxneeded");
1473 setUnresolvedSymbolPolicy(args
);
1474 config
->power10Stubs
= args
.getLastArgValue(OPT_power10_stubs_eq
) != "no";
1476 if (opt::Arg
*arg
= args
.getLastArg(OPT_eb
, OPT_el
)) {
1477 if (arg
->getOption().matches(OPT_eb
))
1478 config
->optEB
= true;
1480 config
->optEL
= true;
1483 for (opt::Arg
*arg
: args
.filtered(OPT_remap_inputs
)) {
1484 StringRef
value(arg
->getValue());
1485 remapInputs(value
, arg
->getSpelling());
1487 for (opt::Arg
*arg
: args
.filtered(OPT_remap_inputs_file
)) {
1488 StringRef
filename(arg
->getValue());
1489 std::optional
<MemoryBufferRef
> buffer
= readFile(filename
);
1492 // Parse 'from-glob=to-file' lines, ignoring #-led comments.
1493 for (auto [lineno
, line
] : llvm::enumerate(args::getLines(*buffer
)))
1494 if (remapInputs(line
, filename
+ ":" + Twine(lineno
+ 1)))
1498 for (opt::Arg
*arg
: args
.filtered(OPT_shuffle_sections
)) {
1499 constexpr StringRef errPrefix
= "--shuffle-sections=: ";
1500 std::pair
<StringRef
, StringRef
> kv
= StringRef(arg
->getValue()).split('=');
1501 if (kv
.first
.empty() || kv
.second
.empty()) {
1502 error(errPrefix
+ "expected <section_glob>=<seed>, but got '" +
1503 arg
->getValue() + "'");
1506 // Signed so that <section_glob>=-1 is allowed.
1508 if (!to_integer(kv
.second
, v
))
1509 error(errPrefix
+ "expected an integer, but got '" + kv
.second
+ "'");
1510 else if (Expected
<GlobPattern
> pat
= GlobPattern::create(kv
.first
))
1511 config
->shuffleSections
.emplace_back(std::move(*pat
), uint32_t(v
));
1513 error(errPrefix
+ toString(pat
.takeError()) + ": " + kv
.first
);
1516 auto reports
= {std::make_pair("bti-report", &config
->zBtiReport
),
1517 std::make_pair("cet-report", &config
->zCetReport
)};
1518 for (opt::Arg
*arg
: args
.filtered(OPT_z
)) {
1519 std::pair
<StringRef
, StringRef
> option
=
1520 StringRef(arg
->getValue()).split('=');
1521 for (auto reportArg
: reports
) {
1522 if (option
.first
!= reportArg
.first
)
1524 if (!isValidReportString(option
.second
)) {
1525 error(Twine("-z ") + reportArg
.first
+ "= parameter " + option
.second
+
1526 " is not recognized");
1529 *reportArg
.second
= option
.second
;
1533 for (opt::Arg
*arg
: args
.filtered(OPT_z
)) {
1534 std::pair
<StringRef
, StringRef
> option
=
1535 StringRef(arg
->getValue()).split('=');
1536 if (option
.first
!= "dead-reloc-in-nonalloc")
1538 constexpr StringRef errPrefix
= "-z dead-reloc-in-nonalloc=: ";
1539 std::pair
<StringRef
, StringRef
> kv
= option
.second
.split('=');
1540 if (kv
.first
.empty() || kv
.second
.empty()) {
1541 error(errPrefix
+ "expected <section_glob>=<value>");
1545 if (!to_integer(kv
.second
, v
))
1546 error(errPrefix
+ "expected a non-negative integer, but got '" +
1548 else if (Expected
<GlobPattern
> pat
= GlobPattern::create(kv
.first
))
1549 config
->deadRelocInNonAlloc
.emplace_back(std::move(*pat
), v
);
1551 error(errPrefix
+ toString(pat
.takeError()) + ": " + kv
.first
);
1554 cl::ResetAllOptionOccurrences();
1556 // Parse LTO options.
1557 if (auto *arg
= args
.getLastArg(OPT_plugin_opt_mcpu_eq
))
1558 parseClangOption(saver().save("-mcpu=" + StringRef(arg
->getValue())),
1559 arg
->getSpelling());
1561 for (opt::Arg
*arg
: args
.filtered(OPT_plugin_opt_eq_minus
))
1562 parseClangOption(std::string("-") + arg
->getValue(), arg
->getSpelling());
1564 // GCC collect2 passes -plugin-opt=path/to/lto-wrapper with an absolute or
1565 // relative path. Just ignore. If not ended with "lto-wrapper" (or
1566 // "lto-wrapper.exe" for GCC cross-compiled for Windows), consider it an
1567 // unsupported LLVMgold.so option and error.
1568 for (opt::Arg
*arg
: args
.filtered(OPT_plugin_opt_eq
)) {
1569 StringRef
v(arg
->getValue());
1570 if (!v
.ends_with("lto-wrapper") && !v
.ends_with("lto-wrapper.exe"))
1571 error(arg
->getSpelling() + ": unknown plugin option '" + arg
->getValue() +
1575 config
->passPlugins
= args::getStrings(args
, OPT_load_pass_plugins
);
1577 // Parse -mllvm options.
1578 for (const auto *arg
: args
.filtered(OPT_mllvm
)) {
1579 parseClangOption(arg
->getValue(), arg
->getSpelling());
1580 config
->mllvmOpts
.emplace_back(arg
->getValue());
1583 config
->ltoKind
= LtoKind::Default
;
1584 if (auto *arg
= args
.getLastArg(OPT_lto
)) {
1585 StringRef s
= arg
->getValue();
1587 config
->ltoKind
= LtoKind::UnifiedThin
;
1588 else if (s
== "full")
1589 config
->ltoKind
= LtoKind::UnifiedRegular
;
1590 else if (s
== "default")
1591 config
->ltoKind
= LtoKind::Default
;
1593 error("unknown LTO mode: " + s
);
1596 // --threads= takes a positive integer and provides the default value for
1597 // --thinlto-jobs=. If unspecified, cap the number of threads since
1598 // overhead outweighs optimization for used parallel algorithms for the
1600 if (auto *arg
= args
.getLastArg(OPT_threads
)) {
1601 StringRef
v(arg
->getValue());
1602 unsigned threads
= 0;
1603 if (!llvm::to_integer(v
, threads
, 0) || threads
== 0)
1604 error(arg
->getSpelling() + ": expected a positive integer, but got '" +
1605 arg
->getValue() + "'");
1606 parallel::strategy
= hardware_concurrency(threads
);
1607 config
->thinLTOJobs
= v
;
1608 } else if (parallel::strategy
.compute_thread_count() > 16) {
1609 log("set maximum concurrency to 16, specify --threads= to change");
1610 parallel::strategy
= hardware_concurrency(16);
1612 if (auto *arg
= args
.getLastArg(OPT_thinlto_jobs_eq
))
1613 config
->thinLTOJobs
= arg
->getValue();
1614 config
->threadCount
= parallel::strategy
.compute_thread_count();
1616 if (config
->ltoPartitions
== 0)
1617 error("--lto-partitions: number of threads must be > 0");
1618 if (!get_threadpool_strategy(config
->thinLTOJobs
))
1619 error("--thinlto-jobs: invalid job count: " + config
->thinLTOJobs
);
1621 if (config
->splitStackAdjustSize
< 0)
1622 error("--split-stack-adjust-size: size must be >= 0");
1624 // The text segment is traditionally the first segment, whose address equals
1625 // the base address. However, lld places the R PT_LOAD first. -Ttext-segment
1626 // is an old-fashioned option that does not play well with lld's layout.
1627 // Suggest --image-base as a likely alternative.
1628 if (args
.hasArg(OPT_Ttext_segment
))
1629 error("-Ttext-segment is not supported. Use --image-base if you "
1630 "intend to set the base address");
1632 // Parse ELF{32,64}{LE,BE} and CPU type.
1633 if (auto *arg
= args
.getLastArg(OPT_m
)) {
1634 StringRef s
= arg
->getValue();
1635 std::tie(config
->ekind
, config
->emachine
, config
->osabi
) =
1637 config
->mipsN32Abi
=
1638 (s
.starts_with("elf32btsmipn32") || s
.starts_with("elf32ltsmipn32"));
1639 config
->emulation
= s
;
1642 // Parse --hash-style={sysv,gnu,both}.
1643 if (auto *arg
= args
.getLastArg(OPT_hash_style
)) {
1644 StringRef s
= arg
->getValue();
1646 config
->sysvHash
= true;
1647 else if (s
== "gnu")
1648 config
->gnuHash
= true;
1649 else if (s
== "both")
1650 config
->sysvHash
= config
->gnuHash
= true;
1652 error("unknown --hash-style: " + s
);
1655 if (args
.hasArg(OPT_print_map
))
1656 config
->mapFile
= "-";
1658 // Page alignment can be disabled by the -n (--nmagic) and -N (--omagic).
1659 // As PT_GNU_RELRO relies on Paging, do not create it when we have disabled
1660 // it. Also disable RELRO for -r.
1661 if (config
->nmagic
|| config
->omagic
|| config
->relocatable
)
1662 config
->zRelro
= false;
1664 std::tie(config
->buildId
, config
->buildIdVector
) = getBuildId(args
);
1666 if (getZFlag(args
, "pack-relative-relocs", "nopack-relative-relocs", false)) {
1667 config
->relrGlibc
= true;
1668 config
->relrPackDynRelocs
= true;
1670 std::tie(config
->androidPackDynRelocs
, config
->relrPackDynRelocs
) =
1671 getPackDynRelocs(args
);
1674 if (auto *arg
= args
.getLastArg(OPT_symbol_ordering_file
)){
1675 if (args
.hasArg(OPT_call_graph_ordering_file
))
1676 error("--symbol-ordering-file and --call-graph-order-file "
1677 "may not be used together");
1678 if (std::optional
<MemoryBufferRef
> buffer
= readFile(arg
->getValue())) {
1679 config
->symbolOrderingFile
= getSymbolOrderingFile(*buffer
);
1680 // Also need to disable CallGraphProfileSort to prevent
1681 // LLD order symbols with CGProfile
1682 config
->callGraphProfileSort
= CGProfileSortKind::None
;
1686 assert(config
->versionDefinitions
.empty());
1687 config
->versionDefinitions
.push_back(
1688 {"local", (uint16_t)VER_NDX_LOCAL
, {}, {}});
1689 config
->versionDefinitions
.push_back(
1690 {"global", (uint16_t)VER_NDX_GLOBAL
, {}, {}});
1692 // If --retain-symbol-file is used, we'll keep only the symbols listed in
1693 // the file and discard all others.
1694 if (auto *arg
= args
.getLastArg(OPT_retain_symbols_file
)) {
1695 config
->versionDefinitions
[VER_NDX_LOCAL
].nonLocalPatterns
.push_back(
1696 {"*", /*isExternCpp=*/false, /*hasWildcard=*/true});
1697 if (std::optional
<MemoryBufferRef
> buffer
= readFile(arg
->getValue()))
1698 for (StringRef s
: args::getLines(*buffer
))
1699 config
->versionDefinitions
[VER_NDX_GLOBAL
].nonLocalPatterns
.push_back(
1700 {s
, /*isExternCpp=*/false, /*hasWildcard=*/false});
1703 for (opt::Arg
*arg
: args
.filtered(OPT_warn_backrefs_exclude
)) {
1704 StringRef
pattern(arg
->getValue());
1705 if (Expected
<GlobPattern
> pat
= GlobPattern::create(pattern
))
1706 config
->warnBackrefsExclude
.push_back(std::move(*pat
));
1708 error(arg
->getSpelling() + ": " + toString(pat
.takeError()) + ": " +
1712 // For -no-pie and -pie, --export-dynamic-symbol specifies defined symbols
1713 // which should be exported. For -shared, references to matched non-local
1714 // STV_DEFAULT symbols are not bound to definitions within the shared object,
1715 // even if other options express a symbolic intention: -Bsymbolic,
1716 // -Bsymbolic-functions (if STT_FUNC), --dynamic-list.
1717 for (auto *arg
: args
.filtered(OPT_export_dynamic_symbol
))
1718 config
->dynamicList
.push_back(
1719 {arg
->getValue(), /*isExternCpp=*/false,
1720 /*hasWildcard=*/hasWildcard(arg
->getValue())});
1722 // --export-dynamic-symbol-list specifies a list of --export-dynamic-symbol
1723 // patterns. --dynamic-list is --export-dynamic-symbol-list plus -Bsymbolic
1726 config
->bsymbolic
== BsymbolicKind::All
|| args
.hasArg(OPT_dynamic_list
);
1728 args
.filtered(OPT_dynamic_list
, OPT_export_dynamic_symbol_list
))
1729 if (std::optional
<MemoryBufferRef
> buffer
= readFile(arg
->getValue()))
1730 readDynamicList(*buffer
);
1732 for (auto *arg
: args
.filtered(OPT_version_script
))
1733 if (std::optional
<std::string
> path
= searchScript(arg
->getValue())) {
1734 if (std::optional
<MemoryBufferRef
> buffer
= readFile(*path
))
1735 readVersionScript(*buffer
);
1737 error(Twine("cannot find version script ") + arg
->getValue());
1741 // Some Config members do not directly correspond to any particular
1742 // command line options, but computed based on other Config values.
1743 // This function initialize such members. See Config.h for the details
1745 static void setConfigs(opt::InputArgList
&args
) {
1746 ELFKind k
= config
->ekind
;
1747 uint16_t m
= config
->emachine
;
1749 config
->copyRelocs
= (config
->relocatable
|| config
->emitRelocs
);
1750 config
->is64
= (k
== ELF64LEKind
|| k
== ELF64BEKind
);
1751 config
->isLE
= (k
== ELF32LEKind
|| k
== ELF64LEKind
);
1752 config
->endianness
= config
->isLE
? endianness::little
: endianness::big
;
1753 config
->isMips64EL
= (k
== ELF64LEKind
&& m
== EM_MIPS
);
1754 config
->isPic
= config
->pie
|| config
->shared
;
1755 config
->picThunk
= args
.hasArg(OPT_pic_veneer
, config
->isPic
);
1756 config
->wordsize
= config
->is64
? 8 : 4;
1758 // ELF defines two different ways to store relocation addends as shown below:
1760 // Rel: Addends are stored to the location where relocations are applied. It
1761 // cannot pack the full range of addend values for all relocation types, but
1762 // this only affects relocation types that we don't support emitting as
1763 // dynamic relocations (see getDynRel).
1764 // Rela: Addends are stored as part of relocation entry.
1766 // In other words, Rela makes it easy to read addends at the price of extra
1767 // 4 or 8 byte for each relocation entry.
1769 // We pick the format for dynamic relocations according to the psABI for each
1770 // processor, but a contrary choice can be made if the dynamic loader
1772 config
->isRela
= getIsRela(args
);
1774 // If the output uses REL relocations we must store the dynamic relocation
1775 // addends to the output sections. We also store addends for RELA relocations
1776 // if --apply-dynamic-relocs is used.
1777 // We default to not writing the addends when using RELA relocations since
1778 // any standard conforming tool can find it in r_addend.
1779 config
->writeAddends
= args
.hasFlag(OPT_apply_dynamic_relocs
,
1780 OPT_no_apply_dynamic_relocs
, false) ||
1782 // Validation of dynamic relocation addends is on by default for assertions
1783 // builds and disabled otherwise. This check is enabled when writeAddends is
1786 bool checkDynamicRelocsDefault
= true;
1788 bool checkDynamicRelocsDefault
= false;
1790 config
->checkDynamicRelocs
=
1791 args
.hasFlag(OPT_check_dynamic_relocations
,
1792 OPT_no_check_dynamic_relocations
, checkDynamicRelocsDefault
);
1793 config
->tocOptimize
=
1794 args
.hasFlag(OPT_toc_optimize
, OPT_no_toc_optimize
, m
== EM_PPC64
);
1795 config
->pcRelOptimize
=
1796 args
.hasFlag(OPT_pcrel_optimize
, OPT_no_pcrel_optimize
, m
== EM_PPC64
);
1799 static bool isFormatBinary(StringRef s
) {
1802 if (s
== "elf" || s
== "default")
1804 error("unknown --format value: " + s
+
1805 " (supported formats: elf, default, binary)");
1809 void LinkerDriver::createFiles(opt::InputArgList
&args
) {
1810 llvm::TimeTraceScope
timeScope("Load input files");
1811 // For --{push,pop}-state.
1812 std::vector
<std::tuple
<bool, bool, bool>> stack
;
1814 // Iterate over argv to process input files and positional arguments.
1815 InputFile::isInGroup
= false;
1816 bool hasInput
= false;
1817 for (auto *arg
: args
) {
1818 switch (arg
->getOption().getID()) {
1820 addLibrary(arg
->getValue());
1824 addFile(arg
->getValue(), /*withLOption=*/false);
1830 std::tie(from
, to
) = StringRef(arg
->getValue()).split('=');
1831 if (from
.empty() || to
.empty())
1832 error("--defsym: syntax error: " + StringRef(arg
->getValue()));
1834 readDefsym(from
, MemoryBufferRef(to
, "--defsym"));
1838 if (std::optional
<std::string
> path
= searchScript(arg
->getValue())) {
1839 if (std::optional
<MemoryBufferRef
> mb
= readFile(*path
))
1840 readLinkerScript(*mb
);
1843 error(Twine("cannot find linker script ") + arg
->getValue());
1846 config
->asNeeded
= true;
1849 config
->formatBinary
= isFormatBinary(arg
->getValue());
1851 case OPT_no_as_needed
:
1852 config
->asNeeded
= false;
1857 config
->isStatic
= true;
1860 config
->isStatic
= false;
1862 case OPT_whole_archive
:
1863 inWholeArchive
= true;
1865 case OPT_no_whole_archive
:
1866 inWholeArchive
= false;
1868 case OPT_just_symbols
:
1869 if (std::optional
<MemoryBufferRef
> mb
= readFile(arg
->getValue())) {
1870 files
.push_back(createObjFile(*mb
));
1871 files
.back()->justSymbols
= true;
1876 error("multiple CMSE import libraries not supported");
1877 else if (std::optional
<MemoryBufferRef
> mb
= readFile(arg
->getValue()))
1878 armCmseImpLib
= createObjFile(*mb
);
1880 case OPT_start_group
:
1881 if (InputFile::isInGroup
)
1882 error("nested --start-group");
1883 InputFile::isInGroup
= true;
1886 if (!InputFile::isInGroup
)
1887 error("stray --end-group");
1888 InputFile::isInGroup
= false;
1889 ++InputFile::nextGroupId
;
1893 error("nested --start-lib");
1894 if (InputFile::isInGroup
)
1895 error("may not nest --start-lib in --start-group");
1897 InputFile::isInGroup
= true;
1901 error("stray --end-lib");
1903 InputFile::isInGroup
= false;
1904 ++InputFile::nextGroupId
;
1906 case OPT_push_state
:
1907 stack
.emplace_back(config
->asNeeded
, config
->isStatic
, inWholeArchive
);
1910 if (stack
.empty()) {
1911 error("unbalanced --push-state/--pop-state");
1914 std::tie(config
->asNeeded
, config
->isStatic
, inWholeArchive
) = stack
.back();
1920 if (files
.empty() && !hasInput
&& errorCount() == 0)
1921 error("no input files");
1924 // If -m <machine_type> was not given, infer it from object files.
1925 void LinkerDriver::inferMachineType() {
1926 if (config
->ekind
!= ELFNoneKind
)
1929 for (InputFile
*f
: files
) {
1930 if (f
->ekind
== ELFNoneKind
)
1932 config
->ekind
= f
->ekind
;
1933 config
->emachine
= f
->emachine
;
1934 config
->osabi
= f
->osabi
;
1935 config
->mipsN32Abi
= config
->emachine
== EM_MIPS
&& isMipsN32Abi(f
);
1938 error("target emulation unknown: -m or at least one .o file required");
1941 // Parse -z max-page-size=<value>. The default value is defined by
1943 static uint64_t getMaxPageSize(opt::InputArgList
&args
) {
1944 uint64_t val
= args::getZOptionValue(args
, OPT_z
, "max-page-size",
1945 target
->defaultMaxPageSize
);
1946 if (!isPowerOf2_64(val
)) {
1947 error("max-page-size: value isn't a power of 2");
1948 return target
->defaultMaxPageSize
;
1950 if (config
->nmagic
|| config
->omagic
) {
1951 if (val
!= target
->defaultMaxPageSize
)
1952 warn("-z max-page-size set, but paging disabled by omagic or nmagic");
1958 // Parse -z common-page-size=<value>. The default value is defined by
1960 static uint64_t getCommonPageSize(opt::InputArgList
&args
) {
1961 uint64_t val
= args::getZOptionValue(args
, OPT_z
, "common-page-size",
1962 target
->defaultCommonPageSize
);
1963 if (!isPowerOf2_64(val
)) {
1964 error("common-page-size: value isn't a power of 2");
1965 return target
->defaultCommonPageSize
;
1967 if (config
->nmagic
|| config
->omagic
) {
1968 if (val
!= target
->defaultCommonPageSize
)
1969 warn("-z common-page-size set, but paging disabled by omagic or nmagic");
1972 // commonPageSize can't be larger than maxPageSize.
1973 if (val
> config
->maxPageSize
)
1974 val
= config
->maxPageSize
;
1978 // Parses --image-base option.
1979 static std::optional
<uint64_t> getImageBase(opt::InputArgList
&args
) {
1980 // Because we are using "Config->maxPageSize" here, this function has to be
1981 // called after the variable is initialized.
1982 auto *arg
= args
.getLastArg(OPT_image_base
);
1984 return std::nullopt
;
1986 StringRef s
= arg
->getValue();
1988 if (!to_integer(s
, v
)) {
1989 error("--image-base: number expected, but got " + s
);
1992 if ((v
% config
->maxPageSize
) != 0)
1993 warn("--image-base: address isn't multiple of page size: " + s
);
1997 // Parses `--exclude-libs=lib,lib,...`.
1998 // The library names may be delimited by commas or colons.
1999 static DenseSet
<StringRef
> getExcludeLibs(opt::InputArgList
&args
) {
2000 DenseSet
<StringRef
> ret
;
2001 for (auto *arg
: args
.filtered(OPT_exclude_libs
)) {
2002 StringRef s
= arg
->getValue();
2004 size_t pos
= s
.find_first_of(",:");
2005 if (pos
== StringRef::npos
)
2007 ret
.insert(s
.substr(0, pos
));
2008 s
= s
.substr(pos
+ 1);
2015 // Handles the --exclude-libs option. If a static library file is specified
2016 // by the --exclude-libs option, all public symbols from the archive become
2017 // private unless otherwise specified by version scripts or something.
2018 // A special library name "ALL" means all archive files.
2020 // This is not a popular option, but some programs such as bionic libc use it.
2021 static void excludeLibs(opt::InputArgList
&args
) {
2022 DenseSet
<StringRef
> libs
= getExcludeLibs(args
);
2023 bool all
= libs
.count("ALL");
2025 auto visit
= [&](InputFile
*file
) {
2026 if (file
->archiveName
.empty() ||
2027 !(all
|| libs
.count(path::filename(file
->archiveName
))))
2029 ArrayRef
<Symbol
*> symbols
= file
->getSymbols();
2030 if (isa
<ELFFileBase
>(file
))
2031 symbols
= cast
<ELFFileBase
>(file
)->getGlobalSymbols();
2032 for (Symbol
*sym
: symbols
)
2033 if (!sym
->isUndefined() && sym
->file
== file
)
2034 sym
->versionId
= VER_NDX_LOCAL
;
2037 for (ELFFileBase
*file
: ctx
.objectFiles
)
2040 for (BitcodeFile
*file
: ctx
.bitcodeFiles
)
2044 // Force Sym to be entered in the output.
2045 static void handleUndefined(Symbol
*sym
, const char *option
) {
2046 // Since a symbol may not be used inside the program, LTO may
2047 // eliminate it. Mark the symbol as "used" to prevent it.
2048 sym
->isUsedInRegularObj
= true;
2053 if (!config
->whyExtract
.empty())
2054 ctx
.whyExtractRecords
.emplace_back(option
, sym
->file
, *sym
);
2057 // As an extension to GNU linkers, lld supports a variant of `-u`
2058 // which accepts wildcard patterns. All symbols that match a given
2059 // pattern are handled as if they were given by `-u`.
2060 static void handleUndefinedGlob(StringRef arg
) {
2061 Expected
<GlobPattern
> pat
= GlobPattern::create(arg
);
2063 error("--undefined-glob: " + toString(pat
.takeError()) + ": " + arg
);
2067 // Calling sym->extract() in the loop is not safe because it may add new
2068 // symbols to the symbol table, invalidating the current iterator.
2069 SmallVector
<Symbol
*, 0> syms
;
2070 for (Symbol
*sym
: symtab
.getSymbols())
2071 if (!sym
->isPlaceholder() && pat
->match(sym
->getName()))
2072 syms
.push_back(sym
);
2074 for (Symbol
*sym
: syms
)
2075 handleUndefined(sym
, "--undefined-glob");
2078 static void handleLibcall(StringRef name
) {
2079 Symbol
*sym
= symtab
.find(name
);
2080 if (!sym
|| !sym
->isLazy())
2084 mb
= cast
<LazyObject
>(sym
)->file
->mb
;
2090 static void writeArchiveStats() {
2091 if (config
->printArchiveStats
.empty())
2095 raw_fd_ostream os
= ctx
.openAuxiliaryFile(config
->printArchiveStats
, ec
);
2097 error("--print-archive-stats=: cannot open " + config
->printArchiveStats
+
2098 ": " + ec
.message());
2102 os
<< "members\textracted\tarchive\n";
2104 SmallVector
<StringRef
, 0> archives
;
2105 DenseMap
<CachedHashStringRef
, unsigned> all
, extracted
;
2106 for (ELFFileBase
*file
: ctx
.objectFiles
)
2107 if (file
->archiveName
.size())
2108 ++extracted
[CachedHashStringRef(file
->archiveName
)];
2109 for (BitcodeFile
*file
: ctx
.bitcodeFiles
)
2110 if (file
->archiveName
.size())
2111 ++extracted
[CachedHashStringRef(file
->archiveName
)];
2112 for (std::pair
<StringRef
, unsigned> f
: ctx
.driver
.archiveFiles
) {
2113 unsigned &v
= extracted
[CachedHashString(f
.first
)];
2114 os
<< f
.second
<< '\t' << v
<< '\t' << f
.first
<< '\n';
2115 // If the archive occurs multiple times, other instances have a count of 0.
2120 static void writeWhyExtract() {
2121 if (config
->whyExtract
.empty())
2125 raw_fd_ostream os
= ctx
.openAuxiliaryFile(config
->whyExtract
, ec
);
2127 error("cannot open --why-extract= file " + config
->whyExtract
+ ": " +
2132 os
<< "reference\textracted\tsymbol\n";
2133 for (auto &entry
: ctx
.whyExtractRecords
) {
2134 os
<< std::get
<0>(entry
) << '\t' << toString(std::get
<1>(entry
)) << '\t'
2135 << toString(std::get
<2>(entry
)) << '\n';
2139 static void reportBackrefs() {
2140 for (auto &ref
: ctx
.backwardReferences
) {
2141 const Symbol
&sym
= *ref
.first
;
2142 std::string to
= toString(ref
.second
.second
);
2143 // Some libraries have known problems and can cause noise. Filter them out
2144 // with --warn-backrefs-exclude=. The value may look like (for --start-lib)
2145 // *.o or (archive member) *.a(*.o).
2146 bool exclude
= false;
2147 for (const llvm::GlobPattern
&pat
: config
->warnBackrefsExclude
)
2148 if (pat
.match(to
)) {
2153 warn("backward reference detected: " + sym
.getName() + " in " +
2154 toString(ref
.second
.first
) + " refers to " + to
);
2158 // Handle --dependency-file=<path>. If that option is given, lld creates a
2159 // file at a given path with the following contents:
2161 // <output-file>: <input-file> ...
2165 // where <output-file> is a pathname of an output file and <input-file>
2166 // ... is a list of pathnames of all input files. `make` command can read a
2167 // file in the above format and interpret it as a dependency info. We write
2168 // phony targets for every <input-file> to avoid an error when that file is
2171 // This option is useful if you want to make your final executable to depend
2172 // on all input files including system libraries. Here is why.
2174 // When you write a Makefile, you usually write it so that the final
2175 // executable depends on all user-generated object files. Normally, you
2176 // don't make your executable to depend on system libraries (such as libc)
2177 // because you don't know the exact paths of libraries, even though system
2178 // libraries that are linked to your executable statically are technically a
2179 // part of your program. By using --dependency-file option, you can make
2180 // lld to dump dependency info so that you can maintain exact dependencies
2182 static void writeDependencyFile() {
2184 raw_fd_ostream os
= ctx
.openAuxiliaryFile(config
->dependencyFile
, ec
);
2186 error("cannot open " + config
->dependencyFile
+ ": " + ec
.message());
2190 // We use the same escape rules as Clang/GCC which are accepted by Make/Ninja:
2191 // * A space is escaped by a backslash which itself must be escaped.
2192 // * A hash sign is escaped by a single backslash.
2193 // * $ is escapes as $$.
2194 auto printFilename
= [](raw_fd_ostream
&os
, StringRef filename
) {
2195 llvm::SmallString
<256> nativePath
;
2196 llvm::sys::path::native(filename
.str(), nativePath
);
2197 llvm::sys::path::remove_dots(nativePath
, /*remove_dot_dot=*/true);
2198 for (unsigned i
= 0, e
= nativePath
.size(); i
!= e
; ++i
) {
2199 if (nativePath
[i
] == '#') {
2201 } else if (nativePath
[i
] == ' ') {
2204 while (j
> 0 && nativePath
[--j
] == '\\')
2206 } else if (nativePath
[i
] == '$') {
2209 os
<< nativePath
[i
];
2213 os
<< config
->outputFile
<< ":";
2214 for (StringRef path
: config
->dependencyFiles
) {
2216 printFilename(os
, path
);
2220 for (StringRef path
: config
->dependencyFiles
) {
2222 printFilename(os
, path
);
2227 // Replaces common symbols with defined symbols reside in .bss sections.
2228 // This function is called after all symbol names are resolved. As a
2229 // result, the passes after the symbol resolution won't see any
2230 // symbols of type CommonSymbol.
2231 static void replaceCommonSymbols() {
2232 llvm::TimeTraceScope
timeScope("Replace common symbols");
2233 for (ELFFileBase
*file
: ctx
.objectFiles
) {
2234 if (!file
->hasCommonSyms
)
2236 for (Symbol
*sym
: file
->getGlobalSymbols()) {
2237 auto *s
= dyn_cast
<CommonSymbol
>(sym
);
2241 auto *bss
= make
<BssSection
>("COMMON", s
->size
, s
->alignment
);
2242 bss
->file
= s
->file
;
2243 ctx
.inputSections
.push_back(bss
);
2244 Defined(s
->file
, StringRef(), s
->binding
, s
->stOther
, s
->type
,
2245 /*value=*/0, s
->size
, bss
)
2251 // The section referred to by `s` is considered address-significant. Set the
2252 // keepUnique flag on the section if appropriate.
2253 static void markAddrsig(Symbol
*s
) {
2254 if (auto *d
= dyn_cast_or_null
<Defined
>(s
))
2256 // We don't need to keep text sections unique under --icf=all even if they
2257 // are address-significant.
2258 if (config
->icf
== ICFLevel::Safe
|| !(d
->section
->flags
& SHF_EXECINSTR
))
2259 d
->section
->keepUnique
= true;
2262 // Record sections that define symbols mentioned in --keep-unique <symbol>
2263 // and symbols referred to by address-significance tables. These sections are
2264 // ineligible for ICF.
2265 template <class ELFT
>
2266 static void findKeepUniqueSections(opt::InputArgList
&args
) {
2267 for (auto *arg
: args
.filtered(OPT_keep_unique
)) {
2268 StringRef name
= arg
->getValue();
2269 auto *d
= dyn_cast_or_null
<Defined
>(symtab
.find(name
));
2270 if (!d
|| !d
->section
) {
2271 warn("could not find symbol " + name
+ " to keep unique");
2274 d
->section
->keepUnique
= true;
2277 // --icf=all --ignore-data-address-equality means that we can ignore
2278 // the dynsym and address-significance tables entirely.
2279 if (config
->icf
== ICFLevel::All
&& config
->ignoreDataAddressEquality
)
2282 // Symbols in the dynsym could be address-significant in other executables
2283 // or DSOs, so we conservatively mark them as address-significant.
2284 for (Symbol
*sym
: symtab
.getSymbols())
2285 if (sym
->includeInDynsym())
2288 // Visit the address-significance table in each object file and mark each
2289 // referenced symbol as address-significant.
2290 for (InputFile
*f
: ctx
.objectFiles
) {
2291 auto *obj
= cast
<ObjFile
<ELFT
>>(f
);
2292 ArrayRef
<Symbol
*> syms
= obj
->getSymbols();
2293 if (obj
->addrsigSec
) {
2294 ArrayRef
<uint8_t> contents
=
2295 check(obj
->getObj().getSectionContents(*obj
->addrsigSec
));
2296 const uint8_t *cur
= contents
.begin();
2297 while (cur
!= contents
.end()) {
2300 uint64_t symIndex
= decodeULEB128(cur
, &size
, contents
.end(), &err
);
2302 fatal(toString(f
) + ": could not decode addrsig section: " + err
);
2303 markAddrsig(syms
[symIndex
]);
2307 // If an object file does not have an address-significance table,
2308 // conservatively mark all of its symbols as address-significant.
2309 for (Symbol
*s
: syms
)
2315 // This function reads a symbol partition specification section. These sections
2316 // are used to control which partition a symbol is allocated to. See
2317 // https://lld.llvm.org/Partitions.html for more details on partitions.
2318 template <typename ELFT
>
2319 static void readSymbolPartitionSection(InputSectionBase
*s
) {
2320 // Read the relocation that refers to the partition's entry point symbol.
2322 const RelsOrRelas
<ELFT
> rels
= s
->template relsOrRelas
<ELFT
>();
2323 if (rels
.areRelocsRel())
2324 sym
= &s
->getFile
<ELFT
>()->getRelocTargetSym(rels
.rels
[0]);
2326 sym
= &s
->getFile
<ELFT
>()->getRelocTargetSym(rels
.relas
[0]);
2327 if (!isa
<Defined
>(sym
) || !sym
->includeInDynsym())
2330 StringRef partName
= reinterpret_cast<const char *>(s
->content().data());
2331 for (Partition
&part
: partitions
) {
2332 if (part
.name
== partName
) {
2333 sym
->partition
= part
.getNumber();
2338 // Forbid partitions from being used on incompatible targets, and forbid them
2339 // from being used together with various linker features that assume a single
2340 // set of output sections.
2341 if (script
->hasSectionsCommand
)
2342 error(toString(s
->file
) +
2343 ": partitions cannot be used with the SECTIONS command");
2344 if (script
->hasPhdrsCommands())
2345 error(toString(s
->file
) +
2346 ": partitions cannot be used with the PHDRS command");
2347 if (!config
->sectionStartMap
.empty())
2348 error(toString(s
->file
) + ": partitions cannot be used with "
2349 "--section-start, -Ttext, -Tdata or -Tbss");
2350 if (config
->emachine
== EM_MIPS
)
2351 error(toString(s
->file
) + ": partitions cannot be used on this target");
2353 // Impose a limit of no more than 254 partitions. This limit comes from the
2354 // sizes of the Partition fields in InputSectionBase and Symbol, as well as
2355 // the amount of space devoted to the partition number in RankFlags.
2356 if (partitions
.size() == 254)
2357 fatal("may not have more than 254 partitions");
2359 partitions
.emplace_back();
2360 Partition
&newPart
= partitions
.back();
2361 newPart
.name
= partName
;
2362 sym
->partition
= newPart
.getNumber();
2365 static Symbol
*addUnusedUndefined(StringRef name
,
2366 uint8_t binding
= STB_GLOBAL
) {
2367 return symtab
.addSymbol(Undefined
{nullptr, name
, binding
, STV_DEFAULT
, 0});
2370 static void markBuffersAsDontNeed(bool skipLinkedOutput
) {
2371 // With --thinlto-index-only, all buffers are nearly unused from now on
2372 // (except symbol/section names used by infrequent passes). Mark input file
2373 // buffers as MADV_DONTNEED so that these pages can be reused by the expensive
2374 // thin link, saving memory.
2375 if (skipLinkedOutput
) {
2376 for (MemoryBuffer
&mb
: llvm::make_pointee_range(ctx
.memoryBuffers
))
2377 mb
.dontNeedIfMmap();
2381 // Otherwise, just mark MemoryBuffers backing BitcodeFiles.
2382 DenseSet
<const char *> bufs
;
2383 for (BitcodeFile
*file
: ctx
.bitcodeFiles
)
2384 bufs
.insert(file
->mb
.getBufferStart());
2385 for (BitcodeFile
*file
: ctx
.lazyBitcodeFiles
)
2386 bufs
.insert(file
->mb
.getBufferStart());
2387 for (MemoryBuffer
&mb
: llvm::make_pointee_range(ctx
.memoryBuffers
))
2388 if (bufs
.count(mb
.getBufferStart()))
2389 mb
.dontNeedIfMmap();
2392 // This function is where all the optimizations of link-time
2393 // optimization takes place. When LTO is in use, some input files are
2394 // not in native object file format but in the LLVM bitcode format.
2395 // This function compiles bitcode files into a few big native files
2396 // using LLVM functions and replaces bitcode symbols with the results.
2397 // Because all bitcode files that the program consists of are passed to
2398 // the compiler at once, it can do a whole-program optimization.
2399 template <class ELFT
>
2400 void LinkerDriver::compileBitcodeFiles(bool skipLinkedOutput
) {
2401 llvm::TimeTraceScope
timeScope("LTO");
2402 // Compile bitcode files and replace bitcode symbols.
2403 lto
.reset(new BitcodeCompiler
);
2404 for (BitcodeFile
*file
: ctx
.bitcodeFiles
)
2407 if (!ctx
.bitcodeFiles
.empty())
2408 markBuffersAsDontNeed(skipLinkedOutput
);
2410 for (InputFile
*file
: lto
->compile()) {
2411 auto *obj
= cast
<ObjFile
<ELFT
>>(file
);
2412 obj
->parse(/*ignoreComdats=*/true);
2414 // Parse '@' in symbol names for non-relocatable output.
2415 if (!config
->relocatable
)
2416 for (Symbol
*sym
: obj
->getGlobalSymbols())
2417 if (sym
->hasVersionSuffix
)
2418 sym
->parseSymbolVersion();
2419 ctx
.objectFiles
.push_back(obj
);
2423 // The --wrap option is a feature to rename symbols so that you can write
2424 // wrappers for existing functions. If you pass `--wrap=foo`, all
2425 // occurrences of symbol `foo` are resolved to `__wrap_foo` (so, you are
2426 // expected to write `__wrap_foo` function as a wrapper). The original
2427 // symbol becomes accessible as `__real_foo`, so you can call that from your
2430 // This data structure is instantiated for each --wrap option.
2431 struct WrappedSymbol
{
2437 // Handles --wrap option.
2439 // This function instantiates wrapper symbols. At this point, they seem
2440 // like they are not being used at all, so we explicitly set some flags so
2441 // that LTO won't eliminate them.
2442 static std::vector
<WrappedSymbol
> addWrappedSymbols(opt::InputArgList
&args
) {
2443 std::vector
<WrappedSymbol
> v
;
2444 DenseSet
<StringRef
> seen
;
2446 for (auto *arg
: args
.filtered(OPT_wrap
)) {
2447 StringRef name
= arg
->getValue();
2448 if (!seen
.insert(name
).second
)
2451 Symbol
*sym
= symtab
.find(name
);
2456 addUnusedUndefined(saver().save("__wrap_" + name
), sym
->binding
);
2458 // If __real_ is referenced, pull in the symbol if it is lazy. Do this after
2459 // processing __wrap_ as that may have referenced __real_.
2460 StringRef realName
= saver().save("__real_" + name
);
2461 if (symtab
.find(realName
))
2462 addUnusedUndefined(name
, sym
->binding
);
2464 Symbol
*real
= addUnusedUndefined(realName
);
2465 v
.push_back({sym
, real
, wrap
});
2467 // We want to tell LTO not to inline symbols to be overwritten
2468 // because LTO doesn't know the final symbol contents after renaming.
2469 real
->scriptDefined
= true;
2470 sym
->scriptDefined
= true;
2472 // If a symbol is referenced in any object file, bitcode file or shared
2473 // object, mark its redirection target (foo for __real_foo and __wrap_foo
2474 // for foo) as referenced after redirection, which will be used to tell LTO
2475 // to not eliminate the redirection target. If the object file defining the
2476 // symbol also references it, we cannot easily distinguish the case from
2477 // cases where the symbol is not referenced. Retain the redirection target
2478 // in this case because we choose to wrap symbol references regardless of
2479 // whether the symbol is defined
2480 // (https://sourceware.org/bugzilla/show_bug.cgi?id=26358).
2481 if (real
->referenced
|| real
->isDefined())
2482 sym
->referencedAfterWrap
= true;
2483 if (sym
->referenced
|| sym
->isDefined())
2484 wrap
->referencedAfterWrap
= true;
2489 static void combineVersionedSymbol(Symbol
&sym
,
2490 DenseMap
<Symbol
*, Symbol
*> &map
) {
2491 const char *suffix1
= sym
.getVersionSuffix();
2492 if (suffix1
[0] != '@' || suffix1
[1] == '@')
2495 // Check the existing symbol foo. We have two special cases to handle:
2497 // * There is a definition of foo@v1 and foo@@v1.
2498 // * There is a definition of foo@v1 and foo.
2499 Defined
*sym2
= dyn_cast_or_null
<Defined
>(symtab
.find(sym
.getName()));
2502 const char *suffix2
= sym2
->getVersionSuffix();
2503 if (suffix2
[0] == '@' && suffix2
[1] == '@' &&
2504 strcmp(suffix1
+ 1, suffix2
+ 2) == 0) {
2505 // foo@v1 and foo@@v1 should be merged, so redirect foo@v1 to foo@@v1.
2506 map
.try_emplace(&sym
, sym2
);
2507 // If both foo@v1 and foo@@v1 are defined and non-weak, report a
2508 // duplicate definition error.
2509 if (sym
.isDefined()) {
2510 sym2
->checkDuplicate(cast
<Defined
>(sym
));
2511 sym2
->resolve(cast
<Defined
>(sym
));
2512 } else if (sym
.isUndefined()) {
2513 sym2
->resolve(cast
<Undefined
>(sym
));
2515 sym2
->resolve(cast
<SharedSymbol
>(sym
));
2517 // Eliminate foo@v1 from the symbol table.
2518 sym
.symbolKind
= Symbol::PlaceholderKind
;
2519 sym
.isUsedInRegularObj
= false;
2520 } else if (auto *sym1
= dyn_cast
<Defined
>(&sym
)) {
2521 if (sym2
->versionId
> VER_NDX_GLOBAL
2522 ? config
->versionDefinitions
[sym2
->versionId
].name
== suffix1
+ 1
2523 : sym1
->section
== sym2
->section
&& sym1
->value
== sym2
->value
) {
2524 // Due to an assembler design flaw, if foo is defined, .symver foo,
2525 // foo@v1 defines both foo and foo@v1. Unless foo is bound to a
2526 // different version, GNU ld makes foo@v1 canonical and eliminates
2527 // foo. Emulate its behavior, otherwise we would have foo or foo@@v1
2528 // beside foo@v1. foo@v1 and foo combining does not apply if they are
2529 // not defined in the same place.
2530 map
.try_emplace(sym2
, &sym
);
2531 sym2
->symbolKind
= Symbol::PlaceholderKind
;
2532 sym2
->isUsedInRegularObj
= false;
2537 // Do renaming for --wrap and foo@v1 by updating pointers to symbols.
2539 // When this function is executed, only InputFiles and symbol table
2540 // contain pointers to symbol objects. We visit them to replace pointers,
2541 // so that wrapped symbols are swapped as instructed by the command line.
2542 static void redirectSymbols(ArrayRef
<WrappedSymbol
> wrapped
) {
2543 llvm::TimeTraceScope
timeScope("Redirect symbols");
2544 DenseMap
<Symbol
*, Symbol
*> map
;
2545 for (const WrappedSymbol
&w
: wrapped
) {
2546 map
[w
.sym
] = w
.wrap
;
2547 map
[w
.real
] = w
.sym
;
2550 // If there are version definitions (versionDefinitions.size() > 2), enumerate
2551 // symbols with a non-default version (foo@v1) and check whether it should be
2552 // combined with foo or foo@@v1.
2553 if (config
->versionDefinitions
.size() > 2)
2554 for (Symbol
*sym
: symtab
.getSymbols())
2555 if (sym
->hasVersionSuffix
)
2556 combineVersionedSymbol(*sym
, map
);
2561 // Update pointers in input files.
2562 parallelForEach(ctx
.objectFiles
, [&](ELFFileBase
*file
) {
2563 for (Symbol
*&sym
: file
->getMutableGlobalSymbols())
2564 if (Symbol
*s
= map
.lookup(sym
))
2568 // Update pointers in the symbol table.
2569 for (const WrappedSymbol
&w
: wrapped
)
2570 symtab
.wrap(w
.sym
, w
.real
, w
.wrap
);
2573 static void checkAndReportMissingFeature(StringRef config
, uint32_t features
,
2574 uint32_t mask
, const Twine
&report
) {
2575 if (!(features
& mask
)) {
2576 if (config
== "error")
2578 else if (config
== "warning")
2583 // To enable CET (x86's hardware-assisted control flow enforcement), each
2584 // source file must be compiled with -fcf-protection. Object files compiled
2585 // with the flag contain feature flags indicating that they are compatible
2586 // with CET. We enable the feature only when all object files are compatible
2589 // This is also the case with AARCH64's BTI and PAC which use the similar
2590 // GNU_PROPERTY_AARCH64_FEATURE_1_AND mechanism.
2591 static uint32_t getAndFeatures() {
2592 if (config
->emachine
!= EM_386
&& config
->emachine
!= EM_X86_64
&&
2593 config
->emachine
!= EM_AARCH64
)
2597 for (ELFFileBase
*f
: ctx
.objectFiles
) {
2598 uint32_t features
= f
->andFeatures
;
2600 checkAndReportMissingFeature(
2601 config
->zBtiReport
, features
, GNU_PROPERTY_AARCH64_FEATURE_1_BTI
,
2602 toString(f
) + ": -z bti-report: file does not have "
2603 "GNU_PROPERTY_AARCH64_FEATURE_1_BTI property");
2605 checkAndReportMissingFeature(
2606 config
->zCetReport
, features
, GNU_PROPERTY_X86_FEATURE_1_IBT
,
2607 toString(f
) + ": -z cet-report: file does not have "
2608 "GNU_PROPERTY_X86_FEATURE_1_IBT property");
2610 checkAndReportMissingFeature(
2611 config
->zCetReport
, features
, GNU_PROPERTY_X86_FEATURE_1_SHSTK
,
2612 toString(f
) + ": -z cet-report: file does not have "
2613 "GNU_PROPERTY_X86_FEATURE_1_SHSTK property");
2615 if (config
->zForceBti
&& !(features
& GNU_PROPERTY_AARCH64_FEATURE_1_BTI
)) {
2616 features
|= GNU_PROPERTY_AARCH64_FEATURE_1_BTI
;
2617 if (config
->zBtiReport
== "none")
2618 warn(toString(f
) + ": -z force-bti: file does not have "
2619 "GNU_PROPERTY_AARCH64_FEATURE_1_BTI property");
2620 } else if (config
->zForceIbt
&&
2621 !(features
& GNU_PROPERTY_X86_FEATURE_1_IBT
)) {
2622 if (config
->zCetReport
== "none")
2623 warn(toString(f
) + ": -z force-ibt: file does not have "
2624 "GNU_PROPERTY_X86_FEATURE_1_IBT property");
2625 features
|= GNU_PROPERTY_X86_FEATURE_1_IBT
;
2627 if (config
->zPacPlt
&& !(features
& GNU_PROPERTY_AARCH64_FEATURE_1_PAC
)) {
2628 warn(toString(f
) + ": -z pac-plt: file does not have "
2629 "GNU_PROPERTY_AARCH64_FEATURE_1_PAC property");
2630 features
|= GNU_PROPERTY_AARCH64_FEATURE_1_PAC
;
2635 // Force enable Shadow Stack.
2637 ret
|= GNU_PROPERTY_X86_FEATURE_1_SHSTK
;
2642 static void initSectionsAndLocalSyms(ELFFileBase
*file
, bool ignoreComdats
) {
2643 switch (file
->ekind
) {
2645 cast
<ObjFile
<ELF32LE
>>(file
)->initSectionsAndLocalSyms(ignoreComdats
);
2648 cast
<ObjFile
<ELF32BE
>>(file
)->initSectionsAndLocalSyms(ignoreComdats
);
2651 cast
<ObjFile
<ELF64LE
>>(file
)->initSectionsAndLocalSyms(ignoreComdats
);
2654 cast
<ObjFile
<ELF64BE
>>(file
)->initSectionsAndLocalSyms(ignoreComdats
);
2657 llvm_unreachable("");
2661 static void postParseObjectFile(ELFFileBase
*file
) {
2662 switch (file
->ekind
) {
2664 cast
<ObjFile
<ELF32LE
>>(file
)->postParse();
2667 cast
<ObjFile
<ELF32BE
>>(file
)->postParse();
2670 cast
<ObjFile
<ELF64LE
>>(file
)->postParse();
2673 cast
<ObjFile
<ELF64BE
>>(file
)->postParse();
2676 llvm_unreachable("");
2680 // Do actual linking. Note that when this function is called,
2681 // all linker scripts have already been parsed.
2682 void LinkerDriver::link(opt::InputArgList
&args
) {
2683 llvm::TimeTraceScope
timeScope("Link", StringRef("LinkerDriver::Link"));
2684 // If a --hash-style option was not given, set to a default value,
2685 // which varies depending on the target.
2686 if (!args
.hasArg(OPT_hash_style
)) {
2687 if (config
->emachine
== EM_MIPS
)
2688 config
->sysvHash
= true;
2690 config
->sysvHash
= config
->gnuHash
= true;
2693 // Default output filename is "a.out" by the Unix tradition.
2694 if (config
->outputFile
.empty())
2695 config
->outputFile
= "a.out";
2697 // Fail early if the output file or map file is not writable. If a user has a
2698 // long link, e.g. due to a large LTO link, they do not wish to run it and
2699 // find that it failed because there was a mistake in their command-line.
2701 llvm::TimeTraceScope
timeScope("Create output files");
2702 if (auto e
= tryCreateFile(config
->outputFile
))
2703 error("cannot open output file " + config
->outputFile
+ ": " +
2705 if (auto e
= tryCreateFile(config
->mapFile
))
2706 error("cannot open map file " + config
->mapFile
+ ": " + e
.message());
2707 if (auto e
= tryCreateFile(config
->whyExtract
))
2708 error("cannot open --why-extract= file " + config
->whyExtract
+ ": " +
2714 // Use default entry point name if no name was given via the command
2715 // line nor linker scripts. For some reason, MIPS entry point name is
2716 // different from others.
2717 config
->warnMissingEntry
=
2718 (!config
->entry
.empty() || (!config
->shared
&& !config
->relocatable
));
2719 if (config
->entry
.empty() && !config
->relocatable
)
2720 config
->entry
= (config
->emachine
== EM_MIPS
) ? "__start" : "_start";
2722 // Handle --trace-symbol.
2723 for (auto *arg
: args
.filtered(OPT_trace_symbol
))
2724 symtab
.insert(arg
->getValue())->traced
= true;
2726 // Handle -u/--undefined before input files. If both a.a and b.so define foo,
2727 // -u foo a.a b.so will extract a.a.
2728 for (StringRef name
: config
->undefined
)
2729 addUnusedUndefined(name
)->referenced
= true;
2731 // Add all files to the symbol table. This will add almost all
2732 // symbols that we need to the symbol table. This process might
2733 // add files to the link, via autolinking, these files are always
2734 // appended to the Files vector.
2736 llvm::TimeTraceScope
timeScope("Parse input files");
2737 for (size_t i
= 0; i
< files
.size(); ++i
) {
2738 llvm::TimeTraceScope
timeScope("Parse input files", files
[i
]->getName());
2739 parseFile(files
[i
]);
2742 parseArmCMSEImportLib(*armCmseImpLib
);
2745 // Now that we have every file, we can decide if we will need a
2746 // dynamic symbol table.
2747 // We need one if we were asked to export dynamic symbols or if we are
2748 // producing a shared library.
2749 // We also need one if any shared libraries are used and for pie executables
2750 // (probably because the dynamic linker needs it).
2751 config
->hasDynSymTab
=
2752 !ctx
.sharedFiles
.empty() || config
->isPic
|| config
->exportDynamic
;
2754 // Some symbols (such as __ehdr_start) are defined lazily only when there
2755 // are undefined symbols for them, so we add these to trigger that logic.
2756 for (StringRef name
: script
->referencedSymbols
) {
2757 Symbol
*sym
= addUnusedUndefined(name
);
2758 sym
->isUsedInRegularObj
= true;
2759 sym
->referenced
= true;
2762 // Prevent LTO from removing any definition referenced by -u.
2763 for (StringRef name
: config
->undefined
)
2764 if (Defined
*sym
= dyn_cast_or_null
<Defined
>(symtab
.find(name
)))
2765 sym
->isUsedInRegularObj
= true;
2767 // If an entry symbol is in a static archive, pull out that file now.
2768 if (Symbol
*sym
= symtab
.find(config
->entry
))
2769 handleUndefined(sym
, "--entry");
2771 // Handle the `--undefined-glob <pattern>` options.
2772 for (StringRef pat
: args::getStrings(args
, OPT_undefined_glob
))
2773 handleUndefinedGlob(pat
);
2775 // Mark -init and -fini symbols so that the LTO doesn't eliminate them.
2776 if (Symbol
*sym
= dyn_cast_or_null
<Defined
>(symtab
.find(config
->init
)))
2777 sym
->isUsedInRegularObj
= true;
2778 if (Symbol
*sym
= dyn_cast_or_null
<Defined
>(symtab
.find(config
->fini
)))
2779 sym
->isUsedInRegularObj
= true;
2781 // If any of our inputs are bitcode files, the LTO code generator may create
2782 // references to certain library functions that might not be explicit in the
2783 // bitcode file's symbol table. If any of those library functions are defined
2784 // in a bitcode file in an archive member, we need to arrange to use LTO to
2785 // compile those archive members by adding them to the link beforehand.
2787 // However, adding all libcall symbols to the link can have undesired
2788 // consequences. For example, the libgcc implementation of
2789 // __sync_val_compare_and_swap_8 on 32-bit ARM pulls in an .init_array entry
2790 // that aborts the program if the Linux kernel does not support 64-bit
2791 // atomics, which would prevent the program from running even if it does not
2792 // use 64-bit atomics.
2794 // Therefore, we only add libcall symbols to the link before LTO if we have
2795 // to, i.e. if the symbol's definition is in bitcode. Any other required
2796 // libcall symbols will be added to the link after LTO when we add the LTO
2797 // object file to the link.
2798 if (!ctx
.bitcodeFiles
.empty())
2799 for (auto *s
: lto::LTO::getRuntimeLibcallSymbols())
2802 // Archive members defining __wrap symbols may be extracted.
2803 std::vector
<WrappedSymbol
> wrapped
= addWrappedSymbols(args
);
2805 // No more lazy bitcode can be extracted at this point. Do post parse work
2806 // like checking duplicate symbols.
2807 parallelForEach(ctx
.objectFiles
, [](ELFFileBase
*file
) {
2808 initSectionsAndLocalSyms(file
, /*ignoreComdats=*/false);
2810 parallelForEach(ctx
.objectFiles
, postParseObjectFile
);
2811 parallelForEach(ctx
.bitcodeFiles
,
2812 [](BitcodeFile
*file
) { file
->postParse(); });
2813 for (auto &it
: ctx
.nonPrevailingSyms
) {
2814 Symbol
&sym
= *it
.first
;
2815 Undefined(sym
.file
, sym
.getName(), sym
.binding
, sym
.stOther
, sym
.type
,
2818 cast
<Undefined
>(sym
).nonPrevailing
= true;
2820 ctx
.nonPrevailingSyms
.clear();
2821 for (const DuplicateSymbol
&d
: ctx
.duplicates
)
2822 reportDuplicate(*d
.sym
, d
.file
, d
.section
, d
.value
);
2823 ctx
.duplicates
.clear();
2825 // Return if there were name resolution errors.
2829 // We want to declare linker script's symbols early,
2830 // so that we can version them.
2831 // They also might be exported if referenced by DSOs.
2832 script
->declareSymbols();
2834 // Handle --exclude-libs. This is before scanVersionScript() due to a
2835 // workaround for Android ndk: for a defined versioned symbol in an archive
2836 // without a version node in the version script, Android does not expect a
2837 // 'has undefined version' error in -shared --exclude-libs=ALL mode (PR36295).
2838 // GNU ld errors in this case.
2839 if (args
.hasArg(OPT_exclude_libs
))
2842 // Create elfHeader early. We need a dummy section in
2843 // addReservedSymbols to mark the created symbols as not absolute.
2844 Out::elfHeader
= make
<OutputSection
>("", 0, SHF_ALLOC
);
2846 // We need to create some reserved symbols such as _end. Create them.
2847 if (!config
->relocatable
)
2848 addReservedSymbols();
2850 // Apply version scripts.
2852 // For a relocatable output, version scripts don't make sense, and
2853 // parsing a symbol version string (e.g. dropping "@ver1" from a symbol
2854 // name "foo@ver1") rather do harm, so we don't call this if -r is given.
2855 if (!config
->relocatable
) {
2856 llvm::TimeTraceScope
timeScope("Process symbol versions");
2857 symtab
.scanVersionScript();
2860 // Skip the normal linked output if some LTO options are specified.
2862 // For --thinlto-index-only, index file creation is performed in
2863 // compileBitcodeFiles, so we are done afterwards. --plugin-opt=emit-llvm and
2864 // --plugin-opt=emit-asm create output files in bitcode or assembly code,
2865 // respectively. When only certain thinLTO modules are specified for
2866 // compilation, the intermediate object file are the expected output.
2867 const bool skipLinkedOutput
= config
->thinLTOIndexOnly
|| config
->emitLLVM
||
2868 config
->ltoEmitAsm
||
2869 !config
->thinLTOModulesToCompile
.empty();
2871 // Handle --lto-validate-all-vtables-have-type-infos.
2872 if (config
->ltoValidateAllVtablesHaveTypeInfos
)
2873 invokeELFT(ltoValidateAllVtablesHaveTypeInfos
, args
);
2875 // Do link-time optimization if given files are LLVM bitcode files.
2876 // This compiles bitcode files into real object files.
2878 // With this the symbol table should be complete. After this, no new names
2879 // except a few linker-synthesized ones will be added to the symbol table.
2880 const size_t numObjsBeforeLTO
= ctx
.objectFiles
.size();
2881 invokeELFT(compileBitcodeFiles
, skipLinkedOutput
);
2883 // Symbol resolution finished. Report backward reference problems,
2884 // --print-archive-stats=, and --why-extract=.
2886 writeArchiveStats();
2891 // Bail out if normal linked output is skipped due to LTO.
2892 if (skipLinkedOutput
)
2895 // compileBitcodeFiles may have produced lto.tmp object files. After this, no
2896 // more file will be added.
2897 auto newObjectFiles
= ArrayRef(ctx
.objectFiles
).slice(numObjsBeforeLTO
);
2898 parallelForEach(newObjectFiles
, [](ELFFileBase
*file
) {
2899 initSectionsAndLocalSyms(file
, /*ignoreComdats=*/true);
2901 parallelForEach(newObjectFiles
, postParseObjectFile
);
2902 for (const DuplicateSymbol
&d
: ctx
.duplicates
)
2903 reportDuplicate(*d
.sym
, d
.file
, d
.section
, d
.value
);
2905 // Handle --exclude-libs again because lto.tmp may reference additional
2906 // libcalls symbols defined in an excluded archive. This may override
2907 // versionId set by scanVersionScript().
2908 if (args
.hasArg(OPT_exclude_libs
))
2911 // Record [__acle_se_<sym>, <sym>] pairs for later processing.
2912 processArmCmseSymbols();
2914 // Apply symbol renames for --wrap and combine foo@v1 and foo@@v1.
2915 redirectSymbols(wrapped
);
2917 // Replace common symbols with regular symbols.
2918 replaceCommonSymbols();
2921 llvm::TimeTraceScope
timeScope("Aggregate sections");
2922 // Now that we have a complete list of input files.
2923 // Beyond this point, no new files are added.
2924 // Aggregate all input sections into one place.
2925 for (InputFile
*f
: ctx
.objectFiles
) {
2926 for (InputSectionBase
*s
: f
->getSections()) {
2927 if (!s
|| s
== &InputSection::discarded
)
2929 if (LLVM_UNLIKELY(isa
<EhInputSection
>(s
)))
2930 ctx
.ehInputSections
.push_back(cast
<EhInputSection
>(s
));
2932 ctx
.inputSections
.push_back(s
);
2935 for (BinaryFile
*f
: ctx
.binaryFiles
)
2936 for (InputSectionBase
*s
: f
->getSections())
2937 ctx
.inputSections
.push_back(cast
<InputSection
>(s
));
2941 llvm::TimeTraceScope
timeScope("Strip sections");
2942 if (ctx
.hasSympart
.load(std::memory_order_relaxed
)) {
2943 llvm::erase_if(ctx
.inputSections
, [](InputSectionBase
*s
) {
2944 if (s
->type
!= SHT_LLVM_SYMPART
)
2946 invokeELFT(readSymbolPartitionSection
, s
);
2950 // We do not want to emit debug sections if --strip-all
2951 // or --strip-debug are given.
2952 if (config
->strip
!= StripPolicy::None
) {
2953 llvm::erase_if(ctx
.inputSections
, [](InputSectionBase
*s
) {
2954 if (isDebugSection(*s
))
2956 if (auto *isec
= dyn_cast
<InputSection
>(s
))
2957 if (InputSectionBase
*rel
= isec
->getRelocatedSection())
2958 if (isDebugSection(*rel
))
2966 // Since we now have a complete set of input files, we can create
2967 // a .d file to record build dependencies.
2968 if (!config
->dependencyFile
.empty())
2969 writeDependencyFile();
2971 // Now that the number of partitions is fixed, save a pointer to the main
2973 mainPart
= &partitions
[0];
2975 // Read .note.gnu.property sections from input object files which
2976 // contain a hint to tweak linker's and loader's behaviors.
2977 config
->andFeatures
= getAndFeatures();
2979 // The Target instance handles target-specific stuff, such as applying
2980 // relocations or writing a PLT section. It also contains target-dependent
2981 // values such as a default image base address.
2982 target
= getTarget();
2984 config
->eflags
= target
->calcEFlags();
2985 // maxPageSize (sometimes called abi page size) is the maximum page size that
2986 // the output can be run on. For example if the OS can use 4k or 64k page
2987 // sizes then maxPageSize must be 64k for the output to be useable on both.
2988 // All important alignment decisions must use this value.
2989 config
->maxPageSize
= getMaxPageSize(args
);
2990 // commonPageSize is the most common page size that the output will be run on.
2991 // For example if an OS can use 4k or 64k page sizes and 4k is more common
2992 // than 64k then commonPageSize is set to 4k. commonPageSize can be used for
2993 // optimizations such as DATA_SEGMENT_ALIGN in linker scripts. LLD's use of it
2994 // is limited to writing trap instructions on the last executable segment.
2995 config
->commonPageSize
= getCommonPageSize(args
);
2997 config
->imageBase
= getImageBase(args
);
2999 // This adds a .comment section containing a version string.
3000 if (!config
->relocatable
)
3001 ctx
.inputSections
.push_back(createCommentSection());
3003 // Split SHF_MERGE and .eh_frame sections into pieces in preparation for garbage collection.
3004 invokeELFT(splitSections
,);
3006 // Garbage collection and removal of shared symbols from unused shared objects.
3007 invokeELFT(markLive
,);
3009 // Make copies of any input sections that need to be copied into each
3011 copySectionsIntoPartitions();
3013 if (canHaveMemtagGlobals()) {
3014 llvm::TimeTraceScope
timeScope("Process memory tagged symbols");
3015 createTaggedSymbols(ctx
.objectFiles
);
3018 // Create synthesized sections such as .got and .plt. This is called before
3019 // processSectionCommands() so that they can be placed by SECTIONS commands.
3020 invokeELFT(createSyntheticSections
,);
3022 // Some input sections that are used for exception handling need to be moved
3023 // into synthetic sections. Do that now so that they aren't assigned to
3024 // output sections in the usual way.
3025 if (!config
->relocatable
)
3026 combineEhSections();
3028 // Merge .riscv.attributes sections.
3029 if (config
->emachine
== EM_RISCV
)
3030 mergeRISCVAttributesSections();
3033 llvm::TimeTraceScope
timeScope("Assign sections");
3035 // Create output sections described by SECTIONS commands.
3036 script
->processSectionCommands();
3038 // Linker scripts control how input sections are assigned to output
3039 // sections. Input sections that were not handled by scripts are called
3040 // "orphans", and they are assigned to output sections by the default rule.
3042 script
->addOrphanSections();
3046 llvm::TimeTraceScope
timeScope("Merge/finalize input sections");
3048 // Migrate InputSectionDescription::sectionBases to sections. This includes
3049 // merging MergeInputSections into a single MergeSyntheticSection. From this
3050 // point onwards InputSectionDescription::sections should be used instead of
3052 for (SectionCommand
*cmd
: script
->sectionCommands
)
3053 if (auto *osd
= dyn_cast
<OutputDesc
>(cmd
))
3054 osd
->osec
.finalizeInputSections();
3057 // Two input sections with different output sections should not be folded.
3058 // ICF runs after processSectionCommands() so that we know the output sections.
3059 if (config
->icf
!= ICFLevel::None
) {
3060 invokeELFT(findKeepUniqueSections
, args
);
3064 // Read the callgraph now that we know what was gced or icfed
3065 if (config
->callGraphProfileSort
!= CGProfileSortKind::None
) {
3066 if (auto *arg
= args
.getLastArg(OPT_call_graph_ordering_file
))
3067 if (std::optional
<MemoryBufferRef
> buffer
= readFile(arg
->getValue()))
3068 readCallGraph(*buffer
);
3069 invokeELFT(readCallGraphsFromObjectFiles
,);
3072 // Write the result to the file.
3073 invokeELFT(writeResult
,);