[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]