From patchwork Fri May 19 14:07:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 96444 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1263397vqo; Fri, 19 May 2023 07:07:54 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ692275AkBxej+XdQntShCpWl9DsO9MLtH3SWais+irrVdJ6HVS8K0dBDqS9wTGR61besdA X-Received: by 2002:aa7:d987:0:b0:50b:d303:d2a4 with SMTP id u7-20020aa7d987000000b0050bd303d2a4mr1741070eds.27.1684505274465; Fri, 19 May 2023 07:07:54 -0700 (PDT) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id w2-20020a056402070200b0050bd1f2c888si1071349edx.216.2023.05.19.07.07.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 May 2023 07:07:54 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=nWhvyhqd; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B587538432C2 for ; Fri, 19 May 2023 14:07:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B587538432C2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684505257; bh=BVlWfTSVghCO6SY4CRrlaFWuNw0jYDYL8FB/pIkk94s=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=nWhvyhqdoyYa61MgGs/HDk40QCqM17i07KO7C6LC3lEZP1wagASvWxtmBCbl0ad3/ WNwjejlMc0Sj3R80LV3r8NoE1v5jy8T6ybHxruuFD7OOxB24iDUUQE0tAEgtp15aWR AKaWqJNrc4RO3ezGWWhDUg8HJSQjKWLlbGPYKrfk= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2042.outbound.protection.outlook.com [40.107.104.42]) by sourceware.org (Postfix) with ESMTPS id D5998385697F for ; Fri, 19 May 2023 14:07:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D5998385697F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FSBw0+CfAz/qiQ7JRm4zvmZY2IxT5zgJ19htWsc5fTW5ASaU3KQae5FKNr8sSqGjD01WIDtR5tBRudWlpc6bT/O1Kb3sGrCm0EHslGAS5TDv8LiDtJlwR/86Uf9B+g/jujd3gVO+zIAs8/NuW8Q49C0LwW1q9spo+aF010BW1PAZPnzFkH55YXiyQFWbGbtlnYPlh+g5w/FrOqtv8j+mWdOvx4gOXhAWqQDhyxQto6f3x/yujpwpmtI6rnNT415SCR4wrHoai1h2B+9cDQDrh30uWm6MhDorSwVKWIt+qNTce0jTK1VparFOkPoK41guRh5Jm5t9ZuAXLqJcdlg0Bw== 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=BVlWfTSVghCO6SY4CRrlaFWuNw0jYDYL8FB/pIkk94s=; b=NmcGoKoEka+gxPitu45ejCwe1DQY4fvl0kZBmCLANcnMabjeL1z+QAxv1dPqAzEVmDwo73f0V5jNch14EBmmpvrZ0sSAT18cC1FsoELTkoMWHIl2pt0DgtiGIFVDv2b4vUoTGeDk6qP7kdWFMHUGmilATxWSVhlKfx2u56Hl9Mj/mTaxW465LNn4Yw5MnWWU1j8K3iYkwvGpmJWC/AshtvG+P+9ClUe+9mswrWJGdfZVKywy+BCq2L4st+8dN8AQwfmyyjp6u64UHJr+I7oX+xjNx0OSlrWShW7ttTuEyt3lViFLbGKnXt7ClLM7jilx7Wb1qRU9C28xp2BWeCiZng== 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 AM7PR04MB6823.eurprd04.prod.outlook.com (2603:10a6:20b:102::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.21; Fri, 19 May 2023 14:07:28 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c%5]) with mapi id 15.20.6411.021; Fri, 19 May 2023 14:07:27 +0000 Message-ID: <51d38635-479f-831f-e678-3da1a1c9acae@suse.com> Date: Fri, 19 May 2023 16:07:25 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH 3/3] x86: convert two pointers to (indexing) integers Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM7PR04MB6823:EE_ X-MS-Office365-Filtering-Correlation-Id: 61a16751-3e92-4fde-2e3d-08db587260a6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eYFNlaNeNrGqkkGCh5NvB8A2q6TR7/uX3en2Imxw/jnaC3v7iaNRQdhkbGS0c4JU8FBcXIfRm5L/dA3V+6Esz7xY66QpyF2qgicvToRXfytFdA+VTMx0G/WoQQx+kCZMpRYo5wm+q6dzu9Mf27AhsLt0Zzn+7MZrbUjl4ddAm4kU/WMyaYmT46RWrYoR0EGS4oKncnYREWdmiHLe/xO/S5KUv8VT8tn/nPycIAeYHTX9S3xpavIn/AXPpmvTbM36B4K9UI+dqbwQV6B53ofndAQkvzAg/euHpbKSEKnINBmQPmsyt6rqtK3Z94Qo7aGgsMNo4AvjD/jYBpkhr9jVVdNhPgLQWeb2SiTE8UZ15tov0AUaUKCCI9UP2fAcXhvfcltp6gCCGildhXwve2/3Z2Gk7CO5wJeVUZg7HiIpnyeGLr+jUePoj9S1Gl1r5orUiix45dMTnNDtPgdZ+OnELncYQHplB2U4thgXMOHEUDMC0Q3F+GDB+tA2149LnWRqefJJRzk6cjtxs79ekKU5tV/SA9O8K6PMBXDW1u0Bm1mm6K/Jy/NuuyI2Rci+15E9Nb/bcZjIg7/VjxPbCRqIeO9DCHU2dgpN7p9g0KVV/FQo9YPHAJoX9cYZ1scB2pMoJgtvsnBuMbhN14clcjls9w== 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:(13230028)(39850400004)(136003)(346002)(376002)(366004)(396003)(451199021)(478600001)(6486002)(83380400001)(2616005)(6512007)(6506007)(26005)(186003)(2906002)(5660300002)(8676002)(8936002)(36756003)(6916009)(4326008)(38100700002)(66476007)(66556008)(316002)(31696002)(66946007)(86362001)(41300700001)(31686004)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?mHMsvFiKzuU3mQaVHoPHuYlZ9oHD?= =?utf-8?q?O8KHFEPzVbp9M++JLDo1QQKrGfZe3fISE/MjY8/o8rmXnJO2NJqVK0fGJE1uWy0sP?= =?utf-8?q?us0xjGC6ALIn+tHop+6RZze8z5BbLilYV9pmLEOftSFz8uA3KMwyZcJZyrCG9yXtm?= =?utf-8?q?2BC9WBqsAyE5bsJGzyqWP5NjvNxwWkWAwEau/HCkiSlKy2tANznOUG8U73eK5wTiP?= =?utf-8?q?fTOA65pg5sHRsSMKf2OkelcDtIojN8UmxcyFD3dRlSlwG+wQvrIm6IMjyP3mTv9wj?= =?utf-8?q?IrGxwwG5x2qxL20+gQliIDWTAdAlR/hPCtULW9dUvVqrhbneprMHqEjj1e1SBYP6L?= =?utf-8?q?Me5vlmA3WFaPfO6YRlunc9YD0ruT26n5yEHKpxN4tTws5OvxZbZSg8Wun8Y/8QLJ4?= =?utf-8?q?3HBIiw9uf0ISycXC6p/YGisvCch0ew6IKcMv8aKHlReR71yJTBrp6dCI0qun32LKk?= =?utf-8?q?AdH7wYtkha8MSgTGznEaUGdYbCK1DSrJx/urQBY4/rlC07bP9djTuO76OAq0669c/?= =?utf-8?q?Ynf/NIVUO5jOhkkU+TLCvvrFEF+EPec06sYzjVBo+1J3dTzVAKC/E/0Ljt7/5XG4B?= =?utf-8?q?GlIrtWsPecCFG+SeeOSu+ATUKFROFu1Vkz4tbrGeHGnqKM7X2uyWO2Oc5GhELynwU?= =?utf-8?q?14Jf2gqAKuMKJPCDp5ZbJbhOnu1n+HEDViK9zrssuPSlQauydwXmm/ISEtJE8mbSh?= =?utf-8?q?edvzSynBQg4xuVdJQYUse3740GOU3n8jiCol1c1bfocf0r0txV49cZdKKRi5qkk4v?= =?utf-8?q?ZHnE+xXmyHoYoTzcu8t/0BFu2iQ5sbqKgBhuKZfbbuY7jW1H0oD+/kjuBTECtN4UD?= =?utf-8?q?850fCJnka3Bszs8dwf6h3r7xEJuA1Iaa+clFLmWWpiBAbElR0NKRnWyeSrhqMgEvf?= =?utf-8?q?13yOZIbN2Spex1VEAvN52UBpz51RZnn4WOP0mZpdNs8Pnfsz1p5UeXjx4TiFGhrox?= =?utf-8?q?WONvS9PaHbKiJalkNbfnYtgQALuBS1OMdx6g/TrgxL7gGSfv15Lbz1mo9gT6d1F/c?= =?utf-8?q?l22GuC5FUbqNtPWRbAk9U+F2e+3CxlURmtw2AW6RC7M8NcSf68iAdYk5h2z5BuoOE?= =?utf-8?q?7JLoThDg7nmb+ixSl5uop0rzSPyHkMm62H7sIKQeFOcgPEtVYPA2LkSLYhgCSJQqw?= =?utf-8?q?zCmMIQ8/uQ3jJCSEZRofK7QRpIeGLTq/drtACT7oRtY4ABIbZGE989OzKIbKraGR+?= =?utf-8?q?/zk6m/07dwkZ4c3a5Dg75Uxbw14iuSx+SB/3u1HhGt2176FI8kX9eX04J83+EmkTP?= =?utf-8?q?WoxwB93306hWbsID0PLY1SH4z1NB3Plk2Kt9ye4ICbi/k77+avbFJDxAr6RNUtSfm?= =?utf-8?q?sMmiv1Azm5oc+MQy6kdOToObrqgdc+QwyC3wCjXB+EQ47d3huHy/yfG77/d56XpHR?= =?utf-8?q?ATMUwmUbWE/ecm9RObDViull+XsBKcKEOOzRFFzG0omeoV8IwdPjaUPzG/51g1s+9?= =?utf-8?q?kvJ7C1DttEWJeyXAAOa7H/95fi/uh7fH4rU8YQUZSxKlbB/sd5oP2N5la+x5+XuiM?= =?utf-8?q?cJoFhBu5yspU?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 61a16751-3e92-4fde-2e3d-08db587260a6 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2023 14:07:27.8147 (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: QCw6cb0CCiaB9Iy/O2rn6DsqiHM2AncEQ1ZRDcnuvgLggbGEC9NGqvz5gneO36hib6ru8BwIYzQO8loT09/gVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6823 X-Spam-Status: No, score=-3027.8 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_NONE, 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-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766331803001951439?= X-GMAIL-MSGID: =?utf-8?q?1766331803001951439?= This in particular reduces the number of pointers to non-const that we have (and that could potentially be used for undue modification of state). As a result, fetch_code()'s 2nd parameter can then also become pointer-to-const. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -161,9 +161,9 @@ struct instr_info char *obufp; char *mnemonicendp; const uint8_t *start_codep; - uint8_t *insn_codep; uint8_t *codep; const uint8_t *end_codep; + unsigned char nr_prefixes; signed char last_lock_prefix; signed char last_repz_prefix; signed char last_repnz_prefix; @@ -247,8 +247,8 @@ struct dis_private { bfd_vma insn_start; int orig_sizeflag; - /* Points to first byte not fetched. */ - uint8_t *max_fetched; + /* Indexes first byte not fetched. */ + unsigned int fetched; uint8_t the_buffer[2 * MAX_CODE_LENGTH - 1]; }; @@ -289,32 +289,31 @@ struct dis_private { to ADDR (exclusive) are valid. Returns true for success, false on error. */ static bool -fetch_code (struct disassemble_info *info, uint8_t *until) +fetch_code (struct disassemble_info *info, const uint8_t *until) { int status = -1; struct dis_private *priv = info->private_data; - bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer); + bfd_vma start = priv->insn_start + priv->fetched; + uint8_t *fetch_end = priv->the_buffer + priv->fetched; + ptrdiff_t needed = until - fetch_end; - if (until <= priv->max_fetched) + if (needed <= 0) return true; - if (until <= priv->the_buffer + ARRAY_SIZE (priv->the_buffer)) - status = (*info->read_memory_func) (start, - priv->max_fetched, - until - priv->max_fetched, - info); + if (priv->fetched + needed <= ARRAY_SIZE (priv->the_buffer)) + status = (*info->read_memory_func) (start, fetch_end, needed, info); if (status != 0) { /* If we did manage to read at least one byte, then print_insn_i386 will do something sensible. Otherwise, print an error. We do that here because this is where we know STATUS. */ - if (priv->max_fetched == priv->the_buffer) + if (!priv->fetched) (*info->memory_error_func) (status, start, info); return false; } - priv->max_fetched = until; + priv->fetched += needed; return true; } @@ -9743,7 +9742,7 @@ print_insn (bfd_vma pc, disassemble_info info->bytes_per_line = 7; info->private_data = &priv; - priv.max_fetched = priv.the_buffer; + priv.fetched = 0; priv.insn_start = pc; for (i = 0; i < MAX_OPERANDS; ++i) @@ -9775,7 +9774,7 @@ print_insn (bfd_vma pc, disassemble_info goto fetch_error_out; } - ins.insn_codep = ins.codep; + ins.nr_prefixes = ins.codep - ins.start_codep; if (!fetch_code (info, ins.codep + 1)) { @@ -11790,7 +11789,9 @@ static bool BadOp (instr_info *ins) { /* Throw away prefixes and 1st. opcode byte. */ - ins->codep = ins->insn_codep + 1; + struct dis_private *priv = ins->info->private_data; + + ins->codep = priv->the_buffer + ins->nr_prefixes + 1; ins->obufp = stpcpy (ins->obufp, "(bad)"); return true; }