From patchwork Fri May 19 14:06:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 96442 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1262290vqo; Fri, 19 May 2023 07:06:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6TGd4QRboJan4xOIr78N0oJ2JzWA2WqgUo94+KCus3gLXX8UxIrsos0RsZ4hBQ2NPnOOnZ X-Received: by 2002:a17:907:a02:b0:96a:f09b:373e with SMTP id bb2-20020a1709070a0200b0096af09b373emr1726938ejc.15.1684505206147; Fri, 19 May 2023 07:06:46 -0700 (PDT) Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id de31-20020a1709069bdf00b0096f6c4e395asi1001155ejc.977.2023.05.19.07.06.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 May 2023 07:06:46 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Ynu1LLQw; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 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 F1680385842C for ; Fri, 19 May 2023 14:06:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F1680385842C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684505205; bh=JvZym1MDXjENnLInpTpk7OXEwO0gswYndJstfwY5Sak=; 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=Ynu1LLQw1CTEFIGs6l4DPLmnlAUkol7fzKdX5xmaRMr5R9tqpJ2gM1s1NFiVHC1p2 6d6os7Y34qibHiSN7d4GLfF6I8tKjonYfia4JibCcbE1g6bx5CCz3Ot4twUdUGntVl ctmPdw4azmpL/QUXXtula2HGYSwQZWIR0fmc/Ui8= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2044.outbound.protection.outlook.com [40.107.104.44]) by sourceware.org (Postfix) with ESMTPS id A232E3858415 for ; Fri, 19 May 2023 14:06:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A232E3858415 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cpT0ZsUl27qfBWjRy6wcG74se1RyNRggBKi2JTTFeTvPzulBGiCujSKacS0pvF38TO0VHflKxhBoMay66Bf0DX50rdIuxYzpKZF5rwQi0MlTU9hoSoxRdAQDEojPVcOk+ZbpJ1++VdLUmbpt2vhXwlVA+fkgmeonplwg4JyfWf/E18SQhQFQ0BJQEXJopcNLapsGsFuLrrqDYWakOQGhxrcYG1wZP/vTuEOv0QkvS4lV+x9c31jXsR5ugmWvLOmaViZfNnlm2uEgE+wL96bDzlt34qK77kBzXHjaT0h1NN31+kC0Td8Dfi8RfnP24W789yB/Q1R6Qa9tmUx7vkCaow== 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=JvZym1MDXjENnLInpTpk7OXEwO0gswYndJstfwY5Sak=; b=HXI5lKDrChlLepKW2E9ouCPIqxB8JLWiZoEwbzXyQiHyT32MptJw9/rrIZ0szMvcfb1vEeD9oV3/kG/XsBhOc0qvEaWyQ/NBg60N1fYXubl6PeOHQGD0SZyBkNekHYotR/pbCPC/5GwRNj8SEjLXbE6oqIlWCukRFDd+7HJN+rE0I5VnBy8Jb57ycaO3H3gJ5VM3He0aCc+VluyFJDHhEe+B4hKnM2UVmopODtrfGN/YqUAocSX/+axc1xxaISskIDny+NGwClVbhDADsm4v4ZTOaPrtNtVjCbgqZfzqLBZTadiaqUgerbriAekvGJzYMdKtvNI6ivcESoYObfhWqg== 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:06:33 +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:06:33 +0000 Message-ID: <2274d914-c77f-37e7-5589-870a647e24a0@suse.com> Date: Fri, 19 May 2023 16:06:31 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH 1/3] x86: use fixed-width type for codep and friends Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0097.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::15) 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: 032342ca-1725-4117-8758-08db58724074 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O1BnfM5JvkuTK9lwbFP0y93hwVRqwwo8OpKI/WXZ17+vLZ3Q8iIwgNEse+toC1X+pOsHbWs5ze7/tbH8OcCE7Ldbz0DU9rHlkU1KIWWEeaU/ZWJMVWw8L3HCmAt4P8h0mCNaS9QK5CtLOSnWPTYsrG+h1Zqki4AK4cd/qUwhobA9no2u1yFnMyxy9SEZhHVPgVJxQ0itkmoRx/p5kG/pt+cG8rmQCpt9zIzcayfsjxM16geO8olst/BSYjiKfILYbbR7+iyqKD126sGPCwE2OpFXKapuRaHOM3KV4n9qy2hvhVds6AeAs803rPfi+yb/idXntjl90Yd/8PreDZAVOe8wiyMz61dudmuU4rfDqXfi/pAwootVazVJLxXv/luNuYB7ZDhmTdj8LPo60tg6SYfCNv/lCFZuG9DRUJXpFi6cME3FkWly2oCClyEnAEBaJdU+zrC4Wq6CZt++iWkm1ch3wzW7SjEXg4o+4yAgaNvYrOmY7kwkHwoXTuYXjjhJoLe7t2r6W8ozvutiVk1ZpA0rG60XbFuCnbi9tfhuLVcTFItmD3W/6B+BNO7GtIM47WLEnL4kM86PQmv8jY3cv7JJfpEcyQlKe4nopmwICg4rDwq8YD63pHC24ZZwjOndri6iKR4EPMuj+I9/zJEEOw== 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)(30864003)(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?nAyTPOWMmeyUfxNzqgvmzQJG/QqF?= =?utf-8?q?W1p93ZKPM6kkJPBiYpdxe6CyJdP3Ra33JVdITZ+1WVu10wYx3vdokD1oYZ73KTCcE?= =?utf-8?q?glH+1mt79U7GeJWHYtYKJ0lvTuf2mn+i4/nwNafhS3LPYwDjIUd+VgaLo/O3Er7RA?= =?utf-8?q?dUGLEIZmjseR/xqd1TUlazaBCbnUtQpvLJ0dANsEfK1jrJXUs5EaESd/1NQLzd+TE?= =?utf-8?q?LnroKrqAQ+S/QtCQdFdqvSR6nhznNb/93YqZIsT0WiUdtOUACszvkwvf33miWowDN?= =?utf-8?q?s/TsOG/fyraz/3qHIyKPuZCCl/W4G4B3b1CESmt/0KjuXMibUrX/iMWQRaUSSk4cz?= =?utf-8?q?6Nv/f0qmcVRPKwBu96ADuaa0/RI8w+V2P/3tySnZY1lRjk0Hdm7JnxK78/G2Yb0nb?= =?utf-8?q?9YY7W5ZXnXlNmtBgJzT8dguplp9rOtH/VzTvVEL8TCB5lwhdzJ1SITh2BkPRdwqFS?= =?utf-8?q?ETvSjOdLD686Xv+33K6W+S6YVoBlXl3E4XGpXmfd1aISN9bT+d0ulEXBroKci6M7K?= =?utf-8?q?OU69QkFhO6hzLc517yGS0iFVAclcVtIGLJ8OzM5wQ9THrsJk45ygpIMsUCyvxdXLE?= =?utf-8?q?8dTn7bUeT/cXfqeZUroEBxi52XBG0K7ubAcM3FhdYc9NVxLrG4eNfH3BrikMtQkIf?= =?utf-8?q?J45pMharjRmjecD1+cNigM/CXjLTfiJybHJJ9JyQrODRG0V3+PFEHjbuphNDw2roM?= =?utf-8?q?jTU8JePjer6NRQqJff8eSoYQKR2VcBC+bPZawoGGYPOUukm+zqeBOihsUIO3cy0Uz?= =?utf-8?q?7ZO8IWYEy6o2zYgXwJloEI+vKsV4ShW5IHMFYo701lK9ML/8D7wCzO0/M/n/M8+2G?= =?utf-8?q?u5gTLQ9p4ap50+3GjqYHf87fG6uAUSpTTTNtBHobYmmMbUQag+pYycDUs6UCJ34jc?= =?utf-8?q?3iuFGXPYJDv0vcdUzZIxv8BQbsjP7ISjeV3zrbvXgCJGbXX7dhhPTV/s6bf88mQw3?= =?utf-8?q?viR8hooNFQuDTPG4Hsm76quR0Iqi8qX2V6dh5OBeEycY+BV1cYVevkyTa6o3S0PLa?= =?utf-8?q?rfqB1zLVd+AMmINtLk6RIJ1DQ0z16WSf6Ay8G36r9YqjkI5nqVbdYfh9Kg4fo9wMJ?= =?utf-8?q?xKEKB63Tb5zTsKoBaBu0c86Dzgi2zppUCxAdRuypym4/zFc2n3k+EKi00X3HJ3Sy1?= =?utf-8?q?FFEWQm3jfSROHr/LmdmCgd/STYPOyZs47DcNOFeYvnOQO6qroNuVOETr3xA+0lbsp?= =?utf-8?q?iZjHWauAj3BfLePrY332ZYN+ILjPWjHF4frEB8k6mCW4p2sRlhQKzKAS+4ibrXdHq?= =?utf-8?q?TaaI4ZDgUHXT500Ef0HVAC7t8TEZiFdrKzdX6+cRPg5FpAXmkCBt4XxoaQABH+Xzc?= =?utf-8?q?roKud+drWXDWKIpUONFyFRjqPqUq3P4oRiMN+q0jtI++AQveU9ECAGtbux9X/KfDu?= =?utf-8?q?NPvMZuH0rpSv3cVkuKrOR/PiW2bRZT7jNAcdvrhW6+KAyB7707+xCbmiFqbDRHS50?= =?utf-8?q?77nqCwt+3f2lSh+IAzWyZiSitlsJfurQ/SHuYdIi002jUfcpq+KLnQ+Cuhgz+lTFO?= =?utf-8?q?cSEHaRV68Vxw?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 032342ca-1725-4117-8758-08db58724074 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:06:33.5312 (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: Z80+3GpbW9jbLgGGSSFqCUlVwpBWhZUQQSOfyf1iDLAAHRZ9XkIgShIp/J6qJxjkwrnSyUyycWEhVg0cXZBRrA== 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?1766331730771312741?= X-GMAIL-MSGID: =?utf-8?q?1766331730771312741?= This first of all removes a dependency on bfd_byte and unsigned char being the same types. It further eliminates the need to mask by 0xff when fetching values (which wasn't done fully consistently anyway), improving code legibility. While there, where possible add const. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -120,8 +120,8 @@ static void ATTRIBUTE_PRINTF_3 i386_dis_ struct dis_private { /* Points to first byte not fetched. */ - bfd_byte *max_fetched; - bfd_byte the_buffer[MAX_MNEM_SIZE]; + uint8_t *max_fetched; + uint8_t the_buffer[MAX_MNEM_SIZE]; bfd_vma insn_start; int orig_sizeflag; }; @@ -133,7 +133,7 @@ enum address_mode mode_64bit }; -static const char *prefix_name (enum address_mode, int, int); +static const char *prefix_name (enum address_mode, uint8_t, int); enum x86_64_isa { @@ -149,9 +149,9 @@ struct instr_info int prefixes; /* REX prefix the current instruction. See below. */ - unsigned char rex; + uint8_t rex; /* Bits of REX we've already used. */ - unsigned char rex_used; + uint8_t rex_used; bool need_modrm; bool need_vex; @@ -168,10 +168,10 @@ struct instr_info char obuf[MAX_OPERAND_BUFFER_SIZE]; char *obufp; char *mnemonicendp; - unsigned char *start_codep; - unsigned char *insn_codep; - unsigned char *codep; - unsigned char *end_codep; + const uint8_t *start_codep; + uint8_t *insn_codep; + uint8_t *codep; + const uint8_t *end_codep; signed char last_lock_prefix; signed char last_repz_prefix; signed char last_repnz_prefix; @@ -186,7 +186,7 @@ struct instr_info #define MAX_CODE_LENGTH 15 /* We can up to 14 ins->prefixes since the maximum instruction length is 15bytes. */ - unsigned char all_prefixes[MAX_CODE_LENGTH - 1]; + uint8_t all_prefixes[MAX_CODE_LENGTH - 1]; disassemble_info *info; struct @@ -288,7 +288,7 @@ struct instr_info to ADDR (exclusive) are valid. Returns true for success, false on error. */ static bool -fetch_code (struct disassemble_info *info, bfd_byte *until) +fetch_code (struct disassemble_info *info, uint8_t *until) { int status = -1; struct dis_private *priv = info->private_data; @@ -8794,7 +8794,8 @@ static enum { } ckprefix (instr_info *ins) { - int newrex, i, length; + int i, length; + uint8_t newrex; i = 0; length = 0; @@ -8804,7 +8805,7 @@ ckprefix (instr_info *ins) if (!fetch_code (ins->info, ins->codep + 1)) return ckp_fetch_error; newrex = 0; - switch (*ins->codep & 0xff) + switch (*ins->codep) { /* REX prefixes family. */ case 0x40: @@ -8824,7 +8825,7 @@ ckprefix (instr_info *ins) case 0x4e: case 0x4f: if (ins->address_mode == mode_64bit) - newrex = *ins->codep & 0xff; + newrex = *ins->codep; else return ckp_okay; ins->last_rex_prefix = i; @@ -8904,8 +8905,8 @@ ckprefix (instr_info *ins) /* Rex is ignored when followed by another prefix. */ if (ins->rex) return ckp_bogus; - if ((*ins->codep & 0xff) != FWAIT_OPCODE) - ins->all_prefixes[i++] = *ins->codep & 0xff; + if (*ins->codep != FWAIT_OPCODE) + ins->all_prefixes[i++] = *ins->codep; ins->rex = newrex; ins->codep++; length++; @@ -8917,7 +8918,7 @@ ckprefix (instr_info *ins) prefix byte. */ static const char * -prefix_name (enum address_mode mode, int pref, int sizeflag) +prefix_name (enum address_mode mode, uint8_t pref, int sizeflag) { static const char *rexes [16] = { @@ -9136,7 +9137,7 @@ get_valid_dis386 (const struct dis386 *d case USE_3BYTE_TABLE: if (!fetch_code (ins->info, ins->codep + 2)) return &err_opcode; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &three_byte_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; if (!fetch_modrm (ins)) @@ -9243,7 +9244,7 @@ get_valid_dis386 (const struct dis386 *d } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &xop_table[vex_table_index][vindex]; ins->end_codep = ins->codep; @@ -9308,7 +9309,7 @@ get_valid_dis386 (const struct dis386 *d } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &vex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX0F 77. */ @@ -9343,7 +9344,7 @@ get_valid_dis386 (const struct dis386 *d } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &vex_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX 77. */ @@ -9435,7 +9436,7 @@ get_valid_dis386 (const struct dis386 *d ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &evex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; if (!fetch_modrm (ins)) @@ -9782,11 +9783,10 @@ print_insn (bfd_vma pc, disassemble_info goto out; } - ins.two_source_ops = ((*ins.codep & 0xff) == 0x62 - || (*ins.codep & 0xff) == 0xc8); + ins.two_source_ops = (*ins.codep == 0x62 || *ins.codep == 0xc8); if ((ins.prefixes & PREFIX_FWAIT) - && ((*ins.codep & 0xff) < 0xd8 || (*ins.codep & 0xff) > 0xdf)) + && (*ins.codep < 0xd8 || *ins.codep > 0xdf)) { /* Handle ins.prefixes before fwait. */ for (i = 0; i < ins.fwait_prefix && ins.all_prefixes[i]; @@ -9799,22 +9799,22 @@ print_insn (bfd_vma pc, disassemble_info goto out; } - if ((*ins.codep & 0xff) == 0x0f) + if (*ins.codep == 0x0f) { unsigned char threebyte; ins.codep++; if (!fetch_code (info, ins.codep + 1)) goto fetch_error_out; - threebyte = *ins.codep & 0xff; + threebyte = *ins.codep; dp = &dis386_twobyte[threebyte]; ins.need_modrm = twobyte_has_modrm[threebyte]; ins.codep++; } else { - dp = &dis386[*ins.codep & 0xff]; - ins.need_modrm = onebyte_has_modrm[*ins.codep & 0xff]; + dp = &dis386[*ins.codep]; + ins.need_modrm = onebyte_has_modrm[*ins.codep]; ins.codep++; } @@ -10514,9 +10514,7 @@ static bool dofloat (instr_info *ins, int sizeflag) { const struct dis386 *dp; - unsigned char floatop; - - floatop = ins->codep[-1] & 0xff; + unsigned char floatop = ins->codep[-1]; if (ins->modrm.mod != 3) { @@ -10537,7 +10535,7 @@ dofloat (instr_info *ins, int sizeflag) putop (ins, fgrps[dp->op[0].bytemode][ins->modrm.rm], sizeflag); /* Instruction fnstsw is only one with strange arg. */ - if (floatop == 0xdf && (ins->codep[-1] & 0xff) == 0xe0) + if (floatop == 0xdf && ins->codep[-1] == 0xe0) strcpy (ins->op_out[0], att_names16[0] + ins->intel_syntax); } else @@ -11710,7 +11708,7 @@ get8s (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 1)) return false; - *res = (((bfd_vma) *ins->codep++ & 0xff) ^ 0x80) - 0x80; + *res = ((bfd_vma) *ins->codep++ ^ 0x80) - 0x80; return true; } @@ -11719,8 +11717,8 @@ get16 (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 2)) return false; - *res = (bfd_vma) *ins->codep++ & 0xff; - *res |= ((bfd_vma) *ins->codep++ & 0xff) << 8; + *res = *ins->codep++; + *res |= (bfd_vma) *ins->codep++ << 8; return true; } @@ -11738,10 +11736,10 @@ get32 (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 4)) return false; - *res = *ins->codep++ & (bfd_vma) 0xff; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 8; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 16; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 24; + *res = *ins->codep++; + *res |= (bfd_vma) *ins->codep++ << 8; + *res |= (bfd_vma) *ins->codep++ << 16; + *res |= (bfd_vma) *ins->codep++ << 24; return true; } @@ -11764,14 +11762,14 @@ get64 (instr_info *ins, uint64_t *res) if (!fetch_code (ins->info, ins->codep + 8)) return false; - a = *ins->codep++ & 0xff; - a |= (*ins->codep++ & 0xff) << 8; - a |= (*ins->codep++ & 0xff) << 16; - a |= (*ins->codep++ & 0xffu) << 24; - b = *ins->codep++ & 0xff; - b |= (*ins->codep++ & 0xff) << 8; - b |= (*ins->codep++ & 0xff) << 16; - b |= (*ins->codep++ & 0xffu) << 24; + a = *ins->codep++; + a |= (unsigned int) *ins->codep++ << 8; + a |= (unsigned int) *ins->codep++ << 16; + a |= (unsigned int) *ins->codep++ << 24; + b = *ins->codep++; + b |= (unsigned int) *ins->codep++ << 8; + b |= (unsigned int) *ins->codep++ << 16; + b |= (unsigned int) *ins->codep++ << 24; *res = a + ((uint64_t) b << 32); return true; } @@ -12450,7 +12448,7 @@ OP_I (instr_info *ins, int bytemode, int case b_mode: if (!fetch_code (ins->info, ins->codep + 1)) return false; - op = *ins->codep++ & 0xff; + op = *ins->codep++; break; case v_mode: USED_REX (REX_W); @@ -12737,7 +12735,7 @@ OP_ESreg (instr_info *ins, int code, int { if (ins->intel_syntax) { - switch (ins->codep[-1] & 0xff) + switch (ins->codep[-1]) { case 0x6d: /* insw/insl */ intel_operand_size (ins, z_mode, sizeflag); @@ -12763,7 +12761,7 @@ OP_DSreg (instr_info *ins, int code, int { if (ins->intel_syntax) { - switch (ins->codep[-1] & 0xff) + switch (ins->codep[-1]) { case 0x6f: /* outsw/outsl */ intel_operand_size (ins, z_mode, sizeflag); @@ -13209,7 +13207,7 @@ OP_3DNowSuffix (instr_info *ins, int byt place where an 8-bit immediate would normally go. ie. the last byte of the instruction. */ ins->obufp = ins->mnemonicendp; - mnemonic = Suffix3DNow[*ins->codep++ & 0xff]; + mnemonic = Suffix3DNow[*ins->codep++]; if (mnemonic) ins->obufp = stpcpy (ins->obufp, mnemonic); else @@ -13274,7 +13272,7 @@ CMP_Fixup (instr_info *ins, int bytemode if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; if (cmp_type < ARRAY_SIZE (simd_cmp_op)) { char suffix[3]; @@ -13724,7 +13722,7 @@ OP_REG_VexI4 (instr_info *ins, int bytem if (!fetch_code (ins->info, ins->codep + 1)) return false; - reg = *ins->codep++ & 0xff; + reg = *ins->codep++; if (bytemode != x_mode && bytemode != scalar_mode) abort (); @@ -13768,7 +13766,7 @@ VPCMP_Fixup (instr_info *ins, int bytemo if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; /* There are aliases for immediates 0, 1, 2, 4, 5, 6. If it's the case, print suffix, otherwise - print the immediate. */ if (cmp_type < ARRAY_SIZE (simd_cmp_op) @@ -13823,7 +13821,7 @@ VPCOM_Fixup (instr_info *ins, int bytemo if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; if (cmp_type < ARRAY_SIZE (xop_cmp_op)) { char suffix[3]; @@ -13870,7 +13868,7 @@ PCLMUL_Fixup (instr_info *ins, int bytem if (!fetch_code (ins->info, ins->codep + 1)) return false; - pclmul_type = *ins->codep++ & 0xff; + pclmul_type = *ins->codep++; switch (pclmul_type) { case 0x10: From patchwork Fri May 19 14:06:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 96443 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1262733vqo; Fri, 19 May 2023 07:07:11 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4DtgnwC7FmO17DbFIg/jjq+cDuboxi5jvcsa4uLgdandS4d0w8DMXGhdEsqwNZqcNfkBlC X-Received: by 2002:a05:6402:1b0f:b0:510:b636:4073 with SMTP id by15-20020a0564021b0f00b00510b6364073mr1699792edb.3.1684505231697; Fri, 19 May 2023 07:07:11 -0700 (PDT) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id n1-20020aa7c441000000b00504a26aa3f8si2772122edr.422.2023.05.19.07.07.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 May 2023 07:07:11 -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=br0ZzjLc; 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 989523858421 for ; Fri, 19 May 2023 14:07:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 989523858421 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684505228; bh=tTdcunyPN9OjJrhSNtf6LPr6lm1So8N5SekJChVCDzs=; 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=br0ZzjLcZPgAumc89AUZfvEe2fwy/c1hLUuM4oVzdsIHLUJPxiyweKEIr2RF5BA9M HyyfY5Tc9WuWYtFGYpcW1QvLH3b9hSQwGAaHSMLdoXEjfZXpeaUJ7gVn2qbvvHvbcV rf+jpeSmUmroiSRo9w5E0HY4yN7dAwcRmaAKHr1Y= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2041.outbound.protection.outlook.com [40.107.104.41]) by sourceware.org (Postfix) with ESMTPS id ECCF23858428 for ; Fri, 19 May 2023 14:07:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ECCF23858428 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LQGabIT4hhz750GYMNLOtCNQG0n9+P4+b7rBvouDCoPCT2FCzxfxip4wh7wW4DL2GXS2sh8j5oDGpBh4dfndryoLk2jbyZ1piIPT1mCTeC2lEOusBDlQpFqKtYspfcsJKPpuog+qqg5hmpGy9OIqV5gCXctnY21T5ysVCQ1P8LCgl1jvAkpLX8VpV77e9wsbzSDT1aY/nelxQGwdTYvgDJxsDqIlun/MeqC8OIjvioLpG1h0ZuPTEN/H1CwF8uo+cDDQNxnDkjUnF/5taBZQk5kohgHWkAqOzN+REL/xkOs2j2vbTUV2zG25wXdkLUg6qiRAu/+srFqGm2hUwgkPbg== 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=tTdcunyPN9OjJrhSNtf6LPr6lm1So8N5SekJChVCDzs=; b=aSn6GFmVISqseb8dlgUs7+wFLGhBrdbhtBs9fyKcEuUgFXeN1UjSHmBwvAMf0mvM32H/caxtXTGptTYHSgouv97kMS2ONW2F+joUSi3dKkoxjaVnfROj1L5poi5J/V8crdJRQJsxP3KHlQgVTWLq603edfsWg5BfqMG3kBNc+YNg53Amd45qPzFMv3nUGXebLVG6ta1QHzeGLzVAsT/PqslPk1KDxdlZOiq/U/c2BbARTLIA3Y1Xi6pvwA6nGkNeRXaT6NmUkj4SZOV24qGu1D+y4Chgumg1bhZLYe2s/Uo89tNv4FUtlDETp0+XTXDQViTRxXAyYeZfkDdbAN2tWA== 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:06:59 +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:06:59 +0000 Message-ID: <65393035-8006-1a66-deae-70a88ed29077@suse.com> Date: Fri, 19 May 2023 16:06:57 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH 2/3] x86: disassembling over-long insns Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0095.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a9::12) 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: f3c5ec1e-890e-41cd-d318-08db58724fcf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mrucfTeZ+Vwuv5OEq2K++ozpK8SriihZHLrlVARtd7Pq+l/lmVYcnPDbZPCk24JOzapbMJ76RyrLF8lbISuuMnEDSD519uPky6VUWBlsnEbR9cJ9C4nmOTnOqgAa/FsJ+9WA04GUvIAiJlz/Ph9rRGLqO0jb9gfrjIc+tD4mscu9Sjy7je96uMzLZN8b8eu4FjrRl7CKILxxiDX8o94dVVs1CuB6UVP4b6MURGCH0P+OnGEAuPXoMKoSCmJMgf1a93PuMVbHs5Ve1IlQPSTl7922o/hPnQKTgH5Jvzv4/47VYTBRuRCZT2KHSrgWFCNHS4UPSXu4RyZS5zivkKSeolD/kK5hBVZju/5jnIbIr1XnaSybBn5KSTOeuXQyvf3/ZWTvxbOwroS9e7Bc/pOuBDqqQ43EoFHnuSaNiQF7dHijCnDicyM/7e8BBEHmv2FViiTSNvxWVYFR/BiTf2qtmcy4lP2zukX9c9fecIe1CuFElVbHTL4p0cYmto2U+oNOLEkj4K4cRWkipI0CnMZkQoQEuH0tKDA2qlJifTV+3ucMDn31xwMRVkxNB+ulF+B6rEEp/xBpYF7vkz+kwmF715OalDQkvtuDeOA0YSUXeuVyMiwyUElYrWiQfgdyZF1NyL/v42+1GqC5yIfC6m1mAQ== 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)(66899021)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?7KH5E4libqNwASq9npfOwqyqObjM?= =?utf-8?q?mcbsvvA4x0ZLEZP4MgYYxasdzLqcJLrZgbKh9gDdqtG7VuZRl5MLBOwLrd+r1WfSZ?= =?utf-8?q?H1++vbh9spNwI06Tcf1/dQIrx8IBS3UV/yKq9g6yOWbDVfsznhuMGAuvQGf9bNSnN?= =?utf-8?q?8eOOtp0e2kIULVX1aJMzfRMpsECx4ccI0lTW+W//njvcYS0VVD8XBtNEvUE1sJjnB?= =?utf-8?q?au14fEPKJ7+TGPx7BTCgTDHTxGqn5GAfyvTRRWyqsV+hLYB67fcTK2mltXgfm/OKR?= =?utf-8?q?nJn4SEVgTCnvAEkOfFMXlYcKQKb7UsXWyG7r+qtEQmWfi13fd5yEW5+acihNrEmaL?= =?utf-8?q?kd+M6DPsgzGC241KYYh4UgPYk007sU7LXDYEo3+PBIuHYAWBzGpaalhBS4cLtmx42?= =?utf-8?q?ivFRjKh5DESE0zlyZ2oodhCKxkFbVGbhV+Orxagc5dSO3+vgQPptaWl8jY9JwRWZr?= =?utf-8?q?+qWQwyA4EVZOxN5/OvC+gx6cqNIgQX5LcCvtDZXXCpCb9vVzJKQ8aoYU91UCzr7Fy?= =?utf-8?q?qARWyg2xSXRRztLkN0qdIvwN5o1ggfNIQkjd+fSu55Hz6OBn3EJgjI2xP8ZQ9JUWK?= =?utf-8?q?7qLIh0wcSHwVGAB8mmrNVvozlv1fbqE2vu94SAjx7CdgOV2BuF85kN/KQZMES8G9s?= =?utf-8?q?rd5/yPECOgYDRJw4i/BUpFE8U7DMKbngiFxVD2ot6PZQc0Mtzm/qQsumhxugdPSvz?= =?utf-8?q?GMcnfCDxGw1fntL8b12oz+M58yRaOz4+jVaSO+7T+ljI+vgkH+f3ywO1zfSQoKKQA?= =?utf-8?q?bjnCbwhgbzXlERFRRv4sczvfFpPEpoqi1ikCbgWp14atr0uecwTOY8VMUPpQhwM0F?= =?utf-8?q?XxXzY6f7AdlRly6FXyIg9kknqzYNFz7FaAjGfWvNLQj9PfuWCSFz6Hg5YN2q7WIj+?= =?utf-8?q?+zltUXTXbYdRZDp7ajN/Rx0ise36CLw8XvXfHDsW5bqpxgzUTdDbFByvSa0glL1rp?= =?utf-8?q?go7FqTPIKXqtz8ERLbCpbiwXlxz8SCECnwtLC2WmjDnRlUUo5qVDyg6RylYjo+mk+?= =?utf-8?q?o8lX9J27FJHR17UAOcHhjmKD7EZfXitnqlo5TGCeSaECGr+tvRVdXx7JVedKOtYWg?= =?utf-8?q?YrcGMCDNRJ4J7VamCfBnGt5e0lC7tfrzTIpZYcaUGDEt9BVgMCx3gguiNZ1w0txX0?= =?utf-8?q?qfibyVmf3i2pjmxvlq//a8EvTzWLfzA8dzXCffmHyoCTHFqNwMw+X8blk7IrDKV0E?= =?utf-8?q?sQ4WzHqZZeSr2PHKjttIGo5zaGHOQxtWSJTiL/VPsiJPy4dXNj+7bDl1wESwTYsFJ?= =?utf-8?q?gjK7lmgYmD5kEw+1Sh/P3zx6rxe5f0+ofVoHSVgq0FcZN/KVCCFigG9wnEXeccbgk?= =?utf-8?q?3M0aIU7nPkA/v64B7MYZrr/sRLVpEqSoKRO3Q4pEpw0KTWr5F6ocR4yF8hWNhzW8i?= =?utf-8?q?4RVjEqsEPEwi/E860+Y7tcs3x8rEhKvUxa9xULMMG/SAQ7YmA8OWNUrfVsMjWBAMv?= =?utf-8?q?zn1jGitIY+FCkyiR8ep7hAzp/z/Zl8kSWOOJWMQ7e2jk6uDkMCSbJzKWKFbYMDKBF?= =?utf-8?q?NVU8jzzC1B3i?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3c5ec1e-890e-41cd-d318-08db58724fcf 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:06:59.2861 (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: 7dFSl8TmHli0HNCpFmlGoJItBOzu18GtfTb6QTASe6PnG3fYiJy3i8SJOBiJ0cXB/vkPDq9ORVAT/+20IFUXJg== 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?1766331757959929713?= X-GMAIL-MSGID: =?utf-8?q?1766331757959929713?= The present way of dealing with them - misusing MAX_MNEM_SIZE, which has nothing to do with insn length - leads to inconsistent results. Since we allow for up to MAX_CODE_LENGTH - 1 prefix bytes (which then could be followed by another MAX_CODE_LENGTH "normal" insn bytes until we're done decoding), size the_buffer[] accordingly. Move struct dis_private down to be able to use MAX_CODE_LENGTH without moving its #define. While doing this also alter the order to have the potentially large array last. --- Originally I meant to use just MAX_CODE_LENGTH as the buffer size. But that broke the four "long insn" testcases, which I thought might make sense to keep intact. Nevertheless that's certainly another way to get things into consistent shape. It would further allow to drop the check associated with a "Check maximum code length" comment, as then we would never fetch more than this many bytes. Strictly speaking what can come past suffixes is a little less than MAX_CODE_LENGTH: Right now it could be EVEX (4 bytes), opcode (1), ModR/M (<=1), SIB (<=1), displacement (<=4), and immediate (<=4); the 8-byte displacement and 8-byte immediate cases have, respectively, no immediate or no displacement, and hence disp+imm <= 8 in all cases. While this sums up to 15, there are no EVEX insns at present with 32-bit immediate. The longest prefix-less ones currently known are those in the oversized{16,64} gas testcases (sans their prefixes, of course), i.e. 14 bytes. But I think it is better to cover the potential case of EVEX- with-32-bit-immediate case right away. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -118,14 +118,6 @@ static void ATTRIBUTE_PRINTF_3 i386_dis_ /* The maximum operand buffer size. */ #define MAX_OPERAND_BUFFER_SIZE 128 -struct dis_private { - /* Points to first byte not fetched. */ - uint8_t *max_fetched; - uint8_t the_buffer[MAX_MNEM_SIZE]; - bfd_vma insn_start; - int orig_sizeflag; -}; - enum address_mode { mode_16bit, @@ -251,6 +243,15 @@ struct instr_info enum x86_64_isa isa64; }; +struct dis_private { + bfd_vma insn_start; + int orig_sizeflag; + + /* Points to first byte not fetched. */ + uint8_t *max_fetched; + uint8_t the_buffer[2 * MAX_CODE_LENGTH - 1]; +}; + /* Mark parts used in the REX prefix. When we are testing for empty prefix (for 8bit register REX extension), just mask it out. Otherwise test for REX bit is excuse for existence of REX @@ -297,7 +298,7 @@ fetch_code (struct disassemble_info *inf if (until <= priv->max_fetched) return true; - if (until <= priv->the_buffer + MAX_MNEM_SIZE) + if (until <= priv->the_buffer + ARRAY_SIZE (priv->the_buffer)) status = (*info->read_memory_func) (start, priv->max_fetched, until - priv->max_fetched, 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; }