8000 YJIT: Skip dumping code for the other cb on --yjit-dump-disasm (#6592) · ruby/ruby@0d360ee · GitHub
[go: up one dir, main page]

Skip to content

Commit 0d360ee

Browse files
authored
YJIT: Skip dumping code for the other cb on --yjit-dump-disasm (#6592)
YJIT: Skip dumping code for the other cb on --yjit-dump-disasm
1 parent 9da0d4c commit 0d360ee

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

yjit/src/asm/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,8 @@ impl CodeBlock {
213213
self.page_end_reserve = old_page_end_reserve;
214214
}
215215

216-
#[cfg(target_arch = "aarch64")]
217-
#[cfg(not(test))]
218216
/// Return the address ranges of a given address range that this CodeBlock can write.
217+
#[cfg(any(feature = "disasm", target_arch = "aarch64"))]
219218
pub fn writable_addrs(&self, start_ptr: CodePtr, end_ptr: CodePtr) -> Vec<(usize, usize)> {
220219
let mut addrs = vec![];
221220
let mut start = start_ptr.raw_ptr() as usize;

yjit/src/backend/ir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,15 +1094,15 @@ impl Assembler
10941094
pub fn compile(self, cb: &mut CodeBlock) -> Vec<u32>
10951095
{
10961096
#[cfg(feature = "disasm")]
1097-
let start_addr = cb.get_write_ptr().raw_ptr();
1097+
let start_addr = cb.get_write_ptr();
10981098

10991099
let alloc_regs = Self::get_alloc_regs();
11001100
let gc_offsets = self.compile_with_regs(cb, alloc_regs);
11011101

11021102
#[cfg(feature = "disasm")]
11031103
if let Some(dump_disasm) = get_option_ref!(dump_disasm) {
11041104
use crate::disasm::dump_disasm_addr_range;
1105-
let end_addr = cb.get_write_ptr().raw_ptr();
1105+
let end_addr = cb.get_write_ptr();
11061106
dump_disasm_addr_range(cb, start_addr, end_addr, dump_disasm)
11071107
}
11081108
gc_offsets

yjit/src/disasm.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ use crate::yjit::yjit_enabled_p;
44
#[cfg(feature = "disasm")]
55
use crate::asm::CodeBlock;
66
#[cfg(feature = "disasm")]
7+
use crate::codegen::CodePtr;
8+
#[cfg(feature = "disasm")]
79
use crate::options::DumpDisasm;
810

911
#[cfg(feature = "disasm")]
@@ -120,19 +122,21 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
120122
}
121123

122124
#[cfg(feature = "disasm")]
123-
pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: *const u8, end_addr: *const u8, dump_disasm: &DumpDisasm) {
125+
pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: CodePtr, end_addr: CodePtr, dump_disasm: &DumpDisasm) {
124126
use std::fs::File;
125127
use std::io::Write;
126128

127-
let disasm = disasm_addr_range(cb, start_addr, end_addr);
128-
if disasm.len() > 0 {
129-
match dump_disasm {
130-
DumpDisasm::Stdout => println!("{disasm}"),
131-
DumpDisasm::File(path) => {
132-
let mut f = File::options().append(true).create(true).open(path).unwrap();
133-
f.write_all(disasm.as_bytes()).unwrap();
134-
}
135-
};
129+
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);
131+
if disasm.len() > 0 {
132+
match dump_disasm {
133+
DumpDisasm::Stdout => println!("{disasm}"),
134+
DumpDisasm::File(path) => {
135+
let mut f = File::options().create(true).append(true).open(path).unwrap();
136+
f.write_all(disasm.as_bytes()).unwrap();
137+
}
138+
};
139+
}
136140
}
137141
}
138142

0 commit comments

Comments
 (0)
0