From 00dd265e2e391f0640f08f63ed42d9fc8c788a15 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Thu, 9 Nov 2017 15:50:39 +0100 Subject: [PATCH] uftrace: add upstream fix for missing symbol --- ...-build-move-get_event_name-to-fstack.patch | 174 ++++++++++++++++++ srcpkgs/uftrace/template | 2 +- 2 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/uftrace/patches/0001-build-move-get_event_name-to-fstack.patch diff --git a/srcpkgs/uftrace/patches/0001-build-move-get_event_name-to-fstack.patch b/srcpkgs/uftrace/patches/0001-build-move-get_event_name-to-fstack.patch new file mode 100644 index 00000000000..a467ad3a88f --- /dev/null +++ b/srcpkgs/uftrace/patches/0001-build-move-get_event_name-to-fstack.patch @@ -0,0 +1,174 @@ +From 95941ed8e45adabd178a1866c910de39626010ba Mon Sep 17 00:00:00 2001 +From: Andrew Slough +Date: Sun, 29 Oct 2017 15:29:08 +0000 +Subject: [PATCH] build: move get_event_name to fstack + +Signed-off-by: Andrew Slough + +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 + diff --git a/srcpkgs/uftrace/template b/srcpkgs/uftrace/template index a76b6ebcf1b..97ffbaa3af3 100644 --- a/srcpkgs/uftrace/template +++ b/srcpkgs/uftrace/template @@ -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"