7162ab49d05d30e44c409c3b1a521c41d85e78f2
[safe/jmp/linux-2.6] / kernel / trace / trace_export.c
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:%u;\tsize:0;\n",                 \
24                                (unsigned int)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"