summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2014-04-11 07:25:35 +0000
committerSimon Atanasyan <simon@atanasyan.com>2014-04-11 07:25:35 +0000
commitdca4162aa52eacf921e17ce52eb68365bbb37db2 (patch)
treebc67c49a3c32409eb807c1949ea590f47b5fde3c
parente5b156810a5315d6eb958f10fc47f1ef5e21a1cd (diff)
downloadbcm5719-llvm-dca4162aa52eacf921e17ce52eb68365bbb37db2.tar.gz
bcm5719-llvm-dca4162aa52eacf921e17ce52eb68365bbb37db2.zip
[Mips] Factor out MIPS relocation addend reading to the separate
function. No functional changes. llvm-svn: 206023
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
index ab60daae523..2c5ad6fa781 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
@@ -105,22 +105,26 @@ private:
auto *ref = new (this->_readerStorage)
ELFReference<ELFT>(&ri, ri.r_offset - symbol.st_value, this->kindArch(),
ri.getType(isMips64EL), ri.getSymbol(isMips64EL));
+ ref->setAddend(readAddend(symbol, ri, content));
+ return ref;
+ }
+
+ Reference::Addend readAddend(const Elf_Sym &symbol, const Elf_Rel &ri,
+ ArrayRef<uint8_t> content) const {
const uint8_t *ap = content.data() + ri.r_offset - symbol.st_value;
- switch (ri.getType(isMips64EL)) {
+ switch (ri.getType(this->_objFile->isMips64EL())) {
case llvm::ELF::R_MIPS_32:
case llvm::ELF::R_MIPS_PC32:
- ref->setAddend(*(int32_t *)ap);
- break;
+ return *(int32_t *)ap;
case llvm::ELF::R_MIPS_26:
- ref->setAddend(*(int32_t *)ap & 0x3ffffff);
- break;
+ return *(int32_t *)ap & 0x3ffffff;
case llvm::ELF::R_MIPS_HI16:
case llvm::ELF::R_MIPS_LO16:
case llvm::ELF::R_MIPS_GOT16:
- ref->setAddend(*(int16_t *)ap);
- break;
+ return *(int16_t *)ap;
+ default:
+ return 0;
}
- return ref;
}
};
OpenPOWER on IntegriCloud