Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: LGPL-2.1
0002 /*
0003  * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
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 }