lkml.org 
[lkml]   [2015]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/10] tools lib traceevent: Factor out and export print_event_field[s]
    Date
    The print_event_field() and print_event_field() are to print basic
    information of a given field or event without the print format. They'll
    be used by dynamic sort keys later.

    Cc: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    ---
    tools/lib/traceevent/event-parse.c | 125 ++++++++++++++++++++-----------------
    tools/lib/traceevent/event-parse.h | 4 ++
    2 files changed, 70 insertions(+), 59 deletions(-)

    diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
    index 68276f35e323..1b43f2b9aebe 100644
    --- a/tools/lib/traceevent/event-parse.c
    +++ b/tools/lib/traceevent/event-parse.c
    @@ -4735,73 +4735,80 @@ static int is_printable_array(char *p, unsigned int len)
    return 1;
    }

    -static void print_event_fields(struct trace_seq *s, void *data,
    - int size __maybe_unused,
    - struct event_format *event)
    +void print_event_field(struct trace_seq *s, void *data,
    + struct format_field *field)
    {
    - struct format_field *field;
    unsigned long long val;
    unsigned int offset, len, i;
    -
    - field = event->format.fields;
    - while (field) {
    - trace_seq_printf(s, " %s=", field->name);
    - if (field->flags & FIELD_IS_ARRAY) {
    - offset = field->offset;
    - len = field->size;
    - if (field->flags & FIELD_IS_DYNAMIC) {
    - val = pevent_read_number(event->pevent, data + offset, len);
    - offset = val;
    - len = offset >> 16;
    - offset &= 0xffff;
    - }
    - if (field->flags & FIELD_IS_STRING &&
    - is_printable_array(data + offset, len)) {
    - trace_seq_printf(s, "%s", (char *)data + offset);
    - } else {
    - trace_seq_puts(s, "ARRAY[");
    - for (i = 0; i < len; i++) {
    - if (i)
    - trace_seq_puts(s, ", ");
    - trace_seq_printf(s, "%02x",
    - *((unsigned char *)data + offset + i));
    - }
    - trace_seq_putc(s, ']');
    - field->flags &= ~FIELD_IS_STRING;
    - }
    + struct pevent *pevent = field->event->pevent;
    +
    + if (field->flags & FIELD_IS_ARRAY) {
    + offset = field->offset;
    + len = field->size;
    + if (field->flags & FIELD_IS_DYNAMIC) {
    + val = pevent_read_number(pevent, data + offset, len);
    + offset = val;
    + len = offset >> 16;
    + offset &= 0xffff;
    + }
    + if (field->flags & FIELD_IS_STRING &&
    + is_printable_array(data + offset, len)) {
    + trace_seq_printf(s, "%s", (char *)data + offset);
    } else {
    - val = pevent_read_number(event->pevent, data + field->offset,
    - field->size);
    - if (field->flags & FIELD_IS_POINTER) {
    - trace_seq_printf(s, "0x%llx", val);
    - } else if (field->flags & FIELD_IS_SIGNED) {
    - switch (field->size) {
    - case 4:
    - /*
    - * If field is long then print it in hex.
    - * A long usually stores pointers.
    - */
    - if (field->flags & FIELD_IS_LONG)
    - trace_seq_printf(s, "0x%x", (int)val);
    - else
    - trace_seq_printf(s, "%d", (int)val);
    - break;
    - case 2:
    - trace_seq_printf(s, "%2d", (short)val);
    - break;
    - case 1:
    - trace_seq_printf(s, "%1d", (char)val);
    - break;
    - default:
    - trace_seq_printf(s, "%lld", val);
    - }
    - } else {
    + trace_seq_puts(s, "ARRAY[");
    + for (i = 0; i < len; i++) {
    + if (i)
    + trace_seq_puts(s, ", ");
    + trace_seq_printf(s, "%02x",
    + *((unsigned char *)data + offset + i));
    + }
    + trace_seq_putc(s, ']');
    + field->flags &= ~FIELD_IS_STRING;
    + }
    + } else {
    + val = pevent_read_number(pevent, data + field->offset,
    + field->size);
    + if (field->flags & FIELD_IS_POINTER) {
    + trace_seq_printf(s, "0x%llx", val);
    + } else if (field->flags & FIELD_IS_SIGNED) {
    + switch (field->size) {
    + case 4:
    + /*
    + * If field is long then print it in hex.
    + * A long usually stores pointers.
    + */
    if (field->flags & FIELD_IS_LONG)
    - trace_seq_printf(s, "0x%llx", val);
    + trace_seq_printf(s, "0x%x", (int)val);
    else
    - trace_seq_printf(s, "%llu", val);
    + trace_seq_printf(s, "%d", (int)val);
    + break;
    + case 2:
    + trace_seq_printf(s, "%2d", (short)val);
    + break;
    + case 1:
    + trace_seq_printf(s, "%1d", (char)val);
    + break;
    + default:
    + trace_seq_printf(s, "%lld", val);
    }
    + } else {
    + if (field->flags & FIELD_IS_LONG)
    + trace_seq_printf(s, "0x%llx", val);
    + else
    + trace_seq_printf(s, "%llu", val);
    }
    + }
    +}
    +
    +void print_event_fields(struct trace_seq *s, void *data,
    + int size __maybe_unused, struct event_format *event)
    +{
    + struct format_field *field;
    +
    + field = event->format.fields;
    + while (field) {
    + trace_seq_printf(s, " %s=", field->name);
    + print_event_field(s, data, field);
    field = field->next;
    }
    }
    diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h
    index 6fc83c7edbe9..600c73277a6f 100644
    --- a/tools/lib/traceevent/event-parse.h
    +++ b/tools/lib/traceevent/event-parse.h
    @@ -705,6 +705,10 @@ struct cmdline *pevent_data_pid_from_comm(struct pevent *pevent, const char *com
    struct cmdline *next);
    int pevent_cmdline_pid(struct pevent *pevent, struct cmdline *cmdline);

    +void print_event_field(struct trace_seq *s, void *data,
    + struct format_field *field);
    +void print_event_fields(struct trace_seq *s, void *data,
    + int size __maybe_unused, struct event_format *event);
    void pevent_event_info(struct trace_seq *s, struct event_format *event,
    struct pevent_record *record);
    int pevent_strerror(struct pevent *pevent, enum pevent_errno errnum,
    --
    2.6.4


    \
     
     \ /
      Last update: 2015-12-15 17:01    [W:4.182 / U:1.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site