Skip to content

Commit eec3206

Browse files
committed
[llvm-readobj] Print symbol version when dumping relocations (PR31564)
Summary: This helps resolve https://bugs.llvm.org/show_bug.cgi?id=31564 Reviewers: jhenderson, grimar Reviewed By: jhenderson Subscribers: rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59175 llvm-svn: 355922
1 parent b1dfbeb commit eec3206

File tree

2 files changed

+104
-2
lines changed

2 files changed

+104
-2
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# RUN: yaml2obj %s > %t.o
2+
# RUN: llvm-readobj -demangle -r %t.o | FileCheck %s --check-prefix LLVM
3+
# RUN: llvm-readelf -demangle -r %t.o | FileCheck %s --check-prefix GNU
4+
5+
# GNU: Relocation section '.rela.plt' at offset {{.*}} contains 5 entries:
6+
# GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
7+
# GNU-NEXT: 0000000000013018 0000000100000007 R_X86_64_JUMP_SLOT 0000000000000000 f1@v3 + 0
8+
# GNU-NEXT: 0000000000013020 0000000200000007 R_X86_64_JUMP_SLOT 0000000000000000 f2@v2 + 0
9+
# GNU-NEXT: 0000000000013028 0000000300000007 R_X86_64_JUMP_SLOT 0000000000000000 g1@v1 + 0
10+
# GNU-NEXT: 0000000000013040 0000000400000007 R_X86_64_JUMP_SLOT 0000000000000000 f1()@v3 + 0
11+
# GNU-NEXT: 0000000000013058 0000000500000007 R_X86_64_JUMP_SLOT 0000000000000000 f3 + 0
12+
13+
# LLVM: Relocations [
14+
# LLVM-NEXT: Section (3) .rela.plt {
15+
# LLVM-NEXT: 0x13018 R_X86_64_JUMP_SLOT f1@v3 0x0
16+
# LLVM-NEXT: 0x13020 R_X86_64_JUMP_SLOT f2@v2 0x0
17+
# LLVM-NEXT: 0x13028 R_X86_64_JUMP_SLOT g1@v1 0x0
18+
# LLVM-NEXT: 0x13040 R_X86_64_JUMP_SLOT f1()@v3 0x0
19+
# LLVM-NEXT: 0x13058 R_X86_64_JUMP_SLOT f3 0x0
20+
# LLVM-NEXT: }
21+
# LLVM-NEXT: ]
22+
23+
--- !ELF
24+
FileHeader:
25+
Class: ELFCLASS64
26+
Data: ELFDATA2LSB
27+
Type: ET_EXEC
28+
Machine: EM_X86_64
29+
Entry: 0x0000000000000000
30+
Sections:
31+
- Name: .gnu.version
32+
Type: SHT_GNU_versym
33+
Flags: [ SHF_ALLOC ]
34+
Link: .dynsym
35+
AddressAlign: 0x0000000000000002
36+
EntSize: 0x0000000000000002
37+
Entries: [ 0, 2, 3, 4, 2 ]
38+
- Name: .gnu.version_r
39+
Type: SHT_GNU_verneed
40+
Flags: [ SHF_ALLOC ]
41+
Link: .dynstr
42+
AddressAlign: 0x0000000000000004
43+
Info: 0x0000000000000002
44+
Dependencies:
45+
- Version: 1
46+
File: verneed1.so.0
47+
Entries:
48+
- Name: v2
49+
Hash: 1938
50+
Flags: 0
51+
Other: 3
52+
- Name: v3
53+
Hash: 1939
54+
Flags: 0
55+
Other: 2
56+
- Version: 1
57+
File: verneed2.so.0
58+
Entries:
59+
- Name: v1
60+
Hash: 1937
61+
Flags: 0
62+
Other: 4
63+
- Name: .rela.plt
64+
Type: SHT_RELA
65+
Flags: [ SHF_ALLOC ]
66+
Info: 0
67+
Link: 7
68+
AddressAlign: 0x0000000000000008
69+
EntSize: 0x0000000000000018
70+
Relocations:
71+
- Offset: 0x0000000000013018
72+
Symbol: f1
73+
Type: R_X86_64_JUMP_SLOT
74+
- Offset: 0x0000000000013020
75+
Symbol: f2
76+
Type: R_X86_64_JUMP_SLOT
77+
- Offset: 0x0000000000013028
78+
Symbol: g1
79+
Type: R_X86_64_JUMP_SLOT
80+
- Offset: 0x0000000000013040
81+
Symbol: _Z2f1v
82+
Type: R_X86_64_JUMP_SLOT
83+
- Offset: 0x0000000000013058
84+
Symbol: f3
85+
Type: R_X86_64_JUMP_SLOT
86+
Symbols:
87+
Global:
88+
- Name: f1
89+
- Name: f2
90+
- Name: g1
91+
- Name: _Z2f1v
92+
- Name: f3
93+
DynamicSymbols:
94+
Global:
95+
- Name: f1
96+
- Name: f2
97+
- Name: g1
98+
- Name: _Z2f1v
99+
- Name: f3
100+
...

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,7 +2706,8 @@ void GNUStyle<ELFT>::printRelocation(const ELFO *Obj, const Elf_Shdr *SymTab,
27062706
TargetName = unwrapOrError(Obj->getSectionName(Sec));
27072707
} else if (Sym) {
27082708
StringRef StrTable = unwrapOrError(Obj->getStringTableForSymtab(*SymTab));
2709-
TargetName = maybeDemangle(unwrapOrError(Sym->getName(StrTable)));
2709+
TargetName = this->dumper()->getFullSymbolName(
2710+
Sym, StrTable, SymTab->sh_type == SHT_DYNSYM /* IsDynamic */);
27102711
}
27112712

27122713
unsigned Width = ELFT::Is64Bits ? 16 : 8;
@@ -4293,7 +4294,8 @@ void LLVMStyle<ELFT>::printRelocation(const ELFO *Obj, Elf_Rela Rel,
42934294
TargetName = unwrapOrError(Obj->getSectionName(Sec));
42944295
} else if (Sym) {
42954296
StringRef StrTable = unwrapOrError(Obj->getStringTableForSymtab(*SymTab));
4296-
TargetName = maybeDemangle(unwrapOrError(Sym->getName(StrTable)));
4297+
TargetName = this->dumper()->getFullSymbolName(
4298+
Sym, StrTable, SymTab->sh_type == SHT_DYNSYM /* IsDynamic */);
42974299
}
42984300

42994301
if (opts::ExpandRelocs) {

0 commit comments

Comments
 (0)