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:
parent
7b613bcb4a
commit
e206800036
@ -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.
|
||||
|
@ -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: }
|
||||
|
Loading…
Reference in New Issue
Block a user