cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

plugin_kmem.c (2093B)


      1// SPDX-License-Identifier: LGPL-2.1
      2/*
      3 * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
      4 */
      5#include <stdio.h>
      6#include <stdlib.h>
      7#include <string.h>
      8
      9#include "event-parse.h"
     10#include "trace-seq.h"
     11
     12static int call_site_handler(struct trace_seq *s, struct tep_record *record,
     13			     struct tep_event *event, void *context)
     14{
     15	struct tep_format_field *field;
     16	unsigned long long val, addr;
     17	void *data = record->data;
     18	const char *func;
     19
     20	field = tep_find_field(event, "call_site");
     21	if (!field)
     22		return 1;
     23
     24	if (tep_read_number_field(field, data, &val))
     25		return 1;
     26
     27	func = tep_find_function(event->tep, val);
     28	if (!func)
     29		return 1;
     30
     31	addr = tep_find_function_address(event->tep, val);
     32
     33	trace_seq_printf(s, "(%s+0x%x) ", func, (int)(val - addr));
     34	return 1;
     35}
     36
     37int TEP_PLUGIN_LOADER(struct tep_handle *tep)
     38{
     39	tep_register_event_handler(tep, -1, "kmem", "kfree",
     40				   call_site_handler, NULL);
     41
     42	tep_register_event_handler(tep, -1, "kmem", "kmalloc",
     43				   call_site_handler, NULL);
     44
     45	tep_register_event_handler(tep, -1, "kmem", "kmalloc_node",
     46				   call_site_handler, NULL);
     47
     48	tep_register_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
     49				   call_site_handler, NULL);
     50
     51	tep_register_event_handler(tep, -1, "kmem",
     52				   "kmem_cache_alloc_node",
     53				   call_site_handler, NULL);
     54
     55	tep_register_event_handler(tep, -1, "kmem", "kmem_cache_free",
     56				   call_site_handler, NULL);
     57	return 0;
     58}
     59
     60void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
     61{
     62	tep_unregister_event_handler(tep, -1, "kmem", "kfree",
     63				     call_site_handler, NULL);
     64
     65	tep_unregister_event_handler(tep, -1, "kmem", "kmalloc",
     66				     call_site_handler, NULL);
     67
     68	tep_unregister_event_handler(tep, -1, "kmem", "kmalloc_node",
     69				     call_site_handler, NULL);
     70
     71	tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
     72				     call_site_handler, NULL);
     73
     74	tep_unregister_event_handler(tep, -1, "kmem",
     75				     "kmem_cache_alloc_node",
     76				     call_site_handler, NULL);
     77
     78	tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_free",
     79				     call_site_handler, NULL);
     80}