From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2083.outbound.protection.outlook.com [40.107.21.83]) by sourceware.org (Postfix) with ESMTPS id 82E5D3858D1E for ; Tue, 21 Feb 2023 08:26:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 82E5D3858D1E 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=L1Z2mIiyLGcAw3y3s+pcIcUzvfXn7osYL2bdX+zNDpj9C5uaOsp1sDmtarzZfz9Ml8yDzshcQpvd9Au4QeX+60Sz55jKMZipM3c5YB48jJqAf6l63kGLTrz8XzGoljk3EXQy3Si2s3E8cbDPZfHnG52WvJjHAozw/F66CrZBol3G6hMp9R1TF025kqlyMfRUuK6IlaViMrhrdSvjhfjfcJ6OKlJZA6+g8oPo1MTOQ88XhUQwZJ5ymTNGFevgPQ91LATAz/2jdvyxSzRoQOU8O0Fr8Z3Vx99J0HTy0akzjS7SiWFq6N1mZ1mYU60L4NYGgpF2j7xCKyP+oOnBvVHgrA== 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=PtP6rhqqUXetUEAHkvJkDHYaIlGwvz5oB2/BSn517I8=; b=YvCQOCMZfgu+SgoMxSphpi50nW0UsllWwExdomkca23LAC2plhn+K+9bBr3dZlUYBOmJ/24E23+FpY/phDKBPOr3cVfEpKgeEi/c86SKKkvp0mjGwwbliO8vgV/ZRhk2bLd9+U+MLB5UL6QGBAVejukjHHukgU9bQBl7/+Bi+yiFp5u5njBoOnc1O+6lMF32FNqvOrOr4+XbREcE55meKJEcHSyf7hM9KupLxV5s6/cfKaKXAJ6fBkCRt72qNr6jFMRNMGpdTHiSH4WCPtGLuzRm4Yue4CwFBBFCExtOtqBAPxecgGJoJMfYUBs8iwjH9rQ6HKZCwYiVmFILq1phUQ== 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=PtP6rhqqUXetUEAHkvJkDHYaIlGwvz5oB2/BSn517I8=; b=1DsLYL91r915J+8UMuoEfEeeM5eAPZbHlPsN/yq8gNQG9I8eSQ0f3qzrlHC5B+jpik95JmXUF/WFM+8iye7qm5OjQ9AcS6x59+4EtAAFY/mYsiVNrI1fdFwqhHNWOv7AFr8IGlSAwFxnaZxxLoe8w1c1YtoxAkvK+JVUoJtJWkMvPGWf2y1RNEr53/XQA+BevM4p0liuIKsmqZoeQTrTzQNltVZGDAOGgsk3fxffYtNsZghI1MELONoHOozxBgTQv/4PTo8OmEdLMSAeph9v+CdQwKvt7x9A9STgPOdoZ4u4a4tsxQvoiAGKUW2t/IuOHG6Nz7vWRRktngplKhpOCQ== 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 AM8PR04MB7923.eurprd04.prod.outlook.com (2603:10a6:20b:24b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.18; Tue, 21 Feb 2023 08:26:31 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e138:4fc3:705c:d178]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e138:4fc3:705c:d178%7]) with mapi id 15.20.6111.021; Tue, 21 Feb 2023 08:26:31 +0000 Message-ID: Date: Tue, 21 Feb 2023 09:26:33 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [PATCH] ld: Sort section contributions in PDB files Content-Language: en-US To: Mark Harmstone , Nick Clifton , Alan Modra References: <20230220141328.20441-1-mark@harmstone.com> Cc: binutils@sourceware.org From: Jan Beulich In-Reply-To: <20230220141328.20441-1-mark@harmstone.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR3P281CA0151.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a2::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_|AM8PR04MB7923:EE_ X-MS-Office365-Filtering-Correlation-Id: 885a0e32-fd3a-484c-2921-08db13e555a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JBt6r8RGe+emozs/ononCXVuYyaDKgy0JkLc+vnXSE6rIzOZljLrpaYaNq9HbRIElp+EbLBHNWrW8x9bfXfeXixJe8kFbQsTdzDrPCQoe/W5ZDoJfvodJE6fEVW70MhVV5ykUn5f1Y2OjvgXqGt1Rc26E/fmMBti92ThWztJ0hd/yRUss1rasup0+BhysALSgRJxUE3pba9oXdMLbSGX0P5OKvrGswuvFSbWWAul7c1E8jlHZDOsnnQK/fcKnhg3qUkAzLf3gfAG5sF/BBcRbX9gTxhfDcaubx59KMJsE7TvHn0wgOG3X0R0qgjhQPlxl9NpSWpwBQhHHnvE0aovIs2iJ27GDlQZxItPrxl26uEIVD1JCgP1UzUnIXFMPikRF+PxZvVvvKAwrTNfKelI9zqXTO27O3wBQaUgVZ/O/6fVk+01giDdAOKq4dfEcCwaM7qPraLtle3cUeIaHdK7WnGhuKV1GkfkDuft3Uk5RH229nRaUWcGWU+kAf1pe8h3UscFV88f2U2KtlgqjCteph1QQrp70w2/QxYXsJQ0QG4oKmN8DO6mbUavr6OdCz+obBE+KXaE7BhECizZSUY4i+LJKm3+N85cB8q4n8P3vfFwBfZFRmIl8hf5nm7oBQqQ2+WLDZ+OVh2cg3xEL8WwRMcXv/uOyqZ9AVno7AkI7UvvKScTvjZE5X3cb3NSFqZXGXE1oJZKkRArJ326sONB1lhxRaoEDvpQ/mIOczbG5jU= 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:(13230025)(376002)(136003)(39860400002)(346002)(396003)(366004)(451199018)(2906002)(83380400001)(66476007)(478600001)(86362001)(66556008)(53546011)(5660300002)(110136005)(36756003)(316002)(41300700001)(8676002)(8936002)(38100700002)(6512007)(26005)(45080400002)(4326008)(6506007)(186003)(2616005)(6486002)(66946007)(31696002)(66899018)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MCtrV040dlcwMnc4Y0pXWHBMQXZISmUyVHBNMG12Qmo1S3BSL0UrQ0pGZW9G?= =?utf-8?B?a1lLTUpzczJwK1l5UzdQdFZ5VkNoYVNid2NTeWRmWWpTOWdQSjloamRkOG12?= =?utf-8?B?bm56Q2poYkpHYUt3Umhmc3VVU3FTZEw4WkNiaXU1OUpseXFscXh1TEhwM2Nn?= =?utf-8?B?VnNwTzk0UnFkaEc2ekk5WTk3MnErWEpVcEF1cy9pWjJxRGRQRXkvTVBNWC8z?= =?utf-8?B?WlRaOTVyUng1VS80ZlUzbEtQTTlGZzd0LzNKSU9MWkp5cGZjeWpNSXhwbVZJ?= =?utf-8?B?MHpYS2xZL2ZFcWJiYkEyaE15TzNoRlNEcUdzZ3BwQmVCVXQzRGVvRUZUNlZU?= =?utf-8?B?cVFNRFFrZGcwdUZyNkg4aUV6N3NKMmU3VjZ5U1lYN2x5Qk1YMlN3V1U2VTFC?= =?utf-8?B?TVJncUdaQ1B0RU9Rbk1MRm5PSXZVL0RSSHZVYjlwMW5GRm9vN1NFbUtURzFQ?= =?utf-8?B?TE05clo3VHIrNVdOSFdlZytWNHVuU0twZlhvTVBhbHFMU3RRcWpPbm5lMnJ4?= =?utf-8?B?ME1RV05zTk1iQnQ5YjRPeWdwdXJWRWVDZjlLWHRRSSt6VkhBcjB3VTRlcUJE?= =?utf-8?B?Z3I1ZHR1a1JGNXJ4NmFTOXErNGR4cE53aDM0T2hMT2FZYUN4ZUxPZm5RVG9h?= =?utf-8?B?TlNOZDdFY3BjWXp1azJLWTNPMVJ4UENDUVhGR1BnUVQzMnpVMjNZYUVrbmRp?= =?utf-8?B?WFJuYVZyYytuOVE5bmtjNXBpQkkxRTBwYlJGNEN0b0ZUVVNNKzRsNTNFSjc3?= =?utf-8?B?WUdGRlNHTS8xTEhtMW5IazFZUlhMeVJZRmhmNjdXVFBkN3JyMTRGYjdxZDJY?= =?utf-8?B?czJ0MFpJakxtdXRtYWt1YVNXY2NZcDVvdlg0RU43N1BJamtEWFo1dFdOb2E0?= =?utf-8?B?SkgxSDdhSTY2K0thVTBIZFY0Q0lmaWthbzdEaXA0Mk01VmZXUzJqcVVhVWpD?= =?utf-8?B?TFljOWxsT2JCYVZRTm82cmJwdGttMXF2bHJ6N0lOL2dHUGF0cUFCTEdwU1hN?= =?utf-8?B?eWlxVitZd0lHMFNNbWU1eDBVR2UvUW9CRUtZbko2SGR0ZHNHMUg5aEE1ZDhI?= =?utf-8?B?RTYxaThSdkNFQmgycGFycFJ6UnNvUEcvUmhIS0t0MzlhM3htQVBMMVpIZHVr?= =?utf-8?B?WVcyb091ZGxDMXBzUSsxMm9PK3RYWGtlZEp1a0Q0cE4vaDFzS0pub2NVWDhH?= =?utf-8?B?bjk5ZmIxOXZVVTJRNUoxdmx5bmlDZEFCck96RWxhSk5BOWx6L1dBZUJtWUhW?= =?utf-8?B?RVg4clcrdGY1R3RWZG9Kc0Y1WmhEMVBJajUydlhLbEU1K3kzVnh4a1Brenh6?= =?utf-8?B?dTZIbTZRUkJXVnprQ3drRVdLRzM4dFZDY2N5Tm1XbzRLWmVyM3dOYmtGdnZB?= =?utf-8?B?VnpCaEtGN1ArdVpJaHBldHlwVktCSC9RV1JpdTdKOEM1WER0bjlvdG5TZDNF?= =?utf-8?B?TE1rUm1rY2lxYmhYUUlrcVFUcFdkQ1ZEMXBzYXNyVUtCTkxsNmtPakdraDZ3?= =?utf-8?B?RGRMMzVZK1pWQUtqOC9ZMHIvQWxpbFNmWjdkZ0EydHpYVTkyZHpmbCt3QnJW?= =?utf-8?B?alNzNmRuK1lGSDRUNWFpRVpucG5OTkhIMXlvUFJkc0NuVW5uZjF3Z1NCU2Fm?= =?utf-8?B?RVJUUjFUMVY2UjczcnRFTmRTMDlobDBJYjhCazFrb2owa2dER1dZQlRYSXVi?= =?utf-8?B?S1BMclNZc3NFTlZzTDlURzd4OUcxZitsSTNCSjFjOFpEMkYxV3gydDVGRWtU?= =?utf-8?B?eWhBL2Q1bEVZcG10eHNOS3M1azNpQ1RFR0J6NlFLSGdoeVJNQXYvMi9jNDRy?= =?utf-8?B?NXhUcG5jblllaHBOSjFVSkdaZDBpeTFFK3JOdmJZMTNaRWU2b1d6R1pWWjVY?= =?utf-8?B?cit6N1gvU1kwaUswSVowbDdselZVNlBEdXpHd0NRcE51M09kekpHSlVGQkdv?= =?utf-8?B?K0dhcVFaMUpoRzNtdEo2NGRSZWdLNzAyNXoxUWFzMVFmV2lzKzFlWlNBRHAz?= =?utf-8?B?Ri9EcXhZRVNIcE1lWW0zZSsySFUwVk5jNHlYczN0eVdqL00raUhCRFZMRXNp?= =?utf-8?B?Rm9GZ0gzdTByYUZPYVlTd2s0NWt2a0p6TVBPbXZkQWZER2tTZUR3b09pQzRr?= =?utf-8?Q?78knpy01N94xOQY/mMVm1qrmr?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 885a0e32-fd3a-484c-2921-08db13e555a1 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2023 08:26:30.9214 (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: v02tDigqlZB3EfmnGFgAoJyajleW5/oyyXIxWwHdlqM8Z4M2bLNifKC2ph61f6erTBDsE2K9Ctq/MsPMRmb6nw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7923 X-Spam-Status: No, score=-3028.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,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: On 20.02.2023 15:13, Mark Harmstone wrote: > Microsoft's DIA library, and thus also MSVC and WinDbg, expects section > contributions to be ordered by section number and offset, otherwise it's > unable to resolve line numbers. > --- > ld/pdb.c | 81 +++++++++++++++++------ > ld/testsuite/ld-pe/pdb2-section-contrib.d | 6 +- > 2 files changed, 65 insertions(+), 22 deletions(-) In principle okay, but I'd like to re-raise the question of excess casting (hence including Nick and Alan as the far more experienced binutils maintainers): > @@ -4118,6 +4125,27 @@ find_section_number (bfd *abfd, asection *sect) > return 0; > } > > +/* Used as parameter to qsort, to sort section contributions by section and > + offset. */ > +static int > +section_contribs_compare (const void *p1, const void *p2) > +{ > + const struct in_sc *sc1 = (const struct in_sc *) p1; > + const struct in_sc *sc2 = (const struct in_sc *) p2; In ANSI C there's no need for these casts; it may be that they were needed in pre-ANSI dialects like K&R. Personally I view _any_ cast as latently dangerous, and hence I'd prefer if casts were used only if there's no other option. > @@ -4177,32 +4209,43 @@ create_section_contrib_substream (bfd *abfd, void **data, uint32_t *size) > { > for (asection *s = in->sections; s; s = s->next) > { > - uint16_t sect_num; > - > if (s->size == 0 || discarded_section (s)) > continue; > > - sect_num = find_section_number (abfd, s->output_section); > - > - memcpy (&sc->characteristics, > - sect_flags + ((sect_num - 1) * sizeof (uint32_t)), > - sizeof (uint32_t)); > - > - bfd_putl16 (sect_num, &sc->section); > - bfd_putl16 (0, &sc->padding1); > - bfd_putl32 (s->output_offset, &sc->offset); > - bfd_putl32 (s->size, &sc->size); > - bfd_putl16 (mod_index, &sc->module_index); > - bfd_putl16 (0, &sc->padding2); > - bfd_putl32 (0, &sc->data_crc); > - bfd_putl32 (0, &sc->reloc_crc); > + sc2->s = s; > + sc2->sect_num = find_section_number (abfd, s->output_section); > + sc2->mod_index = mod_index; > > - sc++; > + sc2++; > } > > mod_index++; > } > > + qsort (sc_in, num_sc, sizeof (struct in_sc), section_contribs_compare); > + > + sc = > + (struct section_contribution *) ((uint8_t *) *data + sizeof (uint32_t)); This one's more interesting: Some cast is needed here at least as long as we don't mean to allow use of GNU extensions (here: arithmetic on pointers to void). But seeing that this causes a line length issue, at a minimum I'd recommend to go with sc = (void *) ((uint8_t *) *data + sizeof (uint32_t)); (Ideally sc would be pointer-to-const and the cast here then also one to pointer-to-const.) Nick, Alan - thoughts? Jan