blob: 398e9e412994046039b6a02e8d915eec1eb61d01 [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:
29 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000030#include "llvm/Support/ELFRelocs/i386.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000031 default:
32 break;
33 }
34 break;
35 case ELF::EM_MIPS:
36 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000037#include "llvm/Support/ELFRelocs/Mips.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000038 default:
39 break;
40 }
41 break;
42 case ELF::EM_AARCH64:
43 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000044#include "llvm/Support/ELFRelocs/AArch64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000045 default:
46 break;
47 }
48 break;
49 case ELF::EM_ARM:
50 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000051#include "llvm/Support/ELFRelocs/ARM.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000052 default:
53 break;
54 }
55 break;
56 case ELF::EM_HEXAGON:
57 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000058#include "llvm/Support/ELFRelocs/Hexagon.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000059 default:
60 break;
61 }
62 break;
63 case ELF::EM_PPC:
64 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000065#include "llvm/Support/ELFRelocs/PowerPC.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000066 default:
67 break;
68 }
69 break;
70 case ELF::EM_PPC64:
71 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000072#include "llvm/Support/ELFRelocs/PowerPC64.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000073 default:
74 break;
75 }
76 break;
77 case ELF::EM_S390:
78 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000079#include "llvm/Support/ELFRelocs/SystemZ.def"
Michael J. Spencer126973b2013-08-08 22:27:13 +000080 default:
81 break;
82 }
83 break;
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +000084 case ELF::EM_SPARC:
85 case ELF::EM_SPARC32PLUS:
86 case ELF::EM_SPARCV9:
87 switch (Type) {
Tim Northover242785c2014-11-21 20:16:07 +000088#include "llvm/Support/ELFRelocs/Sparc.def"
Venkatraman Govindarajucdee0ed2014-01-26 03:21:28 +000089 default:
90 break;
91 }
92 break;
Michael J. Spencer126973b2013-08-08 22:27:13 +000093 default:
94 break;
95 }
96 return "Unknown";
97}
98
Tim Northover242785c2014-11-21 20:16:07 +000099#undef ELF_RELOC
Michael J. Spencer126973b2013-08-08 22:27:13 +0000100
101} // end namespace object
102} // end namespace llvm