xref: /openbmc/linux/kernel/trace/trace_export.c (revision 770cb243)
1 /*
2  * trace_export.c - export basic ftrace utilities to user space
3  *
4  * Copyright (C) 2009 Steven Rostedt <srostedt@redhat.com>
5  */
6 #include <linux/stringify.h>
7 #include <linux/kallsyms.h>
8 #include <linux/seq_file.h>
9 #include <linux/debugfs.h>
10 #include <linux/uaccess.h>
11 #include <linux/ftrace.h>
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/fs.h>
15 
16 #include "trace_output.h"
17 
18 #include "trace_format.h"
19 
20 #undef TRACE_FIELD_ZERO_CHAR
21 #define TRACE_FIELD_ZERO_CHAR(item)				\
22 	ret = trace_seq_printf(s, "\tfield: char " #item ";\t"	\
23 			       "offset:%lu;\tsize:0;\n",	\
24 			       offsetof(typeof(field), item));	\
25 	if (!ret)						\
26 		return 0;
27 
28 
29 #undef TPRAWFMT
30 #define TPRAWFMT(args...) args
31 
32 #undef TRACE_EVENT_FORMAT
33 #define TRACE_EVENT_FORMAT(call, proto, args, fmt, tstruct, tpfmt)	\
34 static int								\
35 ftrace_format_##call(struct trace_seq *s)				\
36 {									\
37 	struct args field;						\
38 	int ret;							\
39 									\
40 	tstruct;							\
41 									\
42 	trace_seq_printf(s, "\nprint fmt: \"%s\"\n", tpfmt);		\
43 									\
44 	return ret;							\
45 }
46 
47 #include "trace_event_types.h"
48 
49 #undef TRACE_ZERO_CHAR
50 #define TRACE_ZERO_CHAR(arg)
51 
52 #undef TRACE_FIELD
53 #define TRACE_FIELD(type, item, assign)\
54 	entry->item = assign;
55 
56 #undef TRACE_FIELD
57 #define TRACE_FIELD(type, item, assign)\
58 	entry->item = assign;
59 
60 #undef TPCMD
61 #define TPCMD(cmd...)	cmd
62 
63 #undef TRACE_ENTRY
64 #define TRACE_ENTRY	entry
65 
66 #undef TRACE_FIELD_SPECIAL
67 #define TRACE_FIELD_SPECIAL(type_item, item, cmd) \
68 	cmd;
69 
70 #undef TRACE_EVENT_FORMAT
71 #define TRACE_EVENT_FORMAT(call, proto, args, fmt, tstruct, tpfmt)	\
72 									\
73 static struct ftrace_event_call __used					\
74 __attribute__((__aligned__(4)))						\
75 __attribute__((section("_ftrace_events"))) event_##call = {		\
76 	.name 			= #call,				\
77 	.id			= proto,				\
78 	.system			= __stringify(TRACE_SYSTEM),		\
79 	.show_format		= ftrace_format_##call,			\
80 }
81 #include "trace_event_types.h"
82