diff options
author | Lukas Larsson <[email protected]> | 2016-04-15 15:10:55 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-04-15 15:10:55 +0200 |
commit | be7f01689e71cbc1896ea5c11fb0ebc6f7f6dd8a (patch) | |
tree | e7db1292fe6aa167408b7a7c93289fe2cca7e5c1 /erts/emulator/beam/global.h | |
parent | 67df3b3792857a2b4885c0acbeaa7f32f3594b0c (diff) | |
parent | cff38617986001e0a5f3f48de20acbeccceea978 (diff) | |
download | otp-be7f01689e71cbc1896ea5c11fb0ebc6f7f6dd8a.tar.gz otp-be7f01689e71cbc1896ea5c11fb0ebc6f7f6dd8a.tar.bz2 otp-be7f01689e71cbc1896ea5c11fb0ebc6f7f6dd8a.zip |
Merge branch 'lukas/erts/tracer-module-and-more/PR-1009/OTP-10268'
* lukas/erts/tracer-module-and-more/PR-1009/OTP-10268: (26 commits)
erts: Don't trace on link events when port is dead
erts: more logging in trace_bif_SUITE trace_bif_return
erts: Make trace_delivered go via sys msg dispatcher again
erts: Add comment about future trace optimizations
erts: Optimize tracer reload test
erts: Document erlang:match_spec_test/3
runtime_tools: Make dbg work with erl_tracer modules
runtime_rools: Allow new timestamp trace flags
runtime_tools: Lots of dbg docs updates
erts: Deallocate heap fragments from trace nif calls
eprof: Fix tests after tracer module incompatabilities
fprof: update to work with new spawned trace event
erts: Add 'spawned' trace event to 'procs' trace flag
erts: send and receive no longer need status lock
erts: Do 'unregister' as "self-tracing"
erts: Silence harmless valgrind warning in dec_term
erts: Fix end_per_testcase crash in local_trace_SUITE
observer: Update ttb to work with tracing on ports
runtime_tools: Update dbg to work with tracing on ports
erts: Add tracing examples in match spec docs
...
Diffstat (limited to 'erts/emulator/beam/global.h')
-rw-r--r-- | erts/emulator/beam/global.h | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index 1d3704f0af..a7bc990deb 100644 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -44,6 +44,8 @@ #include "erl_port.h" #include "erl_gc.h" +struct enif_func_t; + struct enif_environment_t /* ErlNifEnv */ { struct erl_module_nif* mod_nif; @@ -54,14 +56,21 @@ struct enif_environment_t /* ErlNifEnv */ int fpe_was_unmasked; struct enif_tmp_obj_t* tmp_obj_list; int exception_thrown; /* boolean */ + Process *tracee; }; extern void erts_pre_nif(struct enif_environment_t*, Process*, - struct erl_module_nif*); + struct erl_module_nif*, Process* tracee); extern void erts_post_nif(struct enif_environment_t* env); extern Eterm erts_nif_taints(Process* p); extern void erts_print_nif_taints(int to, void* to_arg); void erts_unload_nif(struct erl_module_nif* nif); extern void erl_nif_init(void); +extern int erts_nif_get_funcs(struct erl_module_nif*, + struct enif_func_t **funcs); +extern Eterm erts_nif_call_function(Process *p, Process *tracee, + struct erl_module_nif*, + struct enif_func_t *, + int argc, Eterm *argv); /* Driver handle (wrapper for old plain handle) */ #define ERL_DE_OK 0 @@ -1532,10 +1541,15 @@ ERTS_GLB_INLINE void dtrace_fun_decode(Process *process, ERTS_GLB_INLINE void dtrace_pid_str(Eterm pid, char *process_buf) { - erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "<%lu.%lu.%lu>", - pid_channel_no(pid), - pid_number(pid), - pid_serial(pid)); + if (is_pid(pid)) + erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "<%lu.%lu.%lu>", + pid_channel_no(pid), + pid_number(pid), + pid_serial(pid)); + else if (is_port(pid)) + erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "#Port<%lu.%lu>", + port_channel_no(pid), + port_number(pid)); } ERTS_GLB_INLINE void @@ -1547,9 +1561,7 @@ dtrace_proc_str(Process *process, char *process_buf) ERTS_GLB_INLINE void dtrace_port_str(Port *port, char *port_buf) { - erts_snprintf(port_buf, DTRACE_TERM_BUF_SIZE, "#Port<%lu.%lu>", - port_channel_no(port->common.id), - port_number(port->common.id)); + dtrace_pid_str(port->common.id, port_buf); } ERTS_GLB_INLINE void |