From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00049.outbound.protection.outlook.com [40.107.0.49]) by sourceware.org (Postfix) with ESMTPS id 84523382EA23 for ; Fri, 26 Aug 2022 10:35:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 84523382EA23 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jMeUYWxfsYT33GGBCIoV+cwgWrhNY8dtqBxNG9yF6y2kASyBPpCz5ENv80zK5ITtenZna3CQbw89cYE8RLIxJUCRpt55pA31l3Kle9r9CgzmSvaZ2u95AvNMsgBKbNSlsn25FNRrgYX0/ihV4HsEYzmqyR/9oDK3GWG6fmFGzWrzhZFu1HN2PFXyvoyAooywVltPFvJHxL3CQITdwjkyHf3mayNsG8swLO7Z9DNXfJv2gYLwb5bEuFvOfeUrE23WocKghQvUkZuN1XgcLk3gCO6m02MG6PSEI72T83+aoDuQtjGXSqmIBWe5hg/6NlZdE0tLEJPFu+QzhLSQKH+OOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZkVm7pJ1U5PwitMN92TyBefwnFUmMQn8F5ZviJGuJs8=; b=d7D5IzkRE8CO8g8CGFlvVqzKJC4phvWBvQtEWFRN1LD22SmA8N8LLT3rZmWUDBI+X9F0t+uZgHfwPWPB6hyurNOhVVE/tOUZ8DhQM5falKSazUg3HYto1weZYPOjRwMRhXRdqWIoIkimO3u2SkHTBbuOqm82nsCJVjfph4LvK9Zs2K4NgIIL8GVdZRqaSHsgbe2vKrk9yJqjs6l0Uf1JR7DokpF7CMRJBpv97FQDUhcsTngBH5aUiYG/tHx/VudASlUoo4KNZJb84yXwM1sBMNUY2+33okOKqS0qs615NpvbR8Afo2I0goIOGjwSlRbKLgNrAy/9fPjPq8x3JAQtBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZkVm7pJ1U5PwitMN92TyBefwnFUmMQn8F5ZviJGuJs8=; b=qCmkyKYFOkEW36lKz8B/IQpiYCPQLKiVqc6V2Gi2svjDYL6TO4upgaC/AiEni2EQ4qHwVPlxQsnvDK7x2gJhfqrh3fDVa7IKiFiL6FBY3/h7oUSHYVfPlh1id39RdEsRgE2dK/aKWLrmyFe7K6kGQCdQ9Ign46ZDlnloczvvtu7xcZLbBeCJ7c/G+f06TTbWZCba7WNXTZaVmImnX9zCxPAm59F57S16T8WTCmj81g/Z5oPGi736HvtqLsdd3jZN6nCCTHOJIc1JTLCEBpqf5euPf0fBWP5W6rh4pS8RYGsvxwe0y/nTE3+Xp2Qy81e3744bdlml30rPnHmkmj8+NQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM8PR04MB7473.eurprd04.prod.outlook.com (2603:10a6:20b:1d0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.15; Fri, 26 Aug 2022 10:35:11 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2d5d:bae0:430f:70ad]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2d5d:bae0:430f:70ad%4]) with mapi id 15.20.5566.015; Fri, 26 Aug 2022 10:35:11 +0000 Message-ID: <9b54f1a3-9aaa-b140-9b33-bade861e89e8@suse.com> Date: Fri, 26 Aug 2022 12:35:09 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 From: Jan Beulich Subject: [PATCH v3] x86: avoid i386_dis_printf()'s staging area for a fair part of output To: Binutils Cc: "H.J. Lu" , Alan Modra Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AM6PR08CA0025.eurprd08.prod.outlook.com (2603:10a6:20b:c0::13) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 967b4eb5-fe67-4eb5-309d-08da874ea7b5 X-MS-TrafficTypeDiagnostic: AM8PR04MB7473:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QngCqD+TyVkB6L0SAzdAPyCkvc5WNgFpTI7itvX+WhbsIay1W0no61rDK2/p57849IctDLYGkyBnDR3TvsLrqeBS9bKjZOpcFW6K68+WZjyarb9LeyLOB0uXSKm248KyBpIbP3ogzLPbMFWGLyJxFIAomH0XEofaT/szdIBFDkUiBAgc1lwShH/aHYH0X/g7U4l7dbPilARkuAapFuz3lsJN6Py2+CWcxXQ5buzMTjs4YQuEWmjlY5/l9UhInOKm84F27kNNZozsmRU+S7MR48ecfoB/0iO5aNCGiSUq2ksSRoZbKFxTgnYau+0nqHNarnZn0CLGFuFp2lnf+0Jbr2Yk0pBIYgkM4uJeeD0ilx3A7oWdS8LaN/cmZZ9vzLb0y5YMWk80ZIex3SMlmlbgp8oOEALgYjXPa1Oa3GIGKoL5J9kIGPV/VWbYted13gSZhzjP030U4FUS0kx07ND8ZCg8MNEwK/se3491ntyJirrgPr9t8P+cbxWYBYMzNm7mFdaklubx232ZfB43x7UFwgOrCl6Vgm8F2FD6a+QRnovL0sCRBk1Py1DWW4jstF1lAAX3aZe2QlJrAbaSrUxPEuZvj1v4Zitgc4cYoiNzOYZ7aaU7VzpzQr8wpYv8/T9p2gW42o9eGDQtBwJtBktiZe49gAz0057aBeuwjAnQFT83d9CAexjLq4ClPZPkkzua+0/kYbaeH+UasN5d7c1V24uggQ32NP4tF4l7nng2KOXIca0xjEVyFNfi/wrX0gUtPFSyBdimk5AMzr3Qx9dd44nWzydguKvdI0o27cZQAPY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(346002)(39860400002)(376002)(136003)(396003)(366004)(83380400001)(6486002)(41300700001)(66946007)(2616005)(4326008)(66476007)(36756003)(186003)(66556008)(31686004)(8676002)(6512007)(31696002)(38100700002)(26005)(86362001)(5660300002)(6916009)(54906003)(2906002)(8936002)(478600001)(316002)(6506007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TEt0REpON0RyZ2RPZ09tczd1d2JFVjNqdHozdkNGK0Q0N2crY1RUTGR2WWVl?= =?utf-8?B?bEhobEI0eTI3TTlRL3pSaFBFSGllMktENzFHaElzYVlDRmRKRWNIclJYdjFK?= =?utf-8?B?UXVhQzFqSGZKamRlVE9vak5nWkNrSmVjamJrL2pJZUdPOXF6VzkyaTYyd1dU?= =?utf-8?B?VmI2b2Z5ZTFYWlFXczhEeXhNYVM1VXJEaU1ZRFRpMWVpM2UxZ0RXNWJOQW1Q?= =?utf-8?B?N3ZGa0VHV1NyY01EWEJleXBNeGtmYUtaY0dlb1Z4dXVObjR3ZGxyWTRDY250?= =?utf-8?B?UU44UFk4SWNWbkNlclByQ05BVG5BbUpHUzF4R05sWkMrUFNaNFF1V3JCTXV0?= =?utf-8?B?dlZnTlF3QUlSQjBEbUs0WDYxVXBLRU5iUDFoQWRyMlJma291RnJ0ek9mMXdh?= =?utf-8?B?OFBtSGxDQ1JZU3kzRHNJNmNpTHNoWElzckxDb3JxcHp4M0prUVIzM0tEZFB0?= =?utf-8?B?cVRpUUxpNVpHc0tTSHJqL2VpcjQyUTZ0bFJjYTF0blVHM2ozU3B5MVRDaWx0?= =?utf-8?B?cVlQM2dBSkExY2F4Tlg5VzI3T1hZS0IxL2krbFFPaW8rZjdhOVBPQTZ1Nlpx?= =?utf-8?B?Nk1GVmhxY09MTjQxMmp6V1o2UTRHMzN4RmhnRjBJU1lBay9nblhnN25XNU9V?= =?utf-8?B?dDRCaGVpMVdOd0syTU5OQncwQ1VxdkM4ajdJZHd6Z0ZPV0FNWVJJS2tBeWpw?= =?utf-8?B?eWZQRFh0ZGlpbEh3bExEODlHUDU4Szk3REl0UC9LV0dsZmo4WEt6eGNLUDla?= =?utf-8?B?Q3VVUEZ0NEFPQ1F6VU5xQ1kvMDNmeTd0OVRCeU1TK0kzbGdjeUdvdU1KSmNp?= =?utf-8?B?TlRocERWTE5zd0wxYk1iZXZNL1c3MkxYY3I0R2Y5Rm9YUExUY3VIVzNlRXY4?= =?utf-8?B?N3NnK05ISmJ6dzBsbGZaL25UWTN2QkFsYWRxMHFTQnBsZGJmR0FsTG5CVTB4?= =?utf-8?B?N21kYkwrUk05UGMzNWxmM3NyaWVjS3dYSXRUNXJ2TW1YSit1SkpvMEhmck83?= =?utf-8?B?ZEN4L3NTbXlxVzBvVE05cUdlOXZtNmRaNnpSa1lsZFkvT0RvTUxMTVFDanFL?= =?utf-8?B?dDdkQ3poVUtqUWF2aDhodlpNOWtPZnlsdDd2Mm53ODBHSUtNYWRLOFIwdCtk?= =?utf-8?B?ZlR3b1ordHNwOVlENW5HVnNram9zaTUvRUUzb01BUjM4MS9lYTgxeWtMYXZI?= =?utf-8?B?WndIUy9qNk0wSFExZnAzN2FXRk1SQk4ybmV5WmhXY2JTRjhZVHdIcmlaT1BK?= =?utf-8?B?MEtqd1ArN3YzNTByRUlPQTV4MExKRkNvSFlRcWRZTmRrWjBOVlkzZThwYXlp?= =?utf-8?B?Nm1TZzFnN0VGeXY1RldwWmkzUUoxc0cySHMrN0RjR0xTN0R5R0xicFI2bkhN?= =?utf-8?B?OGJ2M1dsTWlic3Blb3NybzFRWHZmbmVTQ1FoNnJuK3pXM1M1Skp4Tlc5SlF0?= =?utf-8?B?aDJZRkxCWTZOQnZXcGdIK01lOGtSVC95ZVJkWFBsaXU0ZmgwOTVhZXhyU05r?= =?utf-8?B?UGZxVWhtQmw0bWdHUEVVTFZkZDdwUlhDY2FRcU9VanIvbUF0SGNocDJaYk1z?= =?utf-8?B?STEydCtkME5Ea252MGFGcmRtSFJuS2drcHFIUnIvWHZpVmU3T1dXRVJkL2dZ?= =?utf-8?B?SjYwNWppVXBDaitCdDRybTFPeDJWU00rUGJydWdDRmRDdGMxVm8rRXdDM0NJ?= =?utf-8?B?Z1V6QVB2RzF4NndzOGdTRGRiVys3bmdHaUJ4Y3lxd3g2NkNWZVM1eWlRVmdt?= =?utf-8?B?THNmUkV4ZHpoMUN3T2cwOHRiNnZvaC9QQWQ4dTNqKzgzUTNZb1NvcGNFc1U3?= =?utf-8?B?b1J2d0I5TERMNHFBMkp3UnRSMUVQeXE5eUVzbjRLcDF3RDVoQXdnY0Vobjlw?= =?utf-8?B?VE9FbmJ1dGlVeENkbG5BL0huekk5emh6a21oT2dWTFo5T3lNNVZYZUpxT0JB?= =?utf-8?B?dlNNY0laREh4L24vWEhUR0MvaTVOSXJFbFVjOFdhRURWNFNVU0wxVFpRaitG?= =?utf-8?B?Z1p6V1dvUTUydXlWZ1cyMnJ0Zk5Eb2VMWS9YL0FFYjRxNnVDa25FNnhld0Vw?= =?utf-8?B?akFSbTRveEVBcTRQZzVBUEVYaVpiWGFmT25LVEF2NEtKL25SVjhGMHQ4eFFs?= =?utf-8?Q?Z9Gs7wfFmzgOLVK3EsfgYRfct?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 967b4eb5-fe67-4eb5-309d-08da874ea7b5 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2022 10:35:11.8152 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0x4GAcWfujMfM4Vs6Jv45gVO+5wGpQo9fwcwE0hHWCfnDUlfuAlZ4lcllU0KlSYbkMTsVFYDxuBWKs7+VjzTew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7473 X-Spam-Status: No, score=-3030.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: While PR binutils/29483 has now been addressed differently, this originally proposed change still has its merits: Avoiding vsnprintf() for typically far more than half of the overall output results in a 2-3% performance gain in my testing (with debug builds of objdump, libbfd, and libopcodes). With that part of output no longer using staging_area[], the array also doesn't need to be quite as large anymore (the largest presently used size is 27, from "64-bit address is disabled"). While limiting the scope of "res" it became apparent that - no caller cares about the function's return value, - the comment about the return value was wrong, - a particular positive return value would have been meaningless to the caller. Therefore convert the function to return "void" at the same time. --- An alternative to the special casing would be to introduce something like i386_dis_puts(), then to be used by all call sites which currently pass "%s" or format strings without any format characters at all (plus, of course, i386_dis_printf() itself). --- v3: Change title and description. Re-base over PR binutils/29483 fix. v2: Add testcase. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -9267,31 +9267,40 @@ oappend_register (instr_info *ins, const STYLE is the default style to use in the fprintf_styled_func calls, however, FMT might include embedded style markers (see oappend_style), these embedded markers are not printed, but instead change the style - used in the next fprintf_styled_func call. + used in the next fprintf_styled_func call. */ - Return non-zero to indicate the print call was a success. */ - -static int ATTRIBUTE_PRINTF_3 +static void ATTRIBUTE_PRINTF_3 i386_dis_printf (instr_info *ins, enum disassembler_style style, const char *fmt, ...) { va_list ap; enum disassembler_style curr_style = style; - char *start, *curr; - char staging_area[MAX_OPERAND_BUFFER_SIZE]; - int res; + const char *start, *curr; + char staging_area[40]; va_start (ap, fmt); - res = vsnprintf (staging_area, sizeof (staging_area), fmt, ap); - va_end (ap); + /* In particular print_insn()'s processing of op_txt[] can hand rather long + strings here. Bypass vsnprintf() in such cases to avoid capacity issues + with the staging area. */ + if (strcmp (fmt, "%s")) + { + int res = vsnprintf (staging_area, sizeof (staging_area), fmt, ap); - if (res < 0) - return res; + va_end (ap); - if ((size_t) res >= sizeof (staging_area)) - abort (); + if (res < 0) + return; - start = curr = staging_area; + if ((size_t) res >= sizeof (staging_area)) + abort (); + + start = curr = staging_area; + } + else + { + start = curr = va_arg (ap, const char *); + va_end (ap); + } do { @@ -9306,10 +9315,7 @@ i386_dis_printf (instr_info *ins, enum d curr_style, "%.*s", len, start); if (n < 0) - { - res = n; - break; - } + break; if (*curr == '\0') break; @@ -9343,8 +9349,6 @@ i386_dis_printf (instr_info *ins, enum d ++curr; } while (true); - - return res; } static int From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00049.outbound.protection.outlook.com [40.107.0.49]) by sourceware.org (Postfix) with ESMTPS id 84523382EA23 for ; Fri, 26 Aug 2022 10:35:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 84523382EA23 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jMeUYWxfsYT33GGBCIoV+cwgWrhNY8dtqBxNG9yF6y2kASyBPpCz5ENv80zK5ITtenZna3CQbw89cYE8RLIxJUCRpt55pA31l3Kle9r9CgzmSvaZ2u95AvNMsgBKbNSlsn25FNRrgYX0/ihV4HsEYzmqyR/9oDK3GWG6fmFGzWrzhZFu1HN2PFXyvoyAooywVltPFvJHxL3CQITdwjkyHf3mayNsG8swLO7Z9DNXfJv2gYLwb5bEuFvOfeUrE23WocKghQvUkZuN1XgcLk3gCO6m02MG6PSEI72T83+aoDuQtjGXSqmIBWe5hg/6NlZdE0tLEJPFu+QzhLSQKH+OOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZkVm7pJ1U5PwitMN92TyBefwnFUmMQn8F5ZviJGuJs8=; b=d7D5IzkRE8CO8g8CGFlvVqzKJC4phvWBvQtEWFRN1LD22SmA8N8LLT3rZmWUDBI+X9F0t+uZgHfwPWPB6hyurNOhVVE/tOUZ8DhQM5falKSazUg3HYto1weZYPOjRwMRhXRdqWIoIkimO3u2SkHTBbuOqm82nsCJVjfph4LvK9Zs2K4NgIIL8GVdZRqaSHsgbe2vKrk9yJqjs6l0Uf1JR7DokpF7CMRJBpv97FQDUhcsTngBH5aUiYG/tHx/VudASlUoo4KNZJb84yXwM1sBMNUY2+33okOKqS0qs615NpvbR8Afo2I0goIOGjwSlRbKLgNrAy/9fPjPq8x3JAQtBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM8PR04MB7473.eurprd04.prod.outlook.com (2603:10a6:20b:1d0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.15; Fri, 26 Aug 2022 10:35:11 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2d5d:bae0:430f:70ad]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2d5d:bae0:430f:70ad%4]) with mapi id 15.20.5566.015; Fri, 26 Aug 2022 10:35:11 +0000 Message-ID: <9b54f1a3-9aaa-b140-9b33-bade861e89e8@suse.com> Date: Fri, 26 Aug 2022 12:35:09 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 From: Jan Beulich Subject: [PATCH v3] x86: avoid i386_dis_printf()'s staging area for a fair part of output To: Binutils Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AM6PR08CA0025.eurprd08.prod.outlook.com (2603:10a6:20b:c0::13) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 967b4eb5-fe67-4eb5-309d-08da874ea7b5 X-MS-TrafficTypeDiagnostic: AM8PR04MB7473:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QngCqD+TyVkB6L0SAzdAPyCkvc5WNgFpTI7itvX+WhbsIay1W0no61rDK2/p57849IctDLYGkyBnDR3TvsLrqeBS9bKjZOpcFW6K68+WZjyarb9LeyLOB0uXSKm248KyBpIbP3ogzLPbMFWGLyJxFIAomH0XEofaT/szdIBFDkUiBAgc1lwShH/aHYH0X/g7U4l7dbPilARkuAapFuz3lsJN6Py2+CWcxXQ5buzMTjs4YQuEWmjlY5/l9UhInOKm84F27kNNZozsmRU+S7MR48ecfoB/0iO5aNCGiSUq2ksSRoZbKFxTgnYau+0nqHNarnZn0CLGFuFp2lnf+0Jbr2Yk0pBIYgkM4uJeeD0ilx3A7oWdS8LaN/cmZZ9vzLb0y5YMWk80ZIex3SMlmlbgp8oOEALgYjXPa1Oa3GIGKoL5J9kIGPV/VWbYted13gSZhzjP030U4FUS0kx07ND8ZCg8MNEwK/se3491ntyJirrgPr9t8P+cbxWYBYMzNm7mFdaklubx232ZfB43x7UFwgOrCl6Vgm8F2FD6a+QRnovL0sCRBk1Py1DWW4jstF1lAAX3aZe2QlJrAbaSrUxPEuZvj1v4Zitgc4cYoiNzOYZ7aaU7VzpzQr8wpYv8/T9p2gW42o9eGDQtBwJtBktiZe49gAz0057aBeuwjAnQFT83d9CAexjLq4ClPZPkkzua+0/kYbaeH+UasN5d7c1V24uggQ32NP4tF4l7nng2KOXIca0xjEVyFNfi/wrX0gUtPFSyBdimk5AMzr3Qx9dd44nWzydguKvdI0o27cZQAPY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(346002)(39860400002)(376002)(136003)(396003)(366004)(83380400001)(6486002)(41300700001)(66946007)(2616005)(4326008)(66476007)(36756003)(186003)(66556008)(31686004)(8676002)(6512007)(31696002)(38100700002)(26005)(86362001)(5660300002)(6916009)(54906003)(2906002)(8936002)(478600001)(316002)(6506007)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TEt0REpON0RyZ2RPZ09tczd1d2JFVjNqdHozdkNGK0Q0N2crY1RUTGR2WWVl?= =?utf-8?B?bEhobEI0eTI3TTlRL3pSaFBFSGllMktENzFHaElzYVlDRmRKRWNIclJYdjFK?= =?utf-8?B?UXVhQzFqSGZKamRlVE9vak5nWkNrSmVjamJrL2pJZUdPOXF6VzkyaTYyd1dU?= =?utf-8?B?VmI2b2Z5ZTFYWlFXczhEeXhNYVM1VXJEaU1ZRFRpMWVpM2UxZ0RXNWJOQW1Q?= =?utf-8?B?N3ZGa0VHV1NyY01EWEJleXBNeGtmYUtaY0dlb1Z4dXVObjR3ZGxyWTRDY250?= =?utf-8?B?UU44UFk4SWNWbkNlclByQ05BVG5BbUpHUzF4R05sWkMrUFNaNFF1V3JCTXV0?= =?utf-8?B?dlZnTlF3QUlSQjBEbUs0WDYxVXBLRU5iUDFoQWRyMlJma291RnJ0ek9mMXdh?= =?utf-8?B?OFBtSGxDQ1JZU3kzRHNJNmNpTHNoWElzckxDb3JxcHp4M0prUVIzM0tEZFB0?= =?utf-8?B?cVRpUUxpNVpHc0tTSHJqL2VpcjQyUTZ0bFJjYTF0blVHM2ozU3B5MVRDaWx0?= =?utf-8?B?cVlQM2dBSkExY2F4Tlg5VzI3T1hZS0IxL2krbFFPaW8rZjdhOVBPQTZ1Nlpx?= =?utf-8?B?Nk1GVmhxY09MTjQxMmp6V1o2UTRHMzN4RmhnRjBJU1lBay9nblhnN25XNU9V?= =?utf-8?B?dDRCaGVpMVdOd0syTU5OQncwQ1VxdkM4ajdJZHd6Z0ZPV0FNWVJJS2tBeWpw?= =?utf-8?B?eWZQRFh0ZGlpbEh3bExEODlHUDU4Szk3REl0UC9LV0dsZmo4WEt6eGNLUDla?= =?utf-8?B?Q3VVUEZ0NEFPQ1F6VU5xQ1kvMDNmeTd0OVRCeU1TK0kzbGdjeUdvdU1KSmNp?= =?utf-8?B?TlRocERWTE5zd0wxYk1iZXZNL1c3MkxYY3I0R2Y5Rm9YUExUY3VIVzNlRXY4?= =?utf-8?B?N3NnK05ISmJ6dzBsbGZaL25UWTN2QkFsYWRxMHFTQnBsZGJmR0FsTG5CVTB4?= =?utf-8?B?N21kYkwrUk05UGMzNWxmM3NyaWVjS3dYSXRUNXJ2TW1YSit1SkpvMEhmck83?= =?utf-8?B?ZEN4L3NTbXlxVzBvVE05cUdlOXZtNmRaNnpSa1lsZFkvT0RvTUxMTVFDanFL?= =?utf-8?B?dDdkQ3poVUtqUWF2aDhodlpNOWtPZnlsdDd2Mm53ODBHSUtNYWRLOFIwdCtk?= =?utf-8?B?ZlR3b1ordHNwOVlENW5HVnNram9zaTUvRUUzb01BUjM4MS9lYTgxeWtMYXZI?= =?utf-8?B?WndIUy9qNk0wSFExZnAzN2FXRk1SQk4ybmV5WmhXY2JTRjhZVHdIcmlaT1BK?= =?utf-8?B?MEtqd1ArN3YzNTByRUlPQTV4MExKRkNvSFlRcWRZTmRrWjBOVlkzZThwYXlp?= =?utf-8?B?Nm1TZzFnN0VGeXY1RldwWmkzUUoxc0cySHMrN0RjR0xTN0R5R0xicFI2bkhN?= =?utf-8?B?OGJ2M1dsTWlic3Blb3NybzFRWHZmbmVTQ1FoNnJuK3pXM1M1Skp4Tlc5SlF0?= =?utf-8?B?aDJZRkxCWTZOQnZXcGdIK01lOGtSVC95ZVJkWFBsaXU0ZmgwOTVhZXhyU05r?= =?utf-8?B?UGZxVWhtQmw0bWdHUEVVTFZkZDdwUlhDY2FRcU9VanIvbUF0SGNocDJaYk1z?= =?utf-8?B?STEydCtkME5Ea252MGFGcmRtSFJuS2drcHFIUnIvWHZpVmU3T1dXRVJkL2dZ?= =?utf-8?B?SjYwNWppVXBDaitCdDRybTFPeDJWU00rUGJydWdDRmRDdGMxVm8rRXdDM0NJ?= =?utf-8?B?Z1V6QVB2RzF4NndzOGdTRGRiVys3bmdHaUJ4Y3lxd3g2NkNWZVM1eWlRVmdt?= =?utf-8?B?THNmUkV4ZHpoMUN3T2cwOHRiNnZvaC9QQWQ4dTNqKzgzUTNZb1NvcGNFc1U3?= =?utf-8?B?b1J2d0I5TERMNHFBMkp3UnRSMUVQeXE5eUVzbjRLcDF3RDVoQXdnY0Vobjlw?= =?utf-8?B?VE9FbmJ1dGlVeENkbG5BL0huekk5emh6a21oT2dWTFo5T3lNNVZYZUpxT0JB?= =?utf-8?B?dlNNY0laREh4L24vWEhUR0MvaTVOSXJFbFVjOFdhRURWNFNVU0wxVFpRaitG?= =?utf-8?B?Z1p6V1dvUTUydXlWZ1cyMnJ0Zk5Eb2VMWS9YL0FFYjRxNnVDa25FNnhld0Vw?= =?utf-8?B?akFSbTRveEVBcTRQZzVBUEVYaVpiWGFmT25LVEF2NEtKL25SVjhGMHQ4eFFs?= =?utf-8?Q?Z9Gs7wfFmzgOLVK3EsfgYRfct?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 967b4eb5-fe67-4eb5-309d-08da874ea7b5 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2022 10:35:11.8152 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0x4GAcWfujMfM4Vs6Jv45gVO+5wGpQo9fwcwE0hHWCfnDUlfuAlZ4lcllU0KlSYbkMTsVFYDxuBWKs7+VjzTew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7473 X-Spam-Status: No, score=-3030.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Aug 2022 10:35:15 -0000 Message-ID: <20220826103509.ankzwQBUSZKAnWz2SthYZncc7utdw83wOnDsK4lnExU@z> While PR binutils/29483 has now been addressed differently, this originally proposed change still has its merits: Avoiding vsnprintf() for typically far more than half of the overall output results in a 2-3% performance gain in my testing (with debug builds of objdump, libbfd, and libopcodes). With that part of output no longer using staging_area[], the array also doesn't need to be quite as large anymore (the largest presently used size is 27, from "64-bit address is disabled"). While limiting the scope of "res" it became apparent that - no caller cares about the function's return value, - the comment about the return value was wrong, - a particular positive return value would have been meaningless to the caller. Therefore convert the function to return "void" at the same time. --- An alternative to the special casing would be to introduce something like i386_dis_puts(), then to be used by all call sites which currently pass "%s" or format strings without any format characters at all (plus, of course, i386_dis_printf() itself). --- v3: Change title and description. Re-base over PR binutils/29483 fix. v2: Add testcase. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -9267,31 +9267,40 @@ oappend_register (instr_info *ins, const STYLE is the default style to use in the fprintf_styled_func calls, however, FMT might include embedded style markers (see oappend_style), these embedded markers are not printed, but instead change the style - used in the next fprintf_styled_func call. + used in the next fprintf_styled_func call. */ - Return non-zero to indicate the print call was a success. */ - -static int ATTRIBUTE_PRINTF_3 +static void ATTRIBUTE_PRINTF_3 i386_dis_printf (instr_info *ins, enum disassembler_style style, const char *fmt, ...) { va_list ap; enum disassembler_style curr_style = style; - char *start, *curr; - char staging_area[MAX_OPERAND_BUFFER_SIZE]; - int res; + const char *start, *curr; + char staging_area[40]; va_start (ap, fmt); - res = vsnprintf (staging_area, sizeof (staging_area), fmt, ap); - va_end (ap); + /* In particular print_insn()'s processing of op_txt[] can hand rather long + strings here. Bypass vsnprintf() in such cases to avoid capacity issues + with the staging area. */ + if (strcmp (fmt, "%s")) + { + int res = vsnprintf (staging_area, sizeof (staging_area), fmt, ap); - if (res < 0) - return res; + va_end (ap); - if ((size_t) res >= sizeof (staging_area)) - abort (); + if (res < 0) + return; - start = curr = staging_area; + if ((size_t) res >= sizeof (staging_area)) + abort (); + + start = curr = staging_area; + } + else + { + start = curr = va_arg (ap, const char *); + va_end (ap); + } do { @@ -9306,10 +9315,7 @@ i386_dis_printf (instr_info *ins, enum d curr_style, "%.*s", len, start); if (n < 0) - { - res = n; - break; - } + break; if (*curr == '\0') break; @@ -9343,8 +9349,6 @@ i386_dis_printf (instr_info *ins, enum d ++curr; } while (true); - - return res; } static int