[lld] r251645 - [ELF2/AArch64] Implement R_AARCH64_PREL16 and R_AARCH64_PREL32 relocations.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 29 12:56:00 PDT 2015
Author: davide
Date: Thu Oct 29 14:55:59 2015
New Revision: 251645
URL: http://llvm.org/viewvc/llvm-project?rev=251645&view=rev
Log:
[ELF2/AArch64] Implement R_AARCH64_PREL16 and R_AARCH64_PREL32 relocations.
Modified:
lld/trunk/ELF/Target.cpp
lld/trunk/test/elf2/aarch64-data-relocs.s
Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=251645&r1=251644&r2=251645&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Thu Oct 29 14:55:59 2015
@@ -642,6 +642,16 @@ void AArch64TargetInfo::relocateOne(uint
updateAArch64Adr(Loc, (X >> 12) & 0x1FFFFF); // X[32:12]
break;
}
+ case R_AARCH64_PREL16:
+ if (!isInt<16>(SA))
+ error("Relocation R_AARCH64_PREL16 out of range");
+ write16le(Loc, SA - P);
+ break;
+ case R_AARCH64_PREL32:
+ if (!isInt<32>(SA))
+ error("Relocation R_AARCH64_PREL32 out of range");
+ write32le(Loc, SA - P);
+ break;
case R_AARCH64_PREL64:
// No overflow check needed.
write64le(Loc, SA - P);
Modified: lld/trunk/test/elf2/aarch64-data-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/aarch64-data-relocs.s?rev=251645&r1=251644&r2=251645&view=diff
==============================================================================
--- lld/trunk/test/elf2/aarch64-data-relocs.s (original)
+++ lld/trunk/test/elf2/aarch64-data-relocs.s Thu Oct 29 14:55:59 2015
@@ -28,13 +28,31 @@
// ^-- A = 0x24
// CHECK-NEXT: 100a: 00 00 00 00 .word
+.section .R_AARCH64_PREL16, "ax", at progbits
+ .hword sym - . + 12
+.section .R_AARCH64_PREL32, "ax", at progbits
+ .word sym - . + 24
.section .R_AARCH64_PREL64, "ax", at progbits
.xword sym - . + 36
-// S + A = 0x24
+// S + A = 0xc
// P = 0x100e
-// SA - P = 0xfffffffffffff016
-// CHECK: Disassembly of section .R_AARCH64_PREL64:
+// SA - P = 0xeffe
+// CHECK: Disassembly of section .R_AARCH64_PREL16:
// CHECK-NEXT: $d.3:
-// CHECK-NEXT: 100e: 16 f0 ff ff .word
-// CHECK-NEXT: 1012: ff ff ff ff .word
+// CHECK-NEXT: 100e: fe ef .short
+
+// S + A = 0x18
+// P = 0x1010
+// SA - P = 0xfffff016
+// CHECK: Disassembly of section .R_AARCH64_PREL32:
+// CHECK-NEXT: $d.4:
+// CHECK-NEXT: 1010: 08 f0 ff ff .word
+
+// S + A = 0x24
+// P = 0x1014
+// SA - P = 0xfffffffffffff010
+// CHECK: Disassembly of section .R_AARCH64_PREL64:
+// CHECK-NEXT: $d.5:
+// CHECK-NEXT: 1014: 10 f0 ff ff .word
+// CHECK-NEXT: 1018: ff ff ff ff .word
More information about the llvm-commits
mailing list