aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
diff options
context:
space:
mode:
authorKeith Smiley <keithbsmiley@gmail.com>2020-10-22 23:13:49 -0700
committerAlexander Shaposhnikov <alexshap@fb.com>2020-10-22 23:33:33 -0700
commit310a8e1d1284096fd42499c48a19899ff8b150ee (patch)
treef874e6c6cc01e4c50b0f6be6a1f3684b592800b2 /llvm/tools/llvm-objcopy/llvm-objcopy.cpp
parent0f910387e610d6c3e0008da5f5305d42c546cb8c (diff)
downloadllvm-310a8e1d1284096fd42499c48a19899ff8b150ee.zip
llvm-310a8e1d1284096fd42499c48a19899ff8b150ee.tar.gz
llvm-310a8e1d1284096fd42499c48a19899ff8b150ee.tar.bz2
[llvm-objcopy][NFC] Extract arg parsing logic into a helper function
This diff refactors the code which determines the tool type based on how llvm-objcopy is invoked (objcopy vs strip vs bitcode-strip vs install-name-tool). NFC. Test plan: make check-all Differential revision: https://reviews.llvm.org/D89713
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp56
1 files changed, 26 insertions, 30 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index e1f1ed8..7fd2acd 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -63,6 +63,30 @@ ErrorSuccess reportWarning(Error E) {
return Error::success();
}
+static Expected<DriverConfig> getDriverConfig(ArrayRef<const char *> Args) {
+ StringRef Stem = sys::path::stem(ToolName);
+ auto Is = [=](StringRef Tool) {
+ // We need to recognize the following filenames:
+ //
+ // llvm-objcopy -> objcopy
+ // strip-10.exe -> strip
+ // powerpc64-unknown-freebsd13-objcopy -> objcopy
+ // llvm-install-name-tool -> install-name-tool
+ auto I = Stem.rfind_lower(Tool);
+ return I != StringRef::npos &&
+ (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
+ };
+
+ if (Is("bitcode-strip") || Is("bitcode_strip"))
+ return parseBitcodeStripOptions(Args);
+ else if (Is("strip"))
+ return parseStripOptions(Args, reportWarning);
+ else if (Is("install-name-tool") || Is("install_name_tool"))
+ return parseInstallNameToolOptions(Args);
+ else
+ return parseObjcopyOptions(Args, reportWarning);
+}
+
} // end namespace objcopy
} // end namespace llvm
@@ -309,34 +333,12 @@ static Error executeObjcopy(CopyConfig &Config) {
namespace {
-enum class ToolType { Objcopy, Strip, InstallNameTool, BitcodeStrip };
-
} // anonymous namespace
int main(int argc, char **argv) {
InitLLVM X(argc, argv);
ToolName = argv[0];
- StringRef Stem = sys::path::stem(ToolName);
- auto Is = [=](StringRef Tool) {
- // We need to recognize the following filenames:
- //
- // llvm-objcopy -> objcopy
- // strip-10.exe -> strip
- // powerpc64-unknown-freebsd13-objcopy -> objcopy
- // llvm-install-name-tool -> install-name-tool
- auto I = Stem.rfind_lower(Tool);
- return I != StringRef::npos &&
- (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
- };
- ToolType Tool = ToolType::Objcopy;
- if (Is("bitcode-strip") || Is("bitcode_strip"))
- Tool = ToolType::BitcodeStrip;
- else if (Is("strip"))
- Tool = ToolType::Strip;
- else if (Is("install-name-tool") || Is("install_name_tool"))
- Tool = ToolType::InstallNameTool;
-
// Expand response files.
// TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp,
// into a separate function in the CommandLine library and call that function
@@ -351,14 +353,8 @@ int main(int argc, char **argv) {
NewArgv);
auto Args = makeArrayRef(NewArgv).drop_front();
- Expected<DriverConfig> DriverConfig =
- (Tool == ToolType::Strip)
- ? parseStripOptions(Args, reportWarning)
- : ((Tool == ToolType::InstallNameTool)
- ? parseInstallNameToolOptions(Args)
- : ((Tool == ToolType::BitcodeStrip)
- ? parseBitcodeStripOptions(Args)
- : parseObjcopyOptions(Args, reportWarning)));
+ Expected<DriverConfig> DriverConfig = getDriverConfig(Args);
+
if (!DriverConfig) {
logAllUnhandledErrors(DriverConfig.takeError(),
WithColor::error(errs(), ToolName));