blob: 62c27cc427a6ab5a16e043b590a591577c11f887 [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;
57 case ELF::EM_HEXAGON:
58 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000059#include "llvm/Support/ELFRelocs/Hexagon.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000060 default:
61 break;
62 }
63 break;
64 case ELF::EM_PPC:
65 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000066#include "llvm/Support/ELFRelocs/PowerPC.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000067 default:
68 break;
69 }
70 break;
71 case ELF::EM_PPC64:
72 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000073#include "llvm/Support/ELFRelocs/PowerPC64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000074 default:
75 break;
76 }
77 break;
78 case ELF::EM_S390:
79 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000080#include "llvm/Support/ELFRelocs/SystemZ.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000081 default:
82 break;
83 }
84 break;
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +000085 case ELF::EM_SPARC:
86 case ELF::EM_SPARC32PLUS:
87 case ELF::EM_SPARCV9:
88 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000089#include "llvm/Support/ELFRelocs/Sparc.def"
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +000090 default:
91 break;
92 }
93 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +000094 default:
95 break;
96 }
97 return "Unknown";
98}
99
Tim Northover242785c2014-11-21 20:16:07 +0000100#undef ELF_RELOC
Michael J. Spencer126973b2013-08-08 22:27:13 +0000101
102} // end namespace object
103} // end namespace llvm