1 //===- ELF.cpp - ELF object file implementation ---------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/Object/ELF.h"
11 #include "llvm/BinaryFormat/ELF.h"
14 using namespace object
;
16 #define STRINGIFY_ENUM_CASE(ns, name) \
20 #define ELF_RELOC(name, value) STRINGIFY_ENUM_CASE(ELF, name)
22 StringRef
llvm::object::getELFRelocationTypeName(uint32_t Machine
,
27 #include "llvm/BinaryFormat/ELFRelocs/x86_64.def"
35 #include "llvm/BinaryFormat/ELFRelocs/i386.def"
42 #include "llvm/BinaryFormat/ELFRelocs/Mips.def"
49 #include "llvm/BinaryFormat/ELFRelocs/AArch64.def"
56 #include "llvm/BinaryFormat/ELFRelocs/ARM.def"
61 case ELF::EM_ARC_COMPACT
:
62 case ELF::EM_ARC_COMPACT2
:
64 #include "llvm/BinaryFormat/ELFRelocs/ARC.def"
71 #include "llvm/BinaryFormat/ELFRelocs/AVR.def"
78 #include "llvm/BinaryFormat/ELFRelocs/Hexagon.def"
85 #include "llvm/BinaryFormat/ELFRelocs/Lanai.def"
92 #include "llvm/BinaryFormat/ELFRelocs/PowerPC.def"
99 #include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
106 #include "llvm/BinaryFormat/ELFRelocs/RISCV.def"
113 #include "llvm/BinaryFormat/ELFRelocs/SystemZ.def"
119 case ELF::EM_SPARC32PLUS
:
120 case ELF::EM_SPARCV9
:
122 #include "llvm/BinaryFormat/ELFRelocs/Sparc.def"
127 case ELF::EM_WEBASSEMBLY
:
129 #include "llvm/BinaryFormat/ELFRelocs/WebAssembly.def"
136 #include "llvm/BinaryFormat/ELFRelocs/AMDGPU.def"
142 #include "llvm/BinaryFormat/ELFRelocs/BPF.def"
155 StringRef
llvm::object::getELFSectionTypeName(uint32_t Machine
, unsigned 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
);
166 case ELF::EM_HEXAGON
:
167 switch (Type
) { STRINGIFY_ENUM_CASE(ELF
, SHT_HEX_ORDERED
); }
170 switch (Type
) { STRINGIFY_ENUM_CASE(ELF
, SHT_X86_64_UNWIND
); }
173 case ELF::EM_MIPS_RS3_LE
:
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
);
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
);