diff --git a/llvm/lib/Support/RISCVISAInfo.cpp b/llvm/lib/Support/RISCVISAInfo.cpp --- a/llvm/lib/Support/RISCVISAInfo.cpp +++ b/llvm/lib/Support/RISCVISAInfo.cpp @@ -704,8 +704,6 @@ } if (!IgnoreUnknown && Name.size() == Type.size()) { - if (IgnoreUnknown) - continue; return createStringError(errc::invalid_argument, "%s name missing after '%s'", Desc.str().c_str(), Type.str().c_str()); @@ -724,8 +722,6 @@ // Check if duplicated extension. if (!IgnoreUnknown && llvm::is_contained(AllExts, Name)) { - if (IgnoreUnknown) - continue; return createStringError(errc::invalid_argument, "duplicated %s '%s'", Desc.str().c_str(), Name.str().c_str()); } diff --git a/llvm/test/tools/llvm-objdump/ELF/RISCV/invalid-arch-attr.test b/llvm/test/tools/llvm-objdump/ELF/RISCV/invalid-arch-attr.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-objdump/ELF/RISCV/invalid-arch-attr.test @@ -0,0 +1,28 @@ +## Handle invalid arch attributes. +## +## This test cannot be assembly because the test needs an invalid arch +## feature and `llvm-mc` will filter out the unrecognized arch feature. + +# RUN: yaml2obj %s -D BITS=32 -o %t.32.o +# RUN: not llvm-objdump -d %t.32.o 2>&1 | \ +# RUN: FileCheck %s --check-prefixes=DISASM + +# DISASM: {{.*}} invalid section length 35 at offset 0x1 + +--- !ELF +FileHeader: + Class: ELFCLASS[[BITS]] + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_RISCV +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] +## The content is the encoding of "mul a0, a1, a2". +## The encoding could be decoded only when the "m" extension is enabled. + Content: 3385C502 + - Name: .riscv.attributes + Type: SHT_RISCV_ATTRIBUTES +## The content is the encoding of the arch feature "rv32i2p0_m2p0_x1p0" + Content: 4123000000726973637600019572763332693270305F6D3270305F7831703000 diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -2011,7 +2011,7 @@ // Package up features to be passed to target/subtarget Expected FeaturesValue = Obj->getFeatures(); if (!FeaturesValue) - WithColor::error(errs(), ToolName) << FeaturesValue.takeError(); + reportError(FeaturesValue.takeError(), Obj->getFileName()); SubtargetFeatures Features = *FeaturesValue; if (!MAttrs.empty()) { for (unsigned I = 0; I != MAttrs.size(); ++I)