From bc10b958d2cc45b61e23c41d0aa892cbb82efafd Mon Sep 17 00:00:00 2001 From: Maxime Chevalier-Boisvert Date: Mon, 29 Jan 2024 16:17:12 -0500 Subject: [PATCH] YJIT: print warning when disasm options used without a dev build (#9744) * YJIT: print warning when disasm options used without a dev build I was confused for a few minutes the other way then --yjit-dump-disasm printed nothing, so I figured this would be useful for end-users (and future me). * Fix lone extraneous space --- yjit/src/options.rs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/yjit/src/options.rs b/yjit/src/options.rs index 5a60bc8f49..9a146512bb 100644 --- a/yjit/src/options.rs +++ b/yjit/src/options.rs @@ -228,21 +228,31 @@ pub fn parse_option(str_ptr: *const std::os::raw::c_char) -> Option<()> { _ => return None, }, - ("dump-disasm", _) => match opt_val { - "" => unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::Stdout) }, - directory => { - let path = format!("{directory}/yjit_{}.log", std::process::id()); - match File::options().create(true).append(true).open(&path) { - Ok(_) => { - eprintln!("YJIT disasm dump: {path}"); - unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::File(path)) } + ("dump-disasm", _) => { + if !cfg!(feature = "disasm") { + eprintln!("WARNING: the {} option is only available when YJIT is built in dev mode, i.e. ./configure --enable-yjit=dev", opt_name); + } + + match opt_val { + "" => unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::Stdout) }, + directory => { + let path = format!("{directory}/yjit_{}.log", std::process::id()); + match File::options().create(true).append(true).open(&path) { + Ok(_) => { + eprintln!("YJIT disasm dump: {path}"); + unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::File(path)) } + } + Err(err) => eprintln!("Failed to create {path}: {err}"), } - Err(err) => eprintln!("Failed to create {path}: {err}"), } } - }, + }, ("dump-iseq-disasm", _) => unsafe { + if !cfg!(feature = "disasm") { + eprintln!("WARNING: the {} option is only available when YJIT is built in dev mode, i.e. ./configure --enable-yjit=dev", opt_name); + } + OPTIONS.dump_iseq_disasm = Some(opt_val.to_string()); },