From 5b735d0bebe0d6187780d1c2ddea0b0861b15df4 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 16 Sep 2022 20:44:58 +0900 Subject: Invalidate i-cache after link_labels (#6388) --- yjit/src/backend/arm64/mod.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'yjit') diff --git a/yjit/src/backend/arm64/mod.rs b/yjit/src/backend/arm64/mod.rs index 9d19c65114..0a5068be58 100644 --- a/yjit/src/backend/arm64/mod.rs +++ b/yjit/src/backend/arm64/mod.rs @@ -971,17 +971,6 @@ impl Assembler }; } - // Invalidate icache for newly written out region so we don't run - // stale code. - #[cfg(not(test))] - { - let start = cb.get_ptr(start_write_pos).raw_ptr(); - let write_ptr = cb.get_write_ptr().raw_ptr(); - let codeblock_end = cb.get_ptr(cb.get_mem_size()).raw_ptr(); - let end = std::cmp::min(write_ptr, codeblock_end); - unsafe { rb_yjit_icache_invalidate(start as _, end as _) }; - } - gc_offsets } @@ -996,12 +985,23 @@ impl Assembler assert!(label_idx == idx); } + let start_write_pos = cb.get_write_pos(); let gc_offsets = asm.arm64_emit(cb); if !cb.has_dropped_bytes() { cb.link_labels(); } + // Invalidate icache for newly written out region so we don't run stale code. + #[cfg(not(test))] + { + let start = cb.get_ptr(start_write_pos).raw_ptr(); + let write_ptr = cb.get_write_ptr().raw_ptr(); + let codeblock_end = cb.get_ptr(cb.get_mem_size()).raw_ptr(); + let end = std::cmp::min(write_ptr, codeblock_end); + unsafe { rb_yjit_icache_invalidate(start as _, end as _) }; + } + gc_offsets } } -- cgit v1.2.3