case COFF::IMAGE_REL_AMD64_REL32_3:
case COFF::IMAGE_REL_AMD64_REL32_4:
case COFF::IMAGE_REL_AMD64_REL32_5: {
- uint32_t *TargetAddress = (uint32_t *)Target;
uint64_t FinalAddress = Section.LoadAddress + RE.Offset;
// Delta is the distance from the start of the reloc to the end of the
// instruction with the reloc.
uint64_t Result = Value + RE.Addend;
assert(((int64_t)Result <= INT32_MAX) && "Relocation overflow");
assert(((int64_t)Result >= INT32_MIN) && "Relocation underflow");
- *TargetAddress = Result;
+ writeBytesUnaligned(Result, Target, 4);
break;
}
// within a 32 bit offset from the base.
//
// For now we just set these to zero.
- uint32_t *TargetAddress = (uint32_t *)Target;
- *TargetAddress = 0;
+ writeBytesUnaligned(0, Target, 4);
break;
}
case COFF::IMAGE_REL_AMD64_ADDR64: {
- uint64_t *TargetAddress = (uint64_t *)Target;
- *TargetAddress = Value + RE.Addend;
+ writeBytesUnaligned(0, Target, Value + RE.Addend);
break;
}
case COFF::IMAGE_REL_AMD64_REL32_4:
case COFF::IMAGE_REL_AMD64_REL32_5:
case COFF::IMAGE_REL_AMD64_ADDR32NB: {
- uint32_t *Displacement = (uint32_t *)ObjTarget;
- Addend = *Displacement;
+ uint8_t *Displacement = (uint8_t *)ObjTarget;
+ Addend = readBytesUnaligned(Displacement, 4);
break;
}
case COFF::IMAGE_REL_AMD64_ADDR64: {
- uint64_t *Displacement = (uint64_t *)ObjTarget;
- Addend = *Displacement;
+ uint8_t *Displacement = (uint8_t *)ObjTarget;
+ Addend = readBytesUnaligned(Displacement, 8);
break;
}
+++ /dev/null
-# RUN: llvm-mc -triple=x86_64-pc-win32 -filetype=obj -o %T/COFF_x86_64.o %s
-# RUN: llvm-rtdyld -triple=x86_64-pc-win32 -verify -check=%s %/T/COFF_x86_64.o
- .text
- .def F;
- .scl 2;
- .type 32;
- .endef
- .globl __real400921f9f01b866e
- .section .rdata,"dr",discard,__real400921f9f01b866e
- .align 8
-__real400921f9f01b866e:
- .quad 4614256650576692846 # double 3.1415899999999999
- .text
- .globl F
- .global inst1
- .align 16, 0x90
-F: # @F
-.Ltmp0:
-.seh_proc F
-# BB#0: # %entry
-.Ltmp1:
- .seh_endprologue
-# rtdyld-check: decode_operand(inst1, 4) = __real400921f9f01b866e - next_pc(inst1)
-inst1:
- movsd __real400921f9f01b866e(%rip), %xmm0 # xmm0 = mem[0],zero
- retq
-.Leh_func_end0:
-.Ltmp2:
- .seh_endproc
-
-# Make sure the JIT doesn't bail out on BSS sections.
- .bss
-bss_check:
- .fill 8, 1, 0
--- /dev/null
+# RUN: llvm-mc -triple=x86_64-pc-win32 -filetype=obj -o %T/COFF_x86_64.o %s
+# RUN: llvm-rtdyld -triple=x86_64-pc-win32 -verify -check=%s %/T/COFF_x86_64.o
+ .text
+ .def F;
+ .scl 2;
+ .type 32;
+ .endef
+ .globl __real400921f9f01b866e
+ .section .rdata,"dr",discard,__real400921f9f01b866e
+ .align 8
+__real400921f9f01b866e:
+ .quad 4614256650576692846 # double 3.1415899999999999
+ .text
+ .globl F
+ .global inst1
+ .align 16, 0x90
+F: # @F
+.Ltmp0:
+.seh_proc F
+# BB#0: # %entry
+.Ltmp1:
+ .seh_endprologue
+# rtdyld-check: decode_operand(inst1, 4) = __real400921f9f01b866e - next_pc(inst1)
+inst1:
+ movsd __real400921f9f01b866e(%rip), %xmm0 # xmm0 = mem[0],zero
+ retq
+.Leh_func_end0:
+.Ltmp2:
+ .seh_endproc
+
+# Make sure the JIT doesn't bail out on BSS sections.
+ .bss
+bss_check:
+ .fill 8, 1, 0