131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- ELF.cpp - ELF object file implementation -----------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/Object/ELF.h"
 | |
| 
 | |
| namespace llvm {
 | |
| namespace object {
 | |
| 
 | |
| #define ELF_RELOC(name, value)                                          \
 | |
|   case ELF::name:                                                       \
 | |
|     return #name;                                                       \
 | |
| 
 | |
| StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) {
 | |
|   switch (Machine) {
 | |
|   case ELF::EM_X86_64:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/x86_64.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_386:
 | |
|   case ELF::EM_IAMCU:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/i386.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_MIPS:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/Mips.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_AARCH64:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/AArch64.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_ARM:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/ARM.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_HEXAGON:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/Hexagon.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_LANAI:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/Lanai.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_PPC:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/PowerPC.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_PPC64:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/PowerPC64.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_S390:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/SystemZ.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_SPARC:
 | |
|   case ELF::EM_SPARC32PLUS:
 | |
|   case ELF::EM_SPARCV9:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/Sparc.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_WEBASSEMBLY:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/WebAssembly.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   case ELF::EM_AMDGPU:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/AMDGPU.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|   case ELF::EM_BPF:
 | |
|     switch (Type) {
 | |
| #include "llvm/Support/ELFRelocs/BPF.def"
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     break;
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   return "Unknown";
 | |
| }
 | |
| 
 | |
| #undef ELF_RELOC
 | |
| 
 | |
| } // end namespace object
 | |
| } // end namespace llvm
 |