10000 YJIT: Respect writable_addrs on --yjit-dump-iseq-disasm as well (#6596) · Shopify/ruby@ac54d3f · GitHub
[go: up one dir, main page]

Skip to content

Commit ac54d3f

Browse files
k0kubuntenderworks
authored andcommitted
YJIT: Respect writable_addrs on --yjit-dump-iseq-disasm as well (ruby#6596)
YJIT: Respect writable_addrs on --yjit-dump-iseq-disasm as well
1 parent b060414 commit ac54d3f

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

yjit/src/core.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1487,7 +1487,7 @@ fn gen_block_series_body(
14871487
if iseq_location.contains(substr) {
14881488
let last_block = last_blockref.borrow();
14891489
println!("Compiling {} block(s) for {}, ISEQ offsets [{}, {})", batch.len(), iseq_location, blockid.idx, last_block.end_idx);
1490-
println!("{}", disasm_iseq_insn_range(blockid.iseq, blockid.idx, last_block.end_idx));
1490+
print!("{}", disasm_iseq_insn_range(blockid.iseq, blockid.idx, last_block.end_idx));
14911491
}
14921492
}
14931493
}

yjit/src/disasm.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
8585
let blockid = block.get_blockid();
8686
if blockid.idx >= start_idx && blockid.idx < end_idx {
8787
let end_idx = block.get_end_idx();
88-
let start_addr = block.get_start_addr().unwrap().raw_ptr();
89-
let end_addr = block.get_end_addr().unwrap().raw_ptr();
88+
let start_addr = block.get_start_addr().unwrap();
89+
let end_addr = block.get_end_addr().unwrap();
9090
let code_size = block.code_size();
9191

9292
// Write some info about the current block
@@ -101,14 +101,17 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
101101
writeln!(out, "== {:=<60}", block_ident).unwrap();
102102

103103
// Disassemble the instructions
104-
out.push_str(&disasm_addr_range(global_cb, start_addr, (start_addr as usize + code_size) as *const u8));
104+
for (start_addr, end_addr) in global_cb.writable_addrs(start_addr, end_addr) {
105+
out.push_str(&disasm_addr_range(global_cb, start_addr, end_addr));
106+
writeln!(out).unwrap();
107+
}
105108

106109
// If this is not the last block
107110
if block_idx < block_list.len() - 1 {
108111
// Compute the size of the gap between this block and the next
109112
let next_block = block_list[block_idx + 1].borrow();
110-
let next_start_addr = next_block.get_start_addr().unwrap().raw_ptr();
111-
let gap_size = (next_start_addr as usize) - (end_addr as usize);
113+
let next_start_addr = next_block.get_start_addr().unwrap();
114+
let gap_size = next_start_addr.into_usize() - end_addr.into_usize();
112115

113116
// Log the size of the gap between the blocks if nonzero
114117
if gap_size > 0 {
@@ -127,7 +130,7 @@ pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: CodePtr, end_addr: Cod
127130
use std::io::Write;
128131

129132
for (start_addr, end_addr) in cb.writable_addrs(start_addr, end_addr) {
130-
let disasm = disasm_addr_range(cb, start_addr as *const u8, end_addr as *const u8);
133+
let disasm = disasm_addr_range(cb, start_addr, end_addr);
131134
if disasm.len() > 0 {
132135
match dump_disasm {
133136
DumpDisasm::Stdout => println!("{disasm}"),
@@ -141,7 +144,7 @@ pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: CodePtr, end_addr: Cod
141144
}
142145

143146
#[cfg(feature = "disasm")]
144-
pub fn disasm_addr_range(cb: &CodeBlock, start_addr: *const u8, end_addr: *const u8) -> String {
147+
pub fn disasm_addr_range(cb: &CodeBlock, start_addr: usize, end_addr: usize) -> String {
145148
let mut out = String::from("");
146149

147150
// Initialize capstone
@@ -165,8 +168,8 @@ pub fn disasm_addr_range(cb: &CodeBlock, start_addr: *const u8, end_addr: *const
165168
cs.set_skipdata(true).unwrap();
166169

167170
// Disassemble the instructions
168-
let code_size = end_addr as usize - start_addr as usize;
169-
let code_slice = unsafe { std::slice::from_raw_parts(start_addr, code_size) };
171+
let code_size = end_addr - start_addr;
172+
let code_slice = unsafe { std::slice::from_raw_parts(start_addr as _, code_size) };
170173
let insns = cs.disasm_all(code_slice, start_addr as u64).unwrap();
171174

172175
// For each instruction in this block

0 commit comments

Comments
 (0)
0