From 6f8c3012c662ec11fc38f99e7914391d4309933e Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 2 Nov 2018 20:57:14 +0100 Subject: [PATCH] SimpleJit perf map (#571) * SimpleJit perf map --- lib/simplejit/src/backend.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/simplejit/src/backend.rs b/lib/simplejit/src/backend.rs index 68cc7e8e92..f774adbbaa 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,17 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { .code_memory .allocate(size) .expect("TODO: handle OOM etc."); + + 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 // that traps.