Re: [PATCH v2] libtraceevent: Add __rel_loc relative location attribute support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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>



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux