From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751620AbcGOTZ5 (ORCPT ); Fri, 15 Jul 2016 15:25:57 -0400 Received: from mail-db5eur01on0089.outbound.protection.outlook.com ([104.47.2.89]:20234 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751241AbcGOTZz (ORCPT ); Fri, 15 Jul 2016 15:25:55 -0400 X-Greylist: delayed 10880 seconds by postgrey-1.27 at vger.kernel.org; Fri, 15 Jul 2016 15:25:55 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jiri@mellanox.com; Date: Fri, 15 Jul 2016 17:51:10 +0200 From: Jiri Pirko To: Jiri Olsa CC: Arnaldo Carvalho de Melo , "Steven Rostedt (Red Hat)" , lkml , David Ahern , Ingo Molnar , Namhyung Kim , Peter Zijlstra Subject: Re: [PATCH 1/3] perf script python: Fix string vs byte array resolving Message-ID: <20160715155110.GF1983@nanopsycho.orion> References: <1468567797-27564-1-git-send-email-jolsa@kernel.org> <1468567797-27564-2-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1468567797-27564-2-git-send-email-jolsa@kernel.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [84.16.102.26] X-ClientProxiedBy: AM2PR09CA0063.eurprd09.prod.outlook.com (10.160.228.159) To VI1PR05MB1469.eurprd05.prod.outlook.com (10.164.85.27) X-MS-Office365-Filtering-Correlation-Id: be9acecb-cce8-480f-0807-08d3acc7dbcc X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1469;2:6XGtodCeailFlxsPr7kCco1XBiS7i794fqmCq6U6zXfR0dc0u/4OPp4f/Eq4AkPneZPHgMT+j6p09OGSQEKDD0Pstl5Ksfds2fcliJ4iOnmv8fwssEdhyCDh9dtC196os7hd3h7lu9kC6DY2jwjh6u1Iv4FlCk2b03bwyRsBrGDmRPQZj7XJWVk90Cqd2LVZ;3:neIemwMncWAjbIXvX5NU49rDZlrJiqZz/tEL7Jzkl9htTQilIagQVx3MeVFkWZtNdvkeI7iBxMXIaELt4/ycu6f9SDkfJHbQoul13SDvs+5DN5MkqCRkoC267qSZzOm9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1469; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1469;25:80mW9QipyAthBwyl0MKFF+hEP4sZ16xhY8hCuCT6gNKET/cPeHwlhKKE0uLW/tJx1OaxHx7gCui6+5gMhOC0M6x6HRM4r7EDAgUqh1DAwq7LL3gSCiCr8DdkKzpa60p5/FQwpvUJ/QKkl9CYTkHal35/dVrM+dnszzdNLDkUXM57+iDfEzbMZvFH85IeXVvM2PP/9HSIyRznxdBtC0AMJzkH1mYjP5YbcjqFrh9stt4jLKCQUcZSQxgRlZUmbIBvU1pmNw27nrQAi/RBiOTEy9egz1R5cnwIb6Qq0E7bMgQf2q3r8YROKalAw/RM8f3eyGf53IdBFP+iyk8/1hi70O4IkM2p1ptRtzolqN/+2dFyORno5QhbHIVxFQtxcCPW+XTrcV0uRa6ld0c3PCoiOWOQGsrGR/5l6DMKPqy1OCT59+vFJ9ozntBKZ7Fdhnl4LzP1kLF2wc/LoI5D6xK1sV4YeyiL0rBpV6ggD4JRZHvg0IHVcg4eWrNPslDvFXSmytXxcKEhBPpdeVYkGnmmm2EkNiwkGVAWAEK8ICitheMzjpF8OlEFtKizJP9l+vePgp0hSoLSoHHRlLhx67lq4qU6MDqj32BKbzc7burLqnWOIw2O6IV4erzTpdGltV/paHiWcm2+8lFzLayf/fMqcg1xhxRqvOs77nZZNa7DrkpknOGUkXCelR4yJB5cHiK7Lyp428H+3T2/C02Gj9VpfN2ydjbRC6KpAKoWhVl5ubHLR5GHCKnoZp2pHVZiSAYUgMO5ScDwLYfL83anWw+ClUtnXWkR4z1M2VPZ2cEpnCl6EfszFOGZYaYoHqmbl/Gu X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1469;31:Af6p0l/dcTfZdgfE6m+DrAYvc+wxda67cGu8v22qKG1NnW3A/F8+TBRvudjLQhbjR4/UK+ry1ChBQrSfQPkHOC+O1IXOX2SBRWVoV300j3t5ijU4AQMnuYdMMbYwBih3TIqsUijIfK8BuTpaV3Swf3uWfAeU9QuVmh/9+hmoieewmsde6iVINMMFwUwGIzL6/4P4g9sl7HKbMQsIyf3W1A==;20:wcmne6mlRLnRi529GNK18COF+2EZpQpJZmv7R7xjKQA3CdauVrnRSoUpgqpPriA8rYVR6yT4baDnIgT3jwRQ7NmpVCyZxTJqU5ccPrTWJiEX+THY28ceu79aBgt5t6ViEOI7oj+mcAWFk5I07kgLh/Wz3jkebQfkzs15VDmBCCSwxgv9FRBlt6WlDslHUNkUnRgQy1wG90pcQaDIIzht1orQe/uftRqTfopxIZ7wOeJpX4t2ehu88QflTRjdJCxl6N1biDp0EL3BAeYQJvpQ2dR31E0XNM3OinR5tel9lbUFJPhqsNjhLWYNS/MrrYLJlekKckETt2mR9VxsAZaLegJiqTM+0vkfB28iML6u0V0Q47QvWA0gaTEI40c3FIk6qkgUn1pIwD9xLiI3kiuFfv+CgzfxpgbsQMVhnkCbVbBcBQQwTVQXvWHQb9VTr9Szlrhqo+UJkWTolhvZ8tDEVDqXoA0QchjjavsKdKCizQHOlVXCPWAv7O/bzc+N8ozz X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(42068640409301)(84791874153150); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:VI1PR05MB1469;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1469; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1469;4:WN7NK2CfkAiS+LKpF5NNdjdUFxdySyus4yDrjCGycoV8GlSYMNorPF6A3N3KKfydSjA7nAxrB+/S2UZ7MIRM6VRFh8GoRdtMk4qLM2JbPkXcq7umX8CHzWG651CWcIZuSYcieGRgSXAt6q22mL1ck8ttrfETb/8h23IcsSeZLKiIdM7B5rGRXNdy/AiZe3c0Z+PhckCXBCF2Dv7TKKHZqQepZ3x2u9rOyLYHnifGMhJcyE5FDlupFFExa32qEkeJidyMKvtnkVI1XUcpPaZlF7tEQ2qNXlHQdf1cDVErfE7APCz2IY7d3YYdDQhJHNvVRIZFpWp/id2wNt6PDDhCnU7P+7qXKwzbq0cAGq8vk14jnYrUqa9Cl6KyZQfNWG07WGwI+6FsowDmAPMTfk5aG4/9c9pjW49qIXjzoav1gR2+sjNTDfg8AKkPSnEBAMdHmNs2Vv/fdFgpmHdj8v1ZQw== X-Forefront-PRVS: 00046D390F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(51444003)(189002)(199003)(24454002)(77096005)(8676002)(66066001)(586003)(83506001)(42186005)(110136002)(47776003)(23726003)(101416001)(81156014)(4001350100001)(106356001)(86362001)(46406003)(4326007)(54356999)(50466002)(81166006)(97736004)(3846002)(76176999)(189998001)(15975445007)(50986999)(68736007)(2906002)(97756001)(2950100001)(105586002)(33656002)(7846002)(7736002)(9686002)(305945005)(92566002)(1076002)(19580405001)(19580395003)(6116002)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB1469;H:nanopsycho.orion;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR05MB1469;23:IYvTHsJ2e22CH7hIm3V+399oODt/jTld2V87KPpIi?= =?us-ascii?Q?bRpPWImm90KnRbm3NklyPhCxFL2DlF9g7Wpy9R21VqhcqETRY7HakCdn2XdL?= =?us-ascii?Q?+OJGLSwZ2D2pB/3ujXYKJVM6nrSxlkwa1ykugOwa78JjPufDkh0h7xoC4D++?= =?us-ascii?Q?rspzmx2P0MvhcIHE2MZ+x8IX9Ic5KzssccQoUffW1hG06GouznpLFgp0VQED?= =?us-ascii?Q?qEiOAVAz1YVoawcP0YQaoKhVAUBho/EAoQ1hn3LnUcaJwRYVdFJdXLTOX4kO?= =?us-ascii?Q?Z+TOieeCU9Cbt//6mQgWzQadp3GWVHOGia89d+5/ARNUUM1hkXrqW0UU5ah+?= =?us-ascii?Q?h/ZT4jAzla4/sL0wp/No5CTBqlbo9nBoMCYM/j+ZygE1UxF7OKjM3wU95/eB?= =?us-ascii?Q?dOeICORSarqMT3Xaqr4pzVPXZN5kQ5S38jm7i4tzLEhCGxTnX2525FvvOV+a?= =?us-ascii?Q?jvGlA0FFZxKkVSHFsZGhlkXD6OenFjD08OI1EMctCDPQJE56bY+W99K9JgMe?= =?us-ascii?Q?DPIIHeGezgb1ymJv6tHJF5+egJo5fDs+eTw9Hlv+pBZ787XSuBLNEcK+Oy2W?= =?us-ascii?Q?p08LocASwImRSYpKBCwQHegT4GzShh27MfzcfMr3rS6hY2PZmlvg/shAsHcG?= =?us-ascii?Q?9WeYKYNIUFmbaCkR0kW2MOI8LD4aLYqvqlFeFZJ+H4Df/+8i367ibunpU3/f?= =?us-ascii?Q?hirx0if8NdnwwnzU4tjpghuhn4TGAtGvsJhanusV5D/TGwKdH6j7pDzLwIRe?= =?us-ascii?Q?0SPjaRytRgyULpsT03qq6rQiVf9oyjfLc4Fq9vI6rEoFdwBpJlERrVd2cemN?= =?us-ascii?Q?nhQBAXOcSnEa3z5BbNlD0tl4cnib724EHVVVVjBjvsYSk/tqATK0vuN6yiPa?= =?us-ascii?Q?CzU4k1v3ESRmEJ6QcGqZeDFcnr8liZS2t6S7Y7SmK3X6oLI95FI2omIDiIw1?= =?us-ascii?Q?fqncowqM9zZpnYa5npFTa/YcrnhnuiJuUGRCDzFUTzD0e9o5QyjG+55mNCa5?= =?us-ascii?Q?+06iVMby6JM4Ray3ipGNHypL8ItmjFzPVlwAD20o2SW/RexxTzmxJ4Xf7nkN?= =?us-ascii?Q?M3LWbs8PkBeAz26S+fUUoXI0FQHECTsGYrSS969qKCYSSqbay3v4nLKt43Gz?= =?us-ascii?Q?X4tPcDg52IsRucL04BPd/13afIFlJenNbnHyMkrRE+nH7umLm6vPnH2DBAG8?= =?us-ascii?Q?HO+YOpztXrfTT9WtBr0U4pV0DTcDIhXU9BN?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1469;6:mL0Sj1ftsJ2KN8Vv72Wnp2a8W/+GhHUm8fyJI/wiBxhq4/rmWKnlKCzuru9dHfkDZ3sWHPVR6/6ez23rnbism6L4WJQnE93VRRyJakldpcMwUtaX8fteg+RkCmM96RUd3FHJX7U2no6LP8IBMY5IcdjujZgv27Dbwxihiz8PhUeQZmV74Um1pymKLOOOlw/KJ10rvZjhH3yPevJfKIsar9p8hkOENt3i5EQxiUFiOb97DpO+UZy68U9j6NDm+qqOyTvhGWslDp1Z/YT9P5zG89z6Eo6400UzFnW3Kh7v4Lld//xLsoUnQJof3gwDD5b7yp31N8WceEIGCxac++Dzog==;5:e6bGU3xhzRE3NV+aOtvCMPeHQe7sUtkZE+EPVyVmMkdPfoc09pXlZWHil7NqaAjpZFl7dRSKsnjD2d6yPCsE2YTW8cEzI/ZwzEpWUsyHY7ZZ5mMTLJZEt9dZ3W0YKg7IIdjBDRsH5qgE3dm8Wkvblg==;24:tdz/dEbNurUd8iyKeP7DIKT8QvQjPvbfmJKn4A8SL5KusgGJ2xAQcplSBznyIqhmLGXxFBVQgXWFSH6bHEJN6qhbFLVMfrVkRVf2/yrsgWQ=;7:7eLjYBGIi0rPdIJWtncgccgJEiPpJvMaBnXTBPmuT6vz9TIoy30w6kLEy53eeIlJkePe3B2V4OGmL2WS2gf+f7yWZva0c8JfrnMEtDKGZ4DwEt+euepmfYj1kjVVO5x5WVUUKGtU5umW3CZUyUkpFW4T8KQfWh1oB7HaDaWYQrgNBHmIktzZY0WChTHMotGNb+lhuZjtPi7UMN5gXNnh1QsA3KnoNun2HXZAGHqHUWl5Nj8XiqVRKI758BMRdckq SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2016 15:51:17.0398 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1469 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fri, Jul 15, 2016 at 09:29:55AM CEST, jolsa@kernel.org wrote: >Jirka reported that python code returns all arrays as strings. >This makes impossible to get all items for byte array tracepoint >field containing 0x00 value item. > >Fixing this by scanning full length of the array and returning >it as PyByteArray object in case non printable byte is found. > >Cc: Steven Rostedt (Red Hat) >Cc: Jiri Pirko >Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org >Signed-off-by: Jiri Olsa >--- > .../util/scripting-engines/trace-event-python.c | 37 ++++++++++++++++++---- > 1 file changed, 31 insertions(+), 6 deletions(-) > >diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c >index 6ac6b7a33f42..1bc995de5a6d 100644 >--- a/tools/perf/util/scripting-engines/trace-event-python.c >+++ b/tools/perf/util/scripting-engines/trace-event-python.c >@@ -386,6 +386,19 @@ exit: > return pylist; > } > >+static int is_printable_array(char *p, unsigned int len) >+{ >+ unsigned int i; >+ >+ if (p[len - 1] == 0) >+ len--; >+ >+ for (i = 0; i < len - 1; i++) >+ if (!isprint(p[i]) && !isspace(p[i])) >+ return 0; for "AA\1\0" this returns "1" although that should return "0". orig len 4 decremented len 3 for: 0 1 index 2 would not be inspected. Or am I missing something? I think that the for check should be "i < len" Thanks. >+ >+ return 1; >+} > > static void python_process_tracepoint(struct perf_sample *sample, > struct perf_evsel *evsel, >@@ -457,14 +470,26 @@ static void python_process_tracepoint(struct perf_sample *sample, > pydict_set_item_string_decref(dict, "common_callchain", callchain); > } > for (field = event->format.fields; field; field = field->next) { >- if (field->flags & FIELD_IS_STRING) { >- int offset; >+ unsigned int offset, len; >+ unsigned long long val; >+ >+ if (field->flags & FIELD_IS_ARRAY) { >+ offset = field->offset; >+ len = field->size; > if (field->flags & FIELD_IS_DYNAMIC) { >- offset = *(int *)(data + field->offset); >+ val = pevent_read_number(scripting_context->pevent, >+ data + offset, len); >+ offset = val; >+ len = offset >> 16; > offset &= 0xffff; >- } else >- offset = field->offset; >- obj = PyString_FromString((char *)data + offset); >+ } >+ if (field->flags & FIELD_IS_STRING && >+ is_printable_array(data + offset, len)) { >+ obj = PyString_FromString((char *) data + offset); >+ } else { >+ obj = PyByteArray_FromStringAndSize((const char *) data + offset, len); >+ field->flags &= ~FIELD_IS_STRING; >+ } > } else { /* FIELD_IS_NUMERIC */ > obj = get_field_numeric_entry(event, field, data); > } >-- >2.4.11 >