[llvm] c87edaf - [Hexagon][llvm-objdump] Fix crash at a truncated instruction (#142082)

via llvm-commits llvm-commits at lists.llvm.org
Fri May 30 10:10:14 PDT 2025


Author: Alexey Karyakin
Date: 2025-05-30T12:10:11-05:00
New Revision: c87edaf99b18821e5278eb7b46b92cb67fc8d10c

URL: https://github.com/llvm/llvm-project/commit/c87edaf99b18821e5278eb7b46b92cb67fc8d10c
DIFF: https://github.com/llvm/llvm-project/commit/c87edaf99b18821e5278eb7b46b92cb67fc8d10c.diff

LOG: [Hexagon][llvm-objdump] Fix crash at a truncated instruction (#142082)

Fixes #141740.

Co-authored-by: Alexey Karyakin <quic-akaryaki at quicinc.com>
Co-authored-by: Sudharsan Veeravalli <quic_svs at quicinc.com>

Added: 
    llvm/test/tools/llvm-objdump/ELF/Hexagon/truncated-inst.yaml

Modified: 
    llvm/tools/llvm-objdump/llvm-objdump.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-objdump/ELF/Hexagon/truncated-inst.yaml b/llvm/test/tools/llvm-objdump/ELF/Hexagon/truncated-inst.yaml
new file mode 100644
index 0000000000000..26481b9a13216
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/ELF/Hexagon/truncated-inst.yaml
@@ -0,0 +1,26 @@
+## Test disassembling of truncated instructions.
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump --disassemble-all %t 2>&1 | FileCheck %s
+
+# CHECK:      0000000 <.data>:
+# CHECK-NEXT:       0: 55 <unknown>
+
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS32
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_HEXAGON
+Sections:
+  - Name:            .data
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    AddressAlign:    0x1
+    Content:         55
+  - Type:            SectionHeaderTable
+    Sections:
+      - Name:            .data
+      - Name:            .strtab
+      - Name:            .shstrtab
+...

diff  --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 85c455b2891a1..5ecb33375943f 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -700,14 +700,18 @@ class HexagonPrettyPrinter : public PrettyPrinter {
 public:
   void printLead(ArrayRef<uint8_t> Bytes, uint64_t Address,
                  formatted_raw_ostream &OS) {
-    uint32_t opcode =
-      (Bytes[3] << 24) | (Bytes[2] << 16) | (Bytes[1] << 8) | Bytes[0];
     if (LeadingAddr)
       OS << format("%8" PRIx64 ":", Address);
     if (ShowRawInsn) {
       OS << "\t";
-      dumpBytes(Bytes.slice(0, 4), OS);
-      OS << format("\t%08" PRIx32, opcode);
+      if (Bytes.size() >= 4) {
+        dumpBytes(Bytes.slice(0, 4), OS);
+        uint32_t opcode =
+            (Bytes[3] << 24) | (Bytes[2] << 16) | (Bytes[1] << 8) | Bytes[0];
+        OS << format("\t%08" PRIx32, opcode);
+      } else {
+        dumpBytes(Bytes, OS);
+      }
     }
   }
   void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t> Bytes,


        


More information about the llvm-commits mailing list