forked from Minki/linux
770cb24345
Impact: allow user apps to read binary format of basic ftrace entries Currently, only defined raw events export their formats so a binary reader can parse them. There's no reason that the default ftrace entries can't export their formats. This patch adds a subsystem called "ftrace" in the events directory that includes the ftrace entries for basic ftrace recorded items. These only have three files in the events directory: type : printf available_types : printf format : format for the event entry For example: # cat /debug/tracing/events/ftrace/wakeup/format name: wakeup ID: 3 format: field:unsigned char type; offset:0; size:1; field:unsigned char flags; offset:1; size:1; field:unsigned char preempt_count; offset:2; size:1; field:int pid; offset:4; size:4; field:int tgid; offset:8; size:4; field:unsigned int prev_pid; offset:12; size:4; field:unsigned char prev_prio; offset:16; size:1; field:unsigned char prev_state; offset:17; size:1; field:unsigned int next_pid; offset:20; size:4; field:unsigned char next_prio; offset:24; size:1; field:unsigned char next_state; offset:25; size:1; field:unsigned int next_cpu; offset:28; size:4; print fmt: "%u:%u:%u ==+ %u:%u:%u [%03u]" Signed-off-by: Steven Rostedt <srostedt@redhat.com>
56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
/*
|
|
* Setup the showing format of trace point.
|
|
*
|
|
* int
|
|
* ftrace_format_##call(struct trace_seq *s)
|
|
* {
|
|
* struct ftrace_raw_##call field;
|
|
* int ret;
|
|
*
|
|
* ret = trace_seq_printf(s, #type " " #item ";"
|
|
* " size:%d; offset:%d;\n",
|
|
* sizeof(field.type),
|
|
* offsetof(struct ftrace_raw_##call,
|
|
* item));
|
|
*
|
|
* }
|
|
*/
|
|
|
|
#undef TRACE_STRUCT
|
|
#define TRACE_STRUCT(args...) args
|
|
|
|
#undef TRACE_FIELD
|
|
#define TRACE_FIELD(type, item, assign) \
|
|
ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \
|
|
"offset:%lu;\tsize:%lu;\n", \
|
|
offsetof(typeof(field), item), \
|
|
sizeof(field.item)); \
|
|
if (!ret) \
|
|
return 0;
|
|
|
|
|
|
#undef TRACE_FIELD_SPECIAL
|
|
#define TRACE_FIELD_SPECIAL(type_item, item, cmd) \
|
|
ret = trace_seq_printf(s, "\tfield special:" #type_item ";\t" \
|
|
"offset:%lu;\tsize:%lu;\n", \
|
|
offsetof(typeof(field), item), \
|
|
sizeof(field.item)); \
|
|
if (!ret) \
|
|
return 0;
|
|
|
|
#undef TRACE_EVENT_FORMAT
|
|
#define TRACE_EVENT_FORMAT(call, proto, args, fmt, tstruct, tpfmt) \
|
|
static int \
|
|
ftrace_format_##call(struct trace_seq *s) \
|
|
{ \
|
|
struct ftrace_raw_##call field; \
|
|
int ret; \
|
|
\
|
|
tstruct; \
|
|
\
|
|
trace_seq_printf(s, "\nprint fmt: \"%s\"\n", tpfmt); \
|
|
\
|
|
return ret; \
|
|
}
|
|
|