aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--parse-events.c8
-rw-r--r--parse-events.h1
-rw-r--r--trace-cmd.h2
-rw-r--r--trace-ftrace.c50
-rw-r--r--trace-input.c2
6 files changed, 56 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 38407ec..1f9e2e5 100644
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@ libparsevent.so: $(PEVENT_LIB_OBJS)
35libparsevent.a: $(PEVENT_LIB_OBJS) 35libparsevent.a: $(PEVENT_LIB_OBJS)
36 $(RM) $@; $(AR) rcs $@ $^ 36 $(RM) $@; $(AR) rcs $@ $^
37 37
38TCMD_LIB_OBJS = $(PEVENT_LIB_OBJS) trace-util.o trace-input.o 38TCMD_LIB_OBJS = $(PEVENT_LIB_OBJS) trace-util.o trace-input.o trace-ftrace.o
39 39
40libtracecmd.a: $(TCMD_LIB_OBJS) 40libtracecmd.a: $(TCMD_LIB_OBJS)
41 $(RM) $@; $(AR) rcs $@ $^ 41 $(RM) $@; $(AR) rcs $@ $^
diff --git a/parse-events.c b/parse-events.c
index 82d5d21..7fdd64b 100644
--- a/parse-events.c
+++ b/parse-events.c
@@ -2694,9 +2694,6 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
2694 return; 2694 return;
2695 } 2695 }
2696 2696
2697 if (event->flags & EVENT_FL_ISFUNC)
2698 ptr = " %pF <-- %pF";
2699
2700 if (event->flags & EVENT_FL_ISBPRINT) { 2697 if (event->flags & EVENT_FL_ISBPRINT) {
2701 bprint_fmt = get_bprint_format(data, size, event); 2698 bprint_fmt = get_bprint_format(data, size, event);
2702 args = make_bprint_args(bprint_fmt, data, size, event); 2699 args = make_bprint_args(bprint_fmt, data, size, event);
@@ -3467,10 +3464,7 @@ int pevent_parse_event(char *buf, unsigned long size, char *sys)
3467 3464
3468 event->flags |= EVENT_FL_ISFTRACE; 3465 event->flags |= EVENT_FL_ISFTRACE;
3469 3466
3470 if (strcmp(event->name, "function") == 0) 3467 if (strcmp(event->name, "funcgraph_entry") == 0)
3471 event->flags |= EVENT_FL_ISFUNC;
3472
3473 else if (strcmp(event->name, "funcgraph_entry") == 0)
3474 event->flags |= EVENT_FL_ISFUNCENT; 3468 event->flags |= EVENT_FL_ISFUNCENT;
3475 3469
3476 else if (strcmp(event->name, "funcgraph_exit") == 0) 3470 else if (strcmp(event->name, "funcgraph_exit") == 0)
diff --git a/parse-events.h b/parse-events.h
index 6adf526..138f140 100644
--- a/parse-events.h
+++ b/parse-events.h
@@ -189,7 +189,6 @@ enum {
189 EVENT_FL_ISFTRACE = 0x01, 189 EVENT_FL_ISFTRACE = 0x01,
190 EVENT_FL_ISPRINT = 0x02, 190 EVENT_FL_ISPRINT = 0x02,
191 EVENT_FL_ISBPRINT = 0x04, 191 EVENT_FL_ISBPRINT = 0x04,
192 EVENT_FL_ISFUNC = 0x08,
193 EVENT_FL_ISFUNCENT = 0x10, 192 EVENT_FL_ISFUNCENT = 0x10,
194 EVENT_FL_ISFUNCRET = 0x20, 193 EVENT_FL_ISFUNCRET = 0x20,
195 194
diff --git a/trace-cmd.h b/trace-cmd.h
index e9e3b1e..34e4012 100644
--- a/trace-cmd.h
+++ b/trace-cmd.h
@@ -42,5 +42,7 @@ tracecmd_peek_data(struct tracecmd_handle *handle, int cpu);
42struct record * 42struct record *
43tracecmd_read_data(struct tracecmd_handle *handle, int cpu); 43tracecmd_read_data(struct tracecmd_handle *handle, int cpu);
44 44
45int tracecmd_ftrace_overrides(void);
46
45 47
46#endif /* _TRACE_CMD_H */ 48#endif /* _TRACE_CMD_H */
diff --git a/trace-ftrace.c b/trace-ftrace.c
new file mode 100644
index 0000000..3174f89
--- /dev/null
+++ b/trace-ftrace.c
@@ -0,0 +1,50 @@
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include "parse-events.h"
6
7static int function_handler(struct trace_seq *s, void *data, int size,
8 struct event *event)
9{
10 struct format_field *ip = pevent_find_field(event, "ip");
11 struct format_field *pip = pevent_find_field(event, "parent_ip");
12 unsigned long long function;
13 const char *func;
14
15 if (!ip)
16 return trace_seq_printf(s, "CANT FIND FIELD IP");
17
18 if (pevent_read_number_field(ip, data, &function))
19 trace_seq_printf(s, " function=INVALID");
20 else {
21 func = pevent_find_function(function);
22 if (func)
23 trace_seq_printf(s, "%s <-- ", func);
24 else
25 trace_seq_printf(s, "0x%llx", function);
26 }
27
28 if (!pip)
29 return trace_seq_printf(s, "CANT FIND FIELD PARENT_IP");
30
31 if (pevent_read_number_field(pip, data, &function))
32 trace_seq_printf(s, " function=INVALID");
33 else {
34 func = pevent_find_function(function);
35 if (func)
36 trace_seq_printf(s, "%s", func);
37 else
38 trace_seq_printf(s, "0x%llx", function);
39 }
40
41 return 0;
42}
43
44int tracecmd_ftrace_overrides(void)
45{
46 pevent_register_event_handler(-1, "ftrace", "function",
47 function_handler);
48
49 return 0;
50}
diff --git a/trace-input.c b/trace-input.c
index 239c9d3..77db2f5 100644
--- a/trace-input.c
+++ b/trace-input.c
@@ -399,6 +399,8 @@ int tracecmd_read_headers(struct tracecmd_handle *handle)
399 if (ret < 0) 399 if (ret < 0)
400 return -1; 400 return -1;
401 401
402 /* register default ftrace functions first */
403 tracecmd_ftrace_overrides();
402 404
403 trace_load_plugins(); 405 trace_load_plugins();
404 406