1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

Fix relative relocations. This is sufficient for running the rust testsuite with

MC :-)

llvm-svn: 129923
This commit is contained in:
Rafael Espindola 2011-04-21 18:36:50 +00:00
parent 7b613bcb4a
commit e206800036
2 changed files with 27 additions and 4 deletions

View File

@ -656,8 +656,13 @@ void WinCOFFObjectWriter::RecordRelocation(const MCAssembler &Asm,
const MCSymbol *B = &Target.getSymB()->getSymbol();
MCSymbolData &B_SD = Asm.getSymbolData(*B);
FixedValue = Layout.getSymbolOffset(&A_SD) - Layout.getSymbolOffset(&B_SD);
// Offset of the symbol in the section
int64_t a = Layout.getSymbolOffset(&B_SD);
// Ofeset of the relocation in the section
int64_t b = Layout.getFragmentOffset(Fragment) + Fixup.getOffset();
FixedValue = b - a;
// In the case where we have SymbA and SymB, we just need to store the delta
// between the two symbols. Update FixedValue to account for the delta, and
// skip recording the relocation.

View File

@ -5,6 +5,7 @@
.type 32;
.endef
.text
.long 0
.globl _foobar
.align 16, 0x90
_foobar: # @foobar
@ -15,13 +16,30 @@ _foobar: # @foobar
.globl _rust_crate # @rust_crate
.align 4
_rust_crate:
.long 0
.long _foobar
.long _foobar-_rust_crate
.long _foobar-_rust_crate
// CHECK: Relocations = [
// CHECK: Name = .data
// CHECK: SectionData =
// CHECK-NEXT: 00 00 00 00 00 00 00 00 - 1C 00 00 00 20 00 00 00 |............ ...|
// CHECK: Relocations = [
// CHECK-NEXT: 0 = {
// CHECK-NEXT: VirtualAddress = 0x0
// CHECK-NEXT: VirtualAddress = 0x4
// CHECK-NEXT: SymbolTableIndex =
// CHECK-NEXT: Type = IMAGE_REL_I386_DIR32 (6)
// CHECK-NEXT: SymbolName = _foobar
// CHECK-NEXT: }
// CHECK-NEXT: 1 = {
// CHECK-NEXT: VirtualAddress = 0x8
// CHECK-NEXT: SymbolTableIndex = 0
// CHECK-NEXT: Type = IMAGE_REL_I386_REL32 (20)
// CHECK-NEXT: SymbolName = .text
// CHECK-NEXT: }
// CHECK-NEXT: 2 = {
// CHECK-NEXT: VirtualAddress = 0xC
// CHECK-NEXT: SymbolTableIndex = 0
// CHECK-NEXT: Type = IMAGE_REL_I386_REL32 (20)
// CHECK-NEXT: SymbolName = .text
// CHECK-NEXT: }