From: "Steven Rostedt (Google)" <rostedt@xxxxxxxxxxx> It appears that trace-cmd 2.9.6 referenced the tep_print_arg_string to get to the offset, which was removed by libtraceevent commit 512d7be1 ("libtraceevent: Add __rel_loc relative location attribute support"). Add the offset back to both tep_print_arg_string and to tep_print_arg_bitmask (yeah, it adds a hole in the structure), for backward compatibility. Reported-by: Vitaly Chikunov <vt@xxxxxxxxxxxx> Fixes: 512d7be1 ("libtraceevent: Add __rel_loc relative location attribute support") Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=215521 Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> --- include/traceevent/event-parse.h | 2 ++ src/event-parse.c | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/traceevent/event-parse.h b/include/traceevent/event-parse.h index 27cba06f55cb..68b2f4383b42 100644 --- a/include/traceevent/event-parse.h +++ b/include/traceevent/event-parse.h @@ -154,11 +154,13 @@ struct tep_print_arg_atom { struct tep_print_arg_string { char *string; + int offset; // for backward compatibility struct tep_format_field *field; }; struct tep_print_arg_bitmask { char *bitmask; + int offset; // for backward compatibility struct tep_format_field *field; }; diff --git a/src/event-parse.c b/src/event-parse.c index d3e43e5c11f8..2b346a5de16e 100644 --- a/src/event-parse.c +++ b/src/event-parse.c @@ -3135,6 +3135,7 @@ process_str(struct tep_event *event __maybe_unused, struct tep_print_arg *arg, arg->type = TEP_PRINT_STRING; arg->string.string = token; + arg->string.offset = -1; arg->string.field = NULL; if (read_expected(TEP_EVENT_DELIM, ")") < 0) @@ -3164,6 +3165,7 @@ process_bitmask(struct tep_event *event __maybe_unused, struct tep_print_arg *ar arg->type = TEP_PRINT_BITMASK; arg->bitmask.bitmask = token; + arg->bitmask.offset = -1; arg->bitmask.field = NULL; if (read_expected(TEP_EVENT_DELIM, ")") < 0) @@ -4444,8 +4446,10 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, case TEP_PRINT_TYPE: break; case TEP_PRINT_STRING: { - if (!arg->string.field) + if (!arg->string.field) { arg->string.field = tep_find_any_field(event, arg->string.string); + arg->string.offset = arg->string.field->offset; + } if (!arg->string.field) break; dynamic_offset_field(tep, arg->string.field, data, size, &offset, &len); @@ -4459,8 +4463,10 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, print_str_to_seq(s, format, len_arg, arg->string.string); break; case TEP_PRINT_BITMASK: { - if (!arg->bitmask.field) + if (!arg->bitmask.field) { arg->bitmask.field = tep_find_any_field(event, arg->bitmask.bitmask); + arg->bitmask.offset = arg->bitmask.field->offset; + } if (!arg->bitmask.field) break; dynamic_offset_field(tep, arg->bitmask.field, data, size, &offset, &len); -- 2.33.0