From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2069.outbound.protection.outlook.com [40.107.22.69]) by sourceware.org (Postfix) with ESMTPS id 7665E3857835 for ; Tue, 4 Apr 2023 06:59:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7665E3857835 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=QGLwUpEIEZK9GqqGTzUSey1U7rIXGubhzzdlgKnuJbo7KjeYDG3b9IhbXKq2YQFYNLcEjmOnGhKAhIERmK1AosZzUlMi/geClziV6a68gTOIXZGTScXsR3WFbaevHR8BchcAmbw0SkBhLLK36YAkmfcUoN8Epqt+taSiwNbyA0pNPlBhFh15YZK992vyQnfHYRvxI51+QRC9NylsOLcJPvzOYS22hIWxH24VWNZFzpo+2c0gFk4WldA8HbD686vyh9OtLlpZVA+Ue4o9crzNLJ3VBDqhyvfDPHbnEdHE1j8QmWx+ETjU7fRX9UHPXDsWWCkSyEFyuVJfTAqhAlTM6w== 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=m4D2W19vaJZYArYqHulip4TqZRwza6X8SY+WzGaX7kA=; b=Rbt2wJoFugUG2mELIOH2zSzMRwZsNar9s35QyIQFnK+FsuDd8bfzzBIJk9LMiMGjsHHoeqVsBGV4cTB2bE8i0eQDrn+VwhG94QvtY+6aBSVY6aAQCdb7QR0eQAAsrT/mwIvE3H5l2HASeJuIDpyUqRvl2kVX/1yBeEtEtLhEkQ9ZRQmgSdRd/ppb2vJ3dy0kr9blUyAlcb8/f6SyoDPrJXr2BsQVcYWmny7c9q/Ktdq6nuiPRzhQM1h9pjjvjugULh0PqVHyJ3PIcTM4DY/mPpiDQZfU+74Ottev8PhnX/B6iB9tzr5d1ZAw5+jGc7i5OEvXZ8GZIS+1YPy+X0TeXg== 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=m4D2W19vaJZYArYqHulip4TqZRwza6X8SY+WzGaX7kA=; b=RR47qOvyupVnW6N1uPwGwNI+TJXNQkl+lUGPIv2TfTLZkpTUKRkUl8WsIE0hAMQTqJAV9HonKi7qepYxkBpvyroi2KwLW2P7sugGg5lPfIsUDcfxMu3L8Q7dOYGlQA+F6v+8w3RW5NTloa8+Vu0TsVudMUS8GbzGP8DHbiQjqZsFENiIuraK3sMeCyNZI9X18vhMk4xP7ORvvf0UUu9fH/VXYV++uHJI4F6psXl7zxomlXmgRHIJ9AgCd7Cm176WYS/lVjMmimszDme1RcJfPeUc+8afEKZIInnNk3azMxl6L4oUyUcJ6UMTtZ1u0dPO/UelN6kLvsVOcXOW6BK+9g== 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 AM8PR04MB7314.eurprd04.prod.outlook.com (2603:10a6:20b:1df::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.35; Tue, 4 Apr 2023 06:59:51 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.035; Tue, 4 Apr 2023 06:59:51 +0000 Message-ID: Date: Tue, 4 Apr 2023 08:59:49 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH 4/8] x86: change fetch error handling in get_valid_dis386() Content-Language: en-US To: Binutils Cc: "H.J. Lu" , Alan Modra References: <5dac45a8-cd5f-ee4d-52fc-7d283fc29ec4@suse.com> From: Jan Beulich In-Reply-To: <5dac45a8-cd5f-ee4d-52fc-7d283fc29ec4@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FRYP281CA0008.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM8PR04MB7314:EE_ X-MS-Office365-Filtering-Correlation-Id: 185c2047-5461-4c70-6abb-08db34da2f82 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XsAoGR8AaSMrZly840TC12wYmJFOSRhrwej4uoyz9+1xb/63ujvMten/F8yCL1HkRGpKxbOyOzKq5maFK6nhnaEm97TkWk/ea2daUxTFGlN7yWoy+RddnyuCsG9zx/FeA/2QA/P6mwbwABmni7sJrrVVx4YAIDRs/eFQtuLbIzjRPWqcv1y/j2PRtb8/BcAr8fSC3CwGmgvZl4+rbi6P7r21mpvnyXhYMspa7A/FhmbNHmcsdAozvgTJ/mnsRN4wEw39GCmaRlROpdwi4EHCpvQeKJtiWTxltCYxolxwL0yr6OypmQ5/8I90Jd9mkMYnnR0t8h7t+K7Xf8a+WvtHPD2FThIadtOAnGoOx6GfBZR++csWlBdw8sN6AKVlCxE70EaWkshZ4ZcXxYzuaAt5pMLTLdSkQgVp5mqxBkkDVEyXZP9Igl4akN5LAgUz0gZ+tZdCsvXG7TXeIbTG7I840k1cCjTvOsVLi1m5fg+JWmD1wA6mqRoR/6XtIg7PMiOWNVR/hRBWT3rJCIEd2eJAonFeQvi75GQ6Qxqa4h8cdWZVlizBRxELiuY1GUnPus5T8tnW8o/q/9N8uL8A7osec178s/k0lZoLwdD+3cndF8O7VUGeckik2mNtd4kwyIiy8o/+azC81uWYcCFotMt6zA== 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)(366004)(346002)(376002)(39860400002)(136003)(396003)(451199021)(41300700001)(5660300002)(8676002)(8936002)(38100700002)(6916009)(66556008)(66476007)(66946007)(36756003)(86362001)(31696002)(2906002)(4326008)(2616005)(31686004)(6486002)(186003)(6512007)(26005)(6506007)(54906003)(316002)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RThNbXNkWktzNXljeWYwNFl6TmVOWmVZeDVRT1BJa1pqd2NsU0pEVGE0NitR?= =?utf-8?B?RjJpSU5OT1l6cHp2WXBtSlYrWCtIUjl2ZFlaY2xuemtQQnM5TFM1MWc0S2Vq?= =?utf-8?B?eDBFM0ZLWkFqU2dqNTl3NlViV1BJaHhqL2dvc05qamJueTFSQTQrWkQyZURY?= =?utf-8?B?ODY0TXl4VElWVEM5YzBuclFSekJoK05QWlBWY2hFbkQrMVBYTW9TbHJJRXZo?= =?utf-8?B?cGZIL3cwRzl0ZFRaT2lZaVJPbCtZVE5XYWY2YkxTKzgzYUYxcXViRFZaWkN6?= =?utf-8?B?TUJrZmU1YmlyNkZHQVlZMU1zNHJUcVRDNXN6NklKNDdFYTZDc2ZnZWtjSzRj?= =?utf-8?B?a0UxdjdzRVFtZm9WNW9qbk5EUnF4SHpndEFhcVVRb2VUQlMwdmNQbTN3b09V?= =?utf-8?B?MzMrYnhwaXMreXVkU3FKMm9MT2RHUHRzN1dvTFdLbDJtcjVDZ1ZrdUhDNUtX?= =?utf-8?B?T3NLQjI4aXM1M0NzVWtSYjY1TTRUT0lWallIcVRJTWNHL3YwUnJSY0ZQWVFQ?= =?utf-8?B?Y0FDNGIyNjdyRzQ2S3NJcTJVZXNqY3N3OEFzQzZWdWpmY0YyWGVxNEY5Nmp5?= =?utf-8?B?bDJQTlZqUzU4VGV6c0FnOGlrekN3MG1ROVFFblgybjdLL0NSVG81N0hLWllD?= =?utf-8?B?ODdCaE9CT2pOK2JUZkdIZk1VMm5vNitmT3NZODBQMjJ3Z2hHcVZUVkI2MjEv?= =?utf-8?B?dFZYQ1BwSnBBV0lPZ1RvZXlPbU04RVB6NTh4c1ZnQ0VmY28vZFg0YjZ3TmFw?= =?utf-8?B?V1MxMnlOYU03MjBvUW5nMWdxdXgwQkRnMU5TN05JdVJCcy83K21kcFZXOE9K?= =?utf-8?B?WExPTDVYdXBDN0pTNjFIUXRyWFZGUVE5RGVZRjFJa1YzK011TWRiSmZpaE1k?= =?utf-8?B?VUFCaVVwb1VFM1krSXN3VkRUY3VEL2F4ZU45c1lNVEN3dzNVYlNweWRHblBP?= =?utf-8?B?b0VGUmlzelhVdlM2MDVSMzVJanRpRmlCanZXK3BBUlUxWXNYc0g5L3ZaMG5Q?= =?utf-8?B?WjVSaUVlRU5LUm14TTVTb3MyRHo3Z1kvRkUxU3hhOVQ1dFg0czlRcHdJNTFj?= =?utf-8?B?NWVTMjc3M0hRL0RDTS9iSnpvT0dnclNKQTJ3NlR1OWJabGpkU2FBSVIyNEJz?= =?utf-8?B?SjVFQ3hVeVVuaVRzMTk2bEg0TzRnTG9rd0wvMjM3dVZpeU40ZGluQlJCaDhv?= =?utf-8?B?NFYrcTZtaVRKejBQb1owNkVHSnBaNHN4UnM1ZVEyUkIzRzFKNTZuWmszT0Vk?= =?utf-8?B?Y1N5Yk1ySmdHSWpTMll3YXBnME1GRHVUbVRJMHR1WDNVQ0UvU25JRVRFVWZF?= =?utf-8?B?SVNoQlFrQW54d0VteVFWdElNZ3B5UW5oLzY1RGk0VDZnK3lobUh4WUtXR0h4?= =?utf-8?B?ZTJ0RWZGRXlFNTJ6WkQ4N1RkTzhHOE91R21xL1ZYMUgwWEtsWXE2RS9qVGhY?= =?utf-8?B?N1FIM3lXYjRENVpMU0t5WWVjRXZpN2RRN3NqR2VOMlJ3ci9uUUM2cHVWQXJE?= =?utf-8?B?YTlBdkZGMWNaUXd0VVZvdjNBWEU0TXp2djRnTnVFUDhYK2JiNUlrVUc0WE1v?= =?utf-8?B?bGJvWlpIcnNFSjkya2dIb001cGJZT1VNMlJGcUZVSVlRbFc4MitzNGgzV2JC?= =?utf-8?B?aDhVSDQzaVA2ZGptK3F5dFE3OVd0VlRldGFOU1NGYVZtY0ZlWnNONUJHUFpH?= =?utf-8?B?Szk2NVJvWndKYVVpR2crMDZYNGs1OWlHVnhoWW5BRy94MDgzdE53L3VLT2dx?= =?utf-8?B?MldKNGR6VkE0NWxGUjdodkFSTFdaWkNMQ08rRitDR1dpcDJCWllyQVV2Y0Jv?= =?utf-8?B?UFN2T1dQNHRoY3cycmhKZCtUTlJqN1FDcW9wVU1WVXFvUUdQZnkzcXpqRHZD?= =?utf-8?B?S0RWcktxN0VvTUQ1b1hMR3ZqSTVIWjAxUmFJYTNTSTZZMkphd1E0T2dtSmli?= =?utf-8?B?a0tkazBWTitaUHMwdTVuTUJvQndJNlAwNkVyQ3hrdWtxTUt6TFJrTFova1Nv?= =?utf-8?B?MjZsc1pOVlJ6OFhKUnF3NFpKSk9sRWlWczFJREZIOU5OVEV6TnIvaXd4cU9y?= =?utf-8?B?Z0dvRnFBR0FsR01BWVFUWXdhL0NnaXd4UnBhdzNRWXFnR0RZdmhWcFBMaEE5?= =?utf-8?Q?ltBDXYxTtgzVCsxYhv0MCAl+l?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 185c2047-5461-4c70-6abb-08db34da2f82 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Apr 2023 06:59:51.2661 (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: e5Ho+6NT5IQaSHfBRY5/rD/P4FeSRpmpO7p2aZR2FHEoe1BAiqEmEAK4WW+qEjCsBAv0ks27SLCiyov8P/grAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7314 X-Spam-Status: No, score=-3028.0 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 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: Introduce a special error indicator node, for the sole (real) caller to recognize and act upon. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -9164,6 +9164,9 @@ with the -M switch (multiple options sho /* Bad opcode. */ static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 }; +/* Fetch error indicator. */ +static const struct dis386 err_opcode = { NULL, { XX }, 0 }; + /* Get a pointer to struct dis386 with a valid name. */ static const struct dis386 * @@ -9265,13 +9268,13 @@ get_valid_dis386 (const struct dis386 *d break; case USE_3BYTE_TABLE: - FETCH_DATA (ins->info, ins->codep + 2); + if (!fetch_code (ins->info, ins->codep + 2)) + return &err_opcode; vindex = *ins->codep++; dp = &three_byte_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; - ins->modrm.mod = (*ins->codep >> 6) & 3; - ins->modrm.reg = (*ins->codep >> 3) & 7; - ins->modrm.rm = *ins->codep & 7; + if (!fetch_modrm (ins)) + return &err_opcode; break; case USE_VEX_LEN_TABLE: @@ -9325,7 +9328,8 @@ get_valid_dis386 (const struct dis386 *d break; case USE_XOP_8F_TABLE: - FETCH_DATA (ins->info, ins->codep + 3); + if (!fetch_code (ins->info, ins->codep + 3)) + return &err_opcode; ins->rex = ~(*ins->codep >> 5) & 0x7; /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */ @@ -9377,10 +9381,8 @@ get_valid_dis386 (const struct dis386 *d dp = &xop_table[vex_table_index][vindex]; ins->end_codep = ins->codep; - FETCH_DATA (ins->info, ins->codep + 1); - ins->modrm.mod = (*ins->codep >> 6) & 3; - ins->modrm.reg = (*ins->codep >> 3) & 7; - ins->modrm.rm = *ins->codep & 7; + if (!fetch_modrm (ins)) + return &err_opcode; /* No XOP encoding so far allows for a non-zero embedded prefix. Avoid having to decode the bits for every otherwise valid encoding. */ @@ -9390,7 +9392,8 @@ get_valid_dis386 (const struct dis386 *d case USE_VEX_C4_TABLE: /* VEX prefix. */ - FETCH_DATA (ins->info, ins->codep + 3); + if (!fetch_code (ins->info, ins->codep + 3)) + return &err_opcode; ins->rex = ~(*ins->codep >> 5) & 0x7; switch ((*ins->codep & 0x1f)) { @@ -9443,18 +9446,15 @@ get_valid_dis386 (const struct dis386 *d dp = &vex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX0F 77. */ - if (vex_table_index != VEX_0F || vindex != 0x77) - { - FETCH_DATA (ins->info, ins->codep + 1); - ins->modrm.mod = (*ins->codep >> 6) & 3; - ins->modrm.reg = (*ins->codep >> 3) & 7; - ins->modrm.rm = *ins->codep & 7; - } + if ((vex_table_index != VEX_0F || vindex != 0x77) + && !fetch_modrm (ins)) + return &err_opcode; break; case USE_VEX_C5_TABLE: /* VEX prefix. */ - FETCH_DATA (ins->info, ins->codep + 2); + if (!fetch_code (ins->info, ins->codep + 2)) + return &err_opcode; ins->rex = (*ins->codep & 0x80) ? 0 : REX_R; /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in @@ -9481,13 +9481,8 @@ get_valid_dis386 (const struct dis386 *d dp = &vex_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX 77. */ - if (vindex != 0x77) - { - FETCH_DATA (ins->info, ins->codep + 1); - ins->modrm.mod = (*ins->codep >> 6) & 3; - ins->modrm.reg = (*ins->codep >> 3) & 7; - ins->modrm.rm = *ins->codep & 7; - } + if (vindex != 0x77 && !fetch_modrm (ins)) + return &err_opcode; break; case USE_VEX_W_TABLE: @@ -9501,7 +9496,8 @@ get_valid_dis386 (const struct dis386 *d ins->two_source_ops = false; /* EVEX prefix. */ ins->vex.evex = true; - FETCH_DATA (ins->info, ins->codep + 4); + if (!fetch_code (ins->info, ins->codep + 4)) + return &err_opcode; /* The first byte after 0x62. */ ins->rex = ~(*ins->codep >> 5) & 0x7; ins->vex.r = *ins->codep & 0x10; @@ -9576,10 +9572,8 @@ get_valid_dis386 (const struct dis386 *d vindex = *ins->codep++; dp = &evex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; - FETCH_DATA (ins->info, ins->codep + 1); - ins->modrm.mod = (*ins->codep >> 6) & 3; - ins->modrm.reg = (*ins->codep >> 3) & 7; - ins->modrm.rm = *ins->codep & 7; + if (!fetch_modrm (ins)) + return &err_opcode; /* Set vector length. */ if (ins->modrm.mod == 3 && ins->vex.b) @@ -9966,6 +9960,8 @@ print_insn (bfd_vma pc, disassemble_info else { dp = get_valid_dis386 (dp, &ins); + if (dp == &err_opcode) + return fetch_error (&ins); if (dp != NULL && putop (&ins, dp->name, sizeflag) == 0) { if (!get_sib (&ins, sizeflag))