1*9880d681SAndroid Build Coastguard Worker //===- ELF.cpp - ELF object file implementation -----------------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "llvm/Object/ELF.h" 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker namespace llvm { 13*9880d681SAndroid Build Coastguard Worker namespace object { 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker #define ELF_RELOC(name, value) \ 16*9880d681SAndroid Build Coastguard Worker case ELF::name: \ 17*9880d681SAndroid Build Coastguard Worker return #name; \ 18*9880d681SAndroid Build Coastguard Worker getELFRelocationTypeName(uint32_t Machine,uint32_t Type)19*9880d681SAndroid Build Coastguard WorkerStringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { 20*9880d681SAndroid Build Coastguard Worker switch (Machine) { 21*9880d681SAndroid Build Coastguard Worker case ELF::EM_X86_64: 22*9880d681SAndroid Build Coastguard Worker switch (Type) { 23*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/x86_64.def" 24*9880d681SAndroid Build Coastguard Worker default: 25*9880d681SAndroid Build Coastguard Worker break; 26*9880d681SAndroid Build Coastguard Worker } 27*9880d681SAndroid Build Coastguard Worker break; 28*9880d681SAndroid Build Coastguard Worker case ELF::EM_386: 29*9880d681SAndroid Build Coastguard Worker case ELF::EM_IAMCU: 30*9880d681SAndroid Build Coastguard Worker switch (Type) { 31*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/i386.def" 32*9880d681SAndroid Build Coastguard Worker default: 33*9880d681SAndroid Build Coastguard Worker break; 34*9880d681SAndroid Build Coastguard Worker } 35*9880d681SAndroid Build Coastguard Worker break; 36*9880d681SAndroid Build Coastguard Worker case ELF::EM_MIPS: 37*9880d681SAndroid Build Coastguard Worker switch (Type) { 38*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/Mips.def" 39*9880d681SAndroid Build Coastguard Worker default: 40*9880d681SAndroid Build Coastguard Worker break; 41*9880d681SAndroid Build Coastguard Worker } 42*9880d681SAndroid Build Coastguard Worker break; 43*9880d681SAndroid Build Coastguard Worker case ELF::EM_AARCH64: 44*9880d681SAndroid Build Coastguard Worker switch (Type) { 45*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/AArch64.def" 46*9880d681SAndroid Build Coastguard Worker default: 47*9880d681SAndroid Build Coastguard Worker break; 48*9880d681SAndroid Build Coastguard Worker } 49*9880d681SAndroid Build Coastguard Worker break; 50*9880d681SAndroid Build Coastguard Worker case ELF::EM_ARM: 51*9880d681SAndroid Build Coastguard Worker switch (Type) { 52*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/ARM.def" 53*9880d681SAndroid Build Coastguard Worker default: 54*9880d681SAndroid Build Coastguard Worker break; 55*9880d681SAndroid Build Coastguard Worker } 56*9880d681SAndroid Build Coastguard Worker break; 57*9880d681SAndroid Build Coastguard Worker case ELF::EM_HEXAGON: 58*9880d681SAndroid Build Coastguard Worker switch (Type) { 59*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/Hexagon.def" 60*9880d681SAndroid Build Coastguard Worker default: 61*9880d681SAndroid Build Coastguard Worker break; 62*9880d681SAndroid Build Coastguard Worker } 63*9880d681SAndroid Build Coastguard Worker break; 64*9880d681SAndroid Build Coastguard Worker case ELF::EM_LANAI: 65*9880d681SAndroid Build Coastguard Worker switch (Type) { 66*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/Lanai.def" 67*9880d681SAndroid Build Coastguard Worker default: 68*9880d681SAndroid Build Coastguard Worker break; 69*9880d681SAndroid Build Coastguard Worker } 70*9880d681SAndroid Build Coastguard Worker break; 71*9880d681SAndroid Build Coastguard Worker case ELF::EM_PPC: 72*9880d681SAndroid Build Coastguard Worker switch (Type) { 73*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/PowerPC.def" 74*9880d681SAndroid Build Coastguard Worker default: 75*9880d681SAndroid Build Coastguard Worker break; 76*9880d681SAndroid Build Coastguard Worker } 77*9880d681SAndroid Build Coastguard Worker break; 78*9880d681SAndroid Build Coastguard Worker case ELF::EM_PPC64: 79*9880d681SAndroid Build Coastguard Worker switch (Type) { 80*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/PowerPC64.def" 81*9880d681SAndroid Build Coastguard Worker default: 82*9880d681SAndroid Build Coastguard Worker break; 83*9880d681SAndroid Build Coastguard Worker } 84*9880d681SAndroid Build Coastguard Worker break; 85*9880d681SAndroid Build Coastguard Worker case ELF::EM_S390: 86*9880d681SAndroid Build Coastguard Worker switch (Type) { 87*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/SystemZ.def" 88*9880d681SAndroid Build Coastguard Worker default: 89*9880d681SAndroid Build Coastguard Worker break; 90*9880d681SAndroid Build Coastguard Worker } 91*9880d681SAndroid Build Coastguard Worker break; 92*9880d681SAndroid Build Coastguard Worker case ELF::EM_SPARC: 93*9880d681SAndroid Build Coastguard Worker case ELF::EM_SPARC32PLUS: 94*9880d681SAndroid Build Coastguard Worker case ELF::EM_SPARCV9: 95*9880d681SAndroid Build Coastguard Worker switch (Type) { 96*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/Sparc.def" 97*9880d681SAndroid Build Coastguard Worker default: 98*9880d681SAndroid Build Coastguard Worker break; 99*9880d681SAndroid Build Coastguard Worker } 100*9880d681SAndroid Build Coastguard Worker break; 101*9880d681SAndroid Build Coastguard Worker case ELF::EM_WEBASSEMBLY: 102*9880d681SAndroid Build Coastguard Worker switch (Type) { 103*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/WebAssembly.def" 104*9880d681SAndroid Build Coastguard Worker default: 105*9880d681SAndroid Build Coastguard Worker break; 106*9880d681SAndroid Build Coastguard Worker } 107*9880d681SAndroid Build Coastguard Worker break; 108*9880d681SAndroid Build Coastguard Worker case ELF::EM_AMDGPU: 109*9880d681SAndroid Build Coastguard Worker switch (Type) { 110*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELFRelocs/AMDGPU.def" 111*9880d681SAndroid Build Coastguard Worker default: 112*9880d681SAndroid Build Coastguard Worker break; 113*9880d681SAndroid Build Coastguard Worker } 114*9880d681SAndroid Build Coastguard Worker break; 115*9880d681SAndroid Build Coastguard Worker default: 116*9880d681SAndroid Build Coastguard Worker break; 117*9880d681SAndroid Build Coastguard Worker } 118*9880d681SAndroid Build Coastguard Worker return "Unknown"; 119*9880d681SAndroid Build Coastguard Worker } 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker #undef ELF_RELOC 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker } // end namespace object 124*9880d681SAndroid Build Coastguard Worker } // end namespace llvm 125