diff options
Diffstat (limited to 'plugin_kmem.c')
-rw-r--r-- | plugin_kmem.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/plugin_kmem.c b/plugin_kmem.c new file mode 100644 index 0000000..d707bf2 --- /dev/null +++ b/plugin_kmem.c | |||
@@ -0,0 +1,56 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <string.h> | ||
4 | |||
5 | #include "trace-cmd.h" | ||
6 | |||
7 | static int call_site_handler(struct trace_seq *s, struct record *record, | ||
8 | struct event_format *event) | ||
9 | { | ||
10 | struct format_field *field; | ||
11 | unsigned long long val, addr; | ||
12 | void *data = record->data; | ||
13 | const char *func; | ||
14 | |||
15 | field = pevent_find_field(event, "call_site"); | ||
16 | if (!field) | ||
17 | return 1; | ||
18 | |||
19 | if (pevent_read_number_field(field, data, &val)) | ||
20 | return 1; | ||
21 | |||
22 | func = pevent_find_function(event->pevent, val); | ||
23 | if (!func) | ||
24 | return 1; | ||
25 | addr = pevent_find_function_address(event->pevent, val); | ||
26 | |||
27 | trace_seq_printf(s, "(%s+0x%x) ", func, (int)(val - addr)); | ||
28 | |||
29 | return 1; | ||
30 | } | ||
31 | |||
32 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | ||
33 | { | ||
34 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", | ||
35 | call_site_handler); | ||
36 | |||
37 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc", | ||
38 | call_site_handler); | ||
39 | |||
40 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc_node", | ||
41 | call_site_handler); | ||
42 | |||
43 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc", | ||
44 | call_site_handler); | ||
45 | |||
46 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc_node", | ||
47 | call_site_handler); | ||
48 | |||
49 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", | ||
50 | call_site_handler); | ||
51 | |||
52 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_free", | ||
53 | call_site_handler); | ||
54 | |||
55 | return 0; | ||
56 | } | ||