From 6943f62a418bc48c762385013c9d5acb4ce3fa15 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Tue, 20 May 2014 09:27:49 +0000 Subject: [PATCH] [Mips] Add more relocation types and MIPS specific e_flags constants. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209201 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/ELF.h | 9 ++++++++- lib/Object/ELF.cpp | 10 ++++++++++ lib/Object/ELFYAML.cpp | 11 +++++++++++ tools/llvm-readobj/ELFDumper.cpp | 4 +++- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/include/llvm/Support/ELF.h b/include/llvm/Support/ELF.h index 95df66538e0..0b3e55b9152 100644 --- a/include/llvm/Support/ELF.h +++ b/include/llvm/Support/ELF.h @@ -824,11 +824,12 @@ enum : unsigned { EF_MIPS_ARCH_64 = 0x60000000, // MIPS64 instruction set per linux not elf.h EF_MIPS_ARCH_32R2 = 0x70000000, // mips32r2 EF_MIPS_ARCH_64R2 = 0x80000000, // mips64r2 + EF_MIPS_ARCH_32R6 = 0x90000000, // mips32r6 + EF_MIPS_ARCH_64R6 = 0xa0000000, // mips64r6 EF_MIPS_ARCH = 0xf0000000 // Mask for applying EF_MIPS_ARCH_ variant }; // ELF Relocation types for Mips -// . enum { R_MIPS_NONE = 0, R_MIPS_16 = 1, @@ -881,6 +882,12 @@ enum { R_MIPS_TLS_TPREL_HI16 = 49, R_MIPS_TLS_TPREL_LO16 = 50, R_MIPS_GLOB_DAT = 51, + R_MIPS_PC21_S2 = 60, + R_MIPS_PC26_S2 = 61, + R_MIPS_PC18_S3 = 62, + R_MIPS_PC19_S2 = 63, + R_MIPS_PCHI16 = 64, + R_MIPS_PCLO16 = 65, R_MIPS16_GOT16 = 102, R_MIPS16_HI16 = 104, R_MIPS16_LO16 = 105, diff --git a/lib/Object/ELF.cpp b/lib/Object/ELF.cpp index e9a88bfd03f..df4dd5ea7c7 100644 --- a/lib/Object/ELF.cpp +++ b/lib/Object/ELF.cpp @@ -159,6 +159,15 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_TLS_TPREL_HI16); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_TLS_TPREL_LO16); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_GLOB_DAT); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PC21_S2); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PC26_S2); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PC18_S3); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PC19_S2); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PCHI16); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PCLO16); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS16_GOT16); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS16_HI16); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS16_LO16); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_COPY); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_JUMP_SLOT); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_26_S1); @@ -177,6 +186,7 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_TPREL_HI16); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_TPREL_LO16); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_NUM); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_PC32); default: break; } diff --git a/lib/Object/ELFYAML.cpp b/lib/Object/ELFYAML.cpp index 547720ddc32..8329853340c 100644 --- a/lib/Object/ELFYAML.cpp +++ b/lib/Object/ELFYAML.cpp @@ -275,6 +275,8 @@ void ScalarBitSetTraits::bitset(IO &IO, BCase(EF_MIPS_ARCH_64) BCase(EF_MIPS_ARCH_32R2) BCase(EF_MIPS_ARCH_64R2) + BCase(EF_MIPS_ARCH_32R6) + BCase(EF_MIPS_ARCH_64R6) break; case ELF::EM_HEXAGON: BCase(EF_HEXAGON_MACH_V2) @@ -462,6 +464,15 @@ void ScalarEnumerationTraits::enumeration( ECase(R_MIPS_TLS_TPREL_HI16) ECase(R_MIPS_TLS_TPREL_LO16) ECase(R_MIPS_GLOB_DAT) + ECase(R_MIPS_PC21_S2) + ECase(R_MIPS_PC26_S2) + ECase(R_MIPS_PC18_S3) + ECase(R_MIPS_PC19_S2) + ECase(R_MIPS_PCHI16) + ECase(R_MIPS_PCLO16) + ECase(R_MIPS16_GOT16) + ECase(R_MIPS16_HI16) + ECase(R_MIPS16_LO16) ECase(R_MIPS_COPY) ECase(R_MIPS_JUMP_SLOT) ECase(R_MICROMIPS_26_S1) diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 5b3302c4302..de4c2079012 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -455,7 +455,9 @@ static const EnumEntry ElfHeaderMipsFlags[] = { LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_32), LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_64), LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_32R2), - LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_64R2) + LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_64R2), + LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_32R6), + LLVM_READOBJ_ENUM_ENT(ELF, EF_MIPS_ARCH_64R6) }; template -- 2.11.0