From ed8488345eaae41c161ab741b0c44299ee99dc6c Mon Sep 17 00:00:00 2001 From: s1341 Date: Wed, 10 Aug 2016 14:57:22 +0200 Subject: [PATCH] arm: Fix cache flushing on QNX Use `msync()` directly as `__clear_cache()` is broken in the qnx650_gcc4.8.3 toolchain. --- src/arm/ffi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/arm/ffi.c b/src/arm/ffi.c index c24085d3..124a128d 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