Skip to content

Commit

Permalink
Revert "Revert "ExecutionEngine: add R_AARCH64_ABS{16,32}""
Browse files Browse the repository at this point in the history
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313822 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
compnerd committed Sep 20, 2017
1 parent 8e50186 commit 26d9773
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
12 changes: 12 additions & 0 deletions lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
15 changes: 13 additions & 2 deletions test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_relocations.s
Original file line number Diff line number Diff line change
@@ -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:
Expand Down Expand Up @@ -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

0 comments on commit 26d9773

Please sign in to comment.