Received: by 10.213.65.68 with SMTP id h4csp267416imn; Tue, 13 Mar 2018 03:50:48 -0700 (PDT) X-Google-Smtp-Source: AG47ELsGLRD02T15EX9nwr+znpRt4EbcsWmXLiDxgs53dhnlmS76liH52iwaNsqMvnhSmVED2nvJ X-Received: by 10.101.73.7 with SMTP id p7mr122021pgs.250.1520938248859; Tue, 13 Mar 2018 03:50:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520938248; cv=none; d=google.com; s=arc-20160816; b=b0ywHmryCvfV8U8cCn0i0KDotdmG7Q0Jo1tMyb9j958DohIzpRpNR8P1gcsZ8PiM79 wbfxcEE9PiM7DTh+24fBrhXvKurxfGxsbEdeM4lJkThTpRbpy0ZnlSYO5A1dcAThF7IG 4UWBZxucnCCSMrU0tqKWmMaiY2A7Har5nXqnZ2IBeCfYcDtMu0CSS+yXmVhexNJvxW2P UNxSw0aGKkDWyBix5x6PfjV0vqoEVdr2H1NJahQy/LOmfPcjhLfnV0HKGIUHAPV4z2B8 J2LJmuTLzBROrfS6FyuTQiQuKimvrP1moFPLB58CC/DqhUwYSgAOa8ONik9IQRfiJVcm w2FQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=gNWMls0ubW1umLDf137S8xeserH6IVGXrVJ4+3fC92Y=; b=Yma8Py/8LNSImJV+ixEnUzBtL72ZOjiGijL2H4FW+HoKGashZ9Sw6xM0y+CcTzRv6b K88hQ0bsGaa5A7CTdsXOWHJB5a/7mYvJx8hVOnOoCNRIzSiJIMIaJkyel8ttDq54kbQB KHQDT9zc4sN79dVNyjPhD9KLN2UdAWYDEU+0ezKwlSl0AzRFtpbSEwJrQbb3p//oqSBx k4E+ce3MaPkria1hvSpjr7PGo2AaT4jXvrR5UCESP3znL/PCshBoVnI4vovOLwe34BBO mcFBWujfMLCoDo+8g47gNOVm7BTTzlwz8j+i58tJmK6co2WPhyt1gyedTwxGLIcIhJda 6LRQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q61-v6si13361plb.729.2018.03.13.03.50.34; Tue, 13 Mar 2018 03:50:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932770AbeCMKsc (ORCPT + 99 others); Tue, 13 Mar 2018 06:48:32 -0400 Received: from mga11.intel.com ([192.55.52.93]:4935 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932514AbeCMKsb (ORCPT ); Tue, 13 Mar 2018 06:48:31 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Mar 2018 03:48:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,464,1515484800"; d="scan'208";a="24776357" Received: from gvt-dell.bj.intel.com (HELO gvt-dell-host.bj.intel.com) ([10.238.154.59]) by orsmga008.jf.intel.com with ESMTP; 13 Mar 2018 03:48:28 -0700 From: changbin.du@intel.com To: acme@kernel.org, jolsa@redhat.com Cc: peterz@infradead.org, mingo@redhat.com, namhyung@kernel.org, yan.y.zhao@intel.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Changbin Du Subject: [PATCH] perf trace: __print_array should print hex format instead of dec Date: Tue, 13 Mar 2018 18:39:17 +0800 Message-Id: <1520937557-24895-1-git-send-email-changbin.du@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Changbin Du The token '__print_array' is to print the array in hex format, but not decimal numbers. The implementation of __print_array in kernel side is: __print_array()->trace_print_array_seq() This patch align the perf's behavior with kernel so we have a consistent event format. Reported-by: Zhao Yan Signed-off-by: Changbin Du --- tools/lib/traceevent/event-parse.c | 60 +++++++++++----------- tools/lib/traceevent/event-parse.h | 6 +-- .../perf/util/scripting-engines/trace-event-perl.c | 8 +-- .../util/scripting-engines/trace-event-python.c | 8 +-- 4 files changed, 42 insertions(+), 40 deletions(-) diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index e5f2acb..d9f770c 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -835,10 +835,10 @@ static void free_arg(struct print_arg *arg) free_arg(arg->hex.field); free_arg(arg->hex.size); break; - case PRINT_INT_ARRAY: - free_arg(arg->int_array.field); - free_arg(arg->int_array.count); - free_arg(arg->int_array.el_size); + case PRINT_ARRAY: + free_arg(arg->array.field); + free_arg(arg->array.count); + free_arg(arg->array.el_size); break; case PRINT_TYPE: free(arg->typecast.type); @@ -2669,25 +2669,25 @@ static enum event_type process_int_array(struct event_format *event, struct print_arg *arg, char **tok) { memset(arg, 0, sizeof(*arg)); - arg->type = PRINT_INT_ARRAY; + arg->type = PRINT_ARRAY; - if (alloc_and_process_delim(event, ",", &arg->int_array.field)) + if (alloc_and_process_delim(event, ",", &arg->array.field)) goto out; - if (alloc_and_process_delim(event, ",", &arg->int_array.count)) + if (alloc_and_process_delim(event, ",", &arg->array.count)) goto free_field; - if (alloc_and_process_delim(event, ")", &arg->int_array.el_size)) + if (alloc_and_process_delim(event, ")", &arg->array.el_size)) goto free_size; return read_token_item(tok); free_size: - free_arg(arg->int_array.count); - arg->int_array.count = NULL; + free_arg(arg->array.count); + arg->array.count = NULL; free_field: - free_arg(arg->int_array.field); - arg->int_array.field = NULL; + free_arg(arg->array.field); + arg->array.field = NULL; out: *tok = NULL; return EVENT_ERROR; @@ -3564,7 +3564,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg break; case PRINT_FLAGS: case PRINT_SYMBOL: - case PRINT_INT_ARRAY: + case PRINT_ARRAY: case PRINT_HEX: case PRINT_HEX_STR: break; @@ -4015,44 +4015,45 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, } break; - case PRINT_INT_ARRAY: { + case PRINT_ARRAY: { void *num; int el_size; - if (arg->int_array.field->type == PRINT_DYNAMIC_ARRAY) { + if (arg->array.field->type == PRINT_DYNAMIC_ARRAY) { unsigned long offset; struct format_field *field = - arg->int_array.field->dynarray.field; + arg->array.field->dynarray.field; offset = pevent_read_number(pevent, data + field->offset, field->size); num = data + (offset & 0xffff); } else { - field = arg->int_array.field->field.field; + field = arg->array.field->field.field; if (!field) { - str = arg->int_array.field->field.name; + str = arg->array.field->field.name; field = pevent_find_any_field(event, str); if (!field) goto out_warning_field; - arg->int_array.field->field.field = field; + arg->array.field->field.field = field; } num = data + field->offset; } - len = eval_num_arg(data, size, event, arg->int_array.count); + len = eval_num_arg(data, size, event, arg->array.count); el_size = eval_num_arg(data, size, event, - arg->int_array.el_size); + arg->array.el_size); + trace_seq_putc(s, '{'); for (i = 0; i < len; i++) { if (i) trace_seq_putc(s, ' '); if (el_size == 1) { - trace_seq_printf(s, "%u", *(uint8_t *)num); + trace_seq_printf(s, "0x%x", *(uint8_t *)num); } else if (el_size == 2) { - trace_seq_printf(s, "%u", *(uint16_t *)num); + trace_seq_printf(s, "0x%x", *(uint16_t *)num); } else if (el_size == 4) { - trace_seq_printf(s, "%u", *(uint32_t *)num); + trace_seq_printf(s, "0x%x", *(uint32_t *)num); } else if (el_size == 8) { - trace_seq_printf(s, "%"PRIu64, *(uint64_t *)num); + trace_seq_printf(s, "0x%"PRIx64, *(uint64_t *)num); } else { trace_seq_printf(s, "BAD SIZE:%d 0x%x", el_size, *(uint8_t *)num); @@ -4061,6 +4062,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, num += el_size; } + trace_seq_putc(s, '}'); break; } case PRINT_TYPE: @@ -5795,13 +5797,13 @@ static void print_args(struct print_arg *args) print_args(args->hex.size); printf(")"); break; - case PRINT_INT_ARRAY: + case PRINT_ARRAY: printf("__print_array("); - print_args(args->int_array.field); + print_args(args->array.field); printf(", "); - print_args(args->int_array.count); + print_args(args->array.count); printf(", "); - print_args(args->int_array.el_size); + print_args(args->array.el_size); printf(")"); break; case PRINT_STRING: diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 0c03538..6ae2e8b 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h @@ -249,7 +249,7 @@ struct print_arg_hex { struct print_arg *size; }; -struct print_arg_int_array { +struct print_arg_array { struct print_arg *field; struct print_arg *count; struct print_arg *el_size; @@ -283,7 +283,7 @@ enum print_arg_type { PRINT_FLAGS, PRINT_SYMBOL, PRINT_HEX, - PRINT_INT_ARRAY, + PRINT_ARRAY, PRINT_TYPE, PRINT_STRING, PRINT_BSTRING, @@ -305,7 +305,7 @@ struct print_arg { struct print_arg_flags flags; struct print_arg_symbol symbol; struct print_arg_hex hex; - struct print_arg_int_array int_array; + struct print_arg_array array; struct print_arg_func func; struct print_arg_string string; struct print_arg_bitmask bitmask; diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c index 7b79c41..112d627 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -224,10 +224,10 @@ static void define_event_symbols(struct event_format *event, define_event_symbols(event, ev_name, args->hex.field); define_event_symbols(event, ev_name, args->hex.size); break; - case PRINT_INT_ARRAY: - define_event_symbols(event, ev_name, args->int_array.field); - define_event_symbols(event, ev_name, args->int_array.count); - define_event_symbols(event, ev_name, args->int_array.el_size); + case PRINT_ARRAY: + define_event_symbols(event, ev_name, args->array.field); + define_event_symbols(event, ev_name, args->array.count); + define_event_symbols(event, ev_name, args->array.el_size); break; case PRINT_BSTRING: case PRINT_DYNAMIC_ARRAY: diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index ea07088..fb24f83 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -270,10 +270,10 @@ static void define_event_symbols(struct event_format *event, define_event_symbols(event, ev_name, args->hex.field); define_event_symbols(event, ev_name, args->hex.size); break; - case PRINT_INT_ARRAY: - define_event_symbols(event, ev_name, args->int_array.field); - define_event_symbols(event, ev_name, args->int_array.count); - define_event_symbols(event, ev_name, args->int_array.el_size); + case PRINT_ARRAY: + define_event_symbols(event, ev_name, args->array.field); + define_event_symbols(event, ev_name, args->array.count); + define_event_symbols(event, ev_name, args->array.el_size); break; case PRINT_STRING: break; -- 2.7.4