From 8376f370f543fee9a9dbd3cdcaf2a5e95fbc7195 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Sat, 27 Oct 2018 14:47:13 +0200 Subject: [PATCH 1/2] SimpleJit perf map --- lib/simplejit/src/backend.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/simplejit/src/backend.rs b/lib/simplejit/src/backend.rs index 68cc7e8e9..3f035526c 100644 --- a/lib/simplejit/src/backend.rs +++ b/lib/simplejit/src/backend.rs @@ -11,6 +11,7 @@ use libc; use memory::Memory; use std::collections::HashMap; use std::ffi::CString; +use std::io::Write; use std::ptr; use target_lexicon::PointerWidth; #[cfg(windows)] @@ -167,7 +168,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { fn define_function( &mut self, - _name: &str, + name: &str, ctx: &cranelift_codegen::Context, _namespace: &ModuleNamespace, code_size: u32, @@ -177,6 +178,15 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { .code_memory .allocate(size) .expect("TODO: handle OOM etc."); + + let mut map_file = ::std::fs::OpenOptions::new() + .create(true) + .append(true) + .open(format!("/tmp/perf-{}.map", ::std::process::id())) + .unwrap(); + + writeln!(map_file, "{:x} {:x} {}", ptr as usize, code_size, name); + let mut reloc_sink = SimpleJITRelocSink::new(); // Ignore traps for now. For now, frontends should just avoid generating code // that traps. From 2f92a29650774796247e0bca7af060e691dc2050 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Mon, 29 Oct 2018 19:08:42 +0100 Subject: [PATCH 2/2] Fix review comments --- lib/simplejit/src/backend.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/simplejit/src/backend.rs b/lib/simplejit/src/backend.rs index 3f035526c..f774adbba 100644 --- a/lib/simplejit/src/backend.rs +++ b/lib/simplejit/src/backend.rs @@ -179,13 +179,15 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { .allocate(size) .expect("TODO: handle OOM etc."); - let mut map_file = ::std::fs::OpenOptions::new() - .create(true) - .append(true) - .open(format!("/tmp/perf-{}.map", ::std::process::id())) - .unwrap(); - - writeln!(map_file, "{:x} {:x} {}", ptr as usize, code_size, name); + if cfg!(target_os = "linux") && ::std::env::var_os("PERF_BUILDID_DIR").is_some() { + let mut map_file = ::std::fs::OpenOptions::new() + .create(true) + .append(true) + .open(format!("/tmp/perf-{}.map", ::std::process::id())) + .unwrap(); + + writeln!(map_file, "{:x} {:x} {}", ptr as usize, code_size, name); + } let mut reloc_sink = SimpleJITRelocSink::new(); // Ignore traps for now. For now, frontends should just avoid generating code