[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