From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2057.outbound.protection.outlook.com [40.107.247.57]) by sourceware.org (Postfix) with ESMTPS id 1C92F3858D3C for ; Mon, 24 Apr 2023 10:35:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1C92F3858D3C 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=R/LzQbnkczE2bvlAevx/0eba2XeeMxqTJFhzejAmGZlZWAzxVzQPwBqavGefZCmDkUtwhab9bBxatWzTbQVSm58eLhWcNZldBTerE4v2vJ1I4QmTU/RuQcqBq3VRWQh9ufW0TArIUNd44qFAER61bOu5yr7agPfAVxJnMtYdAHOEwpNqc5g/A5Q1Y70HumxGHTZl9N9Y8BBEZQjCkRUGjMYt+VlkVd9AyuJX9XsMeQ+x8IH4SIJ2LfzLY0LkUaHObwMmZKZVHCeo9I7IC8HNn8IstxJQKf75SufZgIlyQB91dS/1wVW9RcqtJLfVyC90vJR9qS5jPStEIYSx08xn/w== 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=nZFvgbwhsN4SNOw0VqXRmYEE3SmLfBkKifUU6P2gzFU=; b=kSZ8HzRC9mJ4wD8hNGlhR7DkTSl0xtn3Ur5pwvSrFOzz8Rr2dCLjW9aUMZcPA9AS8cH2GUEtZfwFaoGA7su/wN5aQAxVo+Sg5V8JEQ2/uJ+sMcZpFHtXvXNrt/A4Soic/yCtGl803PQJGW+T1S/Su+gLop96G5nmgR65X6GX9qNZ/uS5G0vi2V70QcjKRy9tRPBuy5tlaMzNycjcoWvJIwCy0QTZqQLldyLRRr4AyeNe6cyS/X9s3odkAMPrGKixFVHYfGz8Ic62bGzoLPX4iZHhBaWi/pk9SKhT/JAK1uwLNE08T5zdfLehaN7xeIvh6o9uo5eezKHpggP46m4/GA== 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=nZFvgbwhsN4SNOw0VqXRmYEE3SmLfBkKifUU6P2gzFU=; b=JcBdetl6QdI2uUoKbAy2NiTWa2RfVFsH3s0B6gXoq7aEOwtDd7S2+824VthQmwscZrjPbUimokSu2QNZLkaPXlFhYiiFRYVR+bXLbRSrICzKwwPnMXj5J+1xFDtTqZxegXfJeNTN1G0BsQFMiOALpS3xEfIxJnKNfr9h0k/JeDh9NctxF6CsMvvEY2dOMHdre9CoETCj0+IwBG7FJ19h+Itt5eR2JEZ05YH9T3MxO1b1KQ2ImQ0e9qjXPC7b5ygAOmKBok4SBRfrSQCWJICfvKwczd+laaYM04gQVSIdwV6mOOTGuTn1vKP1we776So2aN+XMFmdpURO/OB5jZUcRg== 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 AS8PR04MB8135.eurprd04.prod.outlook.com (2603:10a6:20b:3b0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 10:35:35 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::52b2:f58:e19:56ae]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::52b2:f58:e19:56ae%2]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 10:35:35 +0000 Message-ID: <6115f6e1-3c9a-2bf8-10df-d8a7bb640110@suse.com> Date: Mon, 24 Apr 2023 12:35:33 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH 1/3] x86: work around compiler diagnosing dangling pointer Content-Language: en-US To: Alan Modra Cc: Binutils , "H.J. Lu" References: <61597ebf-cc5e-2029-6520-31f7adfeea68@suse.com> From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: FR2P281CA0055.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:93::14) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS8PR04MB8135:EE_ X-MS-Office365-Filtering-Correlation-Id: 70baab84-af9a-4210-e8a2-08db44afa374 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0a1ahrgBqksUUUqP2iQfgxgntmNai7lx2+LA9aNnG3T82kLL+qRJ/cMejoK7vipKlLBSX1hd1CABgAmXZOGtuMZpBTQVjYMubNa0x1I0sHDbhDpU4Y/7S/p063bbk6PhlcAQezRqSoCJAN4SP97inU6yMSAWIfbo3x0+v1x++02DnOICohabgq+a9Nr3KNihw5n8RTn6wx1N6RYjqvbSZtD8b97NU1w9cekTaywg4vde9QU15NAd58A86QddAT2VDlu6zZ8txL8nM71ITnD7mdZ66qTyotMaTHW2scu/H5Vddug4sZvuLbUft1ksywA0tgBig4Mv0ouwit+WhdDIbzImkUtD5uNr8a36ngw0IkVOHaYY46KCdvUFisrl1auTWIw8yqe6nXbl79ONTJGNb3PzwPINd/a4yXHQ66FWKkrfYR7/rLQTkKJPcXjRO87Kz3iN1dJbAgaXwU+goENn80sr9FEM8Xe/ivVkAPhGEnPUt6qUF2ZxQnt/uPTl1tJbEZ1NpKHdL0yYBGge7SaM+587cCALlbAc1pOm48WjzzsTxLrVMic1jqxdcieJ/IM30kaVSZzA8f6bHyALoO9mmc23uVZjteqKczehmqmAmG8qlR0zIvvJPwNl36P0/wsAIYbAsvhv7HToy77XZWvgMQ== 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)(136003)(39860400002)(346002)(396003)(366004)(376002)(451199021)(38100700002)(6506007)(6512007)(53546011)(26005)(2616005)(186003)(83380400001)(2906002)(8676002)(8936002)(5660300002)(36756003)(54906003)(478600001)(6486002)(316002)(4326008)(6916009)(41300700001)(66556008)(31696002)(66946007)(86362001)(66476007)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dGRhZGZLdEt4Qm92TTE4cVZvamlISDMwSm44aEkzVzJKaHczOEZBTUhkYmwv?= =?utf-8?B?S3Z4WE54MldMektkYVJDcUNaMEhrRTlVeXlCSHFSZGNTQ001WjJoSSs3azAy?= =?utf-8?B?czFBQ3dQWmJlRG5CaEhyZ0FIV3ZGbmZNcllMa0R6NW9GSitFOEloZi9qOTdZ?= =?utf-8?B?NDRSRFgwSlc2aGkvTW8vRVU3a2dKVzZXZVgxZm1XdzJJYXUrODd6VEN6V0gx?= =?utf-8?B?REREemJPbE55Z1NqREdIbkJ2eGM5NElLb1RBK2hqdmJnMktpVjVjNWJtTk1K?= =?utf-8?B?eVhOYUxXblpaQTFpclMzRHNGT0Y3NERjNkJ4QmtOclVvQTlJVkxMMm8xUGFr?= =?utf-8?B?ZmVmQStJZ0VCWktHRU1hK2ZZbmRJN0hLdFl3T2RYNk4zZkRKUTZVeTZIcDAr?= =?utf-8?B?d0lZSjcyNEhqUTdsL1NNUXU5cDljQ25TWW1hWWhLUEMyU2tXWXU4bzJvRm13?= =?utf-8?B?aGpUUHVuVk1kUzhHc0xHV2dMSW1kMHdLbWV1cnYxSTdiRGVMbklyRUpuajFC?= =?utf-8?B?Wk9oQUtBa294Y2J3eVRrSkl6di85ZXhoM3V3SWQ5cy9lOXV4bFNKV2pSV2NV?= =?utf-8?B?WVg3OVh1TGNFc0pPc0w1dTdoTVNrMHlpTk5reWJkQ1k2YjE3RVYyYnhwTXdx?= =?utf-8?B?RERhRmxsbXoycUhJRWdtaitEL2Rjb0ptZ3JSSFFJb0dOZXJQand3ZFhxS2lv?= =?utf-8?B?L1dMSmxCMUEzN0U2Z1pnYmtaRkgzTFVxVGpmWG9JZWEwUWZjQTJLRnlGSi9M?= =?utf-8?B?VEgwU08rdytIMDdGaXc5UTF4UjNhY203NnN3Y013TDFrUVFGVDJHTVlZME9V?= =?utf-8?B?OE0wSkpNK3VGY0RyK1JFT2dwV0xMbmZoMWQxRzlTbC9KZTVhS0NLM2J5c1JO?= =?utf-8?B?UFJhSVExVVRRd0p5Q0VKR3RMSW5mK0lYbUhRUlZ1dFd1WTNuaStZR3ZReita?= =?utf-8?B?L3V5c2VIMUxVZDJ5TWpTcEZtMmNPcXZJemZGcDBpbndFZmwvdERibEw1UXl2?= =?utf-8?B?N0tsWjhTTXMyVlNTV3Q0a09XSE5uZEVlTWxDak04RWQ1a0xYbVlqdnJhbTR2?= =?utf-8?B?UVdwSDhvRFpjTFZQd011SmNoN3Vqc1cxYnZUMlNlMElhYzE5bThlL0lieEFr?= =?utf-8?B?cGZvaXU4TVpOY2NqM0puS1ZuRmxsODZkYktLQlQyMnNzWFdrMlZRK1BzKzg3?= =?utf-8?B?elBGMjMydTNNRTBMbVhrQWN6NXhzWUpNSThYU0M1YStnYjNhU1VadlJyZTgv?= =?utf-8?B?T1VMSXBKVEpIYTVESmdQMDc2QzdWRDlqUG9mQWZIdzhYL1ZLbEl3UHc1T2R0?= =?utf-8?B?Wnc5VVR2bjRZWWhaU21VeVdlR3ZMTXhLR3VyK1NLeENsNjc2czh4d2dxWFFE?= =?utf-8?B?MEIyL2tHRlBlM0V4NGFNcWVqbzFsUkM3R05YZFZwSzBQWklBZ1FvbS9tWHNB?= =?utf-8?B?TEJhODRyZ0ZacHBVNEsvbHNCUXprdmEzQ21YZVJ4R3RoRXNtdUhCbzY1b3dI?= =?utf-8?B?NHZuWS9oUnR1amVvb2dsY1NCOENUNFREVnhQaGYvUENHWmxLMlF4b3FPMXhx?= =?utf-8?B?aDVwVTB1djM2bkh3Wmg4WUJPVm9TS1FSSWloRE9uZStmT005a2VLYWpTczdy?= =?utf-8?B?cEowR29rUEVzbEpGbk41VzFXcEdnbHN3T1hudmdVckxyMnEwc0pCR1hkcVpM?= =?utf-8?B?SkZwRHRvNFhBYldHbG9iWU9NTlF5dXRVQzdPWWkwbXpDZEU3aUUxZ0ZzUnhS?= =?utf-8?B?Ujd0U1ZpZTM1K0dWdVROcHhYVHdJbUdKQ29NN3liTHZneDUrQzFsVjBITzho?= =?utf-8?B?cC9MRnFXaFgzeEljMXdadmVZK0pyUkVDYVl2RlVsOHRBMkt0ZENrZ1BVZ2w5?= =?utf-8?B?YXh4VS9GQk9qWFZSb1Z1dDFPMTdnb002enBjTXBUL2RpTGE1dXhremV4b1dS?= =?utf-8?B?M3ZtbEVWd2JmN2dxWkZvcHJyb1BkYTBLYW41ank2RE8zSVB0dlFDR0YvUWZj?= =?utf-8?B?a3dDYnY3K1NkYmp5eVI2ckVqQnJWdFgzMjU5Y0lQZXA5RjBJTWJJQktqNWJz?= =?utf-8?B?akF1d2NpQUNqVzNHY3h5TUZHelM3U3RNZHdUTHpEY0VhUHFheE9EdnhsZXlX?= =?utf-8?Q?10y6TKUkwLBHzRFAABMOGDjeS?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70baab84-af9a-4210-e8a2-08db44afa374 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 10:35:35.6732 (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: sAXnP+v9QBKfddQYMxrl0dABzBrTo6HurR6ysjr4qzfQDBZ5s53hQa03zmD+SYyNVsvwKss8P/Fl1lnc8uM22Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8135 X-Spam-Status: No, score=-3034.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,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: On 24.04.2023 12:24, Alan Modra wrote: > On Mon, Apr 24, 2023 at 09:34:27AM +0200, Jan Beulich via Binutils wrote: >> For quite come time print_insn() has been storing the address of a local >> variable into info->private_data. Since the compiler can't know that the >> field won't be accessed again after print_insn() returns, it may kind of >> legitimately diagnose this. And recent enough gcc does as of the >> introduction of the fetch_error() return paths (replacing setjmp()-based >> error handling). >> >> Utilizing that neither prefix_name() nor i386_dis_printf() actually use >> info->private_data, zap the pointer in fetch_error(), after having >> retrieved it for local use. >> --- >> Let's hope that this addresses the observed issues, which I haven't been >> seeing myself. And of course there are further return paths which may >> (sooner or later) also have such a warning trigger. > > I'll be surprised if your patch is enough. I have the following in my > local tree, tested to work with a freshly built gcc-13 compiler. Well, I was working from the knowledge that previously the issue wasn't diagnosed, so touching all return paths may not be needed (for now at least). I'm also always hesitant to introduce any kind of "goto", but ... > Would you like me to commit this (and revert your patch)? ... since you've gone that route and done the work, sure, feel free to go ahead. Thanks, Jan > opcodes/i386-dis.c: In function ‘print_insn’: > opcodes/i386-dis.c:9865:22: error: storing the address of local > variable ‘priv’ in ‘*info.private_data’ [-Werror=dangling-pointer=] > > * i386-dis.c (print_insn): Clear info->private_data before > returning. > > diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c > index f021bdaa3e7..01e5ba81723 100644 > --- a/opcodes/i386-dis.c > +++ b/opcodes/i386-dis.c > @@ -9731,6 +9731,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > { > const struct dis386 *dp; > int i; > + int ret; > char *op_txt[MAX_OPERANDS]; > int needcomma; > bool intel_swap_2_3; > @@ -9887,16 +9888,21 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > i386_dis_printf (&ins, dis_style_mnemonic, "%s%s", > (i == 0 ? "" : " "), > prefix_name (&ins, ins.all_prefixes[i], sizeflag)); > - return i; > + ret = i; > + goto out; > > case ckp_fetch_error: > - return fetch_error (&ins); > + goto fetch_error_out; > } > > ins.insn_codep = ins.codep; > > if (!fetch_code (info, ins.codep + 1)) > - return fetch_error (&ins); > + { > + fetch_error_out: > + ret = fetch_error (&ins); > + goto out; > + } > > ins.two_source_ops = (*ins.codep == 0x62) || (*ins.codep == 0xc8); > > @@ -9909,7 +9915,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > i386_dis_printf (&ins, dis_style_mnemonic, "%s ", > prefix_name (&ins, ins.all_prefixes[i], sizeflag)); > i386_dis_printf (&ins, dis_style_mnemonic, "fwait"); > - return i + 1; > + ret = i + 1; > + goto out; > } > > if (*ins.codep == 0x0f) > @@ -9918,7 +9925,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > > ins.codep++; > if (!fetch_code (info, ins.codep + 1)) > - return fetch_error (&ins); > + goto fetch_error_out; > threebyte = *ins.codep; > dp = &dis386_twobyte[threebyte]; > ins.need_modrm = twobyte_has_modrm[threebyte]; > @@ -9942,30 +9949,30 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > > ins.end_codep = ins.codep; > if (ins.need_modrm && !fetch_modrm (&ins)) > - return fetch_error (&ins); > + goto fetch_error_out; > > if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE) > { > if (!get_sib (&ins, sizeflag) > || !dofloat (&ins, sizeflag)) > - return fetch_error (&ins); > + goto fetch_error_out; > } > else > { > dp = get_valid_dis386 (dp, &ins); > if (dp == &err_opcode) > - return fetch_error (&ins); > + goto fetch_error_out; > if (dp != NULL && putop (&ins, dp->name, sizeflag) == 0) > { > if (!get_sib (&ins, sizeflag)) > - return fetch_error (&ins); > + goto fetch_error_out; > for (i = 0; i < MAX_OPERANDS; ++i) > { > ins.obufp = ins.op_out[i]; > ins.op_ad = MAX_OPERANDS - 1 - i; > if (dp->op[i].rtn > && !dp->op[i].rtn (&ins, dp->op[i].bytemode, sizeflag)) > - return fetch_error (&ins); > + goto fetch_error_out; > /* For EVEX instruction after the last operand masking > should be printed. */ > if (i == 0 && ins.vex.evex) > @@ -10055,14 +10062,16 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > if (ins.need_vex && ins.vex.register_specifier != 0) > { > i386_dis_printf (&ins, dis_style_text, "(bad)"); > - return ins.end_codep - priv.the_buffer; > + ret = ins.end_codep - priv.the_buffer; > + goto out; > } > > /* If EVEX.z is set, there must be an actual mask register in use. */ > if (ins.vex.zeroing && ins.vex.mask_register_specifier == 0) > { > i386_dis_printf (&ins, dis_style_text, "(bad)"); > - return ins.end_codep - priv.the_buffer; > + ret = ins.end_codep - priv.the_buffer; > + goto out; > } > > switch (dp->prefix_requirement) > @@ -10073,7 +10082,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > if (ins.need_vex ? !ins.vex.prefix : !(ins.prefixes & PREFIX_DATA)) > { > i386_dis_printf (&ins, dis_style_text, "(bad)"); > - return ins.end_codep - priv.the_buffer; > + ret = ins.end_codep - priv.the_buffer; > + goto out; > } > ins.used_prefixes |= PREFIX_DATA; > /* Fall through. */ > @@ -10100,7 +10110,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > && !ins.vex.w != !(ins.used_prefixes & PREFIX_DATA))) > { > i386_dis_printf (&ins, dis_style_text, "(bad)"); > - return ins.end_codep - priv.the_buffer; > + ret = ins.end_codep - priv.the_buffer; > + goto out; > } > break; > > @@ -10156,7 +10167,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > if ((ins.codep - ins.start_codep) > MAX_CODE_LENGTH) > { > i386_dis_printf (&ins, dis_style_text, "(bad)"); > - return MAX_CODE_LENGTH; > + ret = MAX_CODE_LENGTH; > + goto out; > } > > /* Calculate the number of operands this instruction has. */ > @@ -10264,7 +10276,10 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > info); > break; > } > - return ins.codep - priv.the_buffer; > + ret = ins.codep - priv.the_buffer; > + out: > + info->private_data = NULL; > + return ret; > } > > /* Here for backwards compatibility. When gdb stops using >