[llvm-commits] [llvm] r115509 - in /llvm/trunk: lib/MC/ELFObjectWriter.cpp test/MC/ELF/pic-diff.s

Rafael Espindola rafael.espindola at gmail.com
Mon Oct 4 08:59:01 PDT 2010


Author: rafael
Date: Mon Oct  4 10:59:01 2010
New Revision: 115509

URL: http://llvm.org/viewvc/llvm-project?rev=115509&view=rev
Log:
Include the section address in the computation of the relocation.

Modified:
    llvm/trunk/lib/MC/ELFObjectWriter.cpp
    llvm/trunk/test/MC/ELF/pic-diff.s

Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=115509&r1=115508&r2=115509&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Mon Oct  4 10:59:01 2010
@@ -539,7 +539,14 @@
       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

Modified: llvm/trunk/test/MC/ELF/pic-diff.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/pic-diff.s?rev=115509&r1=115508&r2=115509&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/pic-diff.s (original)
+++ llvm/trunk/test/MC/ELF/pic-diff.s Mon Oct  4 10:59:01 2010
@@ -19,6 +19,9 @@
 // CHECK-NEXT:    ),
 // CHECK-NEXT:   ])
 
+.zero 4
+.data
+
 .zero 1
 .align 4
 foo:





More information about the llvm-commits mailing list