0001
0002
0003
0004
0005 #include <stdio.h>
0006 #include <stdlib.h>
0007 #include <string.h>
0008
0009 #include "event-parse.h"
0010 #include "trace-seq.h"
0011
0012 static int call_site_handler(struct trace_seq *s, struct tep_record *record,
0013 struct tep_event *event, void *context)
0014 {
0015 struct tep_format_field *field;
0016 unsigned long long val, addr;
0017 void *data = record->data;
0018 const char *func;
0019
0020 field = tep_find_field(event, "call_site");
0021 if (!field)
0022 return 1;
0023
0024 if (tep_read_number_field(field, data, &val))
0025 return 1;
0026
0027 func = tep_find_function(event->tep, val);
0028 if (!func)
0029 return 1;
0030
0031 addr = tep_find_function_address(event->tep, val);
0032
0033 trace_seq_printf(s, "(%s+0x%x) ", func, (int)(val - addr));
0034 return 1;
0035 }
0036
0037 int TEP_PLUGIN_LOADER(struct tep_handle *tep)
0038 {
0039 tep_register_event_handler(tep, -1, "kmem", "kfree",
0040 call_site_handler, NULL);
0041
0042 tep_register_event_handler(tep, -1, "kmem", "kmalloc",
0043 call_site_handler, NULL);
0044
0045 tep_register_event_handler(tep, -1, "kmem", "kmalloc_node",
0046 call_site_handler, NULL);
0047
0048 tep_register_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
0049 call_site_handler, NULL);
0050
0051 tep_register_event_handler(tep, -1, "kmem",
0052 "kmem_cache_alloc_node",
0053 call_site_handler, NULL);
0054
0055 tep_register_event_handler(tep, -1, "kmem", "kmem_cache_free",
0056 call_site_handler, NULL);
0057 return 0;
0058 }
0059
0060 void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
0061 {
0062 tep_unregister_event_handler(tep, -1, "kmem", "kfree",
0063 call_site_handler, NULL);
0064
0065 tep_unregister_event_handler(tep, -1, "kmem", "kmalloc",
0066 call_site_handler, NULL);
0067
0068 tep_unregister_event_handler(tep, -1, "kmem", "kmalloc_node",
0069 call_site_handler, NULL);
0070
0071 tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
0072 call_site_handler, NULL);
0073
0074 tep_unregister_event_handler(tep, -1, "kmem",
0075 "kmem_cache_alloc_node",
0076 call_site_handler, NULL);
0077
0078 tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_free",
0079 call_site_handler, NULL);
0080 }