[llvm] [llvm-readobj][COFF] Implement --coff-pseudoreloc in llvm-readobj to dump runtime pseudo-relocation records (PR #151816)
James Henderson via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 7 01:54:03 PDT 2025
================
@@ -1,97 +1,214 @@
-RUN: llvm-readobj --coff-pseudoreloc %p/Inputs/pseudoreloc.exe | FileCheck %s
-RUN: llvm-readobj --coff-pseudoreloc %p/Inputs/nop.exe.coff-x86-64 | FileCheck %s --check-prefix=NOSYM
-RUN: llvm-readobj --coff-pseudoreloc %p/Inputs/trivial.obj.coff-i386 | FileCheck %s --check-prefix=NORELOC
+REQUIRE: x86-registered-target
-CHECK: Format: COFF-i386
-CHECK-NEXT: Arch: i386
-CHECK-NEXT: AddressSize: 32bit
+DEFINE: %{local} = 0x3000
+DEFINE: %{addr1l} = E8
+DEFINE: %{addr3l} = D8
+RUN: yaml2obj %p/Inputs/pseudoreloc.x86_64.yaml | llvm-readobj --coff-pseudoreloc - 2>&1 \
+RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-X64 --match-full-lines --implicit-check-not=warning \
+RUN: -D#WORD=8 -D#SYM1=0x20%{addr1l} -D#SYM3=0x20%{addr3l} -D#LOCAL1A=%{local} -DPREFIX=
+
+REDEFINE: %{addr1l} = B0
+REDEFINE: %{addr3l} = BC
+RUN: yaml2obj %p/Inputs/pseudoreloc.i386.yaml | llvm-readobj --coff-pseudoreloc - 2>&1 \
+RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-386 --match-full-lines --implicit-check-not=warning \
+RUN: -D#WORD=4 -D#SYM1=0x20%{addr1l} -D#SYM3=0x20%{addr3l} -D#LOCAL1A=%{local} -DPREFIX=_
+
+CHECK-X64: Format: COFF-x86-64
+CHECK-X64-NEXT: Arch: x86_64
+CHECK-386: Format: COFF-i386
+CHECK-386-NEXT: Arch: i386
+CHECK-NEXT: AddressSize: [[#%u,BW:mul(WORD,8)]]bit
CHECK-NEXT: PseudoReloc [
CHECK-NEXT: Entry {
-CHECK-NEXT: Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT: Symbol: 0x[[#%X,SYM1]]
CHECK-NEXT: SymbolName: sym1
-CHECK-NEXT: Target: 0x{{[0-9A-Z]+}}
-CHECK-NEXT: BitWidth: {{[0-9]+}}
+CHECK-NEXT: Target: 0x[[#%X,LOCAL1A]]
+CHECK-NEXT: TargetSymbol: .data+0x0
+CHECK-NEXT: BitWidth: [[#BW]]
CHECK-NEXT: }
CHECK-NEXT: Entry {
-CHECK-NEXT: Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT: Symbol: 0x[[#%X,SYM1+mul(1,WORD)]]
CHECK-NEXT: SymbolName: sym2
-CHECK-NEXT: Target: 0x{{[0-9A-Z]+}}
-CHECK-NEXT: BitWidth: {{[0-9]+}}
+CHECK-NEXT: Target: 0x[[#%X,LOCAL1A+mul(1,WORD)]]
+CHECK-NEXT: TargetSymbol: [[PREFIX]]local2a
+CHECK-NEXT: BitWidth: [[#BW]]
+CHECK-NEXT: }
+CHECK-NEXT: Entry {
+CHECK-NEXT: Symbol: 0x[[#%X,SYM3]]
+CHECK-NEXT: SymbolName: sym3
+CHECK-NEXT: Target: 0x[[#%X,LOCAL1A+mul(2,WORD)]]
+CHECK-NEXT: TargetSymbol: [[PREFIX]]local3a
+CHECK-NEXT: BitWidth: [[#BW]]
+CHECK-NEXT: }
+CHECK-NEXT: Entry {
+CHECK-NEXT: Symbol: 0x[[#%X,SYM3]]
+CHECK-NEXT: SymbolName: sym3
+CHECK-NEXT: Target: 0x[[#%X,LOCAL1A+mul(3,WORD)]]
+CHECK-NEXT: TargetSymbol: [[PREFIX]]local3a+0x[[#%X,mul(1,WORD)]]
+CHECK-NEXT: BitWidth: [[#BW]]
CHECK-NEXT: }
CHECK-NEXT: Entry {
-CHECK-NEXT: Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT: Symbol: 0x[[#%X,SYM1]]
CHECK-NEXT: SymbolName: sym1
-CHECK-NEXT: Target: 0x{{[0-9A-Z]+}}
-CHECK-NEXT: BitWidth: {{[0-9]+}}
+CHECK-NEXT: Target: 0x[[#%X,LOCAL1A+mul(4,WORD)]]
+CHECK-NEXT: TargetSymbol: [[PREFIX]]local3a+0x[[#%X,mul(2,WORD)]]
+CHECK-NEXT: BitWidth: [[#BW]]
CHECK-NEXT: }
CHECK-NEXT: ]
-NOSYM-NOT: PseudoReloc
-NOSYM: The symbol table has been stripped
-NOSYM-NOT: PseudoReloc
-NORELOC-NOT: PseudoReloc
-NORELOC: The symbols for runtime pseudo-relocation are not found
-NORELOC-NOT: PseudoReloc
+; check that silently ignore when imported symbol name is not found
----------------
jh7370 wrote:
This comment feels a bit garbled. Try "Test that llvm-readobj silently ignores missing imported symbol names." Also, please ensure comments follow standard English grammar, with capital letters and full stops.
https://github.com/llvm/llvm-project/pull/151816
More information about the llvm-commits
mailing list