diff options
Diffstat (limited to 'lld/ELF/Driver.cpp')
| -rw-r--r-- | lld/ELF/Driver.cpp | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index b8ee026a6ee..386c63a3134 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -607,6 +607,20 @@ getBuildId(opt::InputArgList &Args) { return {BuildIdKind::None, {}}; } +static std::pair<bool, bool> getPackDynRelocs(opt::InputArgList &Args) { + StringRef S = Args.getLastArgValue(OPT_pack_dyn_relocs, "none"); + if (S == "android") + return {true, false}; + if (S == "relr") + return {false, true}; + if (S == "android+relr") + return {true, true}; + + if (S != "none") + error("unknown -pack-dyn-relocs format: " + S); + return {false, false}; +} + static void readCallGraph(MemoryBufferRef MB) { // Build a map from symbol name to section DenseMap<StringRef, const Symbol *> SymbolNameToSymbol; @@ -873,19 +887,8 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { std::tie(Config->BuildId, Config->BuildIdVector) = getBuildId(Args); - if (auto *Arg = Args.getLastArg(OPT_pack_dyn_relocs)) { - StringRef S = Arg->getValue(); - if (S == "android") { - Config->AndroidPackDynRelocs = true; - } else if (S == "relr") { - Config->RelrPackDynRelocs = true; - } else if (S == "android+relr") { - Config->AndroidPackDynRelocs = true; - Config->RelrPackDynRelocs = true; - } else if (S != "none") { - error("unknown -pack-dyn-relocs format: " + S); - } - } + std::tie(Config->AndroidPackDynRelocs, Config->RelrPackDynRelocs) = + getPackDynRelocs(Args); if (auto *Arg = Args.getLastArg(OPT_symbol_ordering_file)) if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue())) |

