[llvm] [llvm-objdump] --adjust-vma: Call getInstruction with adjusted address (PR #140471)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon May 19 09:40:38 PDT 2025


https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/140471

>From 93d8c9c77d5fc2eb6e8904b4f3290eeac4338876 Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Sun, 18 May 2025 12:11:07 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
 =?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.5-bogner
---
 .../llvm-objdump/ELF/SystemZ/adjust-vma.test  | 96 +++++++++++++++++++
 llvm/tools/llvm-objdump/llvm-objdump.cpp      |  2 +-
 2 files changed, 97 insertions(+), 1 deletion(-)
 create mode 100644 llvm/test/tools/llvm-objdump/ELF/SystemZ/adjust-vma.test

diff --git a/llvm/test/tools/llvm-objdump/ELF/SystemZ/adjust-vma.test b/llvm/test/tools/llvm-objdump/ELF/SystemZ/adjust-vma.test
new file mode 100644
index 0000000000000..9cc93fb1af8d8
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/ELF/SystemZ/adjust-vma.test
@@ -0,0 +1,96 @@
+# RUN: rm -rf %t && split-file %s %t && cd %t
+# RUN: yaml2obj a.yaml -o out
+# RUN: llvm-objdump -td --adjust-vma=0x200000 --no-show-raw-insn out | FileCheck %s --match-full-lines
+
+# CHECK:      SYMBOL TABLE:
+# CHECK-NEXT: 0000000001200104 l       .text  0000000000000000 f1
+# CHECK-NEXT: 0000000001200106 l       .text  0000000000000000 f2
+# CHECK-NEXT: 0000000000000800 l       *ABS*  0000000000000000 abs
+
+# CHECK:      00000000012000f8 <_start>:
+# CHECK-NEXT:  12000f8: brasl   %r14, 0x1200104
+# CHECK-NEXT:  12000fe: brasl   %r14, 0x1200106
+# CHECK-EMPTY:
+# CHECK-NEXT: 0000000001200104 <f1>:
+# CHECK-NEXT:  1200104: br      %r14
+# CHECK-EMPTY:
+# CHECK-NEXT: 0000000001200106 <f2>:
+# CHECK-NEXT:  1200106: br      %r14
+
+#--- a.s
+.globl _start
+_start:
+  brasl %r14, f1
+  brasl %r14, f2
+
+f1:
+  br %r14
+f2:
+  br %r14
+
+abs = 0x800
+#--- gen
+LLD_IN_TEST=1 clang --target=s390x-linux -no-pie -nostdlib -Wl,--no-rosegment,-zseparate-code,-znorelro,-znognustack -fuse-ld=lld a.s -o a
+obj2yaml a
+#--- a.yaml
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2MSB
+  Type:            ET_EXEC
+  Machine:         EM_S390
+  Entry:           0x10000F8
+ProgramHeaders:
+  - Type:            PT_PHDR
+    Flags:           [ PF_R ]
+    VAddr:           0x1000040
+    Align:           0x8
+    Offset:          0x40
+  - Type:            PT_INTERP
+    Flags:           [ PF_R ]
+    FirstSec:        .interp
+    LastSec:         .interp
+    VAddr:           0x10000E8
+    Offset:          0xE8
+  - Type:            PT_LOAD
+    Flags:           [ PF_X, PF_R ]
+    FirstSec:        .interp
+    LastSec:         .text
+    VAddr:           0x1000000
+    Align:           0x1000
+    Offset:          0x0
+Sections:
+  - Name:            .interp
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x10000E8
+    AddressAlign:    0x1
+    Content:         2F6C69622F6C6436342E736F2E3100
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x10000F8
+    AddressAlign:    0x4
+    Content:         C0E500000006C0E50000000407FE07FE
+  - Name:            .comment
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_MERGE, SHF_STRINGS ]
+    AddressAlign:    0x1
+    EntSize:         0x1
+    Offset:          0x1000
+    Content:         4C696E6B65723A204C4C442032312E302E3000
+Symbols:
+  - Name:            f1
+    Section:         .text
+    Value:           0x1000104
+  - Name:            f2
+    Section:         .text
+    Value:           0x1000106
+  - Name:            abs
+    Index:           SHN_ABS
+    Value:           0x800
+  - Name:            _start
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x10000F8
+...
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 7a778da2d3a49..99bb41f5b95a7 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -2323,7 +2323,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
           // provided
           MCInst Inst;
           ArrayRef<uint8_t> ThisBytes = Bytes.slice(Index);
-          uint64_t ThisAddr = SectionAddr + Index;
+          uint64_t ThisAddr = SectionAddr + Index + VMAAdjustment;
           bool Disassembled = DT->DisAsm->getInstruction(
               Inst, Size, ThisBytes, ThisAddr, CommentStream);
           if (Size == 0)



More information about the llvm-commits mailing list