[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