diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-11-24 22:18:54 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-11-24 22:18:54 -0500 |
commit | 8bb6c06444d5f78833b9cab2e288385f34d5fe24 (patch) | |
tree | 4ed5f8427bd0fdc12be10265535e1e97dc1e09f5 | |
parent | 3bb8ccb5259374234647376fbf776f973c39643f (diff) |
Let plugins get access to the function map
Added:
const char *pevent_find_function(unsigned long long addr)
This will find the function name that maps to the address addr.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.c | 11 | ||||
-rw-r--r-- | parse-events.h | 1 | ||||
-rw-r--r-- | test_plugin.c | 6 |
3 files changed, 16 insertions, 2 deletions
diff --git a/parse-events.c b/parse-events.c index f7b8bce..9d60443 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -240,6 +240,17 @@ static struct func_map *find_func(unsigned long long addr) | |||
240 | return func; | 240 | return func; |
241 | } | 241 | } |
242 | 242 | ||
243 | const char *pevent_find_function(unsigned long long addr) | ||
244 | { | ||
245 | struct func_map *map; | ||
246 | |||
247 | map = find_func(addr); | ||
248 | if (!map) | ||
249 | return NULL; | ||
250 | |||
251 | return map->func; | ||
252 | } | ||
253 | |||
243 | int pevent_register_function(char *func, unsigned long long addr, | 254 | int pevent_register_function(char *func, unsigned long long addr, |
244 | char *mod) | 255 | char *mod) |
245 | { | 256 | { |
diff --git a/parse-events.h b/parse-events.h index ff597ef..b4e0422 100644 --- a/parse-events.h +++ b/parse-events.h | |||
@@ -300,6 +300,7 @@ int pevent_register_event_handler(int id, char *sys_name, char *event_name, | |||
300 | pevent_event_handler_func func); | 300 | pevent_event_handler_func func); |
301 | 301 | ||
302 | struct format_field *pevent_find_field(struct event *event, const char *name); | 302 | struct format_field *pevent_find_field(struct event *event, const char *name); |
303 | const char *pevent_find_function(unsigned long long addr); | ||
303 | 304 | ||
304 | 305 | ||
305 | /* for debugging */ | 306 | /* for debugging */ |
diff --git a/test_plugin.c b/test_plugin.c index 802c7e0..db98c8b 100644 --- a/test_plugin.c +++ b/test_plugin.c | |||
@@ -42,6 +42,7 @@ static int timer_expire_handler(struct trace_seq *s, void *data, int size, | |||
42 | static int timer_start_handler(struct trace_seq *s, void *data, int size, | 42 | static int timer_start_handler(struct trace_seq *s, void *data, int size, |
43 | struct event *event) | 43 | struct event *event) |
44 | { | 44 | { |
45 | const char *func; | ||
45 | void *hrtimer; | 46 | void *hrtimer; |
46 | void *function; | 47 | void *function; |
47 | long long expires; | 48 | long long expires; |
@@ -58,6 +59,7 @@ static int timer_start_handler(struct trace_seq *s, void *data, int size, | |||
58 | if (offset < 0) | 59 | if (offset < 0) |
59 | return 0; | 60 | return 0; |
60 | function = *(void **)(data + offset); | 61 | function = *(void **)(data + offset); |
62 | func = pevent_find_function((unsigned long long)function); | ||
61 | 63 | ||
62 | offset = get_offset(s, event, "expires"); | 64 | offset = get_offset(s, event, "expires"); |
63 | if (offset < 0) | 65 | if (offset < 0) |
@@ -69,8 +71,8 @@ static int timer_start_handler(struct trace_seq *s, void *data, int size, | |||
69 | return 0; | 71 | return 0; |
70 | soft = *(long long *)(data + offset); | 72 | soft = *(long long *)(data + offset); |
71 | 73 | ||
72 | ret = trace_seq_printf(s, "hrtimer=%p function=%pf expires=%llu softexpires=%llu", | 74 | ret = trace_seq_printf(s, "hrtimer=%p function=%s expires=%llu softexpires=%llu", |
73 | hrtimer, function, | 75 | hrtimer, func, |
74 | expires, soft); | 76 | expires, soft); |
75 | return ret; | 77 | return ret; |
76 | } | 78 | } |