From 7e22ec7439211d43aea850a4e849f37e631ed131 Mon Sep 17 00:00:00 2001 From: Maxime Chevalier-Boisvert Date: Fri, 22 Jul 2022 12:18:21 -0400 Subject: Clear the icache on arm --- yjit.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'yjit.c') diff --git a/yjit.c b/yjit.c index 0dddcfdc5a..a0c5c09091 100644 --- a/yjit.c +++ b/yjit.c @@ -78,6 +78,10 @@ rb_yjit_mark_executable(void *mem_block, uint32_t mem_size) rb_bug("Couldn't make JIT page (%p, %lu bytes) executable, errno: %s\n", mem_block, (unsigned long)mem_size, strerror(errno)); } + + // Clear/invalidate the instruction cache. Compiles to nothing on x86_64 + // but required on ARM. On Darwin it's the same as calling sys_icache_invalidate(). + __builtin___clear_cache(mem_block, (char *)mem_block + mem_size); } # define PTR2NUM(x) (rb_int2inum((intptr_t)(void *)(x))) -- cgit v1.2.1