summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2018-07-09 20:22:28 +0000
committerRui Ueyama <ruiu@google.com>2018-07-09 20:22:28 +0000
commit45192b3746db6a2066f78dfe47e2c30f7785266d (patch)
tree8f12d75aa807dfc14e84e825b3f48f70de4aa4df
parentd31bc9866b1bb85670264f0eb4f7085655b69f38 (diff)
downloadbcm5719-llvm-45192b3746db6a2066f78dfe47e2c30f7785266d.tar.gz
bcm5719-llvm-45192b3746db6a2066f78dfe47e2c30f7785266d.zip
Factor out code to parse -pack-dyn-relocs. NFC.
llvm-svn: 336599
-rw-r--r--lld/ELF/Config.h4
-rw-r--r--lld/ELF/Driver.cpp29
2 files changed, 18 insertions, 15 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index a346f32a28d..1f374862713 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -113,7 +113,7 @@ struct Configuration {
uint64_t>
CallGraphProfile;
bool AllowMultipleDefinition;
- bool AndroidPackDynRelocs = false;
+ bool AndroidPackDynRelocs;
bool ARMHasBlx = false;
bool ARMHasMovtMovw = false;
bool ARMJ1J2BranchEncoding = false;
@@ -153,7 +153,7 @@ struct Configuration {
bool PrintGcSections;
bool PrintIcfSections;
bool Relocatable;
- bool RelrPackDynRelocs = false;
+ bool RelrPackDynRelocs;
bool SaveTemps;
bool SingleRoRx;
bool Shared;
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()))
OpenPOWER on IntegriCloud