diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-04 15:59:01 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-04 15:59:01 +0000 |
commit | 55fb102130925ada2bbc78abbbb70394d96d945e (patch) | |
tree | 4d0c7dc82f6dba357e4d40e9fc9fa502ace8ecde /lib/MC/ELFObjectWriter.cpp | |
parent | 01263d35d4c037a882dbfa6364eb0f6c4e0d87a8 (diff) | |
download | external_llvm-55fb102130925ada2bbc78abbbb70394d96d945e.zip external_llvm-55fb102130925ada2bbc78abbbb70394d96d945e.tar.gz external_llvm-55fb102130925ada2bbc78abbbb70394d96d945e.tar.bz2 |
Include the section address in the computation of the relocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115509 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index cc6d51e..7e0ce7d 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -539,7 +539,14 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm, const MCSymbol &SymbolB = RefB->getSymbol(); MCSymbolData &SDB = Asm.getSymbolData(SymbolB); IsPCRel = true; - Value += Layout.getFragmentOffset(Fragment) + Fixup.getOffset() - Layout.getSymbolAddress(&SDB); + MCSectionData *Sec = Fragment->getParent(); + + // Offset of the symbol in the section + int64_t a = Layout.getSymbolAddress(&SDB) - Layout.getSectionAddress(Sec); + + // Ofeset of the relocation in the section + int64_t b = Layout.getFragmentOffset(Fragment) + Fixup.getOffset(); + Value += b - a; } // Check that this case has already been fully resolved before we get |