diff options
Diffstat (limited to 'lld/ELF/Driver.cpp')
-rw-r--r-- | lld/ELF/Driver.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 54183d0c407..db671f086a8 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -345,6 +345,20 @@ static UnresolvedPolicy getUnresolvedSymbolOption(opt::InputArgList &Args) { return UnresolvedPolicy::ReportError; } +static Target2Policy getTarget2Option(opt::InputArgList &Args) { + if (auto *Arg = Args.getLastArg(OPT_target2)) { + StringRef S = Arg->getValue(); + if (S == "rel") + return Target2Policy::Rel; + if (S == "abs") + return Target2Policy::Abs; + if (S == "got-rel") + return Target2Policy::GotRel; + error("unknown --target2 option: " + S); + } + return Target2Policy::GotRel; +} + static bool isOutputFormatBinary(opt::InputArgList &Args) { if (auto *Arg = Args.getLastArg(OPT_oformat)) { StringRef S = Arg->getValue(); @@ -550,6 +564,8 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->UnresolvedSymbols = getUnresolvedSymbolOption(Args); + Config->Target2 = getTarget2Option(Args); + if (auto *Arg = Args.getLastArg(OPT_dynamic_list)) if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue())) parseDynamicList(*Buffer); |