Skip to content

Commit 27f6f2f

Browse files
author
Sunil Srivastava
committedAug 9, 2019
Print reasonable representations of type names in llvm-nm, readelf and readobj
For type values that do not have proper names, print reasonable representation in llvm-nm, llvm-readobj and llvm-readelf, matching GNU tools.s Fixes PR41713. Differential Revision: https://reviews.llvm.org/D65537 llvm-svn: 368451
1 parent 3caf9af commit 27f6f2f

File tree

5 files changed

+94
-35
lines changed

5 files changed

+94
-35
lines changed
 

‎llvm/include/llvm/Object/ELFObjectFile.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
namespace llvm {
4242
namespace object {
4343

44-
constexpr int NumElfSymbolTypes = 8;
44+
constexpr int NumElfSymbolTypes = 16;
4545
extern const llvm::EnumEntry<unsigned> ElfSymbolTypes[NumElfSymbolTypes];
4646

4747
class elf_symbol_iterator;

‎llvm/lib/Object/ELFObjectFile.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@ const EnumEntry<unsigned> llvm::object::ElfSymbolTypes[NumElfSymbolTypes] = {
4343
{"File", "FILE", ELF::STT_FILE},
4444
{"Common", "COMMON", ELF::STT_COMMON},
4545
{"TLS", "TLS", ELF::STT_TLS},
46-
{"GNU_IFunc", "IFUNC", ELF::STT_GNU_IFUNC}};
46+
{"Unknown", "<unknown>: 7", 7},
47+
{"Unknown", "<unknown>: 8", 8},
48+
{"Unknown", "<unknown>: 9", 9},
49+
{"GNU_IFunc", "IFUNC", ELF::STT_GNU_IFUNC},
50+
{"OS Specific", "<OS specific>: 11", 11},
51+
{"OS Specific", "<OS specific>: 12", 12},
52+
{"Proc Specific", "<processor specific>: 13", 13},
53+
{"Proc Specific", "<processor specific>: 14", 14},
54+
{"Proc Specific", "<processor specific>: 15", 15}
55+
};
4756

4857
ELFObjectFileBase::ELFObjectFileBase(unsigned int Type, MemoryBufferRef Source)
4958
: ObjectFile(Type, Source) {}

‎llvm/test/tools/llvm-nm/format-sysv-type.test

+32-17
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,40 @@ Symbols:
2020
Type: STT_OBJECT
2121
- Name: symbol_func
2222
Type: STT_FUNC
23+
- Name: unknown_7
24+
Type: 7
25+
- Name: unknown_8
26+
Type: 8
27+
- Name: unknown_9
28+
Type: 9
2329
- Name: symbol_ifunc
2430
Type: STT_GNU_IFUNC
25-
- Name: os_specific
31+
- Name: os_specific_10
32+
Type: 10
33+
- Name: os_specific_11
2634
Type: 11
27-
- Name: proc_specific
35+
- Name: os_specific_12
36+
Type: 12
37+
- Name: proc_specific_13
2838
Type: 13
29-
- Name: unknown
30-
Type: 7
31-
32-
## FIXME: Should not print blank types for unknown, OS-specific and processor-
33-
## specific types. See https://bugs.llvm.org/show_bug.cgi?id=41713.
39+
- Name: proc_specific_14
40+
Type: 14
41+
- Name: proc_specific_15
42+
Type: 15
3443

35-
# CHECK: os_specific {{.*}}| | | |*UND*
36-
# CHECK-NEXT: proc_specific {{.*}}| | | |*UND*
37-
# CHECK-NEXT: symbol_common {{.*}}| COMMON| | |*COM*
38-
# CHECK-NEXT: symbol_file {{.*}}| FILE| | |*UND*
39-
# CHECK-NEXT: symbol_func {{.*}}| FUNC| | |*UND*
40-
# CHECK-NEXT: symbol_ifunc {{.*}}| IFUNC| | |*UND*
41-
# CHECK-NEXT: symbol_notype {{.*}}| NOTYPE| | |*UND*
42-
# CHECK-NEXT: symbol_obj {{.*}}| OBJECT| | |*UND*
43-
# CHECK-NEXT: symbol_tls {{.*}}| TLS| | |*UND*
44-
# CHECK-NEXT: unknown {{.*}}| | | |*UND*
44+
# CHECK: os_specific_10 | | U | IFUNC| | |*UND*
45+
# CHECK-NEXT: os_specific_11 | | U | <OS specific>: 11| | |*UND*
46+
# CHECK-NEXT: os_specific_12 | | U | <OS specific>: 12| | |*UND*
47+
# CHECK-NEXT: proc_specific_13 | | U |<processor specific>: 13| | |*UND*
48+
# CHECK-NEXT: proc_specific_14 | | U |<processor specific>: 14| | |*UND*
49+
# CHECK-NEXT: proc_specific_15 | | U |<processor specific>: 15| | |*UND*
50+
# CHECK-NEXT: symbol_common | | U | COMMON| | |*COM*
51+
# CHECK-NEXT: symbol_file | | U | FILE| | |*UND*
52+
# CHECK-NEXT: symbol_func | | U | FUNC| | |*UND*
53+
# CHECK-NEXT: symbol_ifunc | | U | IFUNC| | |*UND*
54+
# CHECK-NEXT: symbol_notype | | U | NOTYPE| | |*UND*
55+
# CHECK-NEXT: symbol_obj | | U | OBJECT| | |*UND*
56+
# CHECK-NEXT: symbol_tls | | U | TLS| | |*UND*
57+
# CHECK-NEXT: unknown_7 | | U | <unknown>: 7| | |*UND*
58+
# CHECK-NEXT: unknown_8 | | U | <unknown>: 8| | |*UND*
59+
# CHECK-NEXT: unknown_9 | | U | <unknown>: 9| | |*UND*

‎llvm/test/tools/llvm-readobj/elf-symbol-types.test

+45-12
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,25 @@
2222
# LLVM: Type: TLS
2323
# LLVM: Name: gnu_ifunc
2424
# LLVM: Type: GNU_IFunc
25-
# LLVM: Name: os_specific
26-
# LLVM: Type: 0xB
27-
# LLVM: Name: proc_specific
28-
# LLVM: Type: 0xD
29-
# LLVM: Name: unknown
30-
# LLVM: Type: 0x7
25+
26+
# LLVM: Name: os_specific_11
27+
# LLVM: Type: OS Specific (0xB)
28+
# LLVM: Name: os_specific_12
29+
# LLVM: Type: OS Specific (0xC)
30+
31+
# LLVM: Name: proc_specific_13
32+
# LLVM: Type: Proc Specific (0xD)
33+
# LLVM: Name: proc_specific_14
34+
# LLVM: Type: Proc Specific (0xE)
35+
# LLVM: Name: proc_specific_15
36+
# LLVM: Type: Proc Specific (0xF)
37+
38+
# LLVM: Name: unknown_7
39+
# LLVM: Type: Unknown (0x7)
40+
# LLVM: Name: unknown_8
41+
# LLVM: Type: Unknown (0x8)
42+
# LLVM: Name: unknown_9
43+
# LLVM: Type: Unknown (0x9)
3144

3245
# GNU: NOTYPE {{.*}} notype
3346
# GNU: OBJECT {{.*}} object
@@ -37,9 +50,14 @@
3750
# GNU: COMMON {{.*}} common
3851
# GNU: TLS {{.*}} tls
3952
# GNU: IFUNC {{.*}} gnu_ifunc
40-
# GNU: b {{.*}} os_specific
41-
# GNU: d {{.*}} proc_specific
42-
# GNU: 7 {{.*}} unknown
53+
# GNU: <OS specific>: 11 {{.*}} os_specific_11
54+
# GNU: <OS specific>: 12 {{.*}} os_specific_12
55+
# GNU: <processor specific>: 13 {{.*}} proc_specific_13
56+
# GNU: <processor specific>: 14 {{.*}} proc_specific_14
57+
# GNU: <processor specific>: 15 {{.*}} proc_specific_15
58+
# GNU: <unknown>: 7 {{.*}} unknown_7
59+
# GNU: <unknown>: 8 {{.*}} unknown_8
60+
# GNU: <unknown>: 9 {{.*}} unknown_9
4361

4462
!ELF
4563
FileHeader:
@@ -76,12 +94,27 @@ Symbols:
7694
- Name: gnu_ifunc
7795
Type: STT_GNU_IFUNC
7896
Binding: STB_GLOBAL
79-
- Name: os_specific
97+
- Name: os_specific_11
8098
Type: 11
8199
Binding: STB_GLOBAL
82-
- Name: proc_specific
100+
- Name: os_specific_12
101+
Type: 12
102+
Binding: STB_GLOBAL
103+
- Name: proc_specific_13
83104
Type: 13
84105
Binding: STB_GLOBAL
85-
- Name: unknown
106+
- Name: proc_specific_14
107+
Type: 14
108+
Binding: STB_GLOBAL
109+
- Name: proc_specific_15
110+
Type: 15
111+
Binding: STB_GLOBAL
112+
- Name: unknown_7
86113
Type: 7
87114
Binding: STB_GLOBAL
115+
- Name: unknown_8
116+
Type: 8
117+
Binding: STB_GLOBAL
118+
- Name: unknown_9
119+
Type: 9
120+
Binding: STB_GLOBAL

‎llvm/test/tools/yaml2obj/symbol-type.yaml

+6-4
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
# CHECK: Type: Section
1010
# CHECK: Name: known_hex
1111
# CHECK: Type: Object
12-
# CHECK: Name: unknown_hex
13-
# CHECK: Type: 0xB
12+
13+
# CHECK: Name: unknown_hex_11
14+
# CHECK: Type: OS Specific (0xB)
15+
1416
# CHECK: Name: known_int
1517
# CHECK: Type: Object
1618
# CHECK: Name: unknown_int
17-
# CHECK: Type: 0xB
19+
# CHECK: Type: OS Specific (0xB)
1820

1921
!ELF
2022
FileHeader:
@@ -38,7 +40,7 @@ Symbols:
3840
- Name: known_hex
3941
Type: 0x1
4042
Binding: STB_GLOBAL
41-
- Name: unknown_hex
43+
- Name: unknown_hex_11
4244
Type: 0xb
4345
Binding: STB_GLOBAL
4446
- Name: known_int

0 commit comments

Comments
 (0)
Please sign in to comment.