summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-09-16 20:44:58 +0900
committerGitHub <noreply@github.com>2022-09-16 20:44:58 +0900
commit5b735d0bebe0d6187780d1c2ddea0b0861b15df4 (patch)
treee72857b6396c53eebe2ee7fa301f5009bd411a5d /yjit
parenta28e7871e54d7a87afbfd686291c500d71edb7cb (diff)
Invalidate i-cache after link_labels (#6388)
Notes
Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/backend/arm64/mod.rs22
1 files 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
};
}
- // 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
}
}