<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Nov 20, 2015 at 1:35 PM, Davide Italiano via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davide<br>
Date: Fri Nov 20 15:35:38 2015<br>
New Revision: 253714<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253714&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253714&view=rev</a><br>
Log:<br>
[ELF/AArch64] Add support for LDST8_ABS_LO12_NC/LDST64_ABS_LO12_NC.<br>
<br>
These two relocations where the only missing step to get a dynamically<br>
linked (with libc) "hello world" on FreeBSD.<br></blockquote><div><br></div><div>Cool! Congratulations!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
    lld/trunk/ELF/Target.cpp<br>
    lld/trunk/test/ELF/aarch64-relocs.s<br>
<br>
Modified: lld/trunk/ELF/Target.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=253714&r1=253713&r2=253714&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=253714&r1=253713&r2=253714&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Target.cpp (original)<br>
+++ lld/trunk/ELF/Target.cpp Fri Nov 20 15:35:38 2015<br>
@@ -742,10 +742,18 @@ void AArch64TargetInfo::relocateOne(uint<br>
     or32le(Loc, (X & 0x0FFFFFFC) >> 2);<br>
     break;<br>
   }<br>
+  case R_AARCH64_LDST32_ABS_LO12_NC:<br>
+    // No overflow check needed.<br>
+    or32le(Loc, (SA & 0xFFC) << 8);<br>
+    break;<br>
   case R_AARCH64_LDST64_ABS_LO12_NC:<br>
     // No overflow check needed.<br>
     or32le(Loc, (SA & 0xFF8) << 7);<br>
     break;<br>
+  case R_AARCH64_LDST8_ABS_LO12_NC:<br>
+    // No overflow check needed.<br>
+    or32le(Loc, (SA & 0xFFF) << 10);<br>
+    break;<br>
   case R_AARCH64_PREL16:<br>
     if (!isInt<16>(SA))<br>
       error("Relocation R_AARCH64_PREL16 out of range");<br>
<br>
Modified: lld/trunk/test/ELF/aarch64-relocs.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/aarch64-relocs.s?rev=253714&r1=253713&r2=253714&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/aarch64-relocs.s?rev=253714&r1=253713&r2=253714&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/ELF/aarch64-relocs.s (original)<br>
+++ lld/trunk/test/ELF/aarch64-relocs.s Fri Nov 20 15:35:38 2015<br>
@@ -92,3 +92,31 @@ jump26:<br>
 # CHECK: Disassembly of section .R_AARCH64_JUMP26:<br>
 # CHECK-NEXT: jump26:<br>
 # CHECK-NEXT:   11038:       fe ff ff 17     b      #-8<br>
+<br>
+.section .R_AARCH64_LDST32_ABS_LO12_NC,"ax",@progbits<br>
+ldst32:<br>
+  ldr s4, [x5, :lo12:foo32]<br>
+foo32:<br>
+  .asciz "foo"<br>
+  .size mystr, 3<br>
+<br>
+# S = 0x1103c, A = 0x4<br>
+# R = ((S + A) & 0xFFC) << 8 = 0x00004000<br>
+# 0x00004000 | 0xbd4000a4 = 0xbd4040a4<br>
+# CHECK: Disassembly of section .R_AARCH64_LDST32_ABS_LO12_NC:<br>
+# CHECK-NEXT: ldst32:<br>
+# CHECK-NEXT:   1103c:       a4 40 40 bd     ldr s4, [x5, #64]<br>
+<br>
+.section .R_AARCH64_LDST8_ABS_LO12_NC,"ax",@progbits<br>
+ldst8:<br>
+  ldrsb x11, [x13, :lo12:foo8]<br>
+foo8:<br>
+  .asciz "foo"<br>
+  .size mystr, 3<br>
+<br>
+# S = 0x11044, A = 0x4<br>
+# R = ((S + A) & 0xFFF) << 10 = 0x00012000<br>
+# 0x00012000 | 0x398001ab = 0x398121ab<br>
+# CHECK: Disassembly of section .R_AARCH64_LDST8_ABS_LO12_NC:<br>
+# CHECK-NEXT: ldst8:<br>
+# CHECK-NEXT:   11044:       ab 21 81 39     ldrsb x11, [x13, #72]<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>