blob: 4d37a298632fd50649354313fc3ccce4ad9fee81 [file] [log] [blame]
Michael J. Spencer126973b2013-08-08 22:27:13 +00001//===- 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
Tim Northover242785c2014-11-21 20:16:07 +000015#define ELF_RELOC(name, value) \
16 case ELF::name: \
17 return #name; \
Michael J. Spencer126973b2013-08-08 22:27:13 +000018
19StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) {
20 switch (Machine) {
21 case ELF::EM_X86_64:
22 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000023#include "llvm/Support/ELFRelocs/x86_64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000024 default:
25 break;
26 }
27 break;
28 case ELF::EM_386:
Michael Kupersteina3b79dd2015-11-04 11:21:50 +000029 case ELF::EM_IAMCU:
Michael J. Spencer126973b2013-08-08 22:27:13 +000030 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000031#include "llvm/Support/ELFRelocs/i386.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000032 default:
33 break;
34 }
35 break;
36 case ELF::EM_MIPS:
37 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000038#include "llvm/Support/ELFRelocs/Mips.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000039 default:
40 break;
41 }
42 break;
43 case ELF::EM_AARCH64:
44 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000045#include "llvm/Support/ELFRelocs/AArch64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000046 default:
47 break;
48 }
49 break;
50 case ELF::EM_ARM:
51 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000052#include "llvm/Support/ELFRelocs/ARM.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000053 default:
54 break;
55 }
56 break;
Dylan McKay35047ed2016-09-28 13:23:42 +000057 case ELF::EM_AVR:
58 switch (Type) {
59#include "llvm/Support/ELFRelocs/AVR.def"
60 default:
61 break;
62 }
63 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +000064 case ELF::EM_HEXAGON:
65 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000066#include "llvm/Support/ELFRelocs/Hexagon.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000067 default:
68 break;
69 }
70 break;
Jacques Pienaarea9f25a2016-03-01 21:21:42 +000071 case ELF::EM_LANAI:
72 switch (Type) {
73#include "llvm/Support/ELFRelocs/Lanai.def"
74 default:
75 break;
76 }
77 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +000078 case ELF::EM_PPC:
79 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000080#include "llvm/Support/ELFRelocs/PowerPC.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000081 default:
82 break;
83 }
84 break;
85 case ELF::EM_PPC64:
86 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000087#include "llvm/Support/ELFRelocs/PowerPC64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000088 default:
89 break;
90 }
91 break;
92 case ELF::EM_S390:
93 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000094#include "llvm/Support/ELFRelocs/SystemZ.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000095 default:
96 break;
97 }
98 break;
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +000099 case ELF::EM_SPARC:
100 case ELF::EM_SPARC32PLUS:
101 case ELF::EM_SPARCV9:
102 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +0000103#include "llvm/Support/ELFRelocs/Sparc.def"
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +0000104 default:
105 break;
106 }
107 break;
Dan Gohman46350172016-01-12 20:56:01 +0000108 case ELF::EM_WEBASSEMBLY:
109 switch (Type) {
110#include "llvm/Support/ELFRelocs/WebAssembly.def"
111 default:
112 break;
113 }
114 break;
Tom Stellardf8db61c2016-06-17 22:38:08 +0000115 case ELF::EM_AMDGPU:
116 switch (Type) {
117#include "llvm/Support/ELFRelocs/AMDGPU.def"
118 default:
119 break;
120 }
Alexei Starovoitovcfb51f52016-07-15 22:27:55 +0000121 case ELF::EM_BPF:
122 switch (Type) {
123#include "llvm/Support/ELFRelocs/BPF.def"
124 default:
125 break;
126 }
Tom Stellardf8db61c2016-06-17 22:38:08 +0000127 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +0000128 default:
129 break;
130 }
131 return "Unknown";
132}
133
Tim Northover242785c2014-11-21 20:16:07 +0000134#undef ELF_RELOC
Michael J. Spencer126973b2013-08-08 22:27:13 +0000135
136} // end namespace object
137} // end namespace llvm