summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2014-05-20 09:27:49 +0000
committerSimon Atanasyan <simon@atanasyan.com>2014-05-20 09:27:49 +0000
commit6943f62a418bc48c762385013c9d5acb4ce3fa15 (patch)
tree4bc8b50b2835448b6149e83b048a779087545c6d
parent6099306cec808d4a561cf5d337ec83c501a64c92 (diff)
downloadllvm-6943f62a418bc48c762385013c9d5acb4ce3fa15.tar.gz
llvm-6943f62a418bc48c762385013c9d5acb4ce3fa15.tar.bz2
llvm-6943f62a418bc48c762385013c9d5acb4ce3fa15.tar.xz
[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
-rw-r--r--include/llvm/Support/ELF.h9
-rw-r--r--lib/Object/ELF.cpp10
-rw-r--r--lib/Object/ELFYAML.cpp11
-rw-r--r--tools/llvm-readobj/ELFDumper.cpp4
4 files changed, 32 insertions, 2 deletions
diff --git a/include/llvm/Support/ELF.h b/include/llvm/Support/ELF.h
index 95df66538e..0b3e55b915 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 e9a88bfd03..df4dd5ea7c 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 547720ddc3..8329853340 100644
--- a/lib/Object/ELFYAML.cpp
+++ b/lib/Object/ELFYAML.cpp
@@ -275,6 +275,8 @@ void ScalarBitSetTraits<ELFYAML::ELF_EF>::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<ELFYAML::ELF_REL>::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 5b3302c430..de4c207901 100644
--- a/tools/llvm-readobj/ELFDumper.cpp
+++ b/tools/llvm-readobj/ELFDumper.cpp
@@ -455,7 +455,9 @@ static const EnumEntry<unsigned> 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<class ELFT>