Correctly compute the offset of the symbol. Forgot these bits from the
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Sep 2010 18:01:31 +0000 (18:01 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Sep 2010 18:01:31 +0000 (18:01 +0000)
last commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114678 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp

index 7960a07499a7ad5a9b0389e11be9612d0fb5f68a..587489c26be0d1b1658021b795656ce7e3068bb9 100644 (file)
@@ -504,7 +504,10 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
     if (Base) {
       if (F && !SD.isExternal()) {
         Index = F->getParent()->getOrdinal() + LocalSymbolData.size() + 1;
-        Value += Layout.getSymbolAddress(&SD);
+
+        MCSectionData *FSD = F->getParent();
+        // Offset of the symbol in the section
+        Value += Layout.getSymbolAddress(&SD) - Layout.getSectionAddress(FSD);
       } else
         Index = getSymbolIndexInSymbolTable(Asm, Symbol);
       if (Base != &SD)