ruby-changes:73581
From: Takashi <ko1@a...>
Date: Fri, 16 Sep 2022 20:45:26 +0900 (JST)
Subject: [ruby-changes:73581] 5b735d0beb (master): Invalidate i-cache after link_labels (#6388)
https://git.ruby-lang.org/ruby.git/commit/?id=5b735d0beb From 5b735d0bebe0d6187780d1c2ddea0b0861b15df4 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun <takashikkbn@g...> 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(-) 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 https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/arm64/mod.rs#L971 }; } - // 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 https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/arm64/mod.rs#L985 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.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/