On Mon, 29 Nov 2021 13:26:35 -0800 Beau Belgrave <beaub@xxxxxxxxxxxxxxxxxxx> wrote: > On Mon, Nov 29, 2021 at 03:27:04PM -0500, Steven Rostedt wrote: > > On Mon, 29 Nov 2021 12:15:07 -0800 > > Beau Belgrave <beaub@xxxxxxxxxxxxxxxxxxx> wrote: > > > > > > @@ -3308,19 +3318,23 @@ process_function(struct tep_event *event, struct tep_print_arg *arg, > > > > free_token(token); > > > > return process_int_array(event, arg, tok); > > > > } > > > > - if (strcmp(token, "__get_str") == 0) { > > > > + if (strcmp(token, "__get_str") == 0 || > > > > + strcmp(token, "__get_rel_str") == 0) { > > > > > > Should user_events use __get_rel_str vs __get_str for the print_fmt? > > > Both __dyn_loc and __rel_loc use __get_str currently. > > > > I'm guessing that it should use the get_rel_str(), as get_str() will use > > the absolute offset and not the relative one. Yes, you can see an example in this patch; https://lore.kernel.org/all/163757343050.510314.2876529802471645178.stgit@devnote2/T/#u Thus, the user-event must tell the kernel which is used correctly. > > > > -- Steve > > It appears both cases call into process_str() and set the > TEP_PRINT_STRING field type. > > The TEP_FIELD_IS_RELATIVE bit to advance the offset to a relative position > is within dynamic_offset which is used for TEP_PRINT_STRING field types. Correct. The field type attribute is set in event_read_fields() before this process. > > I'm not sure if this was intentional or if __get_rel_str is an artifact > left behind considering __get_str appears to be doing the same thing? Note that this patch is for libtraceevent, not in-kernel code. In the kernel, for example, your user-event, you must make a flag for each field to identify that is __rel_loc, __data_loc, or just a value. The event filter (and histogram) will parse the "events/*/*/format" file and identify the field is __rel_loc or __data_loc. https://lore.kernel.org/all/163757343050.510314.2876529802471645178.stgit@devnote2/T/#m98591a73fb48e4ac79ed6d2e8eb14a13c69703c8 And __get_str()/__get_rel_str() are used in the event which statically defined (Note that trace_event field itself has no information about the __rel_loc/__data_loc, so print_fmt function for each field must handle that correctly.) Thank you, -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>