blob: 23682e1fabfd609b2f477f3116ba4f1cfbf554b8 [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;
Alex Bradbury1524f622016-11-01 16:59:37 +000092 case ELF::EM_RISCV:
93 switch (Type) {
94#include "llvm/Support/ELFRelocs/RISCV.def"
95 default:
96 break;
97 }
98 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +000099 case ELF::EM_S390:
100 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +0000101#include "llvm/Support/ELFRelocs/SystemZ.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +0000102 default:
103 break;
104 }
105 break;
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +0000106 case ELF::EM_SPARC:
107 case ELF::EM_SPARC32PLUS:
108 case ELF::EM_SPARCV9:
109 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +0000110#include "llvm/Support/ELFRelocs/Sparc.def"
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +0000111 default:
112 break;
113 }
114 break;
Dan Gohman46350172016-01-12 20:56:01 +0000115 case ELF::EM_WEBASSEMBLY:
116 switch (Type) {
117#include "llvm/Support/ELFRelocs/WebAssembly.def"
118 default:
119 break;
120 }
121 break;
Tom Stellardf8db61c2016-06-17 22:38:08 +0000122 case ELF::EM_AMDGPU:
123 switch (Type) {
124#include "llvm/Support/ELFRelocs/AMDGPU.def"
125 default:
126 break;
127 }
Alexei Starovoitovcfb51f52016-07-15 22:27:55 +0000128 case ELF::EM_BPF:
129 switch (Type) {
130#include "llvm/Support/ELFRelocs/BPF.def"
131 default:
132 break;
133 }
Tom Stellardf8db61c2016-06-17 22:38:08 +0000134 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +0000135 default:
136 break;
137 }
138 return "Unknown";
139}
140
Tim Northover242785c2014-11-21 20:16:07 +0000141#undef ELF_RELOC
Michael J. Spencer126973b2013-08-08 22:27:13 +0000142
143} // end namespace object
144} // end namespace llvm