[llvm] 6baec97 - [llvm-objdump] Print relocation addends in hexadecimal
David Bozier via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 19 04:27:32 PST 2019
Author: David Bozier
Date: 2019-11-19T12:27:18Z
New Revision: 6baec971271b7dc9db610da30a192e57ff03d935
URL: https://github.com/llvm/llvm-project/commit/6baec971271b7dc9db610da30a192e57ff03d935
DIFF: https://github.com/llvm/llvm-project/commit/6baec971271b7dc9db610da30a192e57ff03d935.diff
LOG: [llvm-objdump] Print relocation addends in hexadecimal
Summary: Matches GNU objdump. Makes debugging easier for me as I'm working out addresses from symbol+addend, so it would be good to be calculating in a single format.
Reviewers: MaskRay, grimar, jhenderson, bd1976llvm
Reviewed By: jhenderson
Subscribers: sdardis, jrtc27, atanasyan, rupprecht, seiya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D69997
Added:
Modified:
llvm/test/MC/AArch64/adr.s
llvm/test/MC/AArch64/arm32-elf-relocs.s
llvm/test/MC/AArch64/arm64-elf-relocs.s
llvm/test/MC/Mips/expansion-jal-sym-pic.s
llvm/test/MC/X86/tlsdesc-64.s
llvm/test/Object/X86/objdump-disassembly-inline-relocations.test
llvm/test/Object/objdump-relocations.test
llvm/test/tools/llvm-objdump/X86/demangle.s
llvm/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
llvm/test/tools/llvm-objdump/X86/section-filter-relocs.test
llvm/test/tools/llvm-objdump/relocations-elf.test
llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test
llvm/tools/llvm-objdump/ELFDump.cpp
Removed:
################################################################################
diff --git a/llvm/test/MC/AArch64/adr.s b/llvm/test/MC/AArch64/adr.s
index 3c57461b155c..57b3a5b03096 100644
--- a/llvm/test/MC/AArch64/adr.s
+++ b/llvm/test/MC/AArch64/adr.s
@@ -6,11 +6,11 @@
// CHECK-NEXT: adr x3, #0
// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol
// CHECK-NEXT: adr x4, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+0xf1000
// CHECK-NEXT: adr x5, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+0xf1000
// CHECK-NEXT: adr x6, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_LO21 Symbol+0xf1000
adr x0, 100
adr x2, Symbol
@@ -24,11 +24,11 @@
// CHECK-NEXT: adrp x2, #0
// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol
// CHECK-NEXT: adrp x3, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+0xf1000
// CHECK-NEXT: adrp x4, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+0xf1000
// CHECK-NEXT: adrp x5, #0
-// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+987136
+// CHECK-NEXT: R_AARCH64_ADR_PREL_PG_HI21 Symbol+0xf1000
adrp x0, Symbol
adrp x2, Symbol + 0
diff --git a/llvm/test/MC/AArch64/arm32-elf-relocs.s b/llvm/test/MC/AArch64/arm32-elf-relocs.s
index 6473e2c788a9..33e63c2993d0 100644
--- a/llvm/test/MC/AArch64/arm32-elf-relocs.s
+++ b/llvm/test/MC/AArch64/arm32-elf-relocs.s
@@ -32,37 +32,37 @@
add x0, x2, #:lo12:sym+8
// CHECK: add x0, x2, :lo12:sym
-// CHECK-OBJ-ILP32: 18 R_AARCH64_P32_ADD_ABS_LO12_NC sym+8
+// CHECK-OBJ-ILP32: 18 R_AARCH64_P32_ADD_ABS_LO12_NC sym+0x8
add x5, x7, #:dtprel_lo12:sym+1
// CHECK: add x5, x7, :dtprel_lo12:sym+1
-// CHECK-OBJ-ILP32: 1c R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12 sym+1
+// CHECK-OBJ-ILP32: 1c R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12 sym+0x1
add x9, x12, #:dtprel_lo12_nc:sym+2
// CHECK: add x9, x12, :dtprel_lo12_nc:sym+2
-// CHECK-OBJ-ILP32:20 R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NC sym+2
+// CHECK-OBJ-ILP32:20 R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NC sym+0x2
add x20, x30, #:tprel_lo12:sym+12
// CHECK: add x20, x30, :tprel_lo12:sym+12
-// CHECK-OBJ-ILP32: 24 R_AARCH64_P32_TLSLE_ADD_TPREL_LO12 sym+12
+// CHECK-OBJ-ILP32: 24 R_AARCH64_P32_TLSLE_ADD_TPREL_LO12 sym+0xc
add x9, x12, #:tprel_lo12_nc:sym+54
// CHECK: add x9, x12, :tprel_lo12_nc:sym+54
-// CHECK-OBJ-ILP32: 28 R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC sym+54
+// CHECK-OBJ-ILP32: 28 R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC sym+0x36
add x5, x0, #:tlsdesc_lo12:sym+70
// CHECK: add x5, x0, :tlsdesc_lo12:sym+70
-// CHECK-OBJ-ILP32: 2c R_AARCH64_P32_TLSDESC_ADD_LO12 sym+70
+// CHECK-OBJ-ILP32: 2c R_AARCH64_P32_TLSDESC_ADD_LO12 sym+0x46
.hword sym + 4 - .
-// CHECK-OBJ-ILP32: 30 R_AARCH64_P32_PREL16 sym+4
+// CHECK-OBJ-ILP32: 30 R_AARCH64_P32_PREL16 sym+0x4
.word sym - . + 8
-// CHECK-OBJ-ILP32: 32 R_AARCH64_P32_PREL32 sym+8
+// CHECK-OBJ-ILP32: 32 R_AARCH64_P32_PREL32 sym+0x8
.hword sym
// CHECK-OBJ-ILP32: 36 R_AARCH64_P32_ABS16 sym
.word sym+1
-// CHECK-OBJ-ILP32: 38 R_AARCH64_P32_ABS32 sym+1
+// CHECK-OBJ-ILP32: 38 R_AARCH64_P32_ABS32 sym+0x1
adrp x0, sym
// CHECK: adrp x0, sym
diff --git a/llvm/test/MC/AArch64/arm64-elf-relocs.s b/llvm/test/MC/AArch64/arm64-elf-relocs.s
index 6534694d302f..594837449c06 100644
--- a/llvm/test/MC/AArch64/arm64-elf-relocs.s
+++ b/llvm/test/MC/AArch64/arm64-elf-relocs.s
@@ -12,8 +12,8 @@
// CHECK: add x0, x2, :lo12:sym+12
// CHECK: add x0, x2, :lo12:sym-3
// CHECK-OBJ-LP64: 0 R_AARCH64_ADD_ABS_LO12_NC sym
-// CHECK-OBJ-LP64: 4 R_AARCH64_ADD_ABS_LO12_NC sym+12
-// CHECK-OBJ-LP64: 8 R_AARCH64_ADD_ABS_LO12_NC sym-3
+// CHECK-OBJ-LP64: 4 R_AARCH64_ADD_ABS_LO12_NC sym+0xc
+// CHECK-OBJ-LP64: 8 R_AARCH64_ADD_ABS_LO12_NC sym-0x3
add x5, x7, #:dtprel_lo12:sym
// CHECK: add x5, x7, :dtprel_lo12:sym
@@ -37,41 +37,41 @@
add x0, x2, #:lo12:sym+8
// CHECK: add x0, x2, :lo12:sym
-// CHECK-OBJ-LP64: 20 R_AARCH64_ADD_ABS_LO12_NC sym+8
+// CHECK-OBJ-LP64: 20 R_AARCH64_ADD_ABS_LO12_NC sym+0x8
add x5, x7, #:dtprel_lo12:sym+1
// CHECK: add x5, x7, :dtprel_lo12:sym+1
-// CHECK-OBJ-LP64: 24 R_AARCH64_TLSLD_ADD_DTPREL_LO12 sym+1
+// CHECK-OBJ-LP64: 24 R_AARCH64_TLSLD_ADD_DTPREL_LO12 sym+0x1
add x9, x12, #:dtprel_lo12_nc:sym+2
// CHECK: add x9, x12, :dtprel_lo12_nc:sym+2
-// CHECK-OBJ-LP64: 28 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC sym+2
+// CHECK-OBJ-LP64: 28 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC sym+0x2
add x20, x30, #:tprel_lo12:sym+12
// CHECK: add x20, x30, :tprel_lo12:sym+12
-// CHECK-OBJ-LP64: 2c R_AARCH64_TLSLE_ADD_TPREL_LO12 sym+12
+// CHECK-OBJ-LP64: 2c R_AARCH64_TLSLE_ADD_TPREL_LO12 sym+0xc
add x9, x12, #:tprel_lo12_nc:sym+54
// CHECK: add x9, x12, :tprel_lo12_nc:sym+54
-// CHECK-OBJ-LP64: 30 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC sym+54
+// CHECK-OBJ-LP64: 30 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC sym+0x36
add x5, x0, #:tlsdesc_lo12:sym+70
// CHECK: add x5, x0, :tlsdesc_lo12:sym+70
-// CHECK-OBJ-LP64: 34 R_AARCH64_TLSDESC_ADD_LO12 sym+70
+// CHECK-OBJ-LP64: 34 R_AARCH64_TLSDESC_ADD_LO12 sym+0x46
.hword sym + 4 - .
-// CHECK-OBJ-LP64: 38 R_AARCH64_PREL16 sym+4
+// CHECK-OBJ-LP64: 38 R_AARCH64_PREL16 sym+0x4
.word sym - . + 8
-// CHECK-OBJ-LP64: 3a R_AARCH64_PREL32 sym+8
+// CHECK-OBJ-LP64: 3a R_AARCH64_PREL32 sym+0x8
.xword sym-.
// CHECK-OBJ-LP64: 3e R_AARCH64_PREL64 sym{{$}}
.hword sym
// CHECK-OBJ-LP64: 46 R_AARCH64_ABS16 sym
.word sym+1
-// CHECK-OBJ-LP64: 48 R_AARCH64_ABS32 sym+1
+// CHECK-OBJ-LP64: 48 R_AARCH64_ABS32 sym+0x1
.xword sym+16
-// CHECK-OBJ-LP64: 4c R_AARCH64_ABS64 sym+16
+// CHECK-OBJ-LP64: 4c R_AARCH64_ABS64 sym+0x10
adrp x0, sym
// CHECK: adrp x0, sym
@@ -116,9 +116,9 @@ trickQuestion:
// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym
-// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym+15
-// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym-2
-// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym+4
+// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym+0xf
+// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym-0x2
+// CHECK-OBJ-LP64: R_AARCH64_LDST8_ABS_LO12_NC sym+0x4
ldrb w23, [x29, #:dtprel_lo12_nc:sym]
ldrsb w23, [x19, #:dtprel_lo12:sym]
@@ -134,7 +134,7 @@ trickQuestion:
// CHECK-OBJ-LP64: R_AARCH64_TLSLD_LDST8_DTPREL_LO12 sym
// CHECK-OBJ-LP64: R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_TLSLD_LDST8_DTPREL_LO12 sym
-// CHECK-OBJ-LP64: R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC sym+2
+// CHECK-OBJ-LP64: R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC sym+0x2
ldrb w1, [x2, :tprel_lo12:sym]
ldrsb w3, [x4, #:tprel_lo12_nc:sym]
@@ -163,7 +163,7 @@ trickQuestion:
// CHECK-OBJ-LP64: R_AARCH64_LDST16_ABS_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LDST16_ABS_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LDST16_ABS_LO12_NC sym
-// CHECK-OBJ-LP64: R_AARCH64_LDST16_ABS_LO12_NC sym+4
+// CHECK-OBJ-LP64: R_AARCH64_LDST16_ABS_LO12_NC sym+0x4
ldrh w23, [x29, #:dtprel_lo12_nc:sym]
ldrsh w23, [x19, :dtprel_lo12:sym]
@@ -232,8 +232,8 @@ trickQuestion:
// CHECK: ldr x28, [x27, :lo12:sym-15]
// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym
-// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym+10
-// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym-15
+// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym+0xa
+// CHECK-OBJ-LP64: R_AARCH64_LDST64_ABS_LO12_NC sym-0xf
ldr x24, [x23, #:got_lo12:sym]
ldr d22, [x21, :got_lo12:sym]
@@ -243,7 +243,7 @@ trickQuestion:
// CHECK: ldr x24, [x23, :got_lo12:sym+7]
// CHECK-OBJ-LP64: R_AARCH64_LD64_GOT_LO12_NC sym
// CHECK-OBJ-LP64: R_AARCH64_LD64_GOT_LO12_NC sym
-// CHECK-OBJ-LP64: R_AARCH64_LD64_GOT_LO12_NC sym+7
+// CHECK-OBJ-LP64: R_AARCH64_LD64_GOT_LO12_NC sym+0x7
ldr x24, [x23, :dtprel_lo12_nc:sym]
ldr d22, [x21, #:dtprel_lo12:sym]
diff --git a/llvm/test/MC/Mips/expansion-jal-sym-pic.s b/llvm/test/MC/Mips/expansion-jal-sym-pic.s
index 6141fb1422b7..df7ac1bbbc5b 100644
--- a/llvm/test/MC/Mips/expansion-jal-sym-pic.s
+++ b/llvm/test/MC/Mips/expansion-jal-sym-pic.s
@@ -341,7 +341,7 @@ local_label:
# XN32-NEXT: .reloc .Ltmp3, R_MIPS_JALR, weak_label
# ELF-XN32: 3c 19 00 00 lui $25, 0
-# ELF-XN32-NEXT: R_MIPS_GOT_HI16 weak_label+8
+# ELF-XN32-NEXT: R_MIPS_GOT_HI16 weak_label+0x8
# ELF-XN32-NEXT: 03 3c c8 21 addu $25, $25, $gp
# ELF-XN32-NEXT: 8f 39 00 00 lw $25, 0($25)
# ELF-XN32-NEXT: R_MIPS_GOT_LO16 weak_label
@@ -369,7 +369,7 @@ local_label:
# XN64-NEXT: .reloc .Ltmp3, R_MIPS_JALR, weak_label
# ELF-XN64: 3c 19 00 00 lui $25, 0
-# ELF-XN64-NEXT: R_MIPS_GOT_HI16/R_MIPS_NONE/R_MIPS_NONE weak_label+8
+# ELF-XN64-NEXT: R_MIPS_GOT_HI16/R_MIPS_NONE/R_MIPS_NONE weak_label+0x8
# ELF-XN64-NEXT: 03 3c c8 2d daddu $25, $25, $gp
# ELF-XN64-NEXT: df 39 00 00 ld $25, 0($25)
# ELF-XN64-NEXT: R_MIPS_GOT_LO16/R_MIPS_NONE/R_MIPS_NONE weak_label
@@ -521,7 +521,7 @@ local_label:
# XN32-NEXT: .reloc .Ltmp5, R_MIPS_JALR, global_label
# ELF-XN32: 3c 19 00 00 lui $25, 0
-# ELF-XN32-NEXT: R_MIPS_GOT_HI16 global_label+8
+# ELF-XN32-NEXT: R_MIPS_GOT_HI16 global_label+0x8
# ELF-XN32-NEXT: 03 3c c8 21 addu $25, $25, $gp
# ELF-XN32-NEXT: 8f 39 00 00 lw $25, 0($25)
# ELF-XN32-NEXT: R_MIPS_GOT_LO16 global_label
@@ -549,7 +549,7 @@ local_label:
# XN64-NEXT: .reloc .Ltmp5, R_MIPS_JALR, global_label
# ELF-XN64: 3c 19 00 00 lui $25, 0
-# ELF-XN64-NEXT: R_MIPS_GOT_HI16/R_MIPS_NONE/R_MIPS_NONE global_label+8
+# ELF-XN64-NEXT: R_MIPS_GOT_HI16/R_MIPS_NONE/R_MIPS_NONE global_label+0x8
# ELF-XN64-NEXT: 03 3c c8 2d daddu $25, $25, $gp
# ELF-XN64-NEXT: df 39 00 00 ld $25, 0($25)
# ELF-XN64-NEXT: R_MIPS_GOT_LO16/R_MIPS_NONE/R_MIPS_NONE global_label
diff --git a/llvm/test/MC/X86/tlsdesc-64.s b/llvm/test/MC/X86/tlsdesc-64.s
index 6da468aa5aa1..374626cdfbeb 100644
--- a/llvm/test/MC/X86/tlsdesc-64.s
+++ b/llvm/test/MC/X86/tlsdesc-64.s
@@ -10,7 +10,7 @@
# SYM: TLS GLOBAL DEFAULT UND a
# CHECK: 0: leaq (%rip), %rax
-# CHECK-NEXT: 0000000000000003: R_X86_64_GOTPC32_TLSDESC a-4
+# CHECK-NEXT: 0000000000000003: R_X86_64_GOTPC32_TLSDESC a-0x4
# CHECK-NEXT: 7: callq *(%rax)
# CHECK-NEXT: 0000000000000007: R_X86_64_TLSDESC_CALL a
diff --git a/llvm/test/Object/X86/objdump-disassembly-inline-relocations.test b/llvm/test/Object/X86/objdump-disassembly-inline-relocations.test
index 0fff39045940..b881aff9cfbb 100644
--- a/llvm/test/Object/X86/objdump-disassembly-inline-relocations.test
+++ b/llvm/test/Object/X86/objdump-disassembly-inline-relocations.test
@@ -178,10 +178,10 @@ Symbols:
# ELF-x86-64: c: bf 00 00 00 00 movl $0, %edi
# ELF-x86-64: d: R_X86_64_32S .rodata.str1.1
# ELF-x86-64: 11: e8 00 00 00 00 callq 0
-# ELF-x86-64: 12: R_X86_64_PC32 puts-4
+# ELF-x86-64: 12: R_X86_64_PC32 puts-0x4
# ELF-x86-64: 16: 30 c0 xorb %al, %al
# ELF-x86-64: 18: e8 00 00 00 00 callq 0
-# ELF-x86-64: 19: R_X86_64_PC32 SomeOtherFunction-4
+# ELF-x86-64: 19: R_X86_64_PC32 SomeOtherFunction-0x4
# ELF-x86-64: 1d: 8b 44 24 04 movl 4(%rsp), %eax
# ELF-x86-64: 21: 48 83 c4 08 addq $8, %rsp
# ELF-x86-64: 25: c3 ret
diff --git a/llvm/test/Object/objdump-relocations.test b/llvm/test/Object/objdump-relocations.test
index a916a0fb9977..5f8fbcc8fc05 100644
--- a/llvm/test/Object/objdump-relocations.test
+++ b/llvm/test/Object/objdump-relocations.test
@@ -125,11 +125,11 @@ Symbols:
# WASM-NEXT: R_WASM_FUNCTION_INDEX_LEB SomeOtherFunction
# ELF-complex-x86-64: .text
-# ELF-complex-x86-64-NEXT: R_X86_64_8 .data-4
-# ELF-complex-x86-64-NEXT: R_X86_64_16 .data-4
-# ELF-complex-x86-64-NEXT: R_X86_64_32 .data-4
-# ELF-complex-x86-64-NEXT: R_X86_64_32S .data-4
-# ELF-complex-x86-64-NEXT: R_X86_64_64 .data-4
-# ELF-complex-x86-64-NEXT: R_X86_64_PC32 .data-4
+# ELF-complex-x86-64-NEXT: R_X86_64_8 .data-0x4
+# ELF-complex-x86-64-NEXT: R_X86_64_16 .data-0x4
+# ELF-complex-x86-64-NEXT: R_X86_64_32 .data-0x4
+# ELF-complex-x86-64-NEXT: R_X86_64_32S .data-0x4
+# ELF-complex-x86-64-NEXT: R_X86_64_64 .data-0x4
+# ELF-complex-x86-64-NEXT: R_X86_64_PC32 .data-0x4
# ELF-complex-x86-64-NEXT: R_X86_64_32 .data
-# ELF-complex-x86-64-NEXT: R_X86_64_32 .data+4
+# ELF-complex-x86-64-NEXT: R_X86_64_32 .data+0x4
diff --git a/llvm/test/tools/llvm-objdump/X86/demangle.s b/llvm/test/tools/llvm-objdump/X86/demangle.s
index 5bfdbf73e926..98088763675b 100644
--- a/llvm/test/tools/llvm-objdump/X86/demangle.s
+++ b/llvm/test/tools/llvm-objdump/X86/demangle.s
@@ -6,13 +6,13 @@
# CHECK-NEXT: 0000000000000000 g F .text 00000000 foo()
## Check we demangle symbols when printing relocations.
-# CHECK: 000000000000001 R_X86_64_PLT32 foo()-4
+# CHECK: 000000000000001 R_X86_64_PLT32 foo()-0x4
## Check the case when relocations are inlined into disassembly.
# RUN: llvm-objdump -d -r --demangle %t | FileCheck %s --check-prefix=INLINE
# INLINE: foo():
# INLINE-NEXT: 0: {{.*}} callq 0 <_Z3foov+0x5>
-# INLINE-NEXT: 0000000000000001: R_X86_64_PLT32 foo()-4
+# INLINE-NEXT: 0000000000000001: R_X86_64_PLT32 foo()-0x4
.text
.globl _Z3foov
diff --git a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
index 8450b4e1f39f..74d374f0884d 100644
--- a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
+++ b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
@@ -5,10 +5,10 @@
# RUN: llvm-objdump %t1.o -d -r | FileCheck %s --implicit-check-not="RELOCATION RECORDS"
# CHECK: 0: e8 00 00 00 00 callq 0 <.text+0x5>
-# CHECK-NEXT: 0000000000000001: R_X86_64_PC32 foo-4
-# CHECK-NEXT: 0000000000000002: R_X86_64_NONE bar+8
+# CHECK-NEXT: 0000000000000001: R_X86_64_PC32 foo-0x4
+# CHECK-NEXT: 0000000000000002: R_X86_64_NONE bar+0x8
# CHECK-NEXT: 5: e8 00 00 00 00 callq 0 <.text+0xa>
-# CHECK-NEXT: 0000000000000006: R_X86_64_PLT32 foo+1
+# CHECK-NEXT: 0000000000000006: R_X86_64_PLT32 foo+0x1
--- !ELF
FileHeader:
@@ -61,3 +61,56 @@ Sections:
Link: 0
Info: 0xFF
Relocations: []
+
+## Check ranges of addends being displayed in a dump of relocations mixed with disassembly.
+# RUN: yaml2obj --docnum=3 %s > %t3
+# RUN: llvm-objdump -d -r %t3 | FileCheck %s --check-prefix=ADDENDS
+
+# ADDENDS: Disassembly of section .text:
+# ADDENDS: R_X86_64_64 glob-0x8000000000000000
+# ADDENDS: R_X86_64_64 glob+0x7fffffffffffffff
+# ADDENDS: R_X86_64_64 glob-0x1
+# ADDENDS: R_X86_64_64 glob+0x12345678
+# ADDENDS: R_X86_64_64 glob{{$}}
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ Flags: [SHF_EXECINSTR,SHF_ALLOC]
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ Relocations:
+ - Offset: 0x0
+ Addend: -9223372036854775808
+ Symbol: glob
+ Type: R_X86_64_64
+ - Offset: 0x1
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 9223372036854775807
+ - Offset: 0x2
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: -1
+ - Offset: 0x3
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 0x12345678
+ - Offset: 0x4
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 0
+Symbols:
+ - Name: glob
+ Section: .text
+ Value: 0x0
+ Size: 0
+ Binding: STB_GLOBAL
diff --git a/llvm/test/tools/llvm-objdump/X86/section-filter-relocs.test b/llvm/test/tools/llvm-objdump/X86/section-filter-relocs.test
index e8abbdfdf633..5345772ecaec 100644
--- a/llvm/test/tools/llvm-objdump/X86/section-filter-relocs.test
+++ b/llvm/test/tools/llvm-objdump/X86/section-filter-relocs.test
@@ -11,7 +11,7 @@
# DISASM-EMPTY:
# DISASM-NEXT: 0000000000000400 .text:
# DISASM-NEXT: 400: e8 00 00 00 00 callq 0 <.text+0x5>
-# RELOC-NEXT: 00000401: R_X86_64_PC32 foo+1
+# RELOC-NEXT: 00000401: R_X86_64_PC32 foo+0x1
# RELOC-NEXT: 00000401: R_X86_64_GOT32 foo
# DISASM: Disassembly of section .rodata:
# DISASM-EMPTY:
diff --git a/llvm/test/tools/llvm-objdump/relocations-elf.test b/llvm/test/tools/llvm-objdump/relocations-elf.test
index 751dfbb5807b..becbc35d81a8 100644
--- a/llvm/test/tools/llvm-objdump/relocations-elf.test
+++ b/llvm/test/tools/llvm-objdump/relocations-elf.test
@@ -8,9 +8,9 @@
# CHECK-NEXT: 0000000000000001 R_X86_64_32 glob1
# CHECK-NEXT: 0000000000000001 R_X86_64_32S glob2
# CHECK-NEXT: 0000000000000002 R_X86_64_64 loc1
-# CHECK-NEXT: 0000000000000001 R_X86_64_32 glob1+1
-# CHECK-NEXT: 0000000000000001 R_X86_64_32S glob2+2
-# CHECK-NEXT: 0000000000000002 R_X86_64_64 loc1+3
+# CHECK-NEXT: 0000000000000001 R_X86_64_32 glob1+0x1
+# CHECK-NEXT: 0000000000000001 R_X86_64_32S glob2+0x2
+# CHECK-NEXT: 0000000000000002 R_X86_64_64 loc1+0x3
--- !ELF
FileHeader: !FileHeader
@@ -90,3 +90,56 @@ Sections:
Relocations:
- Offset: 0x1
Type: R_X86_64_NONE
+
+## Check ranges of addends being displayed in a dump of relocations.
+# RUN: yaml2obj --docnum=3 %s > %t3
+# RUN: llvm-objdump -r %t3 | FileCheck %s --check-prefix=ADDENDS
+
+# ADDENDS: RELOCATION RECORDS FOR [.text]:
+# ADDENDS: R_X86_64_64 glob-0x8000000000000000
+# ADDENDS: R_X86_64_64 glob+0x7fffffffffffffff
+# ADDENDS: R_X86_64_64 glob-0x1
+# ADDENDS: R_X86_64_64 glob+0x12345678
+# ADDENDS: R_X86_64_64 glob{{$}}
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ Flags: [SHF_EXECINSTR,SHF_ALLOC]
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ Relocations:
+ - Offset: 0x0
+ Addend: -9223372036854775808
+ Symbol: glob
+ Type: R_X86_64_64
+ - Offset: 0x1
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 9223372036854775807
+ - Offset: 0x2
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: -1
+ - Offset: 0x3
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 0x12345678
+ - Offset: 0x4
+ Symbol: glob
+ Type: R_X86_64_64
+ Addend: 0
+Symbols:
+ - Name: glob
+ Section: .text
+ Value: 0x0
+ Size: 0
+ Binding: STB_GLOBAL
diff --git a/llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test b/llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test
index 701770f73244..b68c028738b9 100644
--- a/llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test
+++ b/llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test
@@ -10,7 +10,7 @@
# FMT: [[FILE]]: file format ELF64-x86-64
# REL: RELOCATION RECORDS FOR []:
-# REL-NEXT: 0000000000000123 R_X86_64_NONE *ABS*+321
+# REL-NEXT: 0000000000000123 R_X86_64_NONE *ABS*+0x141
## Executable.
--- !ELF
diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp
index 93d070eee16c..7ef16c187638 100644
--- a/llvm/tools/llvm-objdump/ELFDump.cpp
+++ b/llvm/tools/llvm-objdump/ELFDump.cpp
@@ -105,9 +105,12 @@ static Error getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
} else {
Fmt << "*ABS*";
}
-
- if (Addend != 0)
- Fmt << (Addend < 0 ? "" : "+") << Addend;
+ if (Addend != 0) {
+ Fmt << (Addend < 0
+ ? "-"
+ : "+") << format("0x%" PRIx64,
+ (Addend < 0 ? -(uint64_t)Addend : (uint64_t)Addend));
+ }
Fmt.flush();
Result.append(FmtBuf.begin(), FmtBuf.end());
return Error::success();
More information about the llvm-commits
mailing list