MultiJITTest.cpp: Tweak getPointerToNamedFunction() to be aware of also Windows x64.
authorNAKAMURA Takumi <geek4civic@gmail.com>
Tue, 11 Mar 2014 00:34:38 +0000 (00:34 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Tue, 11 Mar 2014 00:34:38 +0000 (00:34 +0000)
In import thunk, jmp is:
  - On x86, 0xFF 0x25 [disp32].
  - On x64, 0xFF 0x25 [pcrel32].

See also my r144178.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203523 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/ExecutionEngine/JIT/MultiJITTest.cpp

index 48aa95576996210f1c07d1ca310acee778e9d6a5..5016532eef87890b5775e06814c2251f47c4a0c8 100644 (file)
@@ -174,6 +174,14 @@ TEST(MultiJitTest, JitPool) {
     EXPECT_TRUE(fa != 0);
     fa = *(intptr_t *)fa;       // Bound value of IAT
   }
+#elif defined(__x86_64__)
+  // getPointerToNamedFunction might be indirect jump
+  // on Win32 x64 --enable-shared.
+  // FF 25 <pcrel32>: jmp *(RIP + pointer to IAT)
+  if (sa != fa && memcmp((char *)fa, "\xFF\x25", 2) == 0) {
+    fa += *(int32_t *)(fa + 2) + 6;     // Address to IAT(RIP)
+    fa = *(intptr_t *)fa;               // Bound value of IAT
+  }
 #endif
   EXPECT_TRUE(sa == fa);
 }