Messages in this thread | | | Date | Thu, 01 Apr 2010 00:16:56 -0400 | From | Masami Hiramatsu <> | Subject | Re: [PATCH v2 11/11] Uprobes traceevents patch. |
| |
Hi Steven,
Steven Rostedt wrote: > On Wed, 2010-03-31 at 21:23 +0530, Srikar Dronamraju wrote: > >> libftrace-y := ftrace.o >> diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h >> index 2825ef2..9fe02ab 100644 >> --- a/kernel/trace/trace.h >> +++ b/kernel/trace/trace.h >> @@ -126,6 +126,18 @@ struct kretprobe_trace_entry { >> (offsetof(struct kretprobe_trace_entry, args) + \ >> (sizeof(unsigned long) * (n))) >> >> +struct uprobe_trace_entry { >> + struct trace_entry ent; >> + pid_t pid; > > Unless pid is not the current pid, ent already records it.
Indeed.
>> + unsigned long ip; >> + int nargs; >> + unsigned long args[]; >> +}; > > Note, you want to really add this to trace_entries.h instead: > > FTRACE_ENTRY(uprobe, uprobe_trace_entry, > > TRACE_GRAPH_ENT, > > F_STRUCT( > __field( unsigned long, ip ) > __field( int, nargs ) > __dynamic_array(unsigned long, args ) > ), > > F_printk("%lx nrargs:%u", __entry->ip, __entry->nargs) > ); > > > This will put this event into the events/ftrace directory. Don't worry > about the printk format, we can write a plugin for it to override it if > need be.
Hmm, interesting idea. But this dynamic event definition allows us to filter events based on each argument value.
As you can see this code,
>> +struct probe_arg { >> + struct fetch_func fetch; >> + const char *name; >> +};
each argument can have unique name. Therefore user can write a filter by using these names.
Moreover, dynamic events (at least kprobe-tracer) are going to support 'types' for each argument. this means that the arg[] in *probe_trace_entry will be no longer an unsigned long array.
Thank you,
-- Masami Hiramatsu e-mail: mhiramat@redhat.com
| |