summaryrefslogtreecommitdiff
path: root/include/llvm/Object
diff options
context:
space:
mode:
authorDaniel Sanders <daniel.sanders@imgtec.com>2014-02-18 15:57:52 +0000
committerDaniel Sanders <daniel.sanders@imgtec.com>2014-02-18 15:57:52 +0000
commitaa43604648e3ffc400dbcc1adec003c096eb76ca (patch)
tree432d76d72475a18299175276963d5efe0e11d7dd /include/llvm/Object
parent39d8dcb53b806841c8455637c23549b24760ce80 (diff)
downloadllvm-aa43604648e3ffc400dbcc1adec003c096eb76ca.tar.gz
llvm-aa43604648e3ffc400dbcc1adec003c096eb76ca.tar.bz2
llvm-aa43604648e3ffc400dbcc1adec003c096eb76ca.tar.xz
[mips] Add support for ELF64-mips and the R_MIPS_32/R_MIPS_64 relocs for it.
Summary: This fixes several test failures when building LLVM on a MIPS host. The failures were: LLVM :: DebugInfo/enum.ll LLVM :: DebugInfo/inlined-arguments.ll LLVM :: DebugInfo/member-order.ll LLVM :: DebugInfo/namespace.ll LLVM :: DebugInfo/template-recursive-void.ll LLVM :: DebugInfo/tu-composite.ll LLVM :: DebugInfo/two-cus-from-same-file.ll LLVM :: Linker/type-unique-simple-a.ll LLVM :: Linker/type-unique-simple2.ll Reviewers: jacksprat, matheusalmeida Reviewed By: matheusalmeida Differential Revision: http://llvm-reviews.chandlerc.com/D2721 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201582 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Object')
-rw-r--r--include/llvm/Object/ELFObjectFile.h2
-rw-r--r--include/llvm/Object/RelocVisitor.h17
2 files changed, 19 insertions, 0 deletions
diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h
index 054d8d4b65..cadf920c27 100644
--- a/include/llvm/Object/ELFObjectFile.h
+++ b/include/llvm/Object/ELFObjectFile.h
@@ -946,6 +946,8 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName() const {
return "ELF64-s390";
case ELF::EM_SPARCV9:
return "ELF64-sparc";
+ case ELF::EM_MIPS:
+ return "ELF64-mips";
default:
return "ELF64-unknown";
}
diff --git a/include/llvm/Object/RelocVisitor.h b/include/llvm/Object/RelocVisitor.h
index 2e1d43e26a..225b83eff3 100644
--- a/include/llvm/Object/RelocVisitor.h
+++ b/include/llvm/Object/RelocVisitor.h
@@ -103,6 +103,16 @@ public:
HasError = true;
return RelocToApply();
}
+ } else if (FileFormat == "ELF64-mips") {
+ switch (RelocType) {
+ case llvm::ELF::R_MIPS_32:
+ return visitELF_MIPS_32(R, Value);
+ case llvm::ELF::R_MIPS_64:
+ return visitELF_MIPS_64(R, Value);
+ default:
+ HasError = true;
+ return RelocToApply();
+ }
} else if (FileFormat == "ELF64-aarch64") {
switch (RelocType) {
case llvm::ELF::R_AARCH64_ABS32:
@@ -260,6 +270,13 @@ private:
return RelocToApply(Res, 4);
}
+ RelocToApply visitELF_MIPS_64(RelocationRef R, uint64_t Value) {
+ int64_t Addend;
+ getELFRelocationAddend(R, Addend);
+ uint64_t Res = (Value + Addend);
+ return RelocToApply(Res, 8);
+ }
+
// AArch64 ELF
RelocToApply visitELF_AARCH64_ABS32(RelocationRef R, uint64_t Value) {
int64_t Addend = getAddend64LE(R);