aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp30
1 files changed, 9 insertions, 21 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index 44e0220..2ab77ea 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -140,16 +140,11 @@ static Error executeObjcopyOnIHex(const CopyConfig &Config, MemoryBuffer &In,
/// of the output specified by the command line options.
static Error executeObjcopyOnRawBinary(const CopyConfig &Config,
MemoryBuffer &In, Buffer &Out) {
- switch (Config.OutputFormat) {
- case FileFormat::ELF:
- // FIXME: Currently, we call elf::executeObjcopyOnRawBinary even if the
- // output format is binary/ihex or it's not given. This behavior differs from
- // GNU objcopy. See https://bugs.llvm.org/show_bug.cgi?id=42171 for details.
- case FileFormat::Binary:
- case FileFormat::IHex:
- case FileFormat::Unspecified:
- return elf::executeObjcopyOnRawBinary(Config, In, Out);
- }
+ // TODO: llvm-objcopy should parse CopyConfig.OutputFormat to recognize
+ // formats other than ELF / "binary" and invoke
+ // elf::executeObjcopyOnRawBinary, macho::executeObjcopyOnRawBinary or
+ // coff::executeObjcopyOnRawBinary accordingly.
+ return elf::executeObjcopyOnRawBinary(Config, In, Out);
}
/// The function executeObjcopyOnBinary does the dispatch based on the format
@@ -229,17 +224,10 @@ static Error executeObjcopy(const CopyConfig &Config) {
return createFileError(Config.InputFilename, EC);
typedef Error (*ProcessRawFn)(const CopyConfig &, MemoryBuffer &, Buffer &);
- ProcessRawFn ProcessRaw;
- switch (Config.InputFormat) {
- case FileFormat::Binary:
- ProcessRaw = executeObjcopyOnRawBinary;
- break;
- case FileFormat::IHex:
- ProcessRaw = executeObjcopyOnIHex;
- break;
- default:
- ProcessRaw = nullptr;
- }
+ auto ProcessRaw = StringSwitch<ProcessRawFn>(Config.InputFormat)
+ .Case("binary", executeObjcopyOnRawBinary)
+ .Case("ihex", executeObjcopyOnIHex)
+ .Default(nullptr);
if (ProcessRaw) {
auto BufOrErr = MemoryBuffer::getFileOrSTDIN(Config.InputFilename);