1//===- ELF.cpp - ELF object file implementation -----------------*- C++ -*-===//
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//===----------------------------------------------------------------------===//
9
10#include "llvm/Object/ELF.h"
11
12namespace llvm {
13namespace object {
14
15#define ELF_RELOC(name, value)                                          \
16  case ELF::name:                                                       \
17    return #name;                                                       \
18
19StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) {
20  switch (Machine) {
21  case ELF::EM_X86_64:
22    switch (Type) {
23#include "llvm/Support/ELFRelocs/x86_64.def"
24    default:
25      break;
26    }
27    break;
28  case ELF::EM_386:
29  case ELF::EM_IAMCU:
30    switch (Type) {
31#include "llvm/Support/ELFRelocs/i386.def"
32    default:
33      break;
34    }
35    break;
36  case ELF::EM_MIPS:
37    switch (Type) {
38#include "llvm/Support/ELFRelocs/Mips.def"
39    default:
40      break;
41    }
42    break;
43  case ELF::EM_AARCH64:
44    switch (Type) {
45#include "llvm/Support/ELFRelocs/AArch64.def"
46    default:
47      break;
48    }
49    break;
50  case ELF::EM_ARM:
51    switch (Type) {
52#include "llvm/Support/ELFRelocs/ARM.def"
53    default:
54      break;
55    }
56    break;
57  case ELF::EM_HEXAGON:
58    switch (Type) {
59#include "llvm/Support/ELFRelocs/Hexagon.def"
60    default:
61      break;
62    }
63    break;
64  case ELF::EM_PPC:
65    switch (Type) {
66#include "llvm/Support/ELFRelocs/PowerPC.def"
67    default:
68      break;
69    }
70    break;
71  case ELF::EM_PPC64:
72    switch (Type) {
73#include "llvm/Support/ELFRelocs/PowerPC64.def"
74    default:
75      break;
76    }
77    break;
78  case ELF::EM_S390:
79    switch (Type) {
80#include "llvm/Support/ELFRelocs/SystemZ.def"
81    default:
82      break;
83    }
84    break;
85  case ELF::EM_SPARC:
86  case ELF::EM_SPARC32PLUS:
87  case ELF::EM_SPARCV9:
88    switch (Type) {
89#include "llvm/Support/ELFRelocs/Sparc.def"
90    default:
91      break;
92    }
93    break;
94  case ELF::EM_WEBASSEMBLY:
95    switch (Type) {
96#include "llvm/Support/ELFRelocs/WebAssembly.def"
97    default:
98      break;
99    }
100    break;
101  default:
102    break;
103  }
104  return "Unknown";
105}
106
107#undef ELF_RELOC
108
109} // end namespace object
110} // end namespace llvm
111