Remove the default clause from a fully-covering switch
[llvm-core.git] / lib / Object / ELF.cpp
blob130fb2d9ecc6934aaea8c76e9ebdb5e85fce3c04
1 //===- ELF.cpp - ELF object file implementation ---------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
10 #include "llvm/Object/ELF.h"
11 #include "llvm/BinaryFormat/ELF.h"
13 using namespace llvm;
14 using namespace object;
16 #define STRINGIFY_ENUM_CASE(ns, name) \
17 case ns::name: \
18 return #name;
20 #define ELF_RELOC(name, value) STRINGIFY_ENUM_CASE(ELF, name)
22 StringRef llvm::object::getELFRelocationTypeName(uint32_t Machine,
23 uint32_t Type) {
24 switch (Machine) {
25 case ELF::EM_X86_64:
26 switch (Type) {
27 #include "llvm/BinaryFormat/ELFRelocs/x86_64.def"
28 default:
29 break;
31 break;
32 case ELF::EM_386:
33 case ELF::EM_IAMCU:
34 switch (Type) {
35 #include "llvm/BinaryFormat/ELFRelocs/i386.def"
36 default:
37 break;
39 break;
40 case ELF::EM_MIPS:
41 switch (Type) {
42 #include "llvm/BinaryFormat/ELFRelocs/Mips.def"
43 default:
44 break;
46 break;
47 case ELF::EM_AARCH64:
48 switch (Type) {
49 #include "llvm/BinaryFormat/ELFRelocs/AArch64.def"
50 default:
51 break;
53 break;
54 case ELF::EM_ARM:
55 switch (Type) {
56 #include "llvm/BinaryFormat/ELFRelocs/ARM.def"
57 default:
58 break;
60 break;
61 case ELF::EM_ARC_COMPACT:
62 case ELF::EM_ARC_COMPACT2:
63 switch (Type) {
64 #include "llvm/BinaryFormat/ELFRelocs/ARC.def"
65 default:
66 break;
68 break;
69 case ELF::EM_AVR:
70 switch (Type) {
71 #include "llvm/BinaryFormat/ELFRelocs/AVR.def"
72 default:
73 break;
75 break;
76 case ELF::EM_HEXAGON:
77 switch (Type) {
78 #include "llvm/BinaryFormat/ELFRelocs/Hexagon.def"
79 default:
80 break;
82 break;
83 case ELF::EM_LANAI:
84 switch (Type) {
85 #include "llvm/BinaryFormat/ELFRelocs/Lanai.def"
86 default:
87 break;
89 break;
90 case ELF::EM_PPC:
91 switch (Type) {
92 #include "llvm/BinaryFormat/ELFRelocs/PowerPC.def"
93 default:
94 break;
96 break;
97 case ELF::EM_PPC64:
98 switch (Type) {
99 #include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
100 default:
101 break;
103 break;
104 case ELF::EM_RISCV:
105 switch (Type) {
106 #include "llvm/BinaryFormat/ELFRelocs/RISCV.def"
107 default:
108 break;
110 break;
111 case ELF::EM_S390:
112 switch (Type) {
113 #include "llvm/BinaryFormat/ELFRelocs/SystemZ.def"
114 default:
115 break;
117 break;
118 case ELF::EM_SPARC:
119 case ELF::EM_SPARC32PLUS:
120 case ELF::EM_SPARCV9:
121 switch (Type) {
122 #include "llvm/BinaryFormat/ELFRelocs/Sparc.def"
123 default:
124 break;
126 break;
127 case ELF::EM_WEBASSEMBLY:
128 switch (Type) {
129 #include "llvm/BinaryFormat/ELFRelocs/WebAssembly.def"
130 default:
131 break;
133 break;
134 case ELF::EM_AMDGPU:
135 switch (Type) {
136 #include "llvm/BinaryFormat/ELFRelocs/AMDGPU.def"
137 default:
138 break;
140 case ELF::EM_BPF:
141 switch (Type) {
142 #include "llvm/BinaryFormat/ELFRelocs/BPF.def"
143 default:
144 break;
146 break;
147 default:
148 break;
150 return "Unknown";
153 #undef ELF_RELOC
155 StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
156 switch (Machine) {
157 case ELF::EM_ARM:
158 switch (Type) {
159 STRINGIFY_ENUM_CASE(ELF, SHT_ARM_EXIDX);
160 STRINGIFY_ENUM_CASE(ELF, SHT_ARM_PREEMPTMAP);
161 STRINGIFY_ENUM_CASE(ELF, SHT_ARM_ATTRIBUTES);
162 STRINGIFY_ENUM_CASE(ELF, SHT_ARM_DEBUGOVERLAY);
163 STRINGIFY_ENUM_CASE(ELF, SHT_ARM_OVERLAYSECTION);
165 break;
166 case ELF::EM_HEXAGON:
167 switch (Type) { STRINGIFY_ENUM_CASE(ELF, SHT_HEX_ORDERED); }
168 break;
169 case ELF::EM_X86_64:
170 switch (Type) { STRINGIFY_ENUM_CASE(ELF, SHT_X86_64_UNWIND); }
171 break;
172 case ELF::EM_MIPS:
173 case ELF::EM_MIPS_RS3_LE:
174 switch (Type) {
175 STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_REGINFO);
176 STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_OPTIONS);
177 STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_ABIFLAGS);
178 STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_DWARF);
180 break;
181 default:
182 break;
185 switch (Type) {
186 STRINGIFY_ENUM_CASE(ELF, SHT_NULL);
187 STRINGIFY_ENUM_CASE(ELF, SHT_PROGBITS);
188 STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB);
189 STRINGIFY_ENUM_CASE(ELF, SHT_STRTAB);
190 STRINGIFY_ENUM_CASE(ELF, SHT_RELA);
191 STRINGIFY_ENUM_CASE(ELF, SHT_HASH);
192 STRINGIFY_ENUM_CASE(ELF, SHT_DYNAMIC);
193 STRINGIFY_ENUM_CASE(ELF, SHT_NOTE);
194 STRINGIFY_ENUM_CASE(ELF, SHT_NOBITS);
195 STRINGIFY_ENUM_CASE(ELF, SHT_REL);
196 STRINGIFY_ENUM_CASE(ELF, SHT_SHLIB);
197 STRINGIFY_ENUM_CASE(ELF, SHT_DYNSYM);
198 STRINGIFY_ENUM_CASE(ELF, SHT_INIT_ARRAY);
199 STRINGIFY_ENUM_CASE(ELF, SHT_FINI_ARRAY);
200 STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
201 STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
202 STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
203 STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_ODRTAB);
204 STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
205 STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
206 STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
207 STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verneed);
208 STRINGIFY_ENUM_CASE(ELF, SHT_GNU_versym);
209 default:
210 return "Unknown";