[llvm-objdump] Fix reporting error for processing target features
authorElena Lepilkina <elena.lepilkina@syntacore.com>
Wed, 18 Jan 2023 11:09:03 +0000 (14:09 +0300)
committerAnton Afanasyev <anton.afanasyev@syntacore.com>
Wed, 18 Jan 2023 13:56:51 +0000 (16:56 +0300)
Differential Revision: https://reviews.llvm.org/D142003

llvm/lib/Support/RISCVISAInfo.cpp
llvm/test/tools/llvm-objdump/ELF/RISCV/invalid-arch-attr.test [new file with mode: 0644]
llvm/tools/llvm-objdump/llvm-objdump.cpp

index 6b9d4ca..1b1bff0 100644 (file)
@@ -704,8 +704,6 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
       }
 
       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 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
 
       // 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 (file)
index 0000000..464eb2f
--- /dev/null
@@ -0,0 +1,26 @@
+## 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".
+    Content: 3385C502
+  - Name:    .riscv.attributes
+    Type:    SHT_RISCV_ATTRIBUTES
+    Content: 4123000000726973637600019572763332693270305F6D3270305F7831703000
index 8c2be29..930b132 100644 (file)
@@ -2011,7 +2011,7 @@ static void disassembleObject(ObjectFile *Obj, bool InlineRelocs) {
   // Package up features to be passed to target/subtarget
   Expected<SubtargetFeatures> 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)