Commit ed8488345eaae41c161ab741b0c44299ee99dc6c

s1341 2016-08-10T14:57:22

arm: Fix cache flushing on QNX Use `msync()` directly as `__clear_cache()` is broken in the qnx650_gcc4.8.3 toolchain.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
diff --git a/src/arm/ffi.c b/src/arm/ffi.c
index c24085d..124a128 100644
--- a/src/arm/ffi.c
+++ b/src/arm/ffi.c
@@ -566,8 +566,13 @@ ffi_prep_closure_loc (ffi_closure * closure,
   config[1] = closure_func;
 #else
   memcpy (closure->tramp, ffi_arm_trampoline, 8);
+#if defined (__QNX__)
+  msync(closure->tramp, 8, 0x1000000);	/* clear data map */
+  msync(codeloc, 8, 0x1000000);	/* clear insn map */
+#else
   __clear_cache(closure->tramp, closure->tramp + 8);	/* clear data map */
   __clear_cache(codeloc, codeloc + 8);			/* clear insn map */
+#endif
   *(void (**)(void))(closure->tramp + 8) = closure_func;
 #endif