uftrace: add upstream fix for missing symbol
This commit is contained in:
parent
6e29f3e714
commit
00dd265e2e
2 changed files with 175 additions and 1 deletions
|
@ -0,0 +1,174 @@
|
|||
From 95941ed8e45adabd178a1866c910de39626010ba Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Slough <ajss@forbidden.co.uk>
|
||||
Date: Sun, 29 Oct 2017 15:29:08 +0000
|
||||
Subject: [PATCH] build: move get_event_name to fstack
|
||||
|
||||
Signed-off-by: Andrew Slough <andrew.slough@gmail.com>
|
||||
|
||||
diff --git utils/fstack.c utils/fstack.c
|
||||
index b6c13a1..3308216 100644
|
||||
--- utils/fstack.c
|
||||
+++ utils/fstack.c
|
||||
@@ -1054,6 +1054,78 @@ static void save_task_event(struct ftrace_task_handle *task,
|
||||
fseek(task->fp, 8 - rem, SEEK_CUR);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * get_event_name - find event name from event id
|
||||
+ * @handle - handle to uftrace data
|
||||
+ * @evt_id - event id
|
||||
+ *
|
||||
+ * This function returns a string of event name matching to @evt_id.
|
||||
+ * Callers must free the returned string. This is moved from utils.c
|
||||
+ * since it needs to call libtraceevent function for kernel events
|
||||
+ * which is not linked into libmcount.
|
||||
+ */
|
||||
+char *get_event_name(struct ftrace_file_handle *handle, unsigned evt_id)
|
||||
+{
|
||||
+ char *evt_name = NULL;
|
||||
+ struct event_format *event;
|
||||
+
|
||||
+ if (evt_id >= EVENT_ID_USER) {
|
||||
+ struct uftrace_event *ev;
|
||||
+
|
||||
+ list_for_each_entry(ev, &handle->events, list) {
|
||||
+ if (ev->id == evt_id) {
|
||||
+ xasprintf(&evt_name, "%s:%s", ev->provider, ev->event);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+ xasprintf(&evt_name, "user_event:%u", evt_id);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (evt_id >= EVENT_ID_PERF) {
|
||||
+ const char *event_name;
|
||||
+
|
||||
+ switch (evt_id) {
|
||||
+ case EVENT_ID_PERF_SCHED_IN:
|
||||
+ event_name = "sched-in";
|
||||
+ break;
|
||||
+ case EVENT_ID_PERF_SCHED_OUT:
|
||||
+ event_name = "sched-out";
|
||||
+ break;
|
||||
+ case EVENT_ID_PERF_SCHED_BOTH:
|
||||
+ event_name = "schedule";
|
||||
+ break;
|
||||
+ default:
|
||||
+ event_name = "unknown";
|
||||
+ break;
|
||||
+ }
|
||||
+ xasprintf(&evt_name, "linux:%s", event_name);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (evt_id >= EVENT_ID_BUILTIN) {
|
||||
+ switch (evt_id) {
|
||||
+ case EVENT_ID_PROC_STATM:
|
||||
+ xasprintf(&evt_name, "read:proc/statm");
|
||||
+ break;
|
||||
+ case EVENT_ID_PAGE_FAULT:
|
||||
+ xasprintf(&evt_name, "read:page-fault");
|
||||
+ break;
|
||||
+ default:
|
||||
+ xasprintf(&evt_name, "builtin_event:%u", evt_id);
|
||||
+ break;
|
||||
+ }
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* kernel events */
|
||||
+ event = pevent_find_event(handle->kernel->pevent, evt_id);
|
||||
+ xasprintf(&evt_name, "%s:%s", event->system, event->name);
|
||||
+
|
||||
+out:
|
||||
+ return evt_name;
|
||||
+}
|
||||
+
|
||||
int read_task_event(struct ftrace_task_handle *task,
|
||||
struct uftrace_record *rec)
|
||||
{
|
||||
diff --git utils/utils.c utils/utils.c
|
||||
index de7dd1b..eb959ed 100644
|
||||
--- utils/utils.c
|
||||
+++ utils/utils.c
|
||||
@@ -522,76 +522,6 @@ void free_parsed_cmdline(char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
-/**
|
||||
- * get_event_name - find event name from event id
|
||||
- * @handle - handle to uftrace data
|
||||
- * @evt_id - event id
|
||||
- *
|
||||
- * This function returns a string of event name matching to @evt_id.
|
||||
- * Callers must free the returned string.
|
||||
- */
|
||||
-char *get_event_name(struct ftrace_file_handle *handle, unsigned evt_id)
|
||||
-{
|
||||
- char *evt_name = NULL;
|
||||
- struct event_format *event;
|
||||
-
|
||||
- if (evt_id >= EVENT_ID_USER) {
|
||||
- struct uftrace_event *ev;
|
||||
-
|
||||
- list_for_each_entry(ev, &handle->events, list) {
|
||||
- if (ev->id == evt_id) {
|
||||
- xasprintf(&evt_name, "%s:%s", ev->provider, ev->event);
|
||||
- goto out;
|
||||
- }
|
||||
- }
|
||||
- xasprintf(&evt_name, "user_event:%u", evt_id);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- if (evt_id >= EVENT_ID_PERF) {
|
||||
- const char *event_name;
|
||||
-
|
||||
- switch (evt_id) {
|
||||
- case EVENT_ID_PERF_SCHED_IN:
|
||||
- event_name = "sched-in";
|
||||
- break;
|
||||
- case EVENT_ID_PERF_SCHED_OUT:
|
||||
- event_name = "sched-out";
|
||||
- break;
|
||||
- case EVENT_ID_PERF_SCHED_BOTH:
|
||||
- event_name = "schedule";
|
||||
- break;
|
||||
- default:
|
||||
- event_name = "unknown";
|
||||
- break;
|
||||
- }
|
||||
- xasprintf(&evt_name, "linux:%s", event_name);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- if (evt_id >= EVENT_ID_BUILTIN) {
|
||||
- switch (evt_id) {
|
||||
- case EVENT_ID_PROC_STATM:
|
||||
- xasprintf(&evt_name, "read:proc/statm");
|
||||
- break;
|
||||
- case EVENT_ID_PAGE_FAULT:
|
||||
- xasprintf(&evt_name, "read:page-fault");
|
||||
- break;
|
||||
- default:
|
||||
- xasprintf(&evt_name, "builtin_event:%u", evt_id);
|
||||
- break;
|
||||
- }
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- /* kernel events */
|
||||
- event = pevent_find_event(handle->kernel->pevent, evt_id);
|
||||
- xasprintf(&evt_name, "%s:%s", event->system, event->name);
|
||||
-
|
||||
-out:
|
||||
- return evt_name;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* absolute_dirname - return the canonicalized absolute dirname
|
||||
*
|
||||
--
|
||||
2.15.0
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'uftrace'
|
||||
pkgname=uftrace
|
||||
version=0.8.1
|
||||
revision=1
|
||||
revision=2
|
||||
build_style=gnu-configure
|
||||
hostmakedepends="pandoc"
|
||||
makedepends="elfutils-devel"
|
||||
|
|
Loading…
Add table
Reference in a new issue