[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
Wed Aug 6 01:09:03 PDT 2025


================
@@ -0,0 +1,97 @@
+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
+
+CHECK:      Format: COFF-i386
+CHECK-NEXT: Arch: i386
+CHECK-NEXT: AddressSize: 32bit
+CHECK-NEXT: PseudoReloc [
+CHECK-NEXT:  Entry {
+CHECK-NEXT:   Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   SymbolName: sym1
+CHECK-NEXT:   Target: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   BitWidth: {{[0-9]+}}
+CHECK-NEXT:  }
+CHECK-NEXT:  Entry {
+CHECK-NEXT:   Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   SymbolName: sym2
+CHECK-NEXT:   Target: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   BitWidth: {{[0-9]+}}
+CHECK-NEXT:  }
+CHECK-NEXT:  Entry {
+CHECK-NEXT:   Symbol: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   SymbolName: sym1
+CHECK-NEXT:   Target: 0x{{[0-9A-Z]+}}
+CHECK-NEXT:   BitWidth: {{[0-9]+}}
+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
+
+
+pseudoreloc.exe is generated by following script:
+
+#--- generate.sh
+llvm-mc -triple i386-mingw32 -filetype obj pseudoreloc.dll.s -o pseudoreloc.dll.o
+ld.lld -m i386pe --dll pseudoreloc.dll.o -o pseudoreloc.dll -entry=
+llvm-mc -triple i386-mingw32 -filetype obj pseudoreloc.s -o pseudoreloc.o
+ld.lld -m i386pe pseudoreloc.o pseudoreloc.dll -o pseudoreloc.exe -entry=start
+
+#--- pseudoreloc.dll.s
+    .data
+    .globl _sym1
+_sym1:
+    .long 0x11223344
+    .globl _sym2
+_sym2:
+    .long 0x55667788
+    .section .drectve
+    .ascii " -export:sym1,data "
+    .ascii " -export:sym2,data "
+    .addrsig
+
+#--- pseudoreloc.s
+    .text
+    .globl _start
+_start:
+    mov _local1b, %eax
+    movsb (%eax), %ecx
+    mov _local2, %eax
+    movsb (%eax), %edx
+    mov _local1a, %eax
+    movsb (%eax), %eax
+    add %edx, %eax
+    add %ecx, %eax
+    ret
+
+    .globl __pei386_runtime_relocator
+__pei386_runtime_relocator:
+    mov ___RUNTIME_PSEUDO_RELOC_LIST__, %eax
+    mov ___RUNTIME_PSEUDO_RELOC_LIST_END__, %ecx
+    sub %ecx, %eax
+    ret
+
+    .data
+    .globl  _local1a
+    .p2align 2
+_local1a:
+    .long _sym1+1
+
+    .globl _local2
+    .p2align 2
+_local2:
+    .long _sym2+1
+
+    .globl  _local1b
+    .p2align 2
+_local1b:
+    .long _sym1+3
+
+    .addrsig
+
----------------
jh7370 wrote:

Nit: you've got an extra blank line at EOF.

https://github.com/llvm/llvm-project/pull/151816


More information about the llvm-commits mailing list