[llvm] [llvm-objdump] --adjust-vma: Call getInstruction with adjusted address (PR #140471)
via llvm-commits
llvm-commits at lists.llvm.org
Sun May 18 12:11:48 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-binary-utilities
Author: Fangrui Song (MaskRay)
<details>
<summary>Changes</summary>
llvm-objdump currently calls MCDisassembler::getInstruction with
unadjusted address and MCInstPrinter::printInst with adjusted address.
The decoded branch targets will be adjusted as expected for most targets
(as the getInstruction address is insignificant) but not for SystemZ
(where the getInstruction address is displayed).
Specify an adjust address to fix SystemZInstPrinter output.
The added test utilizes llvm/utils/update_test_body.py to make updates
easier and additionally checks that we don't adjust SHN_ABS symbol
addresses.
---
Full diff: https://github.com/llvm/llvm-project/pull/140471.diff
2 Files Affected:
- (added) llvm/test/tools/llvm-objdump/ELF/SystemZ/adjust-vma.test (+96)
- (modified) llvm/tools/llvm-objdump/llvm-objdump.cpp (+1-1)
``````````diff
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)
``````````
</details>
https://github.com/llvm/llvm-project/pull/140471
More information about the llvm-commits
mailing list