<div dir="ltr">Thanks Keno!<div><br></div><div>- Lang.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 20, 2016 at 3:15 PM, Keno Fischer 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: kfischer<br>
Date: Thu Oct 20 17:15:56 2016<br>
New Revision: 284789<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=284789&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=284789&view=rev</a><br>
Log:<br>
Fix cross-endianness RuntimeDyld relocation for ARM<br>
<br>
rL284780 fixed the PREL31 relocation and added a test for it. Being<br>
the first such test for ARM relocations, it exposed incorrect endianness<br>
assumptions (causing buildbot failures on big-endian hosts). Fix that by<br>
using the same helpers used for the x86 case.<br>
<br>
Modified:<br>
    llvm/trunk/lib/<wbr>ExecutionEngine/RuntimeDyld/<wbr>RuntimeDyldELF.cpp<br>
<br>
Modified: llvm/trunk/lib/<wbr>ExecutionEngine/RuntimeDyld/<wbr>RuntimeDyldELF.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp?rev=284789&r1=284788&r2=284789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>ExecutionEngine/RuntimeDyld/<wbr>RuntimeDyldELF.cpp?rev=284789&<wbr>r1=284788&r2=284789&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/<wbr>ExecutionEngine/RuntimeDyld/<wbr>RuntimeDyldELF.cpp (original)<br>
+++ llvm/trunk/lib/<wbr>ExecutionEngine/RuntimeDyld/<wbr>RuntimeDyldELF.cpp Thu Oct 20 17:15:56 2016<br>
@@ -465,12 +465,13 @@ void RuntimeDyldELF::<wbr>resolveARMRelocatio<br>
     break;<br>
     // Write a 31bit signed offset<br>
   case ELF::R_ARM_PREL31:<br>
-    *TargetPtr &= 0x80000000;<br>
-    *TargetPtr |= (Value - FinalAddress) & ~0x80000000;<br>
+    support::ulittle32_t::ref{<wbr>TargetPtr} =<br>
+        (support::ulittle32_t::ref{<wbr>TargetPtr} & 0x80000000) |<br>
+        ((Value - FinalAddress) & ~0x80000000);<br>
     break;<br>
   case ELF::R_ARM_TARGET1:<br>
   case ELF::R_ARM_ABS32:<br>
-    *TargetPtr = Value;<br>
+    support::ulittle32_t::ref{<wbr>TargetPtr} = Value;<br>
     break;<br>
     // Write first 16 bit of 32 bit value to the mov instruction.<br>
     // Last 4 bit should be shifted.<br>
@@ -480,9 +481,9 @@ void RuntimeDyldELF::<wbr>resolveARMRelocatio<br>
       Value = Value & 0xFFFF;<br>
     else if (Type == ELF::R_ARM_MOVT_ABS)<br>
       Value = (Value >> 16) & 0xFFFF;<br>
-    *TargetPtr &= ~0x000F0FFF;<br>
-    *TargetPtr |= Value & 0xFFF;<br>
-    *TargetPtr |= ((Value >> 12) & 0xF) << 16;<br>
+    support::ulittle32_t::ref{<wbr>TargetPtr} =<br>
+        (support::ulittle32_t::ref{<wbr>TargetPtr} & ~0x000F0FFF) | (Value & 0xFFF) |<br>
+        (((Value >> 12) & 0xF) << 16);<br>
     break;<br>
     // Write 24 bit relative value to the branch instruction.<br>
   case ELF::R_ARM_PC24: // Fall through.<br>
@@ -490,9 +491,9 @@ void RuntimeDyldELF::<wbr>resolveARMRelocatio<br>
   case ELF::R_ARM_JUMP24:<br>
     int32_t RelValue = static_cast<int32_t>(Value - FinalAddress - 8);<br>
     RelValue = (RelValue & 0x03FFFFFC) >> 2;<br>
-    assert((*TargetPtr & 0xFFFFFF) == 0xFFFFFE);<br>
-    *TargetPtr &= 0xFF000000;<br>
-    *TargetPtr |= RelValue;<br>
+    assert((support::ulittle32_t::<wbr>ref{TargetPtr} & 0xFFFFFF) == 0xFFFFFE);<br>
+    support::ulittle32_t::ref{<wbr>TargetPtr} =<br>
+        (support::ulittle32_t::ref{<wbr>TargetPtr} & 0xFF000000) | RelValue;<br>
     break;<br>
   }<br>
 }<br>
<br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>