From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50073.outbound.protection.outlook.com [40.107.5.73]) by sourceware.org (Postfix) with ESMTPS id 4F3FF3888C48 for ; Fri, 10 Jun 2022 13:35:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4F3FF3888C48 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m/4Iu6ChCTpL2gbdxLmXiNK10QM89Sf/LmX3UG1q0SFYe5EdkOeyohIlRsjwskzIcwCmlbGr3tx2DAZF8iIJ41ONtY82tOjzZFEnKF7E7gdmso0ach/VHK3R/itfuYoOeo1imIiCCAxdYHqfytr7s82R1HKyDgj5P2AeTjbrT3OEdOgGJgErfA9h35tTAhbmF/lIgkyHr+oYppcHCtBhifm9gKnVy1b9oviViQF6F6zbGYfzARlLM/Tf9hD5HUYEiDER1mSvCw1kW8U7Ov8DioJ1MPfwjb8G3odgLLLiXBqDt/Eghmq9MeJtk361mteq6mRo1INi6G3jA2aPDB193w== 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=e++t6DkKbLBkZ7QsANQWivUyVf0a3Q9Nct5zQ0GntMc=; b=fauGGSib6DsZ9t+HuD1Yf2mU6g8rAyws2iaQZ1bH4Nx7X7hu9vlVKy2+NplUcZ5gJxAn6hvCKS5xni2693gLHfdYSQQ8LmsV7+M4t5pTHNvMFvh+WOb2IZW+L3261dJaGRuZZ8VBuhUChYIcUrnMiS5LuByzrfZ/OBOmcLNES2WTc4KKp4kyIbmfMTvUwmRC4jfCTG1XOvGwmTx21+LLgVhg2xPFYKK0Mk808XXDC9m9/XGgIKTdDiq9UsPFhBxAXcnSM6FQB0senNizwQxNMX66ELX20zBVoleppB1Nz4ar5BHx8q7MZNZm8x/2h2gc821mCjBUqhWB/wke2Te5PA== 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 PA4PR04MB7806.eurprd04.prod.outlook.com (2603:10a6:102:c9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.14; Fri, 10 Jun 2022 13:35:31 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5332.013; Fri, 10 Jun 2022 13:35:31 +0000 Message-ID: <322f3289-8467-c6e9-54b3-24d420818177@suse.com> Date: Fri, 10 Jun 2022 15:35:29 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 2/4] x86: shrink prefix related disassembler state fields Content-Language: en-US To: Binutils References: <6fd28ca0-2af4-7335-18d3-31036dea7a4f@suse.com> From: Jan Beulich In-Reply-To: <6fd28ca0-2af4-7335-18d3-31036dea7a4f@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AS9P251CA0020.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:50f::25) 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: a3a67798-5c7d-4c60-4508-08da4ae616d4 X-MS-TrafficTypeDiagnostic: PA4PR04MB7806:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UPghddU/Va7EsG2rJb0Nbmf/m6Sk3F4EYWxKvib4SmZ+OLm8KA+5pKmvEjGA8yz5jcsIxQTVc6cj03ohb5OrVDJQQuLqWIJCNfxacB/tr0DFMol6/9kObaUCZVwe4cgPeE7Uhwx5xKi/DqnWt9OnvOWsnrwuXmN8pJaYz70G0vyML9UbU5qgFmLGRKZ2OS99K7xo5ErfZtI8text8RFZcWh63w04LCpeoG8MN3mcj+Mm3goKwykRAKTUYJ7FBbrxSFwURDCd9Lxg7fVfxC2OJf2OwMGC8IdYGgx6gXA6D1uHlttWv7r04MBfp43B1k5TmxbEZPRdPEue2p8zfkBh/JostMeC/qCqQCQpmHFsyZoDD6l4L5dQE6DLnEQhkVAx1pFMiKQDZkFy/kaeI9CwqLv58g6+ft44SzsXFV1nITnmzlORS09Z5sTQzh4dXqb3T2S+R65DE79wI8gf6MlTm2E07PiLE0cR1XC14i1LwRJqlOmoJ6zRDrfb59ZDg30r9AfuV1SEUKwIdbRiT7QKYB6EKKAZqroz0xioClN+daFW611TKHMa6h/DHKv5bDlPTTDCb1asDiSQa+ctoKo/LiSHoFR8lflt0ZXnMZNJvzZyhXDHfWfPcLErsis5l7GoOoxc8SvIsIX9duvpqXDWMdCtUw3jSc2uQiOgenMI05JEGmvudD+edlQXyMM7l0H5Wm9rB5hEumMDw7zF+9OgNBPiAAXEYHZZi+byb4DjZmZA3bb2rTic1Z/WYVOThvR+ 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:(13230001)(366004)(6916009)(38100700002)(186003)(86362001)(36756003)(31686004)(2616005)(26005)(6512007)(66946007)(66556008)(83380400001)(8936002)(66476007)(4326008)(8676002)(2906002)(316002)(6486002)(6506007)(31696002)(5660300002)(508600001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bUFVSXQwWDJyWTdScStjcjRQbERNb2ZtOGQzU3dIUjhxOGhpMUlaVWRLVTBj?= =?utf-8?B?aVI0YnN5QWwxbVZSYzk4YVFobVpIN2RsVk9vMU9TZi9Ec2t3M2Y0OEVIZkRR?= =?utf-8?B?ZnR5SGZEMG8vT1ZhM3d4bWIzRmwrVkN3ZnIzWStMMzA1SlhtMnNsVEU3Wktn?= =?utf-8?B?Mmx1Q3ZaVnhYc2xmYXY1R2c3bDZoeWc3M3Y4eFVHQnc3NEtPQmd1VEJXQjBI?= =?utf-8?B?ekViZGVNcTFKbUtMRUc3SjlSNEpKaUZ1dDNyOWx2KzFZL0ZpTzNEb1lnTUtt?= =?utf-8?B?NGR3MU5tSFFuSHM4VmZ4MjhNNUM4bWd5aGRJcVdJa0d5WlhUcWxLeWNMelRO?= =?utf-8?B?eEtva1NjT01MTkIvblU1YVBGNnJBbXUyb25Nek5WeHM0M29uRXhCQ0E2UnVp?= =?utf-8?B?azNOQi84bWYvbkNaNTdCQWlobFJoSFM5dC9ZRWYxSk56MUM0VjVGVUlWeW9X?= =?utf-8?B?b0UwVmE4QXBCc2hwT1VaOVNXYnZmdGRVNjFUaUU1T2swMmJpOWlJSmJmdkhs?= =?utf-8?B?VW90aERVSzh2Q01YQlJCWlhHaTRJcnFDTXVLbFJFZTNlaENSV1lUblRnbFo5?= =?utf-8?B?SXN0d0ZDZVdDb21CRWNlNWNaVUVnUDV1L29UQXBReFZNalMxREhRMHhZVEFB?= =?utf-8?B?d3RoVGdoVGZLWkFOM2w4Y2xNSnkwZW50V0d5THdvVGpKQWRvQ1J3TmVqYVph?= =?utf-8?B?aW1vY3hRZUtDbCtWOWI1Ylk1MlQxTm8yb1ZyckpvZ1R5V1o3RE9VaVlaaUJW?= =?utf-8?B?M0YrdzZUTXFzVVFVVENoSUU1a1hwL1VYRE1rOVJ4Ky9jbU9aMk44QW9HQ1Er?= =?utf-8?B?dUk0djNiWjVkR1hMVGYrSmVxems3YXdsOS9tbTh2ZmpYbDV6U3ZVMmNGWXla?= =?utf-8?B?WTRtb0hkN2h3eW9UaUg0V0tUOGcrcDEzdWFMcjZ6S0tmOThhSVE3SWVmMTdj?= =?utf-8?B?SjZ5ZFprRzRIRkVUYlRpVFQ3dmpIRkpjV1FDQlN0K0VmM3l4V1JpVVdNbGFD?= =?utf-8?B?WXZlVW9rUVJMbTNKZHZEZkpkL2xjSktua250alpkZkJOTkFVV0NMbDN5a0h0?= =?utf-8?B?Rng5b3V4eEo1b3ljYXp6T0FlN2g0RHpiNzNrZlNPdStaOGNvWjJrUDU1Qmgz?= =?utf-8?B?L25CS1NTUldqaUVSVVZNNzNsN0wwU0ZydnM2UWhwWm9COHhYWjl0UGdEeHFV?= =?utf-8?B?MjhuamJ6cktxTTcwUFFwcnpiUU1YdFd6S0dwRTZHSkNFUy9jbGwvU2NUMHlh?= =?utf-8?B?TnByRjU1Tmp1ZWdvZnBueTl4dmFsUXNZMm9RQU1PelZqd0Z0NmhaSE1qa2xp?= =?utf-8?B?aEdMZkR4Y3ZCMmwwSEJkYlJkL1h1aGVDdlBDeXliNnI1MWpqK0tqbVF5WDRD?= =?utf-8?B?QUZhTFRQWVY0N3JYY2RCcjYyWVg2WXNQNW52aTcyM3VWZ0ZUMTJ2T2VjRzRm?= =?utf-8?B?ZWZtNDJnYS9lYnpicjV0ekVGM1FtUS85MzlGczVsSTdnZ0laRlVsYTBxckxK?= =?utf-8?B?QnQ1Q25QWFBpWGVYMVFiU0tWOU44MUswdHR4dm1SY0s1MDFtNkNuVFBQUmFG?= =?utf-8?B?UlFENzQxd1ptWTd0YmFNL3Y1cEVVT0xSdEVZcFc4ZC85bWQ5UWFNYjFVMElS?= =?utf-8?B?YldhMVFQa2VvWkJQNnF3ZU5aOHRRdW1ZVHRlei81T1ZCTGk5RERFUkF3WG43?= =?utf-8?B?Rm9DK3RwSGdwVjdnTXVIL3VaY0doc2JOK0lEQms3aG9CUEVRK09kM3F2VzFO?= =?utf-8?B?aGVVOVV3ZXZyQW05cys1UGVyenpKMi9TUStKUnJ0QncwVXUwanVMb1MzWW92?= =?utf-8?B?aC93S0VFN0owT1g4RGI0WHE5SUNLeUVnYWdSRFRFQi9DTmRqK1M1eXBRV0hW?= =?utf-8?B?MVVNdUZHaUVpK3FiUSt1UmtXS0tLdjhTRFQzR2dhNmoyY080emh2K080Mnly?= =?utf-8?B?KzdabmQxK1pQMFprTGIrbGtlaVNLcmNXNGFxZDJqMDIvWExyOG5oS2tWdUtk?= =?utf-8?B?ZG8yTzExd2NBU3JvcDNVdi9NWFA5NkY2RHZJWXdzM1preTBZMW1JR25zalBr?= =?utf-8?B?UGZqb0VHVXBMTm9jd0RKZS90WUVpL0VFZHg1dUNQdW9NM3V0TDFYdjA2eTJV?= =?utf-8?B?bEhKbFVLNys3dENFM2NHOU5Jd1FvanF2cWQ5dEFYTjh6d3JvT3pVaytYSGhx?= =?utf-8?B?YjQxSkl0cGZzQmdDRHZUTW9zNExtd3ZOaEFxaXorYXgvTGhHTURxeWc0VjNJ?= =?utf-8?B?eEk2SGUyQmdqL3lXaThycEFLNzNRdWdkZlZ6OXplNDNmRU1jWnYzRjlBOC9m?= =?utf-8?B?RkJMUTdlWkxnakJIdkl1KzFJNzBoVVU0Um5wOEtmNU45Y0QwR0daQT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3a67798-5c7d-4c60-4508-08da4ae616d4 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jun 2022 13:35:31.3852 (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: b1u6xPVdOF8lZWjx1FWL7DmqGd97yK6drspWYu+tzQfih7pPJ6d/cV6nSrYjKhLRio1v6YsYvQo8pUmm9bXQPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7806 X-Spam-Status: No, score=-3031.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, 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, 10 Jun 2022 13:35:35 -0000 By changing the values used for "artificial" prefix values, all_prefixes[] can be shrunk to array of unsigned char. All that additionally needs adjusting is the printing of possible apparently standalone prefixes when recovering from longjmp(): Simply check whether any prefixes were successfully decoded, to avoid converting opcode bytes matching the "artificial" values to prefix mnemonics. Similarly by re-arranging the bits assigned to PREFIX_* mask values we can fit all segment register masks in a byte and hence shrink active_seg_prefix to unsigned char. Somewhat similarly with last_*_prefix representing offsets into the opcode being disassembled, signed char is sufficient to hold all possible values. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -175,21 +175,21 @@ struct instr_info unsigned char *insn_codep; unsigned char *codep; unsigned char *end_codep; - int last_lock_prefix; - int last_repz_prefix; - int last_repnz_prefix; - int last_data_prefix; - int last_addr_prefix; - int last_rex_prefix; - int last_seg_prefix; - int fwait_prefix; + signed char last_lock_prefix; + signed char last_repz_prefix; + signed char last_repnz_prefix; + signed char last_data_prefix; + signed char last_addr_prefix; + signed char last_rex_prefix; + signed char last_seg_prefix; + signed char fwait_prefix; /* The active segment register prefix. */ - int active_seg_prefix; + unsigned char active_seg_prefix; #define MAX_CODE_LENGTH 15 /* We can up to 14 ins->prefixes since the maximum instruction length is 15bytes. */ - int all_prefixes[MAX_CODE_LENGTH - 1]; + unsigned char all_prefixes[MAX_CODE_LENGTH - 1]; disassemble_info *info; struct @@ -276,13 +276,13 @@ struct instr_info /* Flags stored in PREFIXES. */ #define PREFIX_REPZ 1 #define PREFIX_REPNZ 2 -#define PREFIX_LOCK 4 -#define PREFIX_CS 8 -#define PREFIX_SS 0x10 -#define PREFIX_DS 0x20 -#define PREFIX_ES 0x40 -#define PREFIX_FS 0x80 -#define PREFIX_GS 0x100 +#define PREFIX_CS 4 +#define PREFIX_SS 8 +#define PREFIX_DS 0x10 +#define PREFIX_ES 0x20 +#define PREFIX_FS 0x40 +#define PREFIX_GS 0x80 +#define PREFIX_LOCK 0x100 #define PREFIX_DATA 0x200 #define PREFIX_ADDR 0x400 #define PREFIX_FWAIT 0x800 @@ -8532,13 +8532,13 @@ static const struct dis386 rm_table[][8] #define INTERNAL_DISASSEMBLER_ERROR _("") -/* We use the high bit to indicate different name for the same - prefix. */ -#define REP_PREFIX (0xf3 | 0x100) -#define XACQUIRE_PREFIX (0xf2 | 0x200) -#define XRELEASE_PREFIX (0xf3 | 0x400) -#define BND_PREFIX (0xf2 | 0x400) -#define NOTRACK_PREFIX (0x3e | 0x100) +/* The values used here must be non-zero, fit in 'unsigned char', and not be + in conflict with actual prefix opcodes. */ +#define REP_PREFIX 0x01 +#define XACQUIRE_PREFIX 0x02 +#define XRELEASE_PREFIX 0x03 +#define BND_PREFIX 0x04 +#define NOTRACK_PREFIX 0x05 static int ckprefix (instr_info *ins) @@ -9519,14 +9519,15 @@ print_insn (bfd_vma pc, disassemble_info if (OPCODES_SIGSETJMP (priv.bailout) != 0) { - const char *name; - /* Getting here means we tried for data but didn't get it. That means we have an incomplete instruction of some sort. Just print the first byte as a prefix or a .byte pseudo-op. */ if (ins.codep > priv.the_buffer) { - name = prefix_name (&ins, priv.the_buffer[0], priv.orig_sizeflag); + const char *name = NULL; + + if (ins.prefixes || ins.fwait_prefix >= 0 || (ins.rex & REX_OPCODE)) + name = prefix_name (&ins, priv.the_buffer[0], priv.orig_sizeflag); if (name != NULL) i386_dis_printf (&ins, dis_style_mnemonic, "%s", name); else