Skip to content

Commit ffd66b2

Browse files
committed
[ELF] Fix GCC8 warnings about "fall through", NFCI
Add break statements in Object/ELF.cpp since the code should consider the generic tags for Hexagon, MIPS, and PPC. Add a test (copied from llvm-readobj) to show that this works correctly (earlier versions of this patch would have asserted). The warnings in X86ELFObjectWriter.cpp are actually false-positives since the nested switch() handles all possible values and returns in all cases. Make this explicit by adding llvm_unreachable's. Differential Revision: https://reviews.llvm.org/D58837 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356037 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent d3c6756 commit ffd66b2

File tree

5 files changed

+311
-193
lines changed

5 files changed

+311
-193
lines changed

lib/Object/ELF.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,20 +438,23 @@ std::string ELFFile<ELFT>::getDynamicTagAsString(unsigned Arch,
438438
#include "llvm/BinaryFormat/DynamicTags.def"
439439
#undef HEXAGON_DYNAMIC_TAG
440440
}
441+
break;
441442

442443
case ELF::EM_MIPS:
443444
switch (Type) {
444445
#define MIPS_DYNAMIC_TAG(name, value) DYNAMIC_STRINGIFY_ENUM(name, value)
445446
#include "llvm/BinaryFormat/DynamicTags.def"
446447
#undef MIPS_DYNAMIC_TAG
447448
}
449+
break;
448450

449451
case ELF::EM_PPC64:
450452
switch (Type) {
451453
#define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_STRINGIFY_ENUM(name, value)
452454
#include "llvm/BinaryFormat/DynamicTags.def"
453455
#undef PPC64_DYNAMIC_TAG
454456
}
457+
break;
455458
}
456459
#undef DYNAMIC_TAG
457460
switch (Type) {

lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
113113
case RT64_8:
114114
return IsPCRel ? ELF::R_X86_64_PC8 : ELF::R_X86_64_8;
115115
}
116+
llvm_unreachable("unexpected relocation type!");
116117
case MCSymbolRefExpr::VK_GOT:
117118
switch (Type) {
118119
case RT64_64:
@@ -124,6 +125,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
124125
case RT64_8:
125126
llvm_unreachable("Unimplemented");
126127
}
128+
llvm_unreachable("unexpected relocation type!");
127129
case MCSymbolRefExpr::VK_GOTOFF:
128130
assert(Type == RT64_64);
129131
assert(!IsPCRel);
@@ -140,6 +142,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
140142
case RT64_8:
141143
llvm_unreachable("Unimplemented");
142144
}
145+
llvm_unreachable("unexpected relocation type!");
143146
case MCSymbolRefExpr::VK_DTPOFF:
144147
assert(!IsPCRel);
145148
switch (Type) {
@@ -152,6 +155,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
152155
case RT64_8:
153156
llvm_unreachable("Unimplemented");
154157
}
158+
llvm_unreachable("unexpected relocation type!");
155159
case MCSymbolRefExpr::VK_SIZE:
156160
assert(!IsPCRel);
157161
switch (Type) {
@@ -164,6 +168,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
164168
case RT64_8:
165169
llvm_unreachable("Unimplemented");
166170
}
171+
llvm_unreachable("unexpected relocation type!");
167172
case MCSymbolRefExpr::VK_TLSCALL:
168173
return ELF::R_X86_64_TLSDESC_CALL;
169174
case MCSymbolRefExpr::VK_TLSDESC:
@@ -196,6 +201,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
196201
case X86::reloc_riprel_4byte_movq_load:
197202
return ELF::R_X86_64_REX_GOTPCRELX;
198203
}
204+
llvm_unreachable("unexpected relocation type!");
199205
}
200206
}
201207

@@ -233,6 +239,7 @@ static unsigned getRelocType32(MCContext &Ctx,
233239
case RT32_8:
234240
return IsPCRel ? ELF::R_386_PC8 : ELF::R_386_8;
235241
}
242+
llvm_unreachable("unexpected relocation type!");
236243
case MCSymbolRefExpr::VK_GOT:
237244
assert(Type == RT32_32);
238245
if (IsPCRel)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Test that hexagon machine-specific tags can be dumped.
2+
# RUN: yaml2obj --docnum=1 -o %t.hex \
3+
# RUN: %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
4+
# RUN: llvm-objdump -p %t.hex | FileCheck %s --check-prefix=HEXAGON
5+
6+
# HEXAGON: Dynamic Section:
7+
# HEXAGON-NEXT: HASH 0x0000000000001000
8+
# HEXAGON-NEXT: HEXAGON_SYMSZ 0x0000000000000010
9+
# HEXAGON-NEXT: HEXAGON_VER 0x0000000000001000
10+
# HEXAGON-NEXT: HEXAGON_PLT 0x0000000000001000
11+
# HEXAGON-NEXT: <unknown:>0x1234abcd 0x0000000000000001
12+
13+
14+
# Test that MIPS machine-specific tags can be dumped.
15+
# RUN: yaml2obj --docnum=2 -o %t.mips \
16+
# RUN: %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
17+
# RUN: llvm-objdump -p %t.mips | FileCheck %s --check-prefix=MIPS
18+
19+
# MIPS: Dynamic Section:
20+
# MIPS-NEXT: HASH 0x0000000000001000
21+
# MIPS-NEXT: MIPS_RLD_VERSION 0x0000000012345678
22+
# MIPS-NEXT: MIPS_TIME_STAMP 0x0000000011223344
23+
# MIPS-NEXT: MIPS_ICHECKSUM 0x0000000011112222
24+
# MIPS-NEXT: MIPS_IVERSION 0x0000000000000001
25+
# MIPS-NEXT: MIPS_FLAGS 0x0000000011111111
26+
# MIPS-NEXT: MIPS_BASE_ADDRESS 0x0000000087654321
27+
# MIPS-NEXT: MIPS_MSYM 0x0000000000001000
28+
# MIPS-NEXT: MIPS_CONFLICT 0x0000000000001000
29+
# MIPS-NEXT: MIPS_LIBLIST 0x0000000000001000
30+
# MIPS-NEXT: MIPS_LOCAL_GOTNO 0x0000000000000001
31+
# MIPS-NEXT: MIPS_CONFLICTNO 0x0000000000000001
32+
# MIPS-NEXT: MIPS_LIBLISTNO 0x0000000000000001
33+
# MIPS-NEXT: MIPS_SYMTABNO 0x0000000000000001
34+
# MIPS-NEXT: MIPS_UNREFEXTNO 0x0000000000000000
35+
# MIPS-NEXT: MIPS_GOTSYM 0x0000000000000000
36+
# MIPS-NEXT: MIPS_HIPAGENO 0x0000000088776655
37+
# MIPS-NEXT: MIPS_RLD_MAP 0x0000000000001000
38+
# MIPS-NEXT: MIPS_DELTA_CLASS 0x0000000000001000
39+
# MIPS-NEXT: MIPS_DELTA_CLASS_NO 0x0000000000000001
40+
# MIPS-NEXT: MIPS_DELTA_INSTANCE 0x0000000000001000
41+
# MIPS-NEXT: MIPS_DELTA_INSTANCE_NO0x0000000000000001
42+
# MIPS-NEXT: MIPS_DELTA_RELOC 0x0000000000001000
43+
# MIPS-NEXT: MIPS_DELTA_RELOC_NO 0x0000000000000001
44+
# MIPS-NEXT: MIPS_DELTA_SYM 0x0000000000001000
45+
# MIPS-NEXT: MIPS_DELTA_SYM_NO 0x0000000000000001
46+
# MIPS-NEXT: MIPS_DELTA_CLASSSYM 0x0000000000001000
47+
# MIPS-NEXT: MIPS_DELTA_CLASSSYM_NO0x0000000000000001
48+
# MIPS-NEXT: MIPS_CXX_FLAGS 0x0000000088887777
49+
# MIPS-NEXT: MIPS_PIXIE_INIT 0x0000000000001000
50+
# MIPS-NEXT: MIPS_LOCALPAGE_GOTIDX0x0000000000000001
51+
# MIPS-NEXT: MIPS_LOCAL_GOTIDX 0x0000000000000001
52+
# MIPS-NEXT: MIPS_HIDDEN_GOTIDX 0x0000000000000001
53+
# MIPS-NEXT: MIPS_PROTECTED_GOTIDX0x0000000000000001
54+
# MIPS-NEXT: MIPS_OPTIONS 0x0000000000001000
55+
# MIPS-NEXT: MIPS_INTERFACE 0x0000000000001000
56+
# MIPS-NEXT: MIPS_DYNSTR_ALIGN 0x0000000088888888
57+
# MIPS-NEXT: MIPS_INTERFACE_SIZE 0x0000000000000010
58+
# MIPS-NEXT: MIPS_RLD_TEXT_RESOLVE_ADDR0x0000000000000008
59+
# MIPS-NEXT: MIPS_PERF_SUFFIX 0x0000000000000000
60+
# MIPS-NEXT: MIPS_COMPACT_SIZE 0x0000000000000010
61+
# MIPS-NEXT: MIPS_GP_VALUE 0x0000000000000001
62+
# MIPS-NEXT: MIPS_AUX_DYNAMIC 0x0000000000001000
63+
# MIPS-NEXT: MIPS_PLTGOT 0x0000000000001000
64+
# MIPS-NEXT: MIPS_RWPLT 0x0000000000001000
65+
# MIPS-NEXT: MIPS_RLD_MAP_REL 0x0000000000001000
66+
# MIPS-NEXT: <unknown:>0x1234abcd 0x0000000000000001
67+
68+
69+
# Test that PPC64 machine-specific tags can be dumped.
70+
# RUN: yaml2obj --docnum=3 -o %t.ppc \
71+
# RUN: %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
72+
# RUN: llvm-objdump -p %t.ppc | FileCheck %s --check-prefix=PPC
73+
74+
# PPC: Dynamic Section:
75+
# PPC-NEXT: HASH 0x0000000000001000
76+
# PPC-NEXT: PPC64_GLINK 0x0000000000001000
77+
# PPC-NEXT: <unknown:>0x1234abcd 0x0000000000000001
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
# Used by llvm-readobj/elf-dynamic-tags-machine-specific.test and
2+
# llvm-objdump/elf-dynamic-section-machine-specific.test.
3+
4+
# First document: Hexagon
5+
--- !ELF
6+
FileHeader:
7+
Class: ELFCLASS64
8+
Data: ELFDATA2LSB
9+
Type: ET_EXEC
10+
Machine: EM_HEXAGON
11+
Sections:
12+
- Name: .dynstr
13+
Type: SHT_STRTAB
14+
Address: 0x1000
15+
Size: 0x10
16+
Content: "004400550066007700"
17+
- Name: .dynamic
18+
Type: SHT_DYNAMIC
19+
Address: 0x1010
20+
Entries:
21+
- Tag: DT_HASH
22+
Value: 0x1000
23+
- Tag: DT_HEXAGON_SYMSZ
24+
Value: 0x10
25+
- Tag: DT_HEXAGON_VER
26+
Value: 0x1000
27+
- Tag: DT_HEXAGON_PLT
28+
Value: 0x1000
29+
- Tag: 0x1234abcd
30+
Value: 0x1
31+
- Tag: DT_NULL
32+
Value: 0
33+
ProgramHeaders:
34+
- Type: PT_LOAD
35+
VAddr: 0x1000
36+
Sections:
37+
- Section: .dynstr
38+
- Section: .dynamic
39+
- Type: PT_DYNAMIC
40+
VAddr: 0x1010
41+
Sections:
42+
- Section: .dynamic
43+
44+
# Second document: MIPS
45+
--- !ELF
46+
FileHeader:
47+
Class: ELFCLASS64
48+
Data: ELFDATA2LSB
49+
Type: ET_EXEC
50+
Machine: EM_MIPS
51+
Sections:
52+
- Name: .dynstr
53+
Type: SHT_STRTAB
54+
Address: 0x1000
55+
Size: 0x10
56+
Content: "004400550066007700"
57+
- Name: .dynamic
58+
Type: SHT_DYNAMIC
59+
Address: 0x1010
60+
Entries:
61+
- Tag: DT_HASH
62+
Value: 0x1000
63+
- Tag: DT_MIPS_RLD_VERSION
64+
Value: 0x12345678
65+
- Tag: DT_MIPS_TIME_STAMP
66+
Value: 0x11223344
67+
- Tag: DT_MIPS_ICHECKSUM
68+
Value: 0x11112222
69+
- Tag: DT_MIPS_IVERSION
70+
Value: 0x1
71+
- Tag: DT_MIPS_FLAGS
72+
Value: 0x11111111
73+
- Tag: DT_MIPS_BASE_ADDRESS
74+
Value: 0x87654321
75+
- Tag: DT_MIPS_MSYM
76+
Value: 0x1000
77+
- Tag: DT_MIPS_CONFLICT
78+
Value: 0x1000
79+
- Tag: DT_MIPS_LIBLIST
80+
Value: 0x1000
81+
- Tag: DT_MIPS_LOCAL_GOTNO
82+
Value: 0x1
83+
- Tag: DT_MIPS_CONFLICTNO
84+
Value: 0x1
85+
- Tag: DT_MIPS_LIBLISTNO
86+
Value: 0x1
87+
- Tag: DT_MIPS_SYMTABNO
88+
Value: 0x1
89+
- Tag: DT_MIPS_UNREFEXTNO
90+
Value: 0x0
91+
- Tag: DT_MIPS_GOTSYM
92+
Value: 0x0
93+
- Tag: DT_MIPS_HIPAGENO
94+
Value: 0x88776655
95+
- Tag: DT_MIPS_RLD_MAP
96+
Value: 0x1000
97+
- Tag: DT_MIPS_DELTA_CLASS
98+
Value: 0x1000
99+
- Tag: DT_MIPS_DELTA_CLASS_NO
100+
Value: 0x1
101+
- Tag: DT_MIPS_DELTA_INSTANCE
102+
Value: 0x1000
103+
- Tag: DT_MIPS_DELTA_INSTANCE_NO
104+
Value: 0x1
105+
- Tag: DT_MIPS_DELTA_RELOC
106+
Value: 0x1000
107+
- Tag: DT_MIPS_DELTA_RELOC_NO
108+
Value: 0x1
109+
- Tag: DT_MIPS_DELTA_SYM
110+
Value: 0x1000
111+
- Tag: DT_MIPS_DELTA_SYM_NO
112+
Value: 0x1
113+
- Tag: DT_MIPS_DELTA_CLASSSYM
114+
Value: 0x1000
115+
- Tag: DT_MIPS_DELTA_CLASSSYM_NO
116+
Value: 0x1
117+
- Tag: DT_MIPS_CXX_FLAGS
118+
Value: 0x88887777
119+
- Tag: DT_MIPS_PIXIE_INIT
120+
Value: 0x1000
121+
- Tag: DT_MIPS_LOCALPAGE_GOTIDX
122+
Value: 0x1
123+
- Tag: DT_MIPS_LOCAL_GOTIDX
124+
Value: 0x1
125+
- Tag: DT_MIPS_HIDDEN_GOTIDX
126+
Value: 0x1
127+
- Tag: DT_MIPS_PROTECTED_GOTIDX
128+
Value: 0x1
129+
- Tag: DT_MIPS_OPTIONS
130+
Value: 0x1000
131+
- Tag: DT_MIPS_INTERFACE
132+
Value: 0x1000
133+
- Tag: DT_MIPS_DYNSTR_ALIGN
134+
Value: 0x88888888
135+
- Tag: DT_MIPS_INTERFACE_SIZE
136+
Value: 0x10
137+
- Tag: DT_MIPS_RLD_TEXT_RESOLVE_ADDR
138+
Value: 0x8
139+
- Tag: DT_MIPS_PERF_SUFFIX
140+
Value: 0x0
141+
- Tag: DT_MIPS_COMPACT_SIZE
142+
Value: 0x10
143+
- Tag: DT_MIPS_GP_VALUE
144+
Value: 0x1
145+
- Tag: DT_MIPS_AUX_DYNAMIC
146+
Value: 0x1000
147+
- Tag: DT_MIPS_PLTGOT
148+
Value: 0x1000
149+
- Tag: DT_MIPS_RWPLT
150+
Value: 0x1000
151+
- Tag: DT_MIPS_RLD_MAP_REL
152+
Value: 0x1000
153+
- Tag: 0x1234abcd
154+
Value: 0x1
155+
- Tag: DT_NULL
156+
Value: 0
157+
ProgramHeaders:
158+
- Type: PT_LOAD
159+
VAddr: 0x1000
160+
Sections:
161+
- Section: .dynstr
162+
- Section: .dynamic
163+
- Type: PT_DYNAMIC
164+
VAddr: 0x1010
165+
Sections:
166+
- Section: .dynamic
167+
168+
# Third document: PPC64
169+
--- !ELF
170+
FileHeader:
171+
Class: ELFCLASS64
172+
Data: ELFDATA2LSB
173+
Type: ET_EXEC
174+
Machine: EM_PPC64
175+
Sections:
176+
- Name: .dynstr
177+
Type: SHT_STRTAB
178+
Address: 0x1000
179+
Size: 0x10
180+
Content: "004400550066007700"
181+
- Name: .dynamic
182+
Type: SHT_DYNAMIC
183+
Address: 0x1010
184+
Entries:
185+
- Tag: DT_HASH
186+
Value: 0x1000
187+
- Tag: DT_PPC64_GLINK
188+
Value: 0x1000
189+
- Tag: 0x1234abcd
190+
Value: 0x1
191+
- Tag: DT_NULL
192+
Value: 0
193+
ProgramHeaders:
194+
- Type: PT_LOAD
195+
VAddr: 0x1000
196+
Sections:
197+
- Section: .dynstr
198+
- Section: .dynamic
199+
- Type: PT_DYNAMIC
200+
VAddr: 0x1010
201+
Sections:
202+
- Section: .dynamic

0 commit comments

Comments
 (0)