• Masami Hiramatsu's avatar
    tracing: Support __rel_loc relative dynamic data location attribute · 05770dd0
    Masami Hiramatsu authored
    Add '__rel_loc' new dynamic data location attribute which encodes
    the data location from the next to the field itself.
    
    The '__data_loc' is used for encoding the dynamic data location on
    the trace event record. But '__data_loc' is not useful if the writer
    doesn't know the event header (e.g. user event), because it records
    the dynamic data offset from the entry of the record, not the field
    itself.
    
    This new '__rel_loc' attribute encodes the data location relatively
    from the next of the field. For example, when there is a record like
    below (the number in the parentheses is the size of fields)
    
     |header(N)|common(M)|fields(K)|__data_loc(4)|fields(L)|data(G)|
    
    In this case, '__data_loc' field will be
    
     __data_loc = (G << 16) | (N+M+K+4+L)
    
    If '__rel_loc' is used, this will be
    
     |header(N)|common(M)|fields(K)|__rel_loc(4)|fields(L)|data(G)|
    
    where
    
     __rel_loc = (G << 16) | (L)
    
    This case shows L bytes after the '__rel_loc' attribute  field,
    if there is no fields after the __rel_loc field, L must be 0.
    
    This is relatively easy (and no need to consider the kernel header
    change) when the event data fields are composed by user who doesn't
    know header and common fields.
    
    Link: https://lkml.kernel.org/r/163757341258.510314.4214431827833229956.stgit@devnote2
    
    Cc: Beau Belgrave <beaub@linux.microsoft.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    05770dd0
trace.h 62.6 KB