From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751825AbcGRMRI (ORCPT ); Mon, 18 Jul 2016 08:17:08 -0400 Received: from mail-db5eur01on0088.outbound.protection.outlook.com ([104.47.2.88]:52991 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751457AbcGRMRG (ORCPT ); Mon, 18 Jul 2016 08:17:06 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jiri@mellanox.com; Date: Mon, 18 Jul 2016 13:44:20 +0200 From: Jiri Pirko To: Jiri Olsa CC: Arnaldo Carvalho de Melo , lkml , David Ahern , Ingo Molnar , Namhyung Kim , Peter Zijlstra , "Steven Rostedt (Red Hat)" Subject: Re: [PATCH 1/3] perf script python: Fix string vs byte array resolving Message-ID: <20160718114420.GI2075@nanopsycho.orion> References: <1468685480-18951-1-git-send-email-jolsa@kernel.org> <1468685480-18951-2-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1468685480-18951-2-git-send-email-jolsa@kernel.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [94.113.120.206] X-ClientProxiedBy: AM2PR09CA0056.eurprd09.prod.outlook.com (10.160.228.152) To VI1PR05MB1470.eurprd05.prod.outlook.com (10.164.85.28) X-MS-Office365-Filtering-Correlation-Id: b41dd302-d003-4b7b-25d1-08d3af00de7d X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1470;2:CT/w5uxon1+CedMuTlFffCKDRoNVSFAOwWuK/kJMpswWHGCtl/hO/lmNuSnGj8iNoX5LLX2nWnJqSuhwohr9h1i7leWmYLUKn/xHcVajbDf8d8uHyB0tIeihCga6TDokSniTgVxc6pBOjMNDowPxraactm+kTgkw+z/jMMCluyyHYRM1tZneTwnN2UkSeWJd;3:2y/UO+3ULNCiXGzdtlwvKmuBMfLsTjkB2crYTrJyU62bJiK47nnuGjiaf7RquwTue3Wy1zaQkbypvJUPSAHShWRoqredi09sKkaVlLjFYLCDvCWxAbzESvabOUhyUOuf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1470; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1470;25:7dOVfuvk1oF+vSTijMQ+52udkrbVVpkhW32KCZjIeRE+xd43GLBIOYT2kVkt4ZqFjRgSYY0QIkG+idC9R1sDI9DAY1zIQtUv1GflGH7bDzRp3jUUaxKU3zRPx0MubR6l4A2BUFophYChgosVP96mt4tEAznDrS6Uqtyx3f6/2xNl3bAVqKHjR4gHFXnsP8a/2HUqJKv48M8iKBOBMCanzaFh3lvVa7d5q6x6QkAzQdsN5+YCDQWbzQTMSE2g13ZaY39QnmRdVPeCWuapXdaPt+krIQrZ/F9qTHumg37kj8e9qCnM5MKtowVaJgkYN+7mfyyIB+KM0ab755hEsWH3MDUD7i+H44x44k3dHpgUiNroBT2EyB6IAlHe0XH8m/FYqcI/Jsgh3b0IakedjbF0vIfnH6N70BGvdPOq9UBraiLW7iXD3MZQhM3gjJ2NpFTblpa3IaZiykqq/23UYueLzc+5IxaIwFcoy36PFlM3CKV0VF8p1v4WuTX8hZySCqp/wxJHizlnkmoWgD37ZnAj6ZCvYElqsvsIx4jcUMAOZD7aF/hPRmlpv07zn2wvs/da5AbKwgkEDlmjS+aKf8xEqqi7dbhhOBpbI1jJio2GKQduPq1Pq86Qx26W8CX66L3kC7OOnuuj+YodcDPasXy9XO+ZbPlLFxlmw3eXjpqMISrTwPkMbb+z1Ifhz86Ut7s5E9h/F5znLTUJ7xgLDUYQlD8rloeQq1NWwbJddxWgsfPCRnLz65OxDw9MvLOWaV6oqU/o1OwRAhL581nSX3ZEHEh6xSPTpTXTHHCnZhrIgLCKT85ViypKBP/iphtIPiwf X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1470;31:HFUrSylYTugaB3jVvdTKX1UoU/15a6miIgDN/UkcKrL7h+hnDWtPfP/Hb5qd/omqbdeQ0beoDcERRSslvC5arsLTZ2sR7WFAkvq/p4+NwuY8Q69kOR0J+D+W+8ujk/5m+nwGmGnU2lopjCssckiWehb7ouTzpoYvcu1eXclce+0rhvTrWfI45qB18kfZ5y9bWbHOuHe0lJoZEkOBNWwNag==;20:P5w5YV4xYgALfucR0FrkBKl54yjGmjB608ilt0b2V4lKqwtFWaDkx9Bx4N5rcEHHCBGYjjKcEPgBQEttjUPr6Yb/2Xy+PuClPN2KmXfs8JFL+CseF0dDqvRqWT8KKL7yws/1l9DyVb8RHhWFFJiMis9IRczbCHYUf+gT2rXdMEnf3PZar5EkSRXV4BIR5QzNyNqnJR0pc7jdBet8MjO8zLXmP3IUAah006w2tRntjW+rewqBulI/cjzJZWoVAX2l6KQ6w0OHgtCtV72n9AaNoAoETjzrJ/VJdiShW5legf160tG4mIbvwWNVq+5pIKUhSMrcU1w2q0o2YWO2mX30BauXN0zU55/ZffRuszlIQrivvc5PXOCI/SkcHaVZmcFyvyCCOcxiyn3THAuDMketvxgUPM695qQMFfs1gELlPcCryIpG9cduJTHkP3C6lONXxX7FzKt7LmIHrzpUiELXX8bKU4++t9dbWACvsRz/NZliZmBZG6C5hof9orYfirGn 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)(5005006)(8121501046)(10201501046)(3002001)(6055026);SRVR:VI1PR05MB1470;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1470; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1470;4:J90xKjXmRLpAMg2XRc6iFWTM9xMtT2mPfgMU//oLmurAaTp+h1x5oe5AgZM7MNtImE52794969BrAzY3yprP3VcOl3ggjDcRzoJ7a+t2F6j8DPn+6LmRrEKZj0psxjkyha+xPx9C+9Ze7XnlpdfCMY+wSjnOqXiCc/BjbYiVGFufwiTu0etIYofUsD/oR6phAR+izdw7YRqZb0jf2rp+aEQA5PQjNBPgfVulzpod49BEsngv5IGE6eMfQhsf16/As6HdgmgHXRFB89+XX6b4DxNpx+bAoRZuq4w/zz6AKIngt9SvgrMl7/29WGniB3Iq49PW7v1eVDJHAxP5GorusMseg6bg5odYgGP10z7+4yY8D/HPuSWMe51tCDSVOjjtYuzqmxoZMdtbsc4nJ36FmP+hm+/3W687WEXTWDD2WAAiFB07Jv5qp+r8bIyFj6ZGdEe+d7uH2s14NfbKHLXDaA== X-Forefront-PRVS: 00073DB75F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(199003)(24454002)(189002)(101416001)(50466002)(2906002)(106356001)(33656002)(46406003)(81156014)(15975445007)(23726003)(92566002)(77096005)(81166006)(50986999)(586003)(3846002)(19580395003)(54356999)(19580405001)(83506001)(2950100001)(6116002)(8676002)(42186005)(1076002)(86362001)(4326007)(305945005)(76176999)(7736002)(7846002)(68736007)(66066001)(47776003)(97756001)(189998001)(105586002)(9686002)(4001350100001)(97736004)(110136002)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB1470;H:nanopsycho.orion;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR05MB1470;23:5tb5iZMUS+fcGhLxoJaRNbNDzm8TnIprmol3AU/rn?= =?us-ascii?Q?f6d7VkZa/LIVz8Ohh8oKQYIa1mlgMSAAtOvJDaMH1Io2e1X05t18E6dfR4El?= =?us-ascii?Q?kNTRIHUg7Fr3CFnqfqkP6kDmYRbywHRmtSXzGOMIuohbdEc+FDbebQ1Uf+9j?= =?us-ascii?Q?2CokGDG3h/WawMB5aB9bf3ad38cWgg5E7G6Kq+gypdYchhnp/U0Gma0T0Gnx?= =?us-ascii?Q?j04nKx64N2NP66axj7ReLYjd7/QwuHy5VnZ3zXgTPzgFCWrZlwHU25qUPEqg?= =?us-ascii?Q?aRk1tfMd12PbH8W5xMfvzXG8lcn2PTzs4bCwfb4ptyl8DRC5QvYkIjZHd660?= =?us-ascii?Q?nmtTEXjl0qjtbwKACrdxQspy7uepY4WgLGqlylZ1TnM6w72CcSYbN9JXAweR?= =?us-ascii?Q?SeCktcIJ76Do1XDMOk1sJ77dyazDP7qJl7nbhii+PZ81af2fGvtGOpwgeGrg?= =?us-ascii?Q?Zdsbo013w6PAeMv4NuzwmFkV2r6icsmD/iL2lyS680qRxi88DSJ84p9osJTU?= =?us-ascii?Q?DySOdvMaB/W8x6ltCBb2fW7SAHwCO9fCKtfSlPBVNQqXQFuHb8WjNkzP5lFm?= =?us-ascii?Q?IS+QIyzvVaQqOE2AHI4VeyKt68CfvanVu03al3PLLocgbRDvCOHrxzrm0+Ig?= =?us-ascii?Q?iHuDKTuyb3KIcOuigXbF7NLGjpLPrOlTsvgKLBLly+xcveeT06XHjndaxjTu?= =?us-ascii?Q?yOt1MGKcidhEfXmVrbX0Ay80cPHqvup/dudhFFRLC9NoBWtNmUtF/kHZDSYc?= =?us-ascii?Q?TNBUGO8oD3RdQhUybvl0xaRvw9mZsNr5TVl/9+Dq6S0uc8FQbrSbbjPFKhWF?= =?us-ascii?Q?IBWByr47t9/JYaaF6/5K9CrWyLPmSUagJf9VdQxjD8cK+/5txcc3ieRIIpvo?= =?us-ascii?Q?hEeVsd0LPcwtVW49usEv001nPrAOIr2iU7q41B5VKMLvA5phimZeTPxHGSZx?= =?us-ascii?Q?t6/2PzcugrTnu1rVrrBHOaFbicJIYQ/BgpYn6ymRmXL0IoKdxk7peS+0ite2?= =?us-ascii?Q?7Os9IMA621jl7yijDlOx7PY2rhgpMvm92qspR4Vl+593qk2hc7RbeMC43l6U?= =?us-ascii?Q?VjF7BiO2nBaXN+Dr/2Xn9IguUDBdo4z7PYZ/XTH96RdA7xelnSrxyLRjcvOU?= =?us-ascii?Q?aY/UkWQx+gn09SPaC9uxNOn/0Y5J4VH1K15F8nEjpE+HpcoH0JCCHJJu8POv?= =?us-ascii?Q?IfAXKCX8FwNjLY=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1470;6:IARVsCEbuhGtrWq0e9yIKMkONty+/j2GVZXtGbqClR5rV/fomYVgTeulSWeqwm8KrZgeXgbwP+W1XCbMdO8li1qfWEPgjYS3um1DYfGDoid1+5VXXD87DqLjnsu2dBUBlqLC89s69Y3KywQfyN8epPZmSzhiiFJqlbdPDb1UluI48Ae+DtT31u9kiYhFWbKY9NaI+tt0EIlluAQiQxONZ8JWUhEm9rl92f1jFZzrYXKDMh9nLfGSvq2AIxC8pDj80eMUDxEfislZ59IkC7Yz24PJyhUFXqxJ2BEkzlURh2fn5VB2G/QyvcmDwEvGJiVvLFNbLNYjo9rEz8r2gTEjng==;5:JaRgW/6sz4LacF9Xj6QY3PkJ8i24DFbvSIEIirEwGUwHHqPLmwEf4fN/r9H6bUIJHjMY8Hy7p8CeheB58BhtwHHEDWGOMJU9cRlhE+ntO3avHgNiANCZcuOWtA3Kn/6Zqlkz2a2Fsqx4G7Z3rNPxwQ==;24:jHs88pBjIWFqrMAUdvPmgxKRR/vFNW6ivotPZE2MclTZl4PfqpuT/mc/IcFPcidqNbbG8YIe62uv7lDVsoj5OZBIgIzxsKual5LU/5LFm/Q=;7:pKVtwvjYe1n6BM2F8RukbJplNAzuNG9GYGXJtECeGNHmKkSVGiCELTnsWaTpVnz4qCu+IH97Jhm9ZK3bpMQorSXVk1TTv29wTFQj4Vdd1Ffw0+gNJbc6Z2jlG4FJwoddWGrAYhVzoj2uJzgWDXBPw6zTkPYPMZ27a0rchA4Veld53eMGLvQ9f2HAl26YDvejT7HP091QqhlIcszVp2WmoF2USsODF8lsOvpES1wfGOyciaab/dFD3oyWx42/bSs0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2016 11:44:25.0851 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1470 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sat, Jul 16, 2016 at 06:11:18PM 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. > >Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org >Signed-off-by: Jiri Olsa Tested-by: Jiri Pirko >--- > .../util/scripting-engines/trace-event-python.c | 39 ++++++++++++++++++---- > 1 file changed, 33 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..7bd6da80533e 100644 >--- a/tools/perf/util/scripting-engines/trace-event-python.c >+++ b/tools/perf/util/scripting-engines/trace-event-python.c >@@ -386,6 +386,21 @@ exit: > return pylist; > } > >+static int is_printable_array(char *p, unsigned int len) >+{ >+ unsigned int i; >+ >+ if (!p || !len || p[len - 1] != 0) >+ return 0; >+ >+ len--; >+ >+ for (i = 0; i < len; i++) { >+ if (!isprint(p[i]) && !isspace(p[i])) >+ return 0; >+ } >+ return 1; >+} > > static void python_process_tracepoint(struct perf_sample *sample, > struct perf_evsel *evsel, >@@ -457,14 +472,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 >