[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

llvm-svn: 201582
This commit is contained in:
Daniel Sanders 2014-02-18 15:57:52 +00:00
parent 7c68bebb9c
commit 5cc5cd907d
2 changed files with 19 additions and 0 deletions

View File

@ -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";
}

View File

@ -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);