parent
1c94760fe4
commit
ba45cda0cd
@ -1 +1 @@
|
||||
SOURCES/libtraceevent-1.1.1.tar.gz
|
||||
SOURCES/libtraceevent-1.5.3.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
07d940c014adcc4c15bb7333845b8e2c21328dc7 SOURCES/libtraceevent-1.1.1.tar.gz
|
||||
72d2ca781728169d9b17679b890f496d4c303040 SOURCES/libtraceevent-1.5.3.tar.gz
|
||||
|
@ -1,86 +0,0 @@
|
||||
From 62823da1bd46f24e2b498513a809011dfe16cd9b Mon Sep 17 00:00:00 2001
|
||||
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
|
||||
Date: Tue, 8 Jun 2021 17:27:44 -0400
|
||||
Subject: [PATCH] libtraceevent: Handle parsing of "(REC)->" case
|
||||
|
||||
If a trace event wraps the special __entry variable to dereference it with
|
||||
parenthesis, it shows up in the trace event format file wrapping the
|
||||
"(REC)" as well. For example, the "func_repeats" event passed the __entry
|
||||
into a helper macro in the TP_printk() portion, and the macro correctly
|
||||
wrapped its parameter in parenthesis. This caused the output to show:
|
||||
|
||||
"(((u64)(REC)->top_delta_ts << 32) | (REC)->bottom_delta_ts)"
|
||||
|
||||
The parser then failed to parse the "(REC)->" portion, as it expected the
|
||||
"->" to appear directly after the "REC". This is not a requirement, and
|
||||
the parser should be able to handle such cases.
|
||||
|
||||
When this occurred, trace-cmd would error with the following message:
|
||||
|
||||
trace-cmd: No such file or directory
|
||||
Error: expected type 4 but read 5
|
||||
|
||||
Link: https://lore.kernel.org/linux-trace-devel/20210608172744.796e93b7@gandalf.local.home
|
||||
|
||||
Fixes: 6582b0a ("tools/events: Add files to create libtraceevent.a")
|
||||
Reported-by: Julia Lawall <julia.lawall@inria.fr>
|
||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
||||
---
|
||||
src/event-parse.c | 27 ++++++++++++++++++++++++---
|
||||
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/event-parse.c b/src/event-parse.c
|
||||
index 97c1a97..1217491 100644
|
||||
--- a/src/event-parse.c
|
||||
+++ b/src/event-parse.c
|
||||
@@ -2311,8 +2311,19 @@ process_entry(struct tep_event *event __maybe_unused, struct tep_print_arg *arg,
|
||||
char *field;
|
||||
char *token;
|
||||
|
||||
- if (read_expected(TEP_EVENT_OP, "->") < 0)
|
||||
- goto out_err;
|
||||
+ type = read_token_item(&token);
|
||||
+ /*
|
||||
+ * Check if REC happens to be surrounded by parenthesis, and
|
||||
+ * return if that's the case, as "(REC)->" is valid.
|
||||
+ * but return TEP_EVENT_ITEM.
|
||||
+ */
|
||||
+ if (type == TEP_EVENT_DELIM && strcmp(token, ")") == 0) {
|
||||
+ *tok = token;
|
||||
+ return TEP_EVENT_ITEM;
|
||||
+ }
|
||||
+
|
||||
+ if (test_type_token(type, token, TEP_EVENT_OP, "->"))
|
||||
+ goto out_free;
|
||||
|
||||
if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)
|
||||
goto out_free;
|
||||
@@ -2338,7 +2349,6 @@ process_entry(struct tep_event *event __maybe_unused, struct tep_print_arg *arg,
|
||||
|
||||
out_free:
|
||||
free_token(token);
|
||||
- out_err:
|
||||
*tok = NULL;
|
||||
return TEP_EVENT_ERROR;
|
||||
}
|
||||
@@ -3033,6 +3043,17 @@ process_paren(struct tep_event *event, struct tep_print_arg *arg, char **tok)
|
||||
if (type == TEP_EVENT_ERROR)
|
||||
goto out_free;
|
||||
|
||||
+ /*
|
||||
+ * If REC is surrounded by parenthesis, the process_arg()
|
||||
+ * will return TEP_EVENT_ITEM with token == ")". In
|
||||
+ * this case, we need to continue processing the item
|
||||
+ * and return.
|
||||
+ */
|
||||
+ if (type == TEP_EVENT_ITEM && strcmp(token, ")") == 0) {
|
||||
+ free_token(token);
|
||||
+ return process_entry(event, arg, tok);
|
||||
+ }
|
||||
+
|
||||
if (test_type_token(type, token, TEP_EVENT_DELIM, ")"))
|
||||
goto out_free;
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,98 +0,0 @@
|
||||
From e9bd314141ee6b4556d9db854bccd34159661ffa Mon Sep 17 00:00:00 2001
|
||||
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
|
||||
Date: Thu, 28 Jan 2021 16:31:35 -0500
|
||||
Subject: [PATCH] libtraceevent: Move plugin_dir define logic to top level
|
||||
Makefile
|
||||
|
||||
The installation location of the plugin directory needs to be passed into
|
||||
the C files via the -DPLUGIN_DIR=".." compiler option. But the logic for
|
||||
that was only in the plugin directory, such that the main library did not
|
||||
know where to find the plugins (as the PLUGIN_DIR macro was not set). This
|
||||
caused the library not to load the plugins for the application.
|
||||
|
||||
By moving the logic to the top level Makefile and exporting the variables,
|
||||
this fixes the issue.
|
||||
|
||||
Link: https://lore.kernel.org/linux-trace-devel/20210128163135.27ae85d5@gandalf.local.home
|
||||
|
||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
||||
---
|
||||
Makefile | 26 ++++++++++++++++++++++++++
|
||||
plugins/Makefile | 24 ------------------------
|
||||
2 files changed, 26 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index e4eba74..11bfe54 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -118,6 +118,32 @@ endif
|
||||
|
||||
LIBS = -ldl
|
||||
|
||||
+set_plugin_dir := 1
|
||||
+
|
||||
+# Set plugin_dir to preffered global plugin location
|
||||
+# If we install under $HOME directory we go under
|
||||
+# $(HOME)/.local/lib/traceevent/plugins
|
||||
+#
|
||||
+# We dont set PLUGIN_DIR in case we install under $HOME
|
||||
+# directory, because by default the code looks under:
|
||||
+# $(HOME)/.local/lib/traceevent/plugins by default.
|
||||
+#
|
||||
+ifeq ($(plugin_dir),)
|
||||
+ifeq ($(prefix),$(HOME))
|
||||
+override plugin_dir = $(HOME)/.local/lib/traceevent/plugins
|
||||
+set_plugin_dir := 0
|
||||
+else
|
||||
+override plugin_dir = $(libdir)/traceevent/plugins
|
||||
+endif
|
||||
+export plugin_dir
|
||||
+endif
|
||||
+
|
||||
+ifeq ($(set_plugin_dir),1)
|
||||
+PLUGIN_DIR = -DPLUGIN_DIR="$(plugin_dir)"
|
||||
+PLUGIN_DIR_SQ = '$(subst ','\'',$(PLUGIN_DIR))'
|
||||
+export PLUGIN_DIR PLUGIN_DIR_SQ
|
||||
+endif
|
||||
+
|
||||
# Append required CFLAGS
|
||||
override CFLAGS += -fPIC
|
||||
override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
|
||||
diff --git a/plugins/Makefile b/plugins/Makefile
|
||||
index e8b8850..b60352d 100644
|
||||
--- a/plugins/Makefile
|
||||
+++ b/plugins/Makefile
|
||||
@@ -41,30 +41,6 @@ libdir_relative ?= $(libdir_relative_tmp)
|
||||
prefix ?= /usr/local
|
||||
libdir = $(prefix)/$(libdir_relative)
|
||||
|
||||
-set_plugin_dir := 1
|
||||
-
|
||||
-# Set plugin_dir to preffered global plugin location
|
||||
-# If we install under $HOME directory we go under
|
||||
-# $(HOME)/.local/lib/traceevent/plugins
|
||||
-#
|
||||
-# We dont set PLUGIN_DIR in case we install under $HOME
|
||||
-# directory, because by default the code looks under:
|
||||
-# $(HOME)/.local/lib/traceevent/plugins by default.
|
||||
-#
|
||||
-ifeq ($(plugin_dir),)
|
||||
-ifeq ($(prefix),$(HOME))
|
||||
-override plugin_dir = $(HOME)/.local/lib/traceevent/plugins
|
||||
-set_plugin_dir := 0
|
||||
-else
|
||||
-override plugin_dir = $(libdir)/traceevent/plugins
|
||||
-endif
|
||||
-endif
|
||||
-
|
||||
-ifeq ($(set_plugin_dir),1)
|
||||
-PLUGIN_DIR = -DPLUGIN_DIR="$(plugin_dir)"
|
||||
-PLUGIN_DIR_SQ = '$(subst ','\'',$(PLUGIN_DIR))'
|
||||
-endif
|
||||
-
|
||||
include ../scripts/Makefile.include
|
||||
|
||||
# copy a bit from Linux kbuild
|
||||
--
|
||||
2.31.1
|
||||
|
Loading…
Reference in new issue