[PATCH] D18031: [lld] [ELF/AArch64] Simplify AArch64 isRelRelative
Adhemerval Zanella via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 10 01:34:48 PST 2016
zatrazz created this revision.
zatrazz added reviewers: ruiu, rafael.
zatrazz added subscribers: llvm-commits, grimar, rengolin, emaste.
zatrazz set the repository for this revision to rL LLVM.
zatrazz added a project: lld.
Herald added a subscriber: aemerson.
This patch simplifies the isRelRelative for AArch64 to just handle the
cases where it is not relative, instead of list all the relocations
that is. It also adds more testing for shared objects creation.
Repository:
rL LLVM
http://reviews.llvm.org/D18031
Files:
ELF/Target.cpp
test/ELF/aarch64-relative.s
Index: test/ELF/aarch64-relative.s
===================================================================
--- test/ELF/aarch64-relative.s
+++ test/ELF/aarch64-relative.s
@@ -2,13 +2,20 @@
// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t.o
// RUN: ld.lld %t.o -o %t.so -shared
// RUN: llvm-readobj -r %t.so | FileCheck %s
- adrp x8, .Lfoo
- strb w9, [x8, :lo12:.Lfoo]
- ldr w0, [x8, :lo12:.Lfoo]
- ldr x0, [x8, :lo12:.Lfoo]
- add x0, x0, :lo12:.Lfoo
- bl .Lfoo
+ adr x8, .Lfoo // R_AARCH64_ADR_PREL_LO21
+ adrp x8, .Lfoo // R_AARCH64_ADR_PREL_PG_HI21
+ strb w9, [x8, :lo12:.Lfoo] // R_AARCH64_LDST8_ABS_LO12_NC
+ ldr h17, [x19, :lo12:.Lfoo] // R_AARCH64_LDST16_ABS_LO12_NC
+ ldr w0, [x8, :lo12:.Lfoo] // R_AARCH64_LDST32_ABS_LO12_NC
+ ldr x0, [x8, :lo12:.Lfoo] // R_AARCH64_LDST64_ABS_LO12_NC
+ ldr q20, [x19, #:lo12:.Lfoo] // R_AARCH64_LDST128_ABS_LO12_NC
+ add x0, x0, :lo12:.Lfoo // R_AARCH64_ADD_ABS_LO12_NC
+ bl .Lfoo // R_AARCH64_CALL26
+ b .Lfoo // R_AARCH64_JUMP26
+ beq .Lfoo // R_AARCH64_CONDBR19
+ adr x1, .Lfoo // R_AARCH64_ADR_PREL_LO21
+ tbz x1, 7, .Lfoo // R_AARCH64_TSTBR14
.data
.Lfoo:
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -1223,11 +1223,14 @@
}
bool AArch64TargetInfo::isRelRelative(uint32_t Type) const {
- return Type == R_AARCH64_PREL32 || Type == R_AARCH64_ADR_PREL_PG_HI21 ||
- Type == R_AARCH64_LDST8_ABS_LO12_NC ||
- Type == R_AARCH64_LDST32_ABS_LO12_NC ||
- Type == R_AARCH64_LDST64_ABS_LO12_NC ||
- Type == R_AARCH64_ADD_ABS_LO12_NC || Type == R_AARCH64_CALL26;
+ switch (Type) {
+ default:
+ return true;
+ case R_AARCH64_ABS64:
+ case R_AARCH64_ADR_GOT_PAGE:
+ case R_AARCH64_LD64_GOT_LO12_NC:
+ return !Config->Shared;
+ }
}
bool AArch64TargetInfo::isTlsInitialExecRel(uint32_t Type) const {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18031.50247.patch
Type: text/x-patch
Size: 2263 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160310/e70c11a9/attachment.bin>
More information about the llvm-commits
mailing list