12b772d930bac965f6e35754c8e8bf63c14d9457
[oota-llvm.git] / ELF.cpp
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
12 namespace llvm {
13 namespace object {
14
15 #define ELF_RELOC(name, value)                                          \
16   case ELF::name:                                                       \
17     return #name;                                                       \
18
19 StringRef 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