diff options
| author | Henrik Nord <[email protected]> | 2012-07-06 12:25:36 +0200 | 
|---|---|---|
| committer | Henrik Nord <[email protected]> | 2012-07-06 12:25:36 +0200 | 
| commit | c075ac6484e3d5a93a0d870ab4483d39ae26eaec (patch) | |
| tree | f12a3bdcd9cdba0c52b85a8ac9f0b19bef72dcdb /lib/runtime_tools/src | |
| parent | 0eed86218c2f9e1dfadb25b0ec993d207e43d25e (diff) | |
| parent | 978cdb3543f67838b8900d05a833ebeef7ac7295 (diff) | |
| download | otp-c075ac6484e3d5a93a0d870ab4483d39ae26eaec.tar.gz otp-c075ac6484e3d5a93a0d870ab4483d39ae26eaec.tar.bz2 otp-c075ac6484e3d5a93a0d870ab4483d39ae26eaec.zip | |
Merge branch 'slf/dtrace-nif-N-probes' into maint
* slf/dtrace-nif-N-probes:
  Remove crufty scaffolding code
  Add 1024 separate USDT probes to dyntrace.erl and dyntrace.c
Conflicts:
	lib/runtime_tools/src/dyntrace.erl
OTP-10143
Diffstat (limited to 'lib/runtime_tools/src')
| -rw-r--r-- | lib/runtime_tools/src/dyntrace.erl | 116 | 
1 files changed, 113 insertions, 3 deletions
| diff --git a/lib/runtime_tools/src/dyntrace.erl b/lib/runtime_tools/src/dyntrace.erl index 3146a44350..b4579fd5ce 100644 --- a/lib/runtime_tools/src/dyntrace.erl +++ b/lib/runtime_tools/src/dyntrace.erl @@ -37,7 +37,8 @@  -export([available/0,           user_trace_s1/1, % TODO: unify with pid & tag args like user_trace_i4s4 -         p/0, p/1, p/2, p/3, p/4, p/5, p/6, p/7, p/8]). +         p/0, p/1, p/2, p/3, p/4, p/5, p/6, p/7, p/8, +         pn/1, pn/2, pn/3, pn/4, pn/5, pn/6, pn/7, pn/8, pn/9]).  -export([put_tag/1, get_tag/0, get_tag_data/0, spread_tag/1, restore_tag/1]).  -export([user_trace_i4s4/9]). % Know what you're doing! @@ -45,6 +46,7 @@  -type probe_arg() :: integer() | iolist().  -type int_p_arg() :: integer() | iolist() | undef. +-type n_probe_label() :: 0..1023.  %% The *_maybe() types use atom() instead of a stricter 'undef'  %% because user_trace_i4s4/9 is exposed to the outside world, and @@ -113,6 +115,16 @@ user_trace_s1(_Message) ->  user_trace_i4s4(_, _, _, _, _, _, _, _, _) ->      erlang:nif_error(nif_not_loaded). +-spec user_trace_n(n_probe_label(), iolist(), +                   integer_maybe(), integer_maybe(), +                   integer_maybe(), integer_maybe(), +                   iolist_maybe(), iolist_maybe(), +                   iolist_maybe(), iolist_maybe()) -> +      true | false | error | badarg. + +user_trace_n(_, _, _, _, _, _, _, _, _, _) -> +    erlang:nif_error(nif_not_loaded). +  %%%  %%% Erlang support functions  %%% @@ -216,6 +228,106 @@ user_trace_int(I1, I2, I3, I4, S1, S2, S3, S4) ->              false      end. +-spec pn(n_probe_label()) -> true | false | error | badarg. + +pn(ProbeLabel) -> +    user_trace_n_int(ProbeLabel, undef, undef, undef, undef, undef, undef, undef, undef). + +-spec pn(n_probe_label(), probe_arg()) -> true | false | error | badarg. + +pn(ProbeLabel, I1) when is_integer(I1) -> +    user_trace_n_int(ProbeLabel, I1, undef, undef, undef, undef, undef, undef, undef); +pn(ProbeLabel, S1) -> +    user_trace_n_int(ProbeLabel, undef, undef, undef, undef, S1, undef, undef, undef). + +-spec pn(n_probe_label(), probe_arg(), probe_arg()) -> true | false | error | badarg. + +pn(ProbeLabel, I1, I2) when is_integer(I1), is_integer(I2) -> +    user_trace_n_int(ProbeLabel, I1, I2, undef, undef, undef, undef, undef, undef); +pn(ProbeLabel, I1, S1) when is_integer(I1) -> +    user_trace_n_int(ProbeLabel, I1, undef, undef, undef, S1, undef, undef, undef); +pn(ProbeLabel, S1, S2) -> +    user_trace_n_int(ProbeLabel, undef, undef, undef, undef, S1, S2, undef, undef). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg()) -> true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3) when is_integer(I1), is_integer(I2), is_integer(I3) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, undef, undef, undef, undef, undef); +pn(ProbeLabel, I1, I2, S1) when is_integer(I1), is_integer(I2) -> +    user_trace_n_int(ProbeLabel, I1, I2, undef, undef, S1, undef, undef, undef); +pn(ProbeLabel, I1, S1, S2) when is_integer(I1) -> +    user_trace_n_int(ProbeLabel, I1, undef, undef, undef, S1, S2, undef, undef); +pn(ProbeLabel, S1, S2, S3) -> +    user_trace_n_int(ProbeLabel, undef, undef, undef, undef, S1, S2, S3, undef). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg(), probe_arg()) -> +      true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3, I4) when is_integer(I1), is_integer(I2), is_integer(I3), is_integer(I4) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, I4, undef, undef, undef, undef); +pn(ProbeLabel, I1, I2, I3, S1) when is_integer(I1), is_integer(I2), is_integer(I3) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, undef, S1, undef, undef, undef); +pn(ProbeLabel, I1, I2, S1, S2) when is_integer(I1), is_integer(I2) -> +    user_trace_n_int(ProbeLabel, I1, I2, undef, undef, S1, S2, undef, undef); +pn(ProbeLabel, I1, S1, S2, S3) when is_integer(I1) -> +    user_trace_n_int(ProbeLabel, I1, undef, undef, undef, S1, S2, S3, undef); +pn(ProbeLabel, S1, S2, S3, S4) -> +    user_trace_n_int(ProbeLabel, undef, undef, undef, undef, S1, S2, S3, S4). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg(), probe_arg(), +        probe_arg()) -> +      true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3, I4, S1) when is_integer(I1), is_integer(I2), is_integer(I3), is_integer(I4) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, I4, S1, undef, undef, undef); +pn(ProbeLabel, I1, I2, I3, S1, S2) when is_integer(I1), is_integer(I2), is_integer(I3) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, undef, S1, S2, undef, undef); +pn(ProbeLabel, I1, I2, S1, S2, S3) when is_integer(I1), is_integer(I2) -> +    user_trace_n_int(ProbeLabel, I1, I2, undef, undef, S1, S2, S3, undef); +pn(ProbeLabel, I1, S1, S2, S3, S4) when is_integer(I1) -> +    user_trace_n_int(ProbeLabel, I1, undef, undef, undef, S1, S2, S3, S4). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg(), probe_arg(), +        probe_arg(), probe_arg()) -> +      true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3, I4, S1, S2) when is_integer(I1), is_integer(I2), is_integer(I3), is_integer(I4) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, I4, S1, S2, undef, undef); +pn(ProbeLabel, I1, I2, I3, S1, S2, S3) when is_integer(I1), is_integer(I2), is_integer(I3) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, undef, S1, S2, S3, undef); +pn(ProbeLabel, I1, I2, S1, S2, S3, S4) when is_integer(I1), is_integer(I2) -> +    user_trace_n_int(ProbeLabel, I1, I2, undef, undef, S1, S2, S3, S4). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg(), probe_arg(), +        probe_arg(), probe_arg(), probe_arg()) -> +      true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3, I4, S1, S2, S3) when is_integer(I1), is_integer(I2), is_integer(I3), is_integer(I4) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, I4, S1, S2, S3, undef); +pn(ProbeLabel, I1, I2, I3, S1, S2, S3, S4) when is_integer(I1), is_integer(I2), is_integer(I3) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, undef, S1, S2, S3, S4). + +-spec pn(n_probe_label(), probe_arg(), probe_arg(), probe_arg(), probe_arg(), +        probe_arg(), probe_arg(), probe_arg(), probe_arg()) -> +      true | false | error | badarg. + +pn(ProbeLabel, I1, I2, I3, I4, S1, S2, S3, S4) when is_integer(I1), is_integer(I2), is_integer(I3), is_integer(I4) -> +    user_trace_n_int(ProbeLabel, I1, I2, I3, I4, S1, S2, S3, S4). + +-spec user_trace_n_int(n_probe_label(), +                       int_p_arg(), int_p_arg(), int_p_arg(), int_p_arg(), +                       int_p_arg(), int_p_arg(), int_p_arg(), int_p_arg()) -> +      true | false | error | badarg. + +user_trace_n_int(ProbeLabel, I1, I2, I3, I4, S1, S2, S3, S4) -> +    UTag = get_tag(), +    try +        user_trace_n(ProbeLabel, UTag, I1, I2, I3, I4, S1, S2, S3, S4) +    catch +        error:nif_not_loaded -> +            false +    end. +  -spec put_tag(undefined | iodata()) -> binary() | undefined.  put_tag(Data) ->      erlang:dt_put_tag(unicode:characters_to_binary(Data)). @@ -238,5 +350,3 @@ spread_tag(B) ->  -spec restore_tag(true | {non_neg_integer(), binary() | []}) -> true.  restore_tag(T) ->      erlang:dt_restore_tag(T). -     - | 
