diff options
author | gbreynoo <Owen.Reynolds@sony.com> | 2021-11-04 11:01:32 +0000 |
---|---|---|
committer | gbreynoo <Owen.Reynolds@sony.com> | 2021-11-04 11:01:32 +0000 |
commit | ced9287c2dfff254edf85e0a43ad80a2d6dcf7eb (patch) | |
tree | fd7ff36914671b6311efd93e7140d5bb77243caf /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 3d39612b3dd3f6b67ee63da305d30606abbe7287 (diff) | |
download | llvm-ced9287c2dfff254edf85e0a43ad80a2d6dcf7eb.zip llvm-ced9287c2dfff254edf85e0a43ad80a2d6dcf7eb.tar.gz llvm-ced9287c2dfff254edf85e0a43ad80a2d6dcf7eb.tar.bz2 |
[llvm-objdump] Fix the Assertion failure when providing invalid --debug-vars or --dwarf values
As seen in https://bugs.llvm.org/show_bug.cgi?id=52213 llvm-objdump
asserts if either the --debug-vars or the --dwarf options are provided
with invalid values. As suggested, this fix adds use of a default value
to these options and errors when given bad input.
Differential Revision: https://reviews.llvm.org/D112183
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 163c1cf..ed605e6 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -2500,6 +2500,11 @@ static void parseIntArg(const llvm::opt::InputArgList &InputArgs, int ID, } } +static void invalidArgValue(const opt::Arg *A) { + reportCmdLineError("'" + StringRef(A->getValue()) + + "' is not a valid value for '" + A->getSpelling() + "'"); +} + static std::vector<std::string> commaSeparatedValues(const llvm::opt::InputArgList &InputArgs, int ID) { std::vector<std::string> Values; @@ -2573,8 +2578,11 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) { commaSeparatedValues(InputArgs, OBJDUMP_disassemble_symbols_EQ); DisassembleZeroes = InputArgs.hasArg(OBJDUMP_disassemble_zeroes); if (const opt::Arg *A = InputArgs.getLastArg(OBJDUMP_dwarf_EQ)) { - DwarfDumpType = - StringSwitch<DIDumpType>(A->getValue()).Case("frames", DIDT_DebugFrame); + DwarfDumpType = StringSwitch<DIDumpType>(A->getValue()) + .Case("frames", DIDT_DebugFrame) + .Default(DIDT_Null); + if (DwarfDumpType == DIDT_Null) + invalidArgValue(A); } DynamicRelocations = InputArgs.hasArg(OBJDUMP_dynamic_reloc); FaultMapSection = InputArgs.hasArg(OBJDUMP_fault_map_section); @@ -2611,7 +2619,10 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) { if (const opt::Arg *A = InputArgs.getLastArg(OBJDUMP_debug_vars_EQ)) { DbgVariables = StringSwitch<DebugVarsFormat>(A->getValue()) .Case("ascii", DVASCII) - .Case("unicode", DVUnicode); + .Case("unicode", DVUnicode) + .Default(DVInvalid); + if (DbgVariables == DVInvalid) + invalidArgValue(A); } parseIntArg(InputArgs, OBJDUMP_debug_vars_indent_EQ, DbgIndent); |