mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Revert "Revert "ExecutionEngine: add R_AARCH64_ABS{16,32}""
This reverts commit SVN r313668. The original test case attempted to write a pointer value into 16-bits, although the value may exceed the range representable in 16-bits. Ensure that the symbol is located in the address space such that its absolute address is representable in 16-bits. This should fix the assertion failure that was seen on the Windows hosts. llvm-svn: 313822
This commit is contained in:
parent
e2e7547260
commit
f0d32a3057
@ -354,6 +354,18 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
|
||||
default:
|
||||
llvm_unreachable("Relocation type not implemented yet!");
|
||||
break;
|
||||
case ELF::R_AARCH64_ABS16: {
|
||||
uint64_t Result = Value + Addend;
|
||||
assert(static_cast<int64_t>(Result) >= INT16_MIN && Result < UINT16_MAX);
|
||||
write(isBE, TargetPtr, static_cast<uint16_t>(Result & 0xffffU));
|
||||
break;
|
||||
}
|
||||
case ELF::R_AARCH64_ABS32: {
|
||||
uint64_t Result = Value + Addend;
|
||||
assert(static_cast<int64_t>(Result) >= INT32_MIN && Result < UINT32_MAX);
|
||||
write(isBE, TargetPtr, static_cast<uint32_t>(Result & 0xffffffffU));
|
||||
break;
|
||||
}
|
||||
case ELF::R_AARCH64_ABS64:
|
||||
write(isBE, TargetPtr, Value + Addend);
|
||||
break;
|
||||
|
@ -1,6 +1,6 @@
|
||||
# RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj -o %t %s
|
||||
# RUN: llvm-rtdyld -triple=arm64-none-linux-gnu -verify -dummy-extern f=0x0123456789abcdef -check=%s %t
|
||||
|
||||
# RUN: llvm-rtdyld -triple=arm64-none-linux-gnu -verify -dummy-extern f=0x0123456789abcdef -dummy-extern symbol=0xf00f -check=%s %t
|
||||
|
||||
.globl Q
|
||||
.section .dummy, "ax"
|
||||
Q:
|
||||
@ -82,3 +82,14 @@ r:
|
||||
## f & 0xFFF = 0xdef (bits 11:0 of f)
|
||||
## 0xdef << 10 = 0x37bc00
|
||||
# rtdyld-check: *{4}(a) = 0x9137bc00
|
||||
|
||||
.data
|
||||
ABS16:
|
||||
.short symbol
|
||||
# rtdyld-check: (*{2}ABS16) = symbol[15:0]
|
||||
ABS32:
|
||||
.long symbol
|
||||
# rtdyld-check: (*{4}ABS32) = symbol[31:0]
|
||||
ABS64:
|
||||
.xword symbol
|
||||
# rtdyld-check: (*{8}ABS64) = symbol
|
||||
|
Loading…
x
Reference in New Issue
Block a user