Skip to content

Commit d72b9fd

Browse files
committedJun 1, 2018
Implemented sane default for llvm-objdump's relocation Value format
Summary: "Unknown" for platforms that were not manually added into the switch did not make sense at all. Now it prints Target + addend for all elf-machines that were not explicitly mentioned. Addresses PR21059 and PR25124. Original author: fedor.sergeev Reviewers: jyknight, espindola, fedor.sergeev Reviewed By: jyknight Subscribers: eraman, dcederman, jfb, dschuff, aheejin, llvm-commits Differential Revision: https://reviews.llvm.org/D36464 llvm-svn: 333726
1 parent 74a61b0 commit d72b9fd

File tree

7 files changed

+27
-89
lines changed

7 files changed

+27
-89
lines changed
 

‎llvm/test/DebugInfo/X86/DW_AT_location-reference.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
; Check we have a relocation for the debug_loc entry in Linux output.
5050
; LINUX: RELOCATION RECORDS FOR [.rela.debug_info]
5151
; LINUX-NOT: RELOCATION RECORDS
52-
; LINUX: R_X86_64{{.*}} .debug_loc+0
52+
; LINUX: R_X86_64{{.*}} .debug_loc
5353

5454
; ModuleID = 'simple.c'
5555
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32"

‎llvm/test/MC/Sparc/sparc-tls-relocations.s

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ foo:
2828
! First sequence uses LE_HIX22/LE_LOX10
2929

3030
! OBJDUMP: {{[0-9,a-f]+}}: 31 00 00 00 sethi 0, %i0
31-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 Unknown
31+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 Head
3232
! ASM: sethi %tle_hix22(Head), %i0 ! encoding: [0x31,0x00,0x00,0x00]
3333
! ASM: ! fixup A - offset: 0, value: %tle_hix22(Head), kind: fixup_sparc_tls_le_hix22
3434
sethi %tle_hix22(Head), %i0
3535

3636
! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 20 00 xor %i0, 0, %i0
37-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 Unknown
37+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 Head
3838
! ASM: xor %i0, %tle_lox10(Head), %i0 ! encoding: [0xb0,0x1e,0x20,0x00]
3939
! ASM: ! fixup A - offset: 0, value: %tle_lox10(Head), kind: fixup_sparc_tls_le_lox10
4040
xor %i0, %tle_lox10(Head), %i0
@@ -44,19 +44,19 @@ foo:
4444
! It uses LDO_HIX22/LDO_LOX10/LDO_ADD/LDM_HI22/LDM_LO10/LDM_ADD/LDM_CALL
4545

4646
! OBJDUMP: {{[0-9,a-f]+}}: 33 00 00 00 sethi 0, %i1
47-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 Unknown
47+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 Head
4848
! ASM: sethi %tldo_hix22(Head), %i1 ! encoding: [0x33,0b00AAAAAA,A,A]
4949
! ASM: ! fixup A - offset: 0, value: %tldo_hix22(Head), kind: fixup_sparc_tls_ldo_hix22
5050
sethi %tldo_hix22(Head), %i1
5151

5252
! OBJDUMP: {{[0-9,a-f]+}}: 35 00 00 00 sethi 0, %i2
53-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 Unknown
53+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 Head
5454
! ASM: sethi %tldm_hi22(Head), %i2 ! encoding: [0x35,0b00AAAAAA,A,A]
5555
! ASM: ! fixup A - offset: 0, value: %tldm_hi22(Head), kind: fixup_sparc_tls_ldm_hi22
5656
sethi %tldm_hi22(Head), %i2
5757

5858
! OBJDUMP: {{[0-9,a-f]+}}: b4 06 a0 00 add %i2, 0, %i2
59-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 Unknown
59+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 Head
6060
! ASM: add %i2, %tldm_lo10(Head), %i2 ! encoding: [0xb4,0x06,0b101000AA,A]
6161
! ASM: ! fixup A - offset: 0, value: %tldm_lo10(Head), kind: fixup_sparc_tls_ldm_lo10
6262
add %i2, %tldm_lo10(Head), %i2
@@ -65,7 +65,7 @@ foo:
6565
! add %i0, %i2, %o0, %tldm_add(Head)
6666

6767
! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 60 00 xor %i1, 0, %i0
68-
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 Unknown
68+
! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 Head
6969
! ASM: xor %i1, %tldo_lox10(Head), %i0 ! encoding: [0xb0,0x1e,0b011000AA,A]
7070
! ASM: ! fixup A - offset: 0, value: %tldo_lox10(Head), kind: fixup_sparc_tls_ldo_lox10
7171
xor %i1, %tldo_lox10(Head), %i0

‎llvm/test/MC/X86/abs8.s

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
// 32: 0: 83 ff 00 cmpl $0, %edi
55
// 32: 00000002: R_386_8 foo
66
// 64: 0: 83 ff 00 cmpl $0, %edi
7-
// 64: 0000000000000002: R_X86_64_8 foo+0
7+
// 64: 0000000000000002: R_X86_64_8 foo
88
cmp $foo@ABS8, %edi

‎llvm/test/Object/X86/objdump-disassembly-inline-relocations.test

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ ELF-x86-64: main:
9191
ELF-x86-64: 0: 48 83 ec 08 subq $8, %rsp
9292
ELF-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp)
9393
ELF-x86-64: c: bf 00 00 00 00 movl $0, %edi
94-
ELF-x86-64: d: R_X86_64_32S .rodata.str1.1+0
94+
ELF-x86-64: d: R_X86_64_32S .rodata.str1.1
9595
ELF-x86-64: 11: e8 00 00 00 00 callq 0
96-
ELF-x86-64: 12: R_X86_64_PC32 puts-4-P
96+
ELF-x86-64: 12: R_X86_64_PC32 puts-4
9797
ELF-x86-64: 16: 30 c0 xorb %al, %al
9898
ELF-x86-64: 18: e8 00 00 00 00 callq 0
99-
ELF-x86-64: 19: R_X86_64_PC32 SomeOtherFunction-4-P
99+
ELF-x86-64: 19: R_X86_64_PC32 SomeOtherFunction-4
100100
ELF-x86-64: 1d: 8b 44 24 04 movl 4(%rsp), %eax
101101
ELF-x86-64: 21: 48 83 c4 08 addq $8, %rsp
102102
ELF-x86-64: 25: c3 ret

‎llvm/test/Object/objdump-relocations.test

+5-5
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,16 @@ ELF-MIPSEL: R_MIPS_CALL16 puts
6060
ELF-MIPSEL: R_MIPS_CALL16 SomeOtherFunction
6161

6262
WASM: CODE
63-
WASM-NEXT: R_WEBASSEMBLY_MEMORY_ADDR_SLEB .L.str+0
64-
WASM-NEXT: R_WEBASSEMBLY_FUNCTION_INDEX_LEB puts+0
65-
WASM-NEXT: R_WEBASSEMBLY_FUNCTION_INDEX_LEB SomeOtherFunction+0
63+
WASM-NEXT: R_WEBASSEMBLY_MEMORY_ADDR_SLEB .L.str
64+
WASM-NEXT: R_WEBASSEMBLY_FUNCTION_INDEX_LEB puts
65+
WASM-NEXT: R_WEBASSEMBLY_FUNCTION_INDEX_LEB SomeOtherFunction
6666

6767
ELF-complex-x86-64: .text
6868
ELF-complex-x86-64-NEXT: R_X86_64_8 .data-4
6969
ELF-complex-x86-64-NEXT: R_X86_64_16 .data-4
7070
ELF-complex-x86-64-NEXT: R_X86_64_32 .data-4
7171
ELF-complex-x86-64-NEXT: R_X86_64_32S .data-4
7272
ELF-complex-x86-64-NEXT: R_X86_64_64 .data-4
73-
ELF-complex-x86-64-NEXT: R_X86_64_PC32 .data-4-P
74-
ELF-complex-x86-64-NEXT: R_X86_64_32 .data+0
73+
ELF-complex-x86-64-NEXT: R_X86_64_PC32 .data-4
74+
ELF-complex-x86-64-NEXT: R_X86_64_32 .data
7575
ELF-complex-x86-64-NEXT: R_X86_64_32 .data+4

‎llvm/test/Object/objdump-shndx.test

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ symbol that has st_shndx == SHN_XINDEX. To print the section name llvm-objdump
55
has to use the shndx section.
66

77
CHECK: RELOCATION RECORDS FOR [.rela.text]:
8-
CHECK-NEXT: 0000000000000000 R_X86_64_32 bar+0
8+
CHECK-NEXT: 0000000000000000 R_X86_64_32 bar

‎llvm/tools/llvm-objdump/llvm-objdump.cpp

+10-72
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,6 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
430430
if (!StrTabOrErr)
431431
return errorToErrorCode(StrTabOrErr.takeError());
432432
StringRef StrTab = *StrTabOrErr;
433-
uint8_t type = RelRef.getType();
434-
StringRef res;
435433
int64_t addend = 0;
436434
switch (Sec->sh_type) {
437435
default:
@@ -464,76 +462,16 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
464462
return errorToErrorCode(SymName.takeError());
465463
Target = *SymName;
466464
}
467-
switch (EF.getHeader()->e_machine) {
468-
case ELF::EM_X86_64:
469-
switch (type) {
470-
case ELF::R_X86_64_PC8:
471-
case ELF::R_X86_64_PC16:
472-
case ELF::R_X86_64_PC32: {
473-
std::string fmtbuf;
474-
raw_string_ostream fmt(fmtbuf);
475-
fmt << Target << (addend < 0 ? "" : "+") << addend << "-P";
476-
fmt.flush();
477-
Result.append(fmtbuf.begin(), fmtbuf.end());
478-
} break;
479-
case ELF::R_X86_64_8:
480-
case ELF::R_X86_64_16:
481-
case ELF::R_X86_64_32:
482-
case ELF::R_X86_64_32S:
483-
case ELF::R_X86_64_64: {
484-
std::string fmtbuf;
485-
raw_string_ostream fmt(fmtbuf);
486-
fmt << Target << (addend < 0 ? "" : "+") << addend;
487-
fmt.flush();
488-
Result.append(fmtbuf.begin(), fmtbuf.end());
489-
} break;
490-
default:
491-
res = "Unknown";
492-
}
493-
break;
494-
case ELF::EM_LANAI:
495-
case ELF::EM_AVR:
496-
case ELF::EM_AARCH64: {
497-
std::string fmtbuf;
498-
raw_string_ostream fmt(fmtbuf);
499-
fmt << Target;
500-
if (addend != 0)
501-
fmt << (addend < 0 ? "" : "+") << addend;
502-
fmt.flush();
503-
Result.append(fmtbuf.begin(), fmtbuf.end());
504-
break;
505-
}
506-
case ELF::EM_386:
507-
case ELF::EM_IAMCU:
508-
case ELF::EM_ARM:
509-
case ELF::EM_HEXAGON:
510-
case ELF::EM_MIPS:
511-
case ELF::EM_BPF:
512-
case ELF::EM_RISCV:
513-
res = Target;
514-
break;
515-
case ELF::EM_WEBASSEMBLY:
516-
switch (type) {
517-
case ELF::R_WEBASSEMBLY_DATA: {
518-
std::string fmtbuf;
519-
raw_string_ostream fmt(fmtbuf);
520-
fmt << Target << (addend < 0 ? "" : "+") << addend;
521-
fmt.flush();
522-
Result.append(fmtbuf.begin(), fmtbuf.end());
523-
break;
524-
}
525-
case ELF::R_WEBASSEMBLY_FUNCTION:
526-
res = Target;
527-
break;
528-
default:
529-
res = "Unknown";
530-
}
531-
break;
532-
default:
533-
res = "Unknown";
534-
}
535-
if (Result.empty())
536-
Result.append(res.begin(), res.end());
465+
466+
// Default scheme is to print Target, as well as "+ <addend>" for nonzero
467+
// addend. Should be acceptable for all normal purposes.
468+
std::string fmtbuf;
469+
raw_string_ostream fmt(fmtbuf);
470+
fmt << Target;
471+
if (addend != 0)
472+
fmt << (addend < 0 ? "" : "+") << addend;
473+
fmt.flush();
474+
Result.append(fmtbuf.begin(), fmtbuf.end());
537475
return std::error_code();
538476
}
539477

0 commit comments

Comments
 (0)
Please sign in to comment.