blob: 13b6119e2dc91cfcdaedb38be65fbc7f642da17f [file] [log] [blame]
Michael J. Spencer84487f12015-07-24 21:03:071//===- Driver.cpp ---------------------------------------------------------===//
2//
3// The LLVM Linker
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
Rui Ueyamaec29bee2017-01-26 01:52:059//
10// The driver drives the entire linking process. It is responsible for
11// parsing command line options and doing whatever it is instructed to do.
12//
13// One notable thing in the LLD's driver when compared to other linkers is
14// that the LLD's driver is agnostic on the host operating system.
15// Other linkers usually have implicit default values (such as a dynamic
16// linker path or library paths) for each host OS.
17//
18// I don't think implicit default values are useful because they are
19// usually explicitly specified by the compiler driver. They can even
20// be harmful when you are doing cross-linking. Therefore, in LLD, we
Rui Ueyama81cb7102017-03-24 00:15:5721// simply trust the compiler driver to pass all required options and
22// don't try to make effort on our side.
Rui Ueyamaec29bee2017-01-26 01:52:0523//
24//===----------------------------------------------------------------------===//
Michael J. Spencer84487f12015-07-24 21:03:0725
Rui Ueyamaafff74e22015-08-05 23:24:4626#include "Driver.h"
Rafael Espindola192e1fa2015-08-06 15:08:2327#include "Config.h"
Rui Ueyama9b55e922017-03-24 00:15:1628#include "Filesystem.h"
Rui Ueyama0b289522016-02-25 18:43:5129#include "ICF.h"
Rui Ueyamaafff74e22015-08-05 23:24:4630#include "InputFiles.h"
Rui Ueyamab91bf1a2016-05-23 16:55:4331#include "InputSection.h"
Rui Ueyama717677a2016-02-11 21:17:5932#include "LinkerScript.h"
Sam Cleggf187c4d2018-02-20 22:09:5933#include "MarkLive.h"
George Rimara8dba482017-03-20 10:09:5834#include "OutputSections.h"
Rui Ueyama2ec34542017-04-05 05:07:3935#include "ScriptParser.h"
Rui Ueyamaafff74e22015-08-05 23:24:4636#include "SymbolTable.h"
Rafael Espindolad26b52f2017-12-09 16:56:1837#include "Symbols.h"
Peter Collingbournedc7936e2017-06-12 00:00:5138#include "SyntheticSections.h"
Rui Ueyamaff777682015-10-09 21:12:4039#include "Target.h"
Michael J. Spencer84487f12015-07-24 21:03:0740#include "Writer.h"
Rui Ueyama3e039442017-11-28 19:58:4541#include "lld/Common/Args.h"
Rui Ueyama3f851702017-10-02 21:00:4142#include "lld/Common/Driver.h"
Bob Haarmanb8a59c82017-10-25 22:28:3843#include "lld/Common/ErrorHandler.h"
Rui Ueyama2017d522017-11-28 20:39:1744#include "lld/Common/Memory.h"
Rui Ueyamaee173712018-02-28 17:38:1945#include "lld/Common/Strings.h"
George Rimar9dc740d2018-02-06 12:20:0546#include "lld/Common/TargetOptionsCommandFlags.h"
Bob Haarman4f5c8c22017-10-13 18:22:5547#include "lld/Common/Threads.h"
Rui Ueyama3f851702017-10-02 21:00:4148#include "lld/Common/Version.h"
James Hendersonde300e62018-02-14 13:36:2249#include "llvm/ADT/SetVector.h"
Rafael Espindola2e9eac12015-09-11 21:18:5650#include "llvm/ADT/StringExtras.h"
Rui Ueyama7b14a622016-06-07 17:55:0551#include "llvm/ADT/StringSwitch.h"
Peter Collingbournecd513a42016-11-11 19:50:2452#include "llvm/Support/CommandLine.h"
George Rimardbf93392017-04-17 08:58:1253#include "llvm/Support/Compression.h"
Peter Collingbournea327a4c2018-07-18 22:49:3154#include "llvm/Support/LEB128.h"
Rui Ueyama7f1f9122017-01-06 02:33:5355#include "llvm/Support/Path.h"
Rui Ueyamaec1c75e2017-01-09 01:42:0256#include "llvm/Support/TarWriter.h"
Rafael Espindola9f77ef02016-02-12 20:54:5757#include "llvm/Support/TargetSelect.h"
Rui Ueyamaa4672402015-10-11 02:03:0358#include "llvm/Support/raw_ostream.h"
Davide Italianoe160f0d2016-06-24 18:02:5059#include <cstdlib>
Rui Ueyamacacf9672015-10-11 02:22:3160#include <utility>
Michael J. Spencer84487f12015-07-24 21:03:0761
62using namespace llvm;
Denis Protivensky1ef7b3f2015-10-07 09:13:0363using namespace llvm::ELF;
Rui Ueyama3ce825e2015-10-09 21:07:2564using namespace llvm::object;
Rui Ueyama673b6092016-04-26 20:36:4665using namespace llvm::sys;
Rui Ueyamad19bc042018-09-20 21:29:1466using namespace llvm::support;
Michael J. Spencer84487f12015-07-24 21:03:0767
68using namespace lld;
Rafael Espindolae0df00b2016-02-28 00:25:5469using namespace lld::elf;
Michael J. Spencer84487f12015-07-24 21:03:0770
Rafael Espindolae0df00b2016-02-28 00:25:5471Configuration *elf::Config;
72LinkerDriver *elf::Driver;
Rui Ueyamaf5c4aca2015-09-30 17:06:0973
Rafael Espindola7a7a81d2018-02-05 20:55:4674static void setConfigs(opt::InputArgList &Args);
Rui Ueyamad57e74b72017-03-17 23:29:0175
Rafael Espindolacb09daa2016-10-26 18:59:0076bool elf::link(ArrayRef<const char *> Args, bool CanExitEarly,
77 raw_ostream &Error) {
Rui Ueyama41831202018-08-27 06:18:1078 errorHandler().LogName = args::getFilenameWithoutExe(Args[0]);
Bob Haarmanb8a59c82017-10-25 22:28:3879 errorHandler().ErrorLimitExceededMsg =
80 "too many errors emitted, stopping now (use "
81 "-error-limit=0 to see all errors)";
82 errorHandler().ErrorOS = &Error;
Rui Ueyama7c9ad292018-02-16 23:41:4883 errorHandler().ExitEarly = CanExitEarly;
Bob Haarmanb8a59c82017-10-25 22:28:3884 errorHandler().ColorDiagnostics = Error.has_colors();
Rui Ueyama7c9ad292018-02-16 23:41:4885
Rui Ueyama536a2672017-02-27 02:32:0886 InputSections.clear();
Evgeny Mankov31fef4d2017-09-25 14:42:1587 OutputSections.clear();
Evgeny Mankov31fef4d2017-09-25 14:42:1588 BinaryFiles.clear();
89 BitcodeFiles.clear();
90 ObjectFiles.clear();
91 SharedFiles.clear();
Rui Ueyama07320e42016-04-20 20:13:4192
Rui Ueyama6f6d46d2016-12-08 17:48:5293 Config = make<Configuration>();
94 Driver = make<LinkerDriver>();
Rui Ueyamaa34da932017-03-21 23:03:0995 Script = make<LinkerScript>();
Rafael Espindola244ef982017-07-26 18:42:4896 Symtab = make<SymbolTable>();
Rui Ueyama4e247522018-09-25 19:26:5897
98 Tar = nullptr;
99 memset(&In, 0, sizeof(In));
100
Rafael Espindola64626b32018-02-06 22:37:05101 Config->ProgName = Args[0];
Rui Ueyama07320e42016-04-20 20:13:41102
Rui Ueyama7c9ad292018-02-16 23:41:48103 Driver->main(Args);
Rui Ueyama7d1f5fd2017-10-04 00:50:11104
105 // Exit immediately if we don't need to return to the caller.
106 // This saves time because the overhead of calling destructors
107 // for all globally-allocated objects is not negligible.
Rui Ueyama7c9ad292018-02-16 23:41:48108 if (CanExitEarly)
Bob Haarmanb8a59c82017-10-25 22:28:38109 exitLld(errorCount() ? 1 : 0);
Rui Ueyama7d1f5fd2017-10-04 00:50:11110
Rui Ueyama55518e72016-10-28 20:57:25111 freeArena();
Bob Haarmanb8a59c82017-10-25 22:28:38112 return !errorCount();
Michael J. Spencer84487f12015-07-24 21:03:07113}
114
Rui Ueyama7b14a622016-06-07 17:55:05115// Parses a linker -m option.
Rui Ueyama58026af2016-11-09 22:32:43116static std::tuple<ELFKind, uint16_t, uint8_t> parseEmulation(StringRef Emul) {
Rafael Espindola7cc713a2016-10-27 14:00:51117 uint8_t OSABI = 0;
Ed Maste2b68ada2016-09-08 19:36:22118 StringRef S = Emul;
Rafael Espindola7cc713a2016-10-27 14:00:51119 if (S.endswith("_fbsd")) {
Ed Mastee2b76772016-03-31 20:26:30120 S = S.drop_back(5);
Rafael Espindola7cc713a2016-10-27 14:00:51121 OSABI = ELFOSABI_FREEBSD;
122 }
Rui Ueyama7b14a622016-06-07 17:55:05123
124 std::pair<ELFKind, uint16_t> Ret =
125 StringSwitch<std::pair<ELFKind, uint16_t>>(S)
Peter Smith2689d9f2018-05-04 14:28:29126 .Cases("aarch64elf", "aarch64linux", "aarch64_elf64_le_vec",
127 {ELF64LEKind, EM_AARCH64})
Eugene Leviantad270ec2017-06-14 08:25:38128 .Cases("armelf", "armelf_linux_eabi", {ELF32LEKind, EM_ARM})
Rui Ueyama1e52f252016-07-12 23:28:33129 .Case("elf32_x86_64", {ELF32LEKind, EM_X86_64})
Rui Ueyama8e0c3262017-01-30 01:50:16130 .Cases("elf32btsmip", "elf32btsmipn32", {ELF32BEKind, EM_MIPS})
131 .Cases("elf32ltsmip", "elf32ltsmipn32", {ELF32LEKind, EM_MIPS})
Rui Ueyama5cd9c6b2018-08-09 17:59:56132 .Case("elf32lriscv", {ELF32LEKind, EM_RISCV})
Rui Ueyama7b14a622016-06-07 17:55:05133 .Case("elf32ppc", {ELF32BEKind, EM_PPC})
134 .Case("elf64btsmip", {ELF64BEKind, EM_MIPS})
135 .Case("elf64ltsmip", {ELF64LEKind, EM_MIPS})
Rui Ueyama5cd9c6b2018-08-09 17:59:56136 .Case("elf64lriscv", {ELF64LEKind, EM_RISCV})
Rui Ueyama7b14a622016-06-07 17:55:05137 .Case("elf64ppc", {ELF64BEKind, EM_PPC64})
Fangrui Song17208f12018-03-09 22:11:46138 .Case("elf64lppc", {ELF64LEKind, EM_PPC64})
Rui Ueyamac79ecdd2016-09-30 22:01:25139 .Cases("elf_amd64", "elf_x86_64", {ELF64LEKind, EM_X86_64})
Rui Ueyama7b14a622016-06-07 17:55:05140 .Case("elf_i386", {ELF32LEKind, EM_386})
Rui Ueyama6c509902016-08-03 20:15:56141 .Case("elf_iamcu", {ELF32LEKind, EM_IAMCU})
Rui Ueyama7b14a622016-06-07 17:55:05142 .Default({ELFNoneKind, EM_NONE});
143
Martell Malone894dbbe2017-09-11 17:02:59144 if (Ret.first == ELFNoneKind)
145 error("unknown emulation: " + Emul);
Rui Ueyama58026af2016-11-09 22:32:43146 return std::make_tuple(Ret.first, Ret.second, OSABI);
Denis Protivensky1ef7b3f2015-10-07 09:13:03147}
148
Rui Ueyama9b093692016-01-06 00:51:35149// Returns slices of MB by parsing MB as an archive file.
150// Each slice consists of a member file in the archive.
Rafael Espindola0b1413a2017-05-05 15:08:06151std::vector<std::pair<MemoryBufferRef, uint64_t>> static getArchiveMembers(
152 MemoryBufferRef MB) {
Rafael Espindola1130935c2016-03-03 16:21:44153 std::unique_ptr<Archive> File =
Rui Ueyamabdc51502017-12-06 22:08:17154 CHECK(Archive::create(MB),
Eugene Leviant7d7ff802016-11-21 09:28:07155 MB.getBufferIdentifier() + ": failed to parse archive");
Rui Ueyama9b093692016-01-06 00:51:35156
Rafael Espindola0b1413a2017-05-05 15:08:06157 std::vector<std::pair<MemoryBufferRef, uint64_t>> V;
Mehdi Amini41af4302016-11-11 04:28:40158 Error Err = Error::success();
Rafael Espindola9e502912017-09-20 22:59:50159 bool AddToTar = File->isThin() && Tar;
Lang Hames622ef172016-07-14 02:35:18160 for (const ErrorOr<Archive::Child> &COrErr : File->children(Err)) {
Eugene Leviant7d7ff802016-11-21 09:28:07161 Archive::Child C =
Rui Ueyamabdc51502017-12-06 22:08:17162 CHECK(COrErr, MB.getBufferIdentifier() +
Eugene Leviant7d7ff802016-11-21 09:28:07163 ": could not get the child of the archive");
Rui Ueyama7e71c612016-04-02 19:09:07164 MemoryBufferRef MBRef =
Rui Ueyamabdc51502017-12-06 22:08:17165 CHECK(C.getMemoryBufferRef(),
Eugene Leviant7d7ff802016-11-21 09:28:07166 MB.getBufferIdentifier() +
167 ": could not get the buffer for a child of the archive");
Rafael Espindola9e502912017-09-20 22:59:50168 if (AddToTar)
169 Tar->append(relativeToRoot(check(C.getFullName())), MBRef.getBuffer());
Rafael Espindola0b1413a2017-05-05 15:08:06170 V.push_back(std::make_pair(MBRef, C.getChildOffset()));
Rui Ueyama9b093692016-01-06 00:51:35171 }
Rui Ueyamaf8292e92016-07-15 02:01:03172 if (Err)
Eugene Leviant7d7ff802016-11-21 09:28:07173 fatal(MB.getBufferIdentifier() + ": Archive::children failed: " +
174 toString(std::move(Err)));
Peter Collingbourned418b1d2016-03-31 23:12:18175
176 // Take ownership of memory buffers created for members of thin archives.
177 for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers())
Rui Ueyama58841b42016-12-23 03:19:09178 make<std::unique_ptr<MemoryBuffer>>(std::move(MB));
Peter Collingbourned418b1d2016-03-31 23:12:18179
Rui Ueyama9b093692016-01-06 00:51:35180 return V;
181}
182
Rui Ueyamab201a202017-05-03 23:10:33183// Opens a file and create a file object. Path has to be resolved already.
Evgeniy Stepanova76349b2017-04-12 00:13:48184void LinkerDriver::addFile(StringRef Path, bool WithLOption) {
Rui Ueyama5002a672016-05-02 19:59:56185 using namespace sys::fs;
Davide Italiano034f58a92016-04-26 00:22:24186
Adhemerval Zanella9df07202016-04-13 18:51:11187 Optional<MemoryBufferRef> Buffer = readFile(Path);
188 if (!Buffer.hasValue())
Rui Ueyama21eecb42016-02-02 21:13:09189 return;
Adhemerval Zanella9df07202016-04-13 18:51:11190 MemoryBufferRef MBRef = *Buffer;
Rui Ueyama983ed2b2015-10-01 15:23:09191
Rui Ueyamae262bb12018-08-06 21:29:41192 if (Config->FormatBinary) {
Rui Ueyamad52adb32016-11-01 22:53:18193 Files.push_back(make<BinaryFile>(MBRef));
Michael J. Spencera9424f32016-09-09 22:08:04194 return;
195 }
196
Rui Ueyama983ed2b2015-10-01 15:23:09197 switch (identify_magic(MBRef.getBuffer())) {
198 case file_magic::unknown:
Rui Ueyama07320e42016-04-20 20:13:41199 readLinkerScript(MBRef);
Rui Ueyama983ed2b2015-10-01 15:23:09200 return;
Rui Ueyamafd7deda2017-05-03 21:03:08201 case file_magic::archive: {
202 // Handle -whole-archive.
Rui Ueyamac773c9f2016-10-26 04:01:07203 if (InWholeArchive) {
Rafael Espindola0b1413a2017-05-05 15:08:06204 for (const auto &P : getArchiveMembers(MBRef))
205 Files.push_back(createObjectFile(P.first, Path, P.second));
Rui Ueyama3ce825e2015-10-09 21:07:25206 return;
207 }
Rui Ueyamafd7deda2017-05-03 21:03:08208
209 std::unique_ptr<Archive> File =
Rui Ueyamabdc51502017-12-06 22:08:17210 CHECK(Archive::create(MBRef), Path + ": failed to parse archive");
Rui Ueyamafd7deda2017-05-03 21:03:08211
212 // If an archive file has no symbol table, it is likely that a user
213 // is attempting LTO and using a default ar command that doesn't
214 // understand the LLVM bitcode file. It is a pretty common error, so
215 // we'll handle it as if it had a symbol table.
George Rimar1840901a2017-06-09 12:26:57216 if (!File->isEmpty() && !File->hasSymbolTable()) {
Rafael Espindola0b1413a2017-05-05 15:08:06217 for (const auto &P : getArchiveMembers(MBRef))
Rui Ueyama709fb2bb12017-07-26 22:13:32218 Files.push_back(make<LazyObjFile>(P.first, Path, P.second));
Rui Ueyamafd7deda2017-05-03 21:03:08219 return;
220 }
221
222 // Handle the regular case.
223 Files.push_back(make<ArchiveFile>(std::move(File)));
Rui Ueyama983ed2b2015-10-01 15:23:09224 return;
Rui Ueyamafd7deda2017-05-03 21:03:08225 }
Rafael Espindolaaf707642015-10-12 01:55:32226 case file_magic::elf_shared_object:
Rui Ueyamaa01246b2018-12-18 22:30:23227 if (Config->Static || Config->Relocatable) {
George Rimar777f9632016-03-12 08:31:34228 error("attempted static link of dynamic object " + Path);
George Rimar58941ee2016-02-25 08:23:37229 return;
230 }
Rui Ueyamad2ccdbfa2017-06-21 03:05:08231
Rui Ueyama3233d3e2017-04-13 00:23:32232 // DSOs usually have DT_SONAME tags in their ELF headers, and the
233 // sonames are used to identify DSOs. But if they are missing,
234 // they are identified by filenames. We don't know whether the new
235 // file has a DT_SONAME or not because we haven't parsed it yet.
236 // Here, we set the default soname for the file because we might
237 // need it later.
238 //
239 // If a file was specified by -lfoo, the directory part is not
240 // significant, as a user did not specify it. This behavior is
241 // compatible with GNU.
Rui Ueyamad2ccdbfa2017-06-21 03:05:08242 Files.push_back(
243 createSharedFile(MBRef, WithLOption ? path::filename(Path) : Path));
Rui Ueyama983ed2b2015-10-01 15:23:09244 return;
Rui Ueyamad0de2392018-02-02 00:27:49245 case file_magic::bitcode:
246 case file_magic::elf_relocatable:
Rui Ueyamaf8baa662016-04-07 19:24:51247 if (InLib)
Rui Ueyama709fb2bb12017-07-26 22:13:32248 Files.push_back(make<LazyObjFile>(MBRef, "", 0));
Rui Ueyamaf8baa662016-04-07 19:24:51249 else
Rui Ueyama55518e72016-10-28 20:57:25250 Files.push_back(createObjectFile(MBRef));
Rui Ueyamad0de2392018-02-02 00:27:49251 break;
252 default:
253 error(Path + ": unknown file type");
Rui Ueyama983ed2b2015-10-01 15:23:09254 }
Rui Ueyamaf5c4aca2015-09-30 17:06:09255}
256
Rui Ueyama21eecb42016-02-02 21:13:09257// Add a given library by searching it from input search paths.
258void LinkerDriver::addLibrary(StringRef Name) {
Rui Ueyama061f9282016-11-19 19:23:58259 if (Optional<std::string> Path = searchLibrary(Name))
Evgeniy Stepanova76349b2017-04-12 00:13:48260 addFile(*Path, /*WithLOption=*/true);
Davide Italianobfccefd2016-04-24 18:23:21261 else
Rui Ueyama061f9282016-11-19 19:23:58262 error("unable to find library -l" + Name);
Rui Ueyama21eecb42016-02-02 21:13:09263}
264
Rui Ueyama1fc5d482016-04-02 18:18:44265// This function is called on startup. We need this for LTO since
266// LTO calls LLVM functions to compile bitcode files to native code.
267// Technically this can be delayed until we read bitcode files, but
268// we don't bother to do lazily because the initialization is fast.
George Rimar9dc740d2018-02-06 12:20:05269static void initLLVM() {
Rui Ueyama1fc5d482016-04-02 18:18:44270 InitializeAllTargets();
271 InitializeAllTargetMCs();
272 InitializeAllAsmPrinters();
273 InitializeAllAsmParsers();
Rui Ueyama1fc5d482016-04-02 18:18:44274}
275
Rui Ueyamad32c63d2016-01-07 17:33:25276// Some command line options or some combinations of them are not allowed.
277// This function checks for such errors.
Sam Cleggd5f65062018-11-15 18:09:41278static void checkOptions() {
Rui Ueyamad32c63d2016-01-07 17:33:25279 // The MIPS ABI as of 2016 does not support the GNU-style symbol lookup
280 // table which is a relatively new feature.
281 if (Config->EMachine == EM_MIPS && Config->GnuHash)
Rui Ueyama9db06422018-10-25 18:07:55282 error("the .gnu.hash section is not compatible with the MIPS target");
Rui Ueyamad32c63d2016-01-07 17:33:25283
Peter Smith732cd8c2017-12-05 15:59:05284 if (Config->FixCortexA53Errata843419 && Config->EMachine != EM_AARCH64)
Rui Ueyama9db06422018-10-25 18:07:55285 error("--fix-cortex-a53-843419 is only supported on AArch64 targets");
Peter Smith732cd8c2017-12-05 15:59:05286
Sean Fertile7f3f05e2018-09-20 00:26:44287 if (Config->TocOptimize && Config->EMachine != EM_PPC64)
Rui Ueyama9db06422018-10-25 18:07:55288 error("--toc-optimize is only supported on the PowerPC64 target");
Sean Fertile7f3f05e2018-09-20 00:26:44289
George Rimar786e8662016-03-17 05:57:33290 if (Config->Pie && Config->Shared)
291 error("-shared and -pie may not be used together");
292
George Rimarf525c922017-07-17 09:43:18293 if (!Config->Shared && !Config->FilterList.empty())
294 error("-F may not be used without -shared");
295
Rui Ueyamacf8247e2017-04-26 21:27:33296 if (!Config->Shared && !Config->AuxiliaryList.empty())
297 error("-f may not be used without -shared");
298
Rafael Espindola477ff122017-11-30 20:46:33299 if (!Config->Relocatable && !Config->DefineCommon)
300 error("-no-define-common not supported in non relocatable output");
301
Rui Ueyamad1aa97b2016-04-02 18:52:23302 if (Config->Relocatable) {
303 if (Config->Shared)
304 error("-r and -shared may not be used together");
305 if (Config->GcSections)
306 error("-r and --gc-sections may not be used together");
Fangrui Song4a294822018-07-18 22:02:48307 if (Config->GdbIndex)
308 error("-r and --gdb-index may not be used together");
Peter Collingbournea327a4c2018-07-18 22:49:31309 if (Config->ICF != ICFLevel::None)
Rui Ueyamad1aa97b2016-04-02 18:52:23310 error("-r and --icf may not be used together");
311 if (Config->Pie)
312 error("-r and -pie may not be used together");
313 }
David Bolvanskya932cd42018-07-30 17:02:46314
315 if (Config->ExecuteOnly) {
316 if (Config->EMachine != EM_AARCH64)
317 error("-execute-only is only supported on AArch64 targets");
318
319 if (Config->SingleRoRx && !Script->HasSectionsCommand)
320 error("-execute-only and -no-rosegment cannot be used together");
321 }
Rui Ueyamad32c63d2016-01-07 17:33:25322}
323
Davide Italianoe160f0d2016-06-24 18:02:50324static const char *getReproduceOption(opt::InputArgList &Args) {
Rui Ueyamab1421a12016-06-25 04:37:56325 if (auto *Arg = Args.getLastArg(OPT_reproduce))
326 return Arg->getValue();
Davide Italianoe160f0d2016-06-24 18:02:50327 return getenv("LLD_REPRODUCE");
328}
329
Rui Ueyama1a8fffa2015-11-12 19:00:37330static bool hasZOption(opt::InputArgList &Args, StringRef Key) {
331 for (auto *Arg : Args.filtered(OPT_z))
332 if (Key == Arg->getValue())
333 return true;
334 return false;
335}
336
Rui Ueyama88fe5c92018-04-20 21:24:08337static bool getZFlag(opt::InputArgList &Args, StringRef K1, StringRef K2,
338 bool Default) {
339 for (auto *Arg : Args.filtered_reverse(OPT_z)) {
340 if (K1 == Arg->getValue())
341 return true;
342 if (K2 == Arg->getValue())
343 return false;
344 }
345 return Default;
346}
347
Rui Ueyamaa0716692018-09-20 21:40:38348static bool isKnownZFlag(StringRef S) {
Rui Ueyama2fa06042018-06-27 07:22:27349 return S == "combreloc" || S == "copyreloc" || S == "defs" ||
George Rimar27bbe7d2018-08-28 08:24:34350 S == "execstack" || S == "global" || S == "hazardplt" ||
Ed Mastec0b474f2018-09-14 14:25:37351 S == "initfirst" || S == "interpose" ||
352 S == "keep-text-section-prefix" || S == "lazy" || S == "muldefs" ||
George Rimara1b3ddb2018-11-27 09:48:17353 S == "nocombreloc" || S == "nocopyreloc" || S == "nodefaultlib" ||
354 S == "nodelete" || S == "nodlopen" || S == "noexecstack" ||
Rui Ueyama53f6bfb2018-06-27 07:56:23355 S == "nokeep-text-section-prefix" || S == "norelro" || S == "notext" ||
356 S == "now" || S == "origin" || S == "relro" || S == "retpolineplt" ||
357 S == "rodynamic" || S == "text" || S == "wxneeded" ||
358 S.startswith("max-page-size=") || S.startswith("stack-size=");
Rui Ueyama2fa06042018-06-27 07:22:27359}
360
361// Report an error for an unknown -z option.
362static void checkZOptions(opt::InputArgList &Args) {
363 for (auto *Arg : Args.filtered(OPT_z))
Rui Ueyamaa0716692018-09-20 21:40:38364 if (!isKnownZFlag(Arg->getValue()))
Rui Ueyama2fa06042018-06-27 07:22:27365 error("unknown -z value: " + StringRef(Arg->getValue()));
366}
367
Rui Ueyama7c9ad292018-02-16 23:41:48368void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
Rui Ueyama15fa0352016-03-15 18:20:50369 ELFOptTable Parser;
370 opt::InputArgList Args = Parser.parse(ArgsArr.slice(1));
Rui Ueyama72b1ee22016-11-26 15:10:01371
Rui Ueyama398f55f2016-12-20 02:17:24372 // Interpret this flag early because error() depends on them.
Rui Ueyama3e039442017-11-28 19:58:45373 errorHandler().ErrorLimit = args::getInteger(Args, OPT_error_limit, 20);
Rui Ueyama72b1ee22016-11-26 15:10:01374
375 // Handle -help
Rui Ueyama1eb9f442016-02-28 03:18:09376 if (Args.hasArg(OPT_help)) {
Rafael Espindola64626b32018-02-06 22:37:05377 printHelp();
Rui Ueyama1eb9f442016-02-28 03:18:09378 return;
379 }
George Rimar0a94bff2016-11-19 18:14:24380
Rui Ueyamabdc8bc02017-03-22 18:04:57381 // Handle -v or -version.
382 //
383 // A note about "compatible with GNU linkers" message: this is a hack for
384 // scripts generated by GNU Libtool 2.4.6 (released in February 2014 and
385 // still the newest version in March 2017) or earlier to recognize LLD as
386 // a GNU compatible linker. As long as an output for the -v option
387 // contains "GNU" or "with BFD", they recognize us as GNU-compatible.
388 //
389 // This is somewhat ugly hack, but in reality, we had no choice other
390 // than doing this. Considering the very long release cycle of Libtool,
391 // it is not easy to improve it to recognize LLD as a GNU compatible
392 // linker in a timely manner. Even if we can make it, there are still a
393 // lot of "configure" scripts out there that are generated by old version
394 // of Libtool. We cannot convince every software developer to migrate to
395 // the latest version and re-generate scripts. So we have this hack.
396 if (Args.hasArg(OPT_v) || Args.hasArg(OPT_version))
397 message(getLLDVersion() + " (compatible with GNU linkers)");
398
Davide Italianoe160f0d2016-06-24 18:02:50399 if (const char *Path = getReproduceOption(Args)) {
Rui Ueyamafe658772016-05-15 17:10:23400 // Note that --reproduce is a debug option so you can ignore it
401 // if you are trying to understand the whole picture of the code.
Rui Ueyama7f1f9122017-01-06 02:33:53402 Expected<std::unique_ptr<TarWriter>> ErrOrWriter =
403 TarWriter::create(Path, path::stem(Path));
404 if (ErrOrWriter) {
Rui Ueyama2d7d1282018-12-18 23:50:37405 Tar = std::move(*ErrOrWriter);
Rui Ueyama7f1f9122017-01-06 02:33:53406 Tar->append("response.txt", createResponseFile(Args));
407 Tar->append("version.txt", getLLDVersion() + "\n");
Rui Ueyama7f1f9122017-01-06 02:33:53408 } else {
Rui Ueyama59618092018-12-18 23:33:10409 error("--reproduce: " + toString(ErrOrWriter.takeError()));
Rui Ueyama7f1f9122017-01-06 02:33:53410 }
Rafael Espindola1dd2b3d2016-05-03 17:30:44411 }
Davide Italiano034f58a92016-04-26 00:22:24412
Rafael Espindola698dba72016-06-05 13:19:39413 readConfigs(Args);
Rui Ueyama2fa06042018-06-27 07:22:27414 checkZOptions(Args);
George Rimaree9818602018-10-15 14:21:43415
416 // The behavior of -v or --version is a bit strange, but this is
417 // needed for compatibility with GNU linkers.
418 if (Args.hasArg(OPT_v) && !Args.hasArg(OPT_INPUT))
419 return;
420 if (Args.hasArg(OPT_version))
421 return;
422
George Rimar9dc740d2018-02-06 12:20:05423 initLLVM();
Rui Ueyama3ce825e2015-10-09 21:07:25424 createFiles(Args);
Rui Ueyama66f28f72018-06-05 16:13:40425 if (errorCount())
426 return;
427
Rui Ueyamac185c012016-10-20 04:47:47428 inferMachineType();
Rafael Espindola7a7a81d2018-02-05 20:55:46429 setConfigs(Args);
Sam Cleggd5f65062018-11-15 18:09:41430 checkOptions();
Bob Haarmanb8a59c82017-10-25 22:28:38431 if (errorCount())
Rui Ueyama21eecb42016-02-02 21:13:09432 return;
Rui Ueyamaf5bcf2a2015-11-12 18:54:15433
Rui Ueyamae717a712015-10-13 16:20:50434 switch (Config->EKind) {
Rui Ueyama3ce825e2015-10-09 21:07:25435 case ELF32LEKind:
436 link<ELF32LE>(Args);
437 return;
438 case ELF32BEKind:
439 link<ELF32BE>(Args);
440 return;
441 case ELF64LEKind:
442 link<ELF64LE>(Args);
443 return;
444 case ELF64BEKind:
445 link<ELF64BE>(Args);
446 return;
447 default:
Rui Ueyamac185c012016-10-20 04:47:47448 llvm_unreachable("unknown Config->EKind");
Rui Ueyama3ce825e2015-10-09 21:07:25449 }
450}
451
Rui Ueyamabd278492017-04-29 23:06:43452static std::string getRpath(opt::InputArgList &Args) {
Rui Ueyama3e039442017-11-28 19:58:45453 std::vector<StringRef> V = args::getStrings(Args, OPT_rpath);
Rui Ueyama7edde292017-02-25 01:51:44454 return llvm::join(V.begin(), V.end(), ":");
455}
456
Rui Ueyamadc0464c2017-01-29 01:59:11457// Determines what we should do if there are remaining unresolved
458// symbols after the name resolution.
459static UnresolvedPolicy getUnresolvedSymbolPolicy(opt::InputArgList &Args) {
Rui Ueyamaac7aaeb2017-10-24 20:59:55460 UnresolvedPolicy ErrorOrWarn = Args.hasFlag(OPT_error_unresolved_symbols,
461 OPT_warn_unresolved_symbols, true)
Rui Ueyama0cbf1fd2017-03-23 18:16:42462 ? UnresolvedPolicy::ReportError
463 : UnresolvedPolicy::Warn;
Rui Ueyamadc0464c2017-01-29 01:59:11464
465 // Process the last of -unresolved-symbols, -no-undefined or -z defs.
466 for (auto *Arg : llvm::reverse(Args)) {
467 switch (Arg->getOption().getID()) {
468 case OPT_unresolved_symbols: {
469 StringRef S = Arg->getValue();
470 if (S == "ignore-all" || S == "ignore-in-object-files")
471 return UnresolvedPolicy::Ignore;
472 if (S == "ignore-in-shared-libs" || S == "report-all")
473 return ErrorOrWarn;
474 error("unknown --unresolved-symbols value: " + S);
475 continue;
476 }
477 case OPT_no_undefined:
478 return ErrorOrWarn;
479 case OPT_z:
480 if (StringRef(Arg->getValue()) == "defs")
481 return ErrorOrWarn;
482 continue;
483 }
Davide Italianof8ff8fc2017-01-26 02:19:20484 }
485
Rui Ueyamadc0464c2017-01-29 01:59:11486 // -shared implies -unresolved-symbols=ignore-all because missing
487 // symbols are likely to be resolved at runtime using other DSOs.
488 if (Config->Shared)
489 return UnresolvedPolicy::Ignore;
490 return ErrorOrWarn;
George Rimare86dcd02016-06-29 12:35:04491}
492
Rui Ueyama10571cd2017-02-25 02:23:28493static Target2Policy getTarget2(opt::InputArgList &Args) {
Yuka Takahashi1f1378d2017-06-14 08:01:26494 StringRef S = Args.getLastArgValue(OPT_target2, "got-rel");
Rui Ueyama85a5e692017-04-29 22:56:38495 if (S == "rel")
496 return Target2Policy::Rel;
497 if (S == "abs")
498 return Target2Policy::Abs;
499 if (S == "got-rel")
500 return Target2Policy::GotRel;
501 error("unknown --target2 option: " + S);
Peter Smith9bbd4e22016-10-17 18:12:24502 return Target2Policy::GotRel;
503}
504
George Rimar86ce2672016-08-25 09:05:47505static bool isOutputFormatBinary(opt::InputArgList &Args) {
Rui Ueyama5530f232018-08-01 22:31:31506 StringRef S = Args.getLastArgValue(OPT_oformat, "elf");
507 if (S == "binary")
508 return true;
509 if (!S.startswith("elf"))
George Rimar86ce2672016-08-25 09:05:47510 error("unknown --oformat value: " + S);
George Rimar86ce2672016-08-25 09:05:47511 return false;
512}
513
Rui Ueyama10571cd2017-02-25 02:23:28514static DiscardPolicy getDiscard(opt::InputArgList &Args) {
Rui Ueyamaa4a643c2017-02-25 01:51:25515 if (Args.hasArg(OPT_relocatable))
Rafael Espindola61d052d2016-12-04 08:34:17516 return DiscardPolicy::None;
Rui Ueyama524d44c2017-02-25 02:12:37517
George Rimar9503f6d2016-08-31 08:46:30518 auto *Arg =
519 Args.getLastArg(OPT_discard_all, OPT_discard_locals, OPT_discard_none);
520 if (!Arg)
521 return DiscardPolicy::Default;
Rui Ueyama6af40162016-09-02 19:49:27522 if (Arg->getOption().getID() == OPT_discard_all)
George Rimar9503f6d2016-08-31 08:46:30523 return DiscardPolicy::All;
Rui Ueyama6af40162016-09-02 19:49:27524 if (Arg->getOption().getID() == OPT_discard_locals)
George Rimar9503f6d2016-08-31 08:46:30525 return DiscardPolicy::Locals;
Rui Ueyama6af40162016-09-02 19:49:27526 return DiscardPolicy::None;
George Rimar9503f6d2016-08-31 08:46:30527}
528
Rui Ueyama10571cd2017-02-25 02:23:28529static StringRef getDynamicLinker(opt::InputArgList &Args) {
George Rimar87b0d682017-02-24 08:26:18530 auto *Arg = Args.getLastArg(OPT_dynamic_linker, OPT_no_dynamic_linker);
531 if (!Arg || Arg->getOption().getID() == OPT_no_dynamic_linker)
532 return "";
533 return Arg->getValue();
534}
535
Peter Collingbournea327a4c2018-07-18 22:49:31536static ICFLevel getICF(opt::InputArgList &Args) {
537 auto *Arg = Args.getLastArg(OPT_icf_none, OPT_icf_safe, OPT_icf_all);
538 if (!Arg || Arg->getOption().getID() == OPT_icf_none)
539 return ICFLevel::None;
540 if (Arg->getOption().getID() == OPT_icf_safe)
541 return ICFLevel::Safe;
542 return ICFLevel::All;
543}
544
Rui Ueyama10571cd2017-02-25 02:23:28545static StripPolicy getStrip(opt::InputArgList &Args) {
Rui Ueyama524d44c2017-02-25 02:12:37546 if (Args.hasArg(OPT_relocatable))
547 return StripPolicy::None;
548
549 auto *Arg = Args.getLastArg(OPT_strip_all, OPT_strip_debug);
550 if (!Arg)
551 return StripPolicy::None;
552 if (Arg->getOption().getID() == OPT_strip_all)
553 return StripPolicy::All;
554 return StripPolicy::Debug;
George Rimarf21aade2016-08-31 08:38:11555}
556
Sam Clegg7e756632017-12-05 16:50:46557static uint64_t parseSectionAddress(StringRef S, const opt::Arg &Arg) {
George Rimard73ef172016-09-14 13:07:13558 uint64_t VA = 0;
559 if (S.startswith("0x"))
560 S = S.drop_front(2);
George Rimarab947682017-05-16 08:19:25561 if (!to_integer(S, VA, 16))
Rui Ueyamab4c63ca2017-01-06 10:04:35562 error("invalid argument: " + toString(Arg));
George Rimard73ef172016-09-14 13:07:13563 return VA;
564}
565
566static StringMap<uint64_t> getSectionStartMap(opt::InputArgList &Args) {
567 StringMap<uint64_t> Ret;
568 for (auto *Arg : Args.filtered(OPT_section_start)) {
569 StringRef Name;
570 StringRef Addr;
571 std::tie(Name, Addr) = StringRef(Arg->getValue()).split('=');
Sam Clegg7e756632017-12-05 16:50:46572 Ret[Name] = parseSectionAddress(Addr, *Arg);
George Rimard73ef172016-09-14 13:07:13573 }
574
575 if (auto *Arg = Args.getLastArg(OPT_Ttext))
Sam Clegg7e756632017-12-05 16:50:46576 Ret[".text"] = parseSectionAddress(Arg->getValue(), *Arg);
George Rimard73ef172016-09-14 13:07:13577 if (auto *Arg = Args.getLastArg(OPT_Tdata))
Sam Clegg7e756632017-12-05 16:50:46578 Ret[".data"] = parseSectionAddress(Arg->getValue(), *Arg);
George Rimard73ef172016-09-14 13:07:13579 if (auto *Arg = Args.getLastArg(OPT_Tbss))
Sam Clegg7e756632017-12-05 16:50:46580 Ret[".bss"] = parseSectionAddress(Arg->getValue(), *Arg);
George Rimard73ef172016-09-14 13:07:13581 return Ret;
582}
583
Rui Ueyama10571cd2017-02-25 02:23:28584static SortSectionPolicy getSortSection(opt::InputArgList &Args) {
Yuka Takahashi1f1378d2017-06-14 08:01:26585 StringRef S = Args.getLastArgValue(OPT_sort_section);
George Rimarbe394db2016-09-16 20:21:55586 if (S == "alignment")
587 return SortSectionPolicy::Alignment;
588 if (S == "name")
589 return SortSectionPolicy::Name;
590 if (!S.empty())
591 error("unknown --sort-section rule: " + S);
Rui Ueyamab2a0abd2016-09-16 21:14:55592 return SortSectionPolicy::Default;
George Rimarbe394db2016-09-16 20:21:55593}
594
George Rimar9814d152017-10-25 15:20:30595static OrphanHandlingPolicy getOrphanHandling(opt::InputArgList &Args) {
596 StringRef S = Args.getLastArgValue(OPT_orphan_handling, "place");
597 if (S == "warn")
598 return OrphanHandlingPolicy::Warn;
599 if (S == "error")
600 return OrphanHandlingPolicy::Error;
601 if (S != "place")
602 error("unknown --orphan-handling mode: " + S);
603 return OrphanHandlingPolicy::Place;
604}
605
Rui Ueyama08af54c2017-04-26 21:23:11606// Parse --build-id or --build-id=<style>. We handle "tree" as a
607// synonym for "sha1" because all our hash functions including
608// -build-id=sha1 are actually tree hashes for performance reasons.
609static std::pair<BuildIdKind, std::vector<uint8_t>>
610getBuildId(opt::InputArgList &Args) {
Peter Collingbourne968fe932017-05-23 21:16:48611 auto *Arg = Args.getLastArg(OPT_build_id, OPT_build_id_eq);
612 if (!Arg)
613 return {BuildIdKind::None, {}};
614
615 if (Arg->getOption().getID() == OPT_build_id)
Rui Ueyama08af54c2017-04-26 21:23:11616 return {BuildIdKind::Fast, {}};
617
Peter Collingbourne968fe932017-05-23 21:16:48618 StringRef S = Arg->getValue();
Rui Ueyamafa9f6992018-02-07 19:22:42619 if (S == "fast")
620 return {BuildIdKind::Fast, {}};
Rui Ueyama08af54c2017-04-26 21:23:11621 if (S == "md5")
622 return {BuildIdKind::Md5, {}};
623 if (S == "sha1" || S == "tree")
624 return {BuildIdKind::Sha1, {}};
625 if (S == "uuid")
626 return {BuildIdKind::Uuid, {}};
627 if (S.startswith("0x"))
628 return {BuildIdKind::Hexstring, parseHex(S.substr(2))};
629
630 if (S != "none")
631 error("unknown --build-id style: " + S);
632 return {BuildIdKind::None, {}};
633}
634
Rui Ueyama45192b32018-07-09 20:22:28635static std::pair<bool, bool> getPackDynRelocs(opt::InputArgList &Args) {
636 StringRef S = Args.getLastArgValue(OPT_pack_dyn_relocs, "none");
637 if (S == "android")
638 return {true, false};
639 if (S == "relr")
640 return {false, true};
641 if (S == "android+relr")
642 return {true, true};
643
644 if (S != "none")
645 error("unknown -pack-dyn-relocs format: " + S);
646 return {false, false};
647}
648
Michael J. Spencerb8427252018-04-17 23:30:05649static void readCallGraph(MemoryBufferRef MB) {
650 // Build a map from symbol name to section
Rui Ueyama2b39ea42018-10-26 15:07:02651 DenseMap<StringRef, Symbol *> Map;
Michael J. Spencerb8427252018-04-17 23:30:05652 for (InputFile *File : ObjectFiles)
653 for (Symbol *Sym : File->getSymbols())
Rui Ueyama2b39ea42018-10-26 15:07:02654 Map[Sym->getName()] = Sym;
Michael J. Spencerb8427252018-04-17 23:30:05655
Rui Ueyama2b39ea42018-10-26 15:07:02656 auto FindSection = [&](StringRef Name) -> InputSectionBase * {
657 Symbol *Sym = Map.lookup(Name);
658 if (!Sym) {
659 if (Config->WarnSymbolOrdering)
660 warn(MB.getBufferIdentifier() + ": no such symbol: " + Name);
661 return nullptr;
662 }
Rui Ueyama4c06a6c2018-10-26 15:07:12663 maybeWarnUnorderableSymbol(Sym);
George Rimar03b4d0c2018-08-04 07:31:19664
Rui Ueyama2b39ea42018-10-26 15:07:02665 if (Defined *DR = dyn_cast_or_null<Defined>(Sym))
George Rimar03b4d0c2018-08-04 07:31:19666 return dyn_cast_or_null<InputSectionBase>(DR->Section);
667 return nullptr;
668 };
669
Rui Ueyama2b39ea42018-10-26 15:07:02670 for (StringRef Line : args::getLines(MB)) {
Michael J. Spencerb8427252018-04-17 23:30:05671 SmallVector<StringRef, 3> Fields;
Rui Ueyama2b39ea42018-10-26 15:07:02672 Line.split(Fields, ' ');
Michael J. Spencerb8427252018-04-17 23:30:05673 uint64_t Count;
George Rimar03b4d0c2018-08-04 07:31:19674
Rui Ueyama2b39ea42018-10-26 15:07:02675 if (Fields.size() != 3 || !to_integer(Fields[2], Count)) {
676 error(MB.getBufferIdentifier() + ": parse error");
677 return;
678 }
679
680 if (InputSectionBase *From = FindSection(Fields[0]))
681 if (InputSectionBase *To = FindSection(Fields[1]))
682 Config->CallGraphProfile[std::make_pair(From, To)] += Count;
Michael J. Spencerb8427252018-04-17 23:30:05683 }
684}
685
Michael J. Spencer8222f902018-10-02 00:17:15686template <class ELFT> static void readCallGraphsFromObjectFiles() {
Michael J. Spencer8222f902018-10-02 00:17:15687 for (auto File : ObjectFiles) {
688 auto *Obj = cast<ObjFile<ELFT>>(File);
Rui Ueyama2b39ea42018-10-26 15:07:02689
Michael J. Spencer8222f902018-10-02 00:17:15690 for (const Elf_CGProfile_Impl<ELFT> &CGPE : Obj->CGProfile) {
Fangrui Songefc0fe52018-10-22 23:43:53691 auto *FromSym = dyn_cast<Defined>(&Obj->getSymbol(CGPE.cgp_from));
692 auto *ToSym = dyn_cast<Defined>(&Obj->getSymbol(CGPE.cgp_to));
693 if (!FromSym || !ToSym)
Michael J. Spencer8222f902018-10-02 00:17:15694 continue;
Rui Ueyama2b39ea42018-10-26 15:07:02695
696 auto *From = dyn_cast_or_null<InputSectionBase>(FromSym->Section);
697 auto *To = dyn_cast_or_null<InputSectionBase>(ToSym->Section);
698 if (From && To)
699 Config->CallGraphProfile[{From, To}] += CGPE.cgp_weight;
Michael J. Spencer8222f902018-10-02 00:17:15700 }
701 }
702}
703
George Rimardbf93392017-04-17 08:58:12704static bool getCompressDebugSections(opt::InputArgList &Args) {
Yuka Takahashi1f1378d2017-06-14 08:01:26705 StringRef S = Args.getLastArgValue(OPT_compress_debug_sections, "none");
Rui Ueyama543161a2017-04-29 22:56:24706 if (S == "none")
707 return false;
708 if (S != "zlib")
709 error("unknown --compress-debug-sections value: " + S);
710 if (!zlib::isAvailable())
711 error("--compress-debug-sections: zlib is not available");
712 return true;
George Rimardbf93392017-04-17 08:58:12713}
714
Rui Ueyama0dd56dc2018-05-22 02:53:11715static std::pair<StringRef, StringRef> getOldNewOptions(opt::InputArgList &Args,
716 unsigned Id) {
717 auto *Arg = Args.getLastArg(Id);
718 if (!Arg)
719 return {"", ""};
720
721 StringRef S = Arg->getValue();
722 std::pair<StringRef, StringRef> Ret = S.split(';');
723 if (Ret.second.empty())
724 error(Arg->getSpelling() + " expects 'old;new' format, but got " + S);
725 return Ret;
George Rimarcb38bf52017-08-14 10:17:30726}
727
James Hendersonde300e62018-02-14 13:36:22728// Parse the symbol ordering file and warn for any duplicate entries.
729static std::vector<StringRef> getSymbolOrderingFile(MemoryBufferRef MB) {
730 SetVector<StringRef> Names;
731 for (StringRef S : args::getLines(MB))
732 if (!Names.insert(S) && Config->WarnSymbolOrdering)
733 warn(MB.getBufferIdentifier() + ": duplicate ordered symbol: " + S);
734
735 return Names.takeVector();
736}
737
Rui Ueyama5aab6352018-03-30 17:22:44738static void parseClangOption(StringRef Opt, const Twine &Msg) {
739 std::string Err;
740 raw_string_ostream OS(Err);
741
742 const char *Argv[] = {Config->ProgName.data(), Opt.data()};
743 if (cl::ParseCommandLineOptions(2, Argv, "", &OS))
744 return;
745 OS.flush();
746 error(Msg + ": " + StringRef(Err).trim());
747}
748
Rui Ueyama0dd684c2016-01-07 17:54:19749// Initializes Config members by the command line options.
750void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Rui Ueyama206dc222018-02-09 01:43:59751 errorHandler().Verbose = Args.hasArg(OPT_verbose);
Rui Ueyamad42b1c02018-02-08 23:52:09752 errorHandler().FatalWarnings =
753 Args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false);
Rui Ueyamaf1894fe2018-05-22 16:19:38754 ThreadsEnabled = Args.hasFlag(OPT_threads, OPT_no_threads, true);
Rui Ueyamad42b1c02018-02-08 23:52:09755
Rui Ueyamabe7e0012017-08-11 20:49:48756 Config->AllowMultipleDefinition =
Rui Ueyamabb8d15e2018-02-06 00:45:15757 Args.hasFlag(OPT_allow_multiple_definition,
758 OPT_no_allow_multiple_definition, false) ||
759 hasZOption(Args, "muldefs");
Rui Ueyama3e039442017-11-28 19:58:45760 Config->AuxiliaryList = args::getStrings(Args, OPT_auxiliary);
Rui Ueyamaa4a643c2017-02-25 01:51:25761 Config->Bsymbolic = Args.hasArg(OPT_Bsymbolic);
762 Config->BsymbolicFunctions = Args.hasArg(OPT_Bsymbolic_functions);
Rui Ueyama6a8e79b2018-02-02 22:24:06763 Config->CheckSections =
764 Args.hasFlag(OPT_check_sections, OPT_no_check_sections, true);
Rui Ueyama875ae822017-07-20 18:17:55765 Config->Chroot = Args.getLastArgValue(OPT_chroot);
George Rimardbf93392017-04-17 08:58:12766 Config->CompressDebugSections = getCompressDebugSections(Args);
Rui Ueyamadb46a622018-03-14 20:29:45767 Config->Cref = Args.hasFlag(OPT_cref, OPT_no_cref, false);
Rui Ueyamaac7aaeb2017-10-24 20:59:55768 Config->DefineCommon = Args.hasFlag(OPT_define_common, OPT_no_define_common,
769 !Args.hasArg(OPT_relocatable));
770 Config->Demangle = Args.hasFlag(OPT_demangle, OPT_no_demangle, true);
Rui Ueyamaa4a643c2017-02-25 01:51:25771 Config->DisableVerify = Args.hasArg(OPT_disable_verify);
Rui Ueyama10571cd2017-02-25 02:23:28772 Config->Discard = getDiscard(Args);
Yunlian Jiang496fb3e2018-07-16 17:55:48773 Config->DwoDir = Args.getLastArgValue(OPT_plugin_opt_dwo_dir_eq);
Rui Ueyama10571cd2017-02-25 02:23:28774 Config->DynamicLinker = getDynamicLinker(Args);
Rui Ueyama38eab872017-08-29 16:53:24775 Config->EhFrameHdr =
Rui Ueyamaac7aaeb2017-10-24 20:59:55776 Args.hasFlag(OPT_eh_frame_hdr, OPT_no_eh_frame_hdr, false);
Rui Ueyama9f499902018-12-14 21:58:49777 Config->EmitLLVM = Args.hasArg(OPT_plugin_opt_emit_llvm, false);
Rui Ueyamaa4a643c2017-02-25 01:51:25778 Config->EmitRelocs = Args.hasArg(OPT_emit_relocs);
Fangrui Songcc18f8a2018-10-25 23:15:23779 Config->CallGraphProfileSort = Args.hasFlag(
780 OPT_call_graph_profile_sort, OPT_no_call_graph_profile_sort, true);
Rafael Espindola2e4bcb02018-03-01 22:23:51781 Config->EnableNewDtags =
782 Args.hasFlag(OPT_enable_new_dtags, OPT_disable_new_dtags, true);
Yuka Takahashi1f1378d2017-06-14 08:01:26783 Config->Entry = Args.getLastArgValue(OPT_entry);
David Bolvanskya932cd42018-07-30 17:02:46784 Config->ExecuteOnly =
785 Args.hasFlag(OPT_execute_only, OPT_no_execute_only, false);
Rui Ueyamaa4a643c2017-02-25 01:51:25786 Config->ExportDynamic =
Rui Ueyamaac7aaeb2017-10-24 20:59:55787 Args.hasFlag(OPT_export_dynamic, OPT_no_export_dynamic, false);
Rui Ueyama3e039442017-11-28 19:58:45788 Config->FilterList = args::getStrings(Args, OPT_filter);
Yuka Takahashi1f1378d2017-06-14 08:01:26789 Config->Fini = Args.getLastArgValue(OPT_fini, "_fini");
Peter Smith732cd8c2017-12-05 15:59:05790 Config->FixCortexA53Errata843419 = Args.hasArg(OPT_fix_cortex_a53_843419);
Rui Ueyamaac7aaeb2017-10-24 20:59:55791 Config->GcSections = Args.hasFlag(OPT_gc_sections, OPT_no_gc_sections, false);
Rui Ueyamaaad2e322018-02-02 21:44:06792 Config->GnuUnique = Args.hasFlag(OPT_gnu_unique, OPT_no_gnu_unique, true);
Rui Ueyamaac7aaeb2017-10-24 20:59:55793 Config->GdbIndex = Args.hasFlag(OPT_gdb_index, OPT_no_gdb_index, false);
Peter Collingbournea327a4c2018-07-18 22:49:31794 Config->ICF = getICF(Args);
Rafael Espindolab5506e62018-01-10 01:37:36795 Config->IgnoreDataAddressEquality =
796 Args.hasArg(OPT_ignore_data_address_equality);
797 Config->IgnoreFunctionAddressEquality =
798 Args.hasArg(OPT_ignore_function_address_equality);
Yuka Takahashi1f1378d2017-06-14 08:01:26799 Config->Init = Args.getLastArgValue(OPT_init, "_init");
800 Config->LTOAAPipeline = Args.getLastArgValue(OPT_lto_aa_pipeline);
Rumeet Dhindsa682a4172018-04-09 17:56:07801 Config->LTODebugPassManager = Args.hasArg(OPT_lto_debug_pass_manager);
802 Config->LTONewPassManager = Args.hasArg(OPT_lto_new_pass_manager);
Yuka Takahashi1f1378d2017-06-14 08:01:26803 Config->LTONewPmPasses = Args.getLastArgValue(OPT_lto_newpm_passes);
Rui Ueyama3e039442017-11-28 19:58:45804 Config->LTOO = args::getInteger(Args, OPT_lto_O, 2);
Rui Ueyama0dd56dc2018-05-22 02:53:11805 Config->LTOObjPath = Args.getLastArgValue(OPT_plugin_opt_obj_path_eq);
Rui Ueyama3e039442017-11-28 19:58:45806 Config->LTOPartitions = args::getInteger(Args, OPT_lto_partitions, 1);
Rumeet Dhindsa682a4172018-04-09 17:56:07807 Config->LTOSampleProfile = Args.getLastArgValue(OPT_lto_sample_profile);
Yuka Takahashi1f1378d2017-06-14 08:01:26808 Config->MapFile = Args.getLastArgValue(OPT_Map);
Simon Atanasyaned9ee692018-06-11 07:24:31809 Config->MipsGotSize = args::getInteger(Args, OPT_mips_got_size, 0xfff0);
Peter Smith96ca4f52017-12-15 11:09:41810 Config->MergeArmExidx =
811 Args.hasFlag(OPT_merge_exidx_entries, OPT_no_merge_exidx_entries, true);
George Rimar84941ef2017-07-26 09:46:59812 Config->NoinhibitExec = Args.hasArg(OPT_noinhibit_exec);
Rui Ueyamaa4a643c2017-02-25 01:51:25813 Config->Nostdlib = Args.hasArg(OPT_nostdlib);
814 Config->OFormatBinary = isOutputFormatBinary(Args);
Rui Ueyama700b1f82017-11-01 02:04:43815 Config->Omagic = Args.hasFlag(OPT_omagic, OPT_no_omagic, false);
Yuka Takahashi1f1378d2017-06-14 08:01:26816 Config->OptRemarksFilename = Args.getLastArgValue(OPT_opt_remarks_filename);
Rui Ueyamaa4a643c2017-02-25 01:51:25817 Config->OptRemarksWithHotness = Args.hasArg(OPT_opt_remarks_with_hotness);
Rui Ueyama3e039442017-11-28 19:58:45818 Config->Optimize = args::getInteger(Args, OPT_O, 1);
George Rimar9814d152017-10-25 15:20:30819 Config->OrphanHandling = getOrphanHandling(Args);
Yuka Takahashi1f1378d2017-06-14 08:01:26820 Config->OutputFile = Args.getLastArgValue(OPT_o);
Rui Ueyama5d87b692018-02-02 00:31:05821 Config->Pie = Args.hasFlag(OPT_pie, OPT_no_pie, false);
James Henderson9c6e2fd2018-02-01 16:00:46822 Config->PrintIcfSections =
823 Args.hasFlag(OPT_print_icf_sections, OPT_no_print_icf_sections, false);
Rui Ueyama700b1f82017-11-01 02:04:43824 Config->PrintGcSections =
825 Args.hasFlag(OPT_print_gc_sections, OPT_no_print_gc_sections, false);
Rui Ueyamabd278492017-04-29 23:06:43826 Config->Rpath = getRpath(Args);
Rui Ueyamaa4a643c2017-02-25 01:51:25827 Config->Relocatable = Args.hasArg(OPT_relocatable);
828 Config->SaveTemps = Args.hasArg(OPT_save_temps);
Rui Ueyama3e039442017-11-28 19:58:45829 Config->SearchPaths = args::getStrings(Args, OPT_library_path);
Rui Ueyamaa4a643c2017-02-25 01:51:25830 Config->SectionStartMap = getSectionStartMap(Args);
831 Config->Shared = Args.hasArg(OPT_shared);
832 Config->SingleRoRx = Args.hasArg(OPT_no_rosegment);
Yuka Takahashi1f1378d2017-06-14 08:01:26833 Config->SoName = Args.getLastArgValue(OPT_soname);
Rui Ueyama10571cd2017-02-25 02:23:28834 Config->SortSection = getSortSection(Args);
Sean Fertile4b5ec7f2018-10-16 17:13:01835 Config->SplitStackAdjustSize = args::getInteger(Args, OPT_split_stack_adjust_size, 16384);
Rui Ueyama10571cd2017-02-25 02:23:28836 Config->Strip = getStrip(Args);
Yuka Takahashi1f1378d2017-06-14 08:01:26837 Config->Sysroot = Args.getLastArgValue(OPT_sysroot);
Rui Ueyamaac7aaeb2017-10-24 20:59:55838 Config->Target1Rel = Args.hasFlag(OPT_target1_rel, OPT_target1_abs, false);
Rui Ueyama10571cd2017-02-25 02:23:28839 Config->Target2 = getTarget2(Args);
Yuka Takahashi1f1378d2017-06-14 08:01:26840 Config->ThinLTOCacheDir = Args.getLastArgValue(OPT_thinlto_cache_dir);
Rui Ueyamabdc51502017-12-06 22:08:17841 Config->ThinLTOCachePolicy = CHECK(
Yuka Takahashi1f1378d2017-06-14 08:01:26842 parseCachePruningPolicy(Args.getLastArgValue(OPT_thinlto_cache_policy)),
843 "--thinlto-cache-policy: invalid cache policy");
Rui Ueyama0dd56dc2018-05-22 02:53:11844 Config->ThinLTOEmitImportsFiles =
845 Args.hasArg(OPT_plugin_opt_thinlto_emit_imports_files);
846 Config->ThinLTOIndexOnly = Args.hasArg(OPT_plugin_opt_thinlto_index_only) ||
847 Args.hasArg(OPT_plugin_opt_thinlto_index_only_eq);
848 Config->ThinLTOIndexOnlyArg =
849 Args.getLastArgValue(OPT_plugin_opt_thinlto_index_only_eq);
Rui Ueyama3e039442017-11-28 19:58:45850 Config->ThinLTOJobs = args::getInteger(Args, OPT_thinlto_jobs, -1u);
Rui Ueyama47055bb2018-05-22 16:16:09851 Config->ThinLTOObjectSuffixReplace =
852 getOldNewOptions(Args, OPT_plugin_opt_thinlto_object_suffix_replace_eq);
853 Config->ThinLTOPrefixReplace =
854 getOldNewOptions(Args, OPT_plugin_opt_thinlto_prefix_replace_eq);
Rui Ueyamaa4a643c2017-02-25 01:51:25855 Config->Trace = Args.hasArg(OPT_trace);
Rui Ueyama3e039442017-11-28 19:58:45856 Config->Undefined = args::getStrings(Args, OPT_undefined);
Rui Ueyamaaad2e322018-02-02 21:44:06857 Config->UndefinedVersion =
858 Args.hasFlag(OPT_undefined_version, OPT_no_undefined_version, true);
Rui Ueyama11479da2018-07-09 20:08:55859 Config->UseAndroidRelrTags = Args.hasFlag(
860 OPT_use_android_relr_tags, OPT_no_use_android_relr_tags, false);
Rui Ueyamaa4a643c2017-02-25 01:51:25861 Config->UnresolvedSymbols = getUnresolvedSymbolPolicy(Args);
Rui Ueyama1d92aa72018-04-09 23:05:48862 Config->WarnBackrefs =
863 Args.hasFlag(OPT_warn_backrefs, OPT_no_warn_backrefs, false);
Rui Ueyamabb8d15e2018-02-06 00:45:15864 Config->WarnCommon = Args.hasFlag(OPT_warn_common, OPT_no_warn_common, false);
Ali Tamur63830b22018-10-02 20:30:22865 Config->WarnIfuncTextrel =
866 Args.hasFlag(OPT_warn_ifunc_textrel, OPT_no_warn_ifunc_textrel, false);
James Hendersonde300e62018-02-14 13:36:22867 Config->WarnSymbolOrdering =
868 Args.hasFlag(OPT_warn_symbol_ordering, OPT_no_warn_symbol_ordering, true);
Rui Ueyama88fe5c92018-04-20 21:24:08869 Config->ZCombreloc = getZFlag(Args, "combreloc", "nocombreloc", true);
870 Config->ZCopyreloc = getZFlag(Args, "copyreloc", "nocopyreloc", true);
871 Config->ZExecstack = getZFlag(Args, "execstack", "noexecstack", false);
George Rimar27bbe7d2018-08-28 08:24:34872 Config->ZGlobal = hasZOption(Args, "global");
Simon Dardiscd875822018-02-20 23:49:17873 Config->ZHazardplt = hasZOption(Args, "hazardplt");
Fangrui Songbd3684f2018-06-20 02:06:01874 Config->ZInitfirst = hasZOption(Args, "initfirst");
Ed Mastec0b474f2018-09-14 14:25:37875 Config->ZInterpose = hasZOption(Args, "interpose");
Sriraman Tallambe01d2e2018-05-08 23:19:50876 Config->ZKeepTextSectionPrefix = getZFlag(
877 Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false);
George Rimara1b3ddb2018-11-27 09:48:17878 Config->ZNodefaultlib = hasZOption(Args, "nodefaultlib");
Rui Ueyamaa4a643c2017-02-25 01:51:25879 Config->ZNodelete = hasZOption(Args, "nodelete");
Davide Italiano76907212017-03-23 00:54:16880 Config->ZNodlopen = hasZOption(Args, "nodlopen");
Rui Ueyama88fe5c92018-04-20 21:24:08881 Config->ZNow = getZFlag(Args, "now", "lazy", false);
Rui Ueyamaa4a643c2017-02-25 01:51:25882 Config->ZOrigin = hasZOption(Args, "origin");
Rui Ueyama88fe5c92018-04-20 21:24:08883 Config->ZRelro = getZFlag(Args, "relro", "norelro", true);
Chandler Carruthc58f2162018-01-22 22:05:25884 Config->ZRetpolineplt = hasZOption(Args, "retpolineplt");
Petr Hosekffa786f2017-05-26 19:12:38885 Config->ZRodynamic = hasZOption(Args, "rodynamic");
Rui Ueyama3e039442017-11-28 19:58:45886 Config->ZStackSize = args::getZOptionValue(Args, OPT_z, "stack-size", 0);
Rui Ueyama88fe5c92018-04-20 21:24:08887 Config->ZText = getZFlag(Args, "text", "notext", true);
Rui Ueyamaa4a643c2017-02-25 01:51:25888 Config->ZWxneeded = hasZOption(Args, "wxneeded");
889
Rui Ueyama47055bb2018-05-22 16:16:09890 // Parse LTO options.
Rui Ueyama0dd56dc2018-05-22 02:53:11891 if (auto *Arg = Args.getLastArg(OPT_plugin_opt_mcpu_eq))
892 parseClangOption(Saver.save("-mcpu=" + StringRef(Arg->getValue())),
893 Arg->getSpelling());
894
895 for (auto *Arg : Args.filtered(OPT_plugin_opt))
896 parseClangOption(Arg->getValue(), Arg->getSpelling());
Rui Ueyama5aab6352018-03-30 17:22:44897
898 // Parse -mllvm options.
George Rimar9dc740d2018-02-06 12:20:05899 for (auto *Arg : Args.filtered(OPT_mllvm))
Rui Ueyama5aab6352018-03-30 17:22:44900 parseClangOption(Arg->getValue(), Arg->getSpelling());
Rui Ueyamaa1389722017-08-14 17:48:30901
Rui Ueyamaa4a643c2017-02-25 01:51:25902 if (Config->LTOO > 3)
George Rimarcb38bf52017-08-14 10:17:30903 error("invalid optimization level for LTO: " + Twine(Config->LTOO));
Rui Ueyamaa4a643c2017-02-25 01:51:25904 if (Config->LTOPartitions == 0)
905 error("--lto-partitions: number of threads must be > 0");
906 if (Config->ThinLTOJobs == 0)
907 error("--thinlto-jobs: number of threads must be > 0");
908
Sean Fertile4b5ec7f2018-10-16 17:13:01909 if (Config->SplitStackAdjustSize < 0)
910 error("--split-stack-adjust-size: size must be >= 0");
911
Rui Ueyamaa1389722017-08-14 17:48:30912 // Parse ELF{32,64}{LE,BE} and CPU type.
Rui Ueyama9aa56862015-11-24 18:55:36913 if (auto *Arg = Args.getLastArg(OPT_m)) {
914 StringRef S = Arg->getValue();
Rui Ueyama58026af2016-11-09 22:32:43915 std::tie(Config->EKind, Config->EMachine, Config->OSABI) =
916 parseEmulation(S);
917 Config->MipsN32Abi = (S == "elf32btsmipn32" || S == "elf32ltsmipn32");
Rui Ueyama9aa56862015-11-24 18:55:36918 Config->Emulation = S;
919 }
920
George Rimard46753e2017-10-06 09:37:44921 // Parse -hash-style={sysv,gnu,both}.
922 if (auto *Arg = Args.getLastArg(OPT_hash_style)) {
923 StringRef S = Arg->getValue();
924 if (S == "sysv")
925 Config->SysvHash = true;
926 else if (S == "gnu")
927 Config->GnuHash = true;
928 else if (S == "both")
929 Config->SysvHash = Config->GnuHash = true;
930 else
931 error("unknown -hash-style: " + S);
932 }
933
Rui Ueyama1705f992017-01-15 02:52:34934 if (Args.hasArg(OPT_print_map))
935 Config->MapFile = "-";
936
George Rimard2506182016-12-03 07:09:28937 // --omagic is an option to create old-fashioned executables in which
938 // .text segments are writable. Today, the option is still in use to
939 // create special-purpose programs such as boot loaders. It doesn't
940 // make sense to create PT_GNU_RELRO for such executables.
Rui Ueyamaa37ace8d2017-02-25 01:52:03941 if (Config->Omagic)
George Rimard2506182016-12-03 07:09:28942 Config->ZRelro = false;
943
Rui Ueyama08af54c2017-04-26 21:23:11944 std::tie(Config->BuildId, Config->BuildIdVector) = getBuildId(Args);
Rui Ueyama3a41be22016-04-07 22:49:21945
Rui Ueyama45192b32018-07-09 20:22:28946 std::tie(Config->AndroidPackDynRelocs, Config->RelrPackDynRelocs) =
947 getPackDynRelocs(Args);
Peter Collingbourne5c54f152017-10-27 17:49:40948
George Rimar1a33c0f2016-11-10 09:05:20949 if (auto *Arg = Args.getLastArg(OPT_symbol_ordering_file))
950 if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
James Hendersonde300e62018-02-14 13:36:22951 Config->SymbolOrderingFile = getSymbolOrderingFile(*Buffer);
George Rimar1a33c0f2016-11-10 09:05:20952
Rui Ueyamabfe02642017-01-25 21:49:23953 // If --retain-symbol-file is used, we'll keep only the symbols listed in
George Rimar2bb88ab2016-12-19 18:00:52954 // the file and discard all others.
955 if (auto *Arg = Args.getLastArg(OPT_retain_symbols_file)) {
Rafael Espindolac0fc2532017-01-25 21:23:06956 Config->DefaultSymbolVersion = VER_NDX_LOCAL;
George Rimar2bb88ab2016-12-19 18:00:52957 if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
Rui Ueyama3e039442017-11-28 19:58:45958 for (StringRef S : args::getLines(*Buffer))
Rafael Espindolac0fc2532017-01-25 21:23:06959 Config->VersionScriptGlobals.push_back(
960 {S, /*IsExternCpp*/ false, /*HasWildcard*/ false});
George Rimar2bb88ab2016-12-19 18:00:52961 }
962
Rui Ueyama8d817f22017-04-25 17:40:12963 bool HasExportDynamic =
Rui Ueyamaac7aaeb2017-10-24 20:59:55964 Args.hasFlag(OPT_export_dynamic, OPT_no_export_dynamic, false);
Rafael Espindolad0ebd842016-12-08 17:54:26965
Rui Ueyama8d817f22017-04-25 17:40:12966 // Parses -dynamic-list and -export-dynamic-symbol. They make some
967 // symbols private. Note that -export-dynamic takes precedence over them
968 // as it says all symbols should be exported.
969 if (!HasExportDynamic) {
970 for (auto *Arg : Args.filtered(OPT_dynamic_list))
971 if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
972 readDynamicList(*Buffer);
973
Rui Ueyama5e520222018-02-14 18:38:33974 for (auto *Arg : Args.filtered(OPT_export_dynamic_symbol))
Peter Collingbourned6924d72017-10-06 22:09:03975 Config->DynamicList.push_back(
Rui Ueyama8d817f22017-04-25 17:40:12976 {Arg->getValue(), /*IsExternCpp*/ false, /*HasWildcard*/ false});
Rafael Espindolad0ebd842016-12-08 17:54:26977 }
Peter Collingbourne66ac1d62016-04-22 20:21:26978
Rui Ueyama5e520222018-02-14 18:38:33979 // If --export-dynamic-symbol=foo is given and symbol foo is defined in
980 // an object file in an archive file, that object file should be pulled
981 // out and linked. (It doesn't have to behave like that from technical
982 // point of view, but this is needed for compatibility with GNU.)
983 for (auto *Arg : Args.filtered(OPT_export_dynamic_symbol))
984 Config->Undefined.push_back(Arg->getValue());
985
Igor Kudrin892b1462017-12-07 03:25:39986 for (auto *Arg : Args.filtered(OPT_version_script))
Fangrui Songc60f85d2018-07-25 21:53:18987 if (Optional<std::string> Path = searchScript(Arg->getValue())) {
988 if (Optional<MemoryBufferRef> Buffer = readFile(*Path))
989 readVersionScript(*Buffer);
990 } else {
991 error(Twine("cannot find version script ") + Arg->getValue());
992 }
Rui Ueyama0dd684c2016-01-07 17:54:19993}
George Rimar83f406c2015-10-19 17:35:12994
Rui Ueyamad57e74b72017-03-17 23:29:01995// Some Config members do not directly correspond to any particular
996// command line options, but computed based on other Config values.
997// This function initialize such members. See Config.h for the details
998// of these values.
Rafael Espindola7a7a81d2018-02-05 20:55:46999static void setConfigs(opt::InputArgList &Args) {
Rui Ueyamad19bc042018-09-20 21:29:141000 ELFKind K = Config->EKind;
1001 uint16_t M = Config->EMachine;
Rui Ueyamad57e74b72017-03-17 23:29:011002
Rui Ueyamad57e74b72017-03-17 23:29:011003 Config->CopyRelocs = (Config->Relocatable || Config->EmitRelocs);
Rui Ueyamad19bc042018-09-20 21:29:141004 Config->Is64 = (K == ELF64LEKind || K == ELF64BEKind);
1005 Config->IsLE = (K == ELF32LEKind || K == ELF64LEKind);
1006 Config->Endianness = Config->IsLE ? endianness::little : endianness::big;
1007 Config->IsMips64EL = (K == ELF64LEKind && M == EM_MIPS);
Rui Ueyamad57e74b72017-03-17 23:29:011008 Config->Pic = Config->Pie || Config->Shared;
Rui Ueyama7ab38c32017-03-22 00:01:111009 Config->Wordsize = Config->Is64 ? 8 : 4;
Rui Ueyamae53890f2018-06-08 00:18:321010
Rui Ueyamae53890f2018-06-08 00:18:321011 // ELF defines two different ways to store relocation addends as shown below:
1012 //
1013 // Rel: Addends are stored to the location where relocations are applied.
1014 // Rela: Addends are stored as part of relocation entry.
1015 //
1016 // In other words, Rela makes it easy to read addends at the price of extra
1017 // 4 or 8 byte for each relocation entry. We don't know why ELF defined two
1018 // different mechanisms in the first place, but this is how the spec is
1019 // defined.
1020 //
1021 // You cannot choose which one, Rel or Rela, you want to use. Instead each
1022 // ABI defines which one you need to use. The following expression expresses
1023 // that.
Sid Manningfc50e632018-09-28 14:09:161024 Config->IsRela = M == EM_AARCH64 || M == EM_AMDGPU || M == EM_HEXAGON ||
1025 M == EM_PPC || M == EM_PPC64 || M == EM_RISCV ||
1026 M == EM_X86_64;
Rui Ueyamae53890f2018-06-08 00:18:321027
Alexander Richardsoncfb60932018-02-16 10:01:171028 // If the output uses REL relocations we must store the dynamic relocation
1029 // addends to the output sections. We also store addends for RELA relocations
1030 // if --apply-dynamic-relocs is used.
1031 // We default to not writing the addends when using RELA relocations since
1032 // any standard conforming tool can find it in r_addend.
Rafael Espindola7a7a81d2018-02-05 20:55:461033 Config->WriteAddends = Args.hasFlag(OPT_apply_dynamic_relocs,
1034 OPT_no_apply_dynamic_relocs, false) ||
1035 !Config->IsRela;
Sean Fertile7f3f05e2018-09-20 00:26:441036
1037 Config->TocOptimize =
Rui Ueyamad19bc042018-09-20 21:29:141038 Args.hasFlag(OPT_toc_optimize, OPT_no_toc_optimize, M == EM_PPC64);
Rui Ueyamad57e74b72017-03-17 23:29:011039}
1040
Rui Ueyama0aeb1192016-10-20 04:36:361041// Returns a value of "-format" option.
Rui Ueyamae262bb12018-08-06 21:29:411042static bool isFormatBinary(StringRef S) {
Rui Ueyama0aeb1192016-10-20 04:36:361043 if (S == "binary")
1044 return true;
1045 if (S == "elf" || S == "default")
1046 return false;
Rui Ueyamad7c44542016-10-20 04:47:451047 error("unknown -format value: " + S +
Rui Ueyama0aeb1192016-10-20 04:36:361048 " (supported formats: elf, default, binary)");
1049 return false;
1050}
1051
Rui Ueyama0dd684c2016-01-07 17:54:191052void LinkerDriver::createFiles(opt::InputArgList &Args) {
Rui Ueyamaf75ea0b2018-05-31 13:00:251053 // For --{push,pop}-state.
1054 std::vector<std::tuple<bool, bool, bool>> Stack;
1055
1056 // Iterate over argv to process input files and positional arguments.
Igor Kudrind912ee92015-10-01 16:42:031057 for (auto *Arg : Args) {
George Rimar4f98e0b2018-04-04 08:13:281058 switch (Arg->getOption().getUnaliasedOption().getID()) {
George Rimar4f37d572017-07-21 16:27:261059 case OPT_library:
Rui Ueyama21eecb42016-02-02 21:13:091060 addLibrary(Arg->getValue());
Igor Kudrind912ee92015-10-01 16:42:031061 break;
1062 case OPT_INPUT:
Evgeniy Stepanova76349b2017-04-12 00:13:481063 addFile(Arg->getValue(), /*WithLOption=*/false);
Igor Kudrind912ee92015-10-01 16:42:031064 break;
George Rimar0b89c552018-01-17 10:24:491065 case OPT_defsym: {
1066 StringRef From;
1067 StringRef To;
1068 std::tie(From, To) = StringRef(Arg->getValue()).split('=');
George Rimar00d6f4b2018-08-10 06:32:391069 if (From.empty() || To.empty())
1070 error("-defsym: syntax error: " + StringRef(Arg->getValue()));
1071 else
1072 readDefsym(From, MemoryBufferRef(To, "-defsym"));
George Rimar0b89c552018-01-17 10:24:491073 break;
1074 }
Michael J. Spencera9424f32016-09-09 22:08:041075 case OPT_script:
Fangrui Songc60f85d2018-07-25 21:53:181076 if (Optional<std::string> Path = searchScript(Arg->getValue())) {
Alexander Richardson1de78472017-11-20 15:43:201077 if (Optional<MemoryBufferRef> MB = readFile(*Path))
1078 readLinkerScript(*MB);
1079 break;
1080 }
1081 error(Twine("cannot find linker script ") + Arg->getValue());
Michael J. Spencera9424f32016-09-09 22:08:041082 break;
Rui Ueyama35da9b62015-10-11 20:59:121083 case OPT_as_needed:
George Rimar4f98e0b2018-04-04 08:13:281084 Config->AsNeeded = true;
Rui Ueyama35da9b62015-10-11 20:59:121085 break;
Rui Ueyama0aeb1192016-10-20 04:36:361086 case OPT_format:
Rui Ueyamae262bb12018-08-06 21:29:411087 Config->FormatBinary = isFormatBinary(Arg->getValue());
Michael J. Spencera9424f32016-09-09 22:08:041088 break;
George Rimar4f98e0b2018-04-04 08:13:281089 case OPT_no_as_needed:
1090 Config->AsNeeded = false;
1091 break;
Igor Kudrind912ee92015-10-01 16:42:031092 case OPT_Bstatic:
George Rimar4f98e0b2018-04-04 08:13:281093 Config->Static = true;
1094 break;
Igor Kudrind912ee92015-10-01 16:42:031095 case OPT_Bdynamic:
George Rimar4f98e0b2018-04-04 08:13:281096 Config->Static = false;
Igor Kudrind912ee92015-10-01 16:42:031097 break;
Igor Kudrin2696bbe2015-10-01 18:02:211098 case OPT_whole_archive:
George Rimar4f98e0b2018-04-04 08:13:281099 InWholeArchive = true;
1100 break;
Igor Kudrin2696bbe2015-10-01 18:02:211101 case OPT_no_whole_archive:
George Rimar4f98e0b2018-04-04 08:13:281102 InWholeArchive = false;
Igor Kudrin2696bbe2015-10-01 18:02:211103 break;
Rui Ueyama5a67a6e2018-03-30 01:15:361104 case OPT_just_symbols:
1105 if (Optional<MemoryBufferRef> MB = readFile(Arg->getValue())) {
1106 Files.push_back(createObjectFile(*MB));
1107 Files.back()->JustSymbols = true;
1108 }
1109 break;
Rui Ueyama1d92aa72018-04-09 23:05:481110 case OPT_start_group:
1111 if (InputFile::IsInGroup)
1112 error("nested --start-group");
1113 InputFile::IsInGroup = true;
1114 break;
1115 case OPT_end_group:
1116 if (!InputFile::IsInGroup)
1117 error("stray --end-group");
1118 InputFile::IsInGroup = false;
Fangrui Songb72daf02018-04-19 23:23:231119 ++InputFile::NextGroupId;
Rui Ueyama1d92aa72018-04-09 23:05:481120 break;
Rui Ueyamaf8baa662016-04-07 19:24:511121 case OPT_start_lib:
Fangrui Song2416d7f2018-04-20 16:33:011122 if (InLib)
1123 error("nested --start-lib");
1124 if (InputFile::IsInGroup)
1125 error("may not nest --start-lib in --start-group");
George Rimar4f98e0b2018-04-04 08:13:281126 InLib = true;
Fangrui Song2416d7f2018-04-20 16:33:011127 InputFile::IsInGroup = true;
George Rimar4f98e0b2018-04-04 08:13:281128 break;
Rui Ueyamaf8baa662016-04-07 19:24:511129 case OPT_end_lib:
Fangrui Song2416d7f2018-04-20 16:33:011130 if (!InLib)
1131 error("stray --end-lib");
George Rimar4f98e0b2018-04-04 08:13:281132 InLib = false;
Fangrui Song2416d7f2018-04-20 16:33:011133 InputFile::IsInGroup = false;
1134 ++InputFile::NextGroupId;
Rui Ueyamaf8baa662016-04-07 19:24:511135 break;
Rui Ueyamaf75ea0b2018-05-31 13:00:251136 case OPT_push_state:
Rui Ueyamae37a5ce2018-05-31 13:24:011137 Stack.emplace_back(Config->AsNeeded, Config->Static, InWholeArchive);
Rui Ueyamaf75ea0b2018-05-31 13:00:251138 break;
1139 case OPT_pop_state:
1140 if (Stack.empty()) {
1141 error("unbalanced --push-state/--pop-state");
1142 break;
1143 }
1144 std::tie(Config->AsNeeded, Config->Static, InWholeArchive) = Stack.back();
1145 Stack.pop_back();
1146 break;
Rui Ueyamaf5c4aca2015-09-30 17:06:091147 }
Michael J. Spencer84487f12015-07-24 21:03:071148 }
1149
Bob Haarmanb8a59c82017-10-25 22:28:381150 if (Files.empty() && errorCount() == 0)
Rui Ueyama8088ebe2016-10-19 18:09:521151 error("no input files");
Rui Ueyamac185c012016-10-20 04:47:471152}
Rui Ueyama5e64d3f2016-06-29 01:30:501153
Rui Ueyamac185c012016-10-20 04:47:471154// If -m <machine_type> was not given, infer it from object files.
1155void LinkerDriver::inferMachineType() {
1156 if (Config->EKind != ELFNoneKind)
1157 return;
1158
1159 for (InputFile *F : Files) {
1160 if (F->EKind == ELFNoneKind)
1161 continue;
1162 Config->EKind = F->EKind;
1163 Config->EMachine = F->EMachine;
Rafael Espindola7cc713a2016-10-27 14:00:511164 Config->OSABI = F->OSABI;
Simon Atanasyan9e0297b2016-11-05 22:58:011165 Config->MipsN32Abi = Config->EMachine == EM_MIPS && isMipsN32Abi(F);
Rui Ueyamac185c012016-10-20 04:47:471166 return;
Rui Ueyama5e64d3f2016-06-29 01:30:501167 }
Rui Ueyamac185c012016-10-20 04:47:471168 error("target emulation unknown: -m or at least one .o file required");
Rui Ueyama3ce825e2015-10-09 21:07:251169}
1170
Rui Ueyamae4eadb62016-12-08 17:44:371171// Parse -z max-page-size=<value>. The default value is defined by
1172// each target.
1173static uint64_t getMaxPageSize(opt::InputArgList &Args) {
Rui Ueyama3e039442017-11-28 19:58:451174 uint64_t Val = args::getZOptionValue(Args, OPT_z, "max-page-size",
1175 Target->DefaultMaxPageSize);
Rui Ueyamae4eadb62016-12-08 17:44:371176 if (!isPowerOf2_64(Val))
1177 error("max-page-size: value isn't a power of 2");
1178 return Val;
1179}
1180
Rui Ueyamac5dd5432016-10-26 04:34:161181// Parses -image-base option.
James Hendersonb5ca92e2017-10-10 10:09:351182static Optional<uint64_t> getImageBase(opt::InputArgList &Args) {
1183 // Because we are using "Config->MaxPageSize" here, this function has to be
1184 // called after the variable is initialized.
Rui Ueyamac5dd5432016-10-26 04:34:161185 auto *Arg = Args.getLastArg(OPT_image_base);
1186 if (!Arg)
James Hendersonb5ca92e2017-10-10 10:09:351187 return None;
Rui Ueyamac5dd5432016-10-26 04:34:161188
1189 StringRef S = Arg->getValue();
1190 uint64_t V;
George Rimarab947682017-05-16 08:19:251191 if (!to_integer(S, V)) {
Rui Ueyamac5dd5432016-10-26 04:34:161192 error("-image-base: number expected, but got " + S);
1193 return 0;
1194 }
Rafael Espindola476d2072016-12-07 20:29:461195 if ((V % Config->MaxPageSize) != 0)
Rui Ueyamac5dd5432016-10-26 04:34:161196 warn("-image-base: address isn't multiple of page size: " + S);
1197 return V;
1198}
1199
Rui Ueyamad1f8b812017-06-21 15:36:241200// Parses `--exclude-libs=lib,lib,...`.
1201// The library names may be delimited by commas or colons.
1202static DenseSet<StringRef> getExcludeLibs(opt::InputArgList &Args) {
1203 DenseSet<StringRef> Ret;
1204 for (auto *Arg : Args.filtered(OPT_exclude_libs)) {
1205 StringRef S = Arg->getValue();
1206 for (;;) {
1207 size_t Pos = S.find_first_of(",:");
1208 if (Pos == StringRef::npos)
1209 break;
1210 Ret.insert(S.substr(0, Pos));
1211 S = S.substr(Pos + 1);
1212 }
1213 Ret.insert(S);
1214 }
1215 return Ret;
1216}
1217
1218// Handles the -exclude-libs option. If a static library file is specified
1219// by the -exclude-libs option, all public symbols from the archive become
1220// private unless otherwise specified by version scripts or something.
1221// A special library name "ALL" means all archive files.
1222//
1223// This is not a popular option, but some programs such as bionic libc use it.
Oleg Ranevskyy0cf24ed2017-10-31 13:51:061224template <class ELFT>
Peter Collingbourne09e04af2018-02-16 20:23:541225static void excludeLibs(opt::InputArgList &Args) {
Rui Ueyamad1f8b812017-06-21 15:36:241226 DenseSet<StringRef> Libs = getExcludeLibs(Args);
1227 bool All = Libs.count("ALL");
1228
Yi Konga2125b12018-07-11 17:45:281229 auto Visit = [&](InputFile *File) {
Peter Collingbourne09e04af2018-02-16 20:23:541230 if (!File->ArchiveName.empty())
1231 if (All || Libs.count(path::filename(File->ArchiveName)))
Rui Ueyamaf52496e2017-11-03 21:21:471232 for (Symbol *Sym : File->getSymbols())
Peter Collingbourne09e04af2018-02-16 20:23:541233 if (!Sym->isLocal() && Sym->File == File)
Rui Ueyamaf1f00842017-10-31 16:07:411234 Sym->VersionId = VER_NDX_LOCAL;
Yi Konga2125b12018-07-11 17:45:281235 };
1236
1237 for (InputFile *File : ObjectFiles)
1238 Visit(File);
1239
1240 for (BitcodeFile *File : BitcodeFiles)
1241 Visit(File);
Rui Ueyamad1f8b812017-06-21 15:36:241242}
1243
Rui Ueyamacc013f62018-04-03 18:01:181244// Force Sym to be entered in the output. Used for -u or equivalent.
1245template <class ELFT> static void handleUndefined(StringRef Name) {
1246 Symbol *Sym = Symtab->find(Name);
1247 if (!Sym)
1248 return;
1249
1250 // Since symbol S may not be used inside the program, LTO may
1251 // eliminate it. Mark the symbol as "used" to prevent it.
1252 Sym->IsUsedInRegularObj = true;
1253
1254 if (Sym->isLazy())
1255 Symtab->fetchLazy<ELFT>(Sym);
1256}
1257
Peter Collingbourne98930112018-08-08 23:48:121258template <class ELFT> static void handleLibcall(StringRef Name) {
1259 Symbol *Sym = Symtab->find(Name);
1260 if (!Sym || !Sym->isLazy())
1261 return;
1262
1263 MemoryBufferRef MB;
1264 if (auto *LO = dyn_cast<LazyObject>(Sym))
1265 MB = LO->File->MB;
1266 else
1267 MB = cast<LazyArchive>(Sym)->getMemberBuffer();
1268
1269 if (isBitcode(MB))
1270 Symtab->fetchLazy<ELFT>(Sym);
1271}
1272
Chih-Hung Hsieh73e04842018-09-11 23:00:361273// If all references to a DSO happen to be weak, the DSO is not added
1274// to DT_NEEDED. If that happens, we need to eliminate shared symbols
1275// created from the DSO. Otherwise, they become dangling references
1276// that point to a non-existent DSO.
1277template <class ELFT> static void demoteSharedSymbols() {
Rafael Espindola61376d92018-04-25 00:29:131278 for (Symbol *Sym : Symtab->getSymbols()) {
Chih-Hung Hsieh73e04842018-09-11 23:00:361279 if (auto *S = dyn_cast<SharedSymbol>(Sym)) {
1280 if (!S->getFile<ELFT>().IsNeeded) {
1281 bool Used = S->Used;
1282 replaceSymbol<Undefined>(S, nullptr, S->getName(), STB_WEAK, S->StOther,
1283 S->Type);
1284 S->Used = Used;
1285 }
Rafael Espindola61376d92018-04-25 00:29:131286 }
1287 }
1288}
1289
Peter Collingbournea0522062018-07-21 02:14:591290// The section referred to by S is considered address-significant. Set the
1291// KeepUnique flag on the section if appropriate.
1292static void markAddrsig(Symbol *S) {
1293 if (auto *D = dyn_cast_or_null<Defined>(S))
1294 if (D->Section)
1295 // We don't need to keep text sections unique under --icf=all even if they
1296 // are address-significant.
1297 if (Config->ICF == ICFLevel::Safe || !(D->Section->Flags & SHF_EXECINSTR))
1298 D->Section->KeepUnique = true;
Peter Collingbournea327a4c2018-07-18 22:49:311299}
1300
Peter Smithdbef8cc2018-05-15 08:57:211301// Record sections that define symbols mentioned in --keep-unique <symbol>
Peter Collingbournea327a4c2018-07-18 22:49:311302// and symbols referred to by address-significance tables. These sections are
1303// ineligible for ICF.
1304template <class ELFT>
Peter Smithdbef8cc2018-05-15 08:57:211305static void findKeepUniqueSections(opt::InputArgList &Args) {
1306 for (auto *Arg : Args.filtered(OPT_keep_unique)) {
1307 StringRef Name = Arg->getValue();
Peter Collingbournea0522062018-07-21 02:14:591308 auto *D = dyn_cast_or_null<Defined>(Symtab->find(Name));
1309 if (!D || !D->Section) {
Peter Smithdbef8cc2018-05-15 08:57:211310 warn("could not find symbol " + Name + " to keep unique");
Peter Collingbournea0522062018-07-21 02:14:591311 continue;
1312 }
1313 D->Section->KeepUnique = true;
Peter Smithdbef8cc2018-05-15 08:57:211314 }
Peter Collingbournea327a4c2018-07-18 22:49:311315
Peter Collingbournea0522062018-07-21 02:14:591316 // --icf=all --ignore-data-address-equality means that we can ignore
1317 // the dynsym and address-significance tables entirely.
1318 if (Config->ICF == ICFLevel::All && Config->IgnoreDataAddressEquality)
1319 return;
Peter Collingbournea327a4c2018-07-18 22:49:311320
Peter Collingbournea0522062018-07-21 02:14:591321 // Symbols in the dynsym could be address-significant in other executables
1322 // or DSOs, so we conservatively mark them as address-significant.
1323 for (Symbol *S : Symtab->getSymbols())
1324 if (S->includeInDynsym())
1325 markAddrsig(S);
1326
1327 // Visit the address-significance table in each object file and mark each
1328 // referenced symbol as address-significant.
1329 for (InputFile *F : ObjectFiles) {
1330 auto *Obj = cast<ObjFile<ELFT>>(F);
1331 ArrayRef<Symbol *> Syms = Obj->getSymbols();
1332 if (Obj->AddrsigSec) {
1333 ArrayRef<uint8_t> Contents =
1334 check(Obj->getObj().getSectionContents(Obj->AddrsigSec));
1335 const uint8_t *Cur = Contents.begin();
1336 while (Cur != Contents.end()) {
1337 unsigned Size;
1338 const char *Err;
1339 uint64_t SymIndex = decodeULEB128(Cur, &Size, Contents.end(), &Err);
1340 if (Err)
1341 fatal(toString(F) + ": could not decode addrsig section: " + Err);
1342 markAddrsig(Syms[SymIndex]);
1343 Cur += Size;
Peter Collingbournea327a4c2018-07-18 22:49:311344 }
Peter Collingbournea0522062018-07-21 02:14:591345 } else {
1346 // If an object file does not have an address-significance table,
1347 // conservatively mark all of its symbols as address-significant.
1348 for (Symbol *S : Syms)
1349 markAddrsig(S);
Peter Collingbournea327a4c2018-07-18 22:49:311350 }
1351 }
Peter Smithdbef8cc2018-05-15 08:57:211352}
1353
Rui Ueyamac7497d32018-10-11 20:34:291354template <class ELFT> static Symbol *addUndefined(StringRef Name) {
1355 return Symtab->addUndefined<ELFT>(Name, STB_GLOBAL, STV_DEFAULT, 0, false,
1356 nullptr);
1357}
1358
Rui Ueyama07b45362018-08-22 07:02:261359// The --wrap option is a feature to rename symbols so that you can write
1360// wrappers for existing functions. If you pass `-wrap=foo`, all
1361// occurrences of symbol `foo` are resolved to `wrap_foo` (so, you are
1362// expected to write `wrap_foo` function as a wrapper). The original
1363// symbol becomes accessible as `real_foo`, so you can call that from your
1364// wrapper.
1365//
1366// This data structure is instantiated for each -wrap option.
1367struct WrappedSymbol {
1368 Symbol *Sym;
1369 Symbol *Real;
1370 Symbol *Wrap;
1371};
1372
1373// Handles -wrap option.
1374//
1375// This function instantiates wrapper symbols. At this point, they seem
1376// like they are not being used at all, so we explicitly set some flags so
1377// that LTO won't eliminate them.
1378template <class ELFT>
1379static std::vector<WrappedSymbol> addWrappedSymbols(opt::InputArgList &Args) {
1380 std::vector<WrappedSymbol> V;
1381 DenseSet<StringRef> Seen;
1382
1383 for (auto *Arg : Args.filtered(OPT_wrap)) {
1384 StringRef Name = Arg->getValue();
1385 if (!Seen.insert(Name).second)
1386 continue;
1387
1388 Symbol *Sym = Symtab->find(Name);
1389 if (!Sym)
1390 continue;
1391
Rui Ueyamac7497d32018-10-11 20:34:291392 Symbol *Real = addUndefined<ELFT>(Saver.save("__real_" + Name));
1393 Symbol *Wrap = addUndefined<ELFT>(Saver.save("__wrap_" + Name));
Rui Ueyama07b45362018-08-22 07:02:261394 V.push_back({Sym, Real, Wrap});
1395
1396 // We want to tell LTO not to inline symbols to be overwritten
1397 // because LTO doesn't know the final symbol contents after renaming.
1398 Real->CanInline = false;
1399 Sym->CanInline = false;
1400
1401 // Tell LTO not to eliminate these symbols.
1402 Sym->IsUsedInRegularObj = true;
1403 Wrap->IsUsedInRegularObj = true;
1404 }
1405 return V;
1406}
1407
1408// Do renaming for -wrap by updating pointers to symbols.
1409//
1410// When this function is executed, only InputFiles and symbol table
1411// contain pointers to symbol objects. We visit them to replace pointers,
1412// so that wrapped symbols are swapped as instructed by the command line.
1413template <class ELFT> static void wrapSymbols(ArrayRef<WrappedSymbol> Wrapped) {
1414 DenseMap<Symbol *, Symbol *> Map;
1415 for (const WrappedSymbol &W : Wrapped) {
1416 Map[W.Sym] = W.Wrap;
1417 Map[W.Real] = W.Sym;
1418 }
1419
1420 // Update pointers in input files.
1421 parallelForEach(ObjectFiles, [&](InputFile *File) {
1422 std::vector<Symbol *> &Syms = File->getMutableSymbols();
1423 for (size_t I = 0, E = Syms.size(); I != E; ++I)
1424 if (Symbol *S = Map.lookup(Syms[I]))
1425 Syms[I] = S;
1426 });
1427
1428 // Update pointers in the symbol table.
1429 for (const WrappedSymbol &W : Wrapped)
1430 Symtab->wrap(W.Sym, W.Real, W.Wrap);
1431}
1432
Peter Collingbourne2da4e522018-07-31 20:36:171433static const char *LibcallRoutineNames[] = {
1434#define HANDLE_LIBCALL(code, name) name,
1435#include "llvm/IR/RuntimeLibcalls.def"
1436#undef HANDLE_LIBCALL
1437};
1438
Rui Ueyama630a3822016-04-22 19:58:471439// Do actual linking. Note that when this function is called,
1440// all linker scripts have already been parsed.
Rui Ueyama3ce825e2015-10-09 21:07:251441template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
Rui Ueyamae145bc22017-06-16 20:15:031442 Target = getTarget();
Rui Ueyama4e247522018-09-25 19:26:581443 InX<ELFT>::VerSym = nullptr;
1444 InX<ELFT>::VerNeed = nullptr;
Rui Ueyamaff777682015-10-09 21:12:401445
Rui Ueyamae4eadb62016-12-08 17:44:371446 Config->MaxPageSize = getMaxPageSize(Args);
Rui Ueyamac5dd5432016-10-26 04:34:161447 Config->ImageBase = getImageBase(Args);
Rui Ueyama6c5638b2016-03-13 20:10:201448
George Rimard46753e2017-10-06 09:37:441449 // If a -hash-style option was not given, set to a default value,
1450 // which varies depending on the target.
1451 if (!Args.hasArg(OPT_hash_style)) {
1452 if (Config->EMachine == EM_MIPS)
1453 Config->SysvHash = true;
1454 else
1455 Config->SysvHash = Config->GnuHash = true;
1456 }
1457
Rui Ueyama630a3822016-04-22 19:58:471458 // Default output filename is "a.out" by the Unix tradition.
1459 if (Config->OutputFile.empty())
1460 Config->OutputFile = "a.out";
1461
James Hendersonb7a90ef2017-04-04 09:42:241462 // Fail early if the output file or map file is not writable. If a user has a
1463 // long link, e.g. due to a large LTO link, they do not wish to run it and
1464 // find that it failed because there was a mistake in their command-line.
Rui Ueyama71630272017-04-26 16:14:461465 if (auto E = tryCreateFile(Config->OutputFile))
1466 error("cannot open output file " + Config->OutputFile + ": " + E.message());
1467 if (auto E = tryCreateFile(Config->MapFile))
1468 error("cannot open map file " + Config->MapFile + ": " + E.message());
Bob Haarmanb8a59c82017-10-25 22:28:381469 if (errorCount())
Rui Ueyamaf3279992017-03-13 23:23:401470 return;
1471
Rui Ueyama34bf8672016-12-08 17:32:581472 // Use default entry point name if no name was given via the command
1473 // line nor linker scripts. For some reason, MIPS entry point name is
Rui Ueyama4de746f2016-12-07 04:45:341474 // different from others.
Simon Atanasyan8f7d2812016-12-20 22:24:451475 Config->WarnMissingEntry =
1476 (!Config->Entry.empty() || (!Config->Shared && !Config->Relocatable));
Rui Ueyama34bf8672016-12-08 17:32:581477 if (Config->Entry.empty() && !Config->Relocatable)
Rui Ueyama4de746f2016-12-07 04:45:341478 Config->Entry = (Config->EMachine == EM_MIPS) ? "__start" : "_start";
1479
Rui Ueyama69c778c2016-07-17 17:50:091480 // Handle --trace-symbol.
1481 for (auto *Arg : Args.filtered(OPT_trace_symbol))
Rafael Espindola244ef982017-07-26 18:42:481482 Symtab->trace(Arg->getValue());
Rui Ueyama69c778c2016-07-17 17:50:091483
Rui Ueyama4de746f2016-12-07 04:45:341484 // Add all files to the symbol table. This will add almost all
1485 // symbols that we need to the symbol table.
Rui Ueyama38dbd3e2016-09-14 00:05:511486 for (InputFile *F : Files)
Rafael Espindola244ef982017-07-26 18:42:481487 Symtab->addFile<ELFT>(F);
Eugene Leviant3967ea02016-09-08 08:57:511488
Rafael Espindolae05e2f82017-09-15 18:05:021489 // Now that we have every file, we can decide if we will need a
1490 // dynamic symbol table.
1491 // We need one if we were asked to export dynamic symbols or if we are
1492 // producing a shared library.
1493 // We also need one if any shared libraries are used and for pie executables
1494 // (probably because the dynamic linker needs it).
George Rimar696a7f92017-09-19 09:20:541495 Config->HasDynSymTab =
1496 !SharedFiles.empty() || Config->Pic || Config->ExportDynamic;
Rafael Espindolae05e2f82017-09-15 18:05:021497
George Rimar51d193f2017-08-23 08:37:221498 // Some symbols (such as __ehdr_start) are defined lazily only when there
1499 // are undefined symbols for them, so we add these to trigger that logic.
Rui Ueyamac7497d32018-10-11 20:34:291500 for (StringRef Name : Script->ReferencedSymbols)
1501 addUndefined<ELFT>(Name);
George Rimar51d193f2017-08-23 08:37:221502
Rui Ueyamaa215e7c2017-10-03 20:45:091503 // Handle the `--undefined <sym>` options.
1504 for (StringRef S : Config->Undefined)
Rui Ueyamacc013f62018-04-03 18:01:181505 handleUndefined<ELFT>(S);
Rui Ueyamaa215e7c2017-10-03 20:45:091506
Peter Collingbourne2da4e522018-07-31 20:36:171507 // If an entry symbol is in a static archive, pull out that file now.
Rui Ueyamacc013f62018-04-03 18:01:181508 handleUndefined<ELFT>(Config->Entry);
Eugene Leviant3967ea02016-09-08 08:57:511509
Peter Collingbourne2da4e522018-07-31 20:36:171510 // If any of our inputs are bitcode files, the LTO code generator may create
1511 // references to certain library functions that might not be explicit in the
1512 // bitcode file's symbol table. If any of those library functions are defined
1513 // in a bitcode file in an archive member, we need to arrange to use LTO to
1514 // compile those archive members by adding them to the link beforehand.
1515 //
Peter Collingbourne98930112018-08-08 23:48:121516 // However, adding all libcall symbols to the link can have undesired
1517 // consequences. For example, the libgcc implementation of
1518 // __sync_val_compare_and_swap_8 on 32-bit ARM pulls in an .init_array entry
1519 // that aborts the program if the Linux kernel does not support 64-bit
1520 // atomics, which would prevent the program from running even if it does not
1521 // use 64-bit atomics.
1522 //
1523 // Therefore, we only add libcall symbols to the link before LTO if we have
1524 // to, i.e. if the symbol's definition is in bitcode. Any other required
1525 // libcall symbols will be added to the link after LTO when we add the LTO
1526 // object file to the link.
Peter Collingbourne2da4e522018-07-31 20:36:171527 if (!BitcodeFiles.empty())
1528 for (const char *S : LibcallRoutineNames)
Peter Collingbourne98930112018-08-08 23:48:121529 handleLibcall<ELFT>(S);
Peter Collingbourne2da4e522018-07-31 20:36:171530
Rui Ueyama4de746f2016-12-07 04:45:341531 // Return if there were name resolution errors.
Bob Haarmanb8a59c82017-10-25 22:28:381532 if (errorCount())
Rui Ueyama4de746f2016-12-07 04:45:341533 return;
Rui Ueyama3ce825e2015-10-09 21:07:251534
George Rimar9e2c8a92018-03-08 14:54:381535 // Now when we read all script files, we want to finalize order of linker
1536 // script commands, which can be not yet final because of INSERT commands.
1537 Script->processInsertCommands();
1538
Igor Kudrin3345c9a2018-02-27 07:18:071539 // We want to declare linker script's symbols early,
1540 // so that we can version them.
1541 // They also might be exported if referenced by DSOs.
1542 Script->declareSymbols();
1543
Rui Ueyamad1f8b812017-06-21 15:36:241544 // Handle the -exclude-libs option.
1545 if (Args.hasArg(OPT_exclude_libs))
Peter Collingbourne09e04af2018-02-16 20:23:541546 excludeLibs<ELFT>(Args);
Rui Ueyamad1f8b812017-06-21 15:36:241547
Rafael Espindola63fcc5c2017-12-11 17:23:281548 // Create ElfHeader early. We need a dummy section in
1549 // addReservedSymbols to mark the created symbols as not absolute.
1550 Out::ElfHeader = make<OutputSection>("", 0, SHF_ALLOC);
1551 Out::ElfHeader->Size = sizeof(typename ELFT::Ehdr);
1552
Thomas Anderson4a401e92019-01-02 19:28:001553 // Create wrapped symbols for -wrap option.
1554 std::vector<WrappedSymbol> Wrapped = addWrappedSymbols<ELFT>(Args);
1555
Rafael Espindola63fcc5c2017-12-11 17:23:281556 // We need to create some reserved symbols such as _end. Create them.
1557 if (!Config->Relocatable)
Rafael Espindola9a84f6b2017-12-23 17:21:391558 addReservedSymbols();
Rafael Espindola63fcc5c2017-12-11 17:23:281559
Rui Ueyamad1f8b812017-06-21 15:36:241560 // Apply version scripts.
Rui Ueyama44a84712018-02-15 02:40:581561 //
1562 // For a relocatable output, version scripts don't make sense, and
1563 // parsing a symbol version string (e.g. dropping "@ver1" from a symbol
1564 // name "foo@ver1") rather do harm, so we don't call this if -r is given.
1565 if (!Config->Relocatable)
1566 Symtab->scanVersionScript();
Peter Collingbourne3a35c452016-04-22 18:47:521567
Rui Ueyama554adb22018-05-07 22:11:341568 // Do link-time optimization if given files are LLVM bitcode files.
1569 // This compiles bitcode files into real object files.
Peter Collingbourne98930112018-08-08 23:48:121570 //
1571 // With this the symbol table should be complete. After this, no new names
1572 // except a few linker-synthesized ones will be added to the symbol table.
Rafael Espindola244ef982017-07-26 18:42:481573 Symtab->addCombinedLTOObject<ELFT>();
Bob Haarmanb8a59c82017-10-25 22:28:381574 if (errorCount())
Davide Italianod26c4a12016-05-15 19:29:381575 return;
Rafael Espindola9f77ef02016-02-12 20:54:571576
Rui Ueyama554adb22018-05-07 22:11:341577 // If -thinlto-index-only is given, we should create only "index
1578 // files" and not object files. Index file creation is already done
1579 // in addCombinedLTOObject, so we are done if that's the case.
1580 if (Config->ThinLTOIndexOnly)
1581 return;
1582
Rui Ueyama9f499902018-12-14 21:58:491583 // Likewise, --plugin-opt=emit-llvm is an option to make LTO create
1584 // an output file in bitcode and exit, so that you can just get a
1585 // combined bitcode file.
1586 if (Config->EmitLLVM)
1587 return;
1588
Rui Ueyamadc0b0b02017-11-04 23:09:431589 // Apply symbol renames for -wrap.
Rui Ueyama07b45362018-08-22 07:02:261590 if (!Wrapped.empty())
1591 wrapSymbols<ELFT>(Wrapped);
George Rimar9703ad22017-04-26 10:40:021592
Rui Ueyama8c6a5aa2016-11-05 22:37:591593 // Now that we have a complete list of input files.
1594 // Beyond this point, no new files are added.
1595 // Aggregate all input sections into one place.
George Rimar696a7f92017-09-19 09:20:541596 for (InputFile *F : ObjectFiles)
Rafael Espindolab4c9b812017-02-23 02:28:281597 for (InputSectionBase *S : F->getSections())
Rafael Espindola774ea7d2017-02-23 16:49:071598 if (S && S != &InputSection::Discarded)
Rui Ueyama536a2672017-02-27 02:32:081599 InputSections.push_back(S);
George Rimar696a7f92017-09-19 09:20:541600 for (BinaryFile *F : BinaryFiles)
Rafael Espindolac404d502017-02-23 02:32:181601 for (InputSectionBase *S : F->getSections())
Rui Ueyama536a2672017-02-27 02:32:081602 InputSections.push_back(cast<InputSection>(S));
Rui Ueyama8c6a5aa2016-11-05 22:37:591603
George Rimarddd24242017-11-04 08:20:301604 // We do not want to emit debug sections if --strip-all
1605 // or -strip-debug are given.
1606 if (Config->Strip != StripPolicy::None)
1607 llvm::erase_if(InputSections, [](InputSectionBase *S) {
1608 return S->Name.startswith(".debug") || S->Name.startswith(".zdebug");
1609 });
1610
Konstantin Zhuravlyove7f17342017-10-24 17:01:401611 Config->EFlags = Target->calcEFlags();
Simon Atanasyan649e4d32017-10-02 14:56:411612
Peter Smith57eb0462017-11-28 13:51:481613 if (Config->EMachine == EM_ARM) {
1614 // FIXME: These warnings can be removed when lld only uses these features
1615 // when the input objects have been compiled with an architecture that
1616 // supports them.
1617 if (Config->ARMHasBlx == false)
1618 warn("lld uses blx instruction, no object with architecture supporting "
Rui Ueyama9db06422018-10-25 18:07:551619 "feature detected");
Peter Smith57eb0462017-11-28 13:51:481620 }
1621
Peter Collingbournedc7936e2017-06-12 00:00:511622 // This adds a .comment section containing a version string. We have to add it
Rui Ueyamae28c1462018-10-08 16:58:591623 // before mergeSections because the .comment section is a mergeable section.
Peter Collingbournedc7936e2017-06-12 00:00:511624 if (!Config->Relocatable)
Rafael Espindola5c73c492017-12-21 01:21:591625 InputSections.push_back(createCommentSection());
Peter Collingbournedc7936e2017-06-12 00:00:511626
1627 // Do size optimizations: garbage collection, merging of SHF_MERGE sections
1628 // and identical code folding.
Rafael Espindolaf1652d42018-04-27 18:17:361629 splitSections<ELFT>();
Rui Ueyamaa1b79df2017-10-10 22:59:321630 markLive<ELFT>();
Chih-Hung Hsieh73e04842018-09-11 23:00:361631 demoteSharedSymbols<ELFT>();
Rui Ueyama2b714b52017-10-11 03:12:531632 mergeSections();
Peter Collingbournea327a4c2018-07-18 22:49:311633 if (Config->ICF != ICFLevel::None) {
1634 findKeepUniqueSections<ELFT>(Args);
Rui Ueyama4f8d21f2016-05-02 19:30:421635 doIcf<ELFT>();
Peter Smithdbef8cc2018-05-15 08:57:211636 }
Rui Ueyamab91bf1a2016-05-23 16:55:431637
Michael J. Spencerb8427252018-04-17 23:30:051638 // Read the callgraph now that we know what was gced or icfed
Fangrui Songcc18f8a2018-10-25 23:15:231639 if (Config->CallGraphProfileSort) {
1640 if (auto *Arg = Args.getLastArg(OPT_call_graph_ordering_file))
1641 if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
1642 readCallGraph(*Buffer);
1643 readCallGraphsFromObjectFiles<ELFT>();
1644 }
Michael J. Spencerb8427252018-04-17 23:30:051645
Rui Ueyamaa75b7a42016-09-13 19:56:251646 // Write the result to the file.
Rui Ueyama84907c52016-08-09 03:38:231647 writeResult<ELFT>();
Michael J. Spencer84487f12015-07-24 21:03:071648}