From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2044.outbound.protection.outlook.com [40.107.8.44]) by sourceware.org (Postfix) with ESMTPS id E9FDB3857701 for ; Tue, 23 May 2023 06:20:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E9FDB3857701 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=KA5ZycxafT417KDiMGYj/+IOl2A6QdUforDAl3jLwVhe1/by6O5VOCWhu2SOpgVMStIxj5Vsaxnjl6lF+WVPrjJBHQRiDuB0hd1wOHxjKiqJWxGrQ43Pgpb6OizeMrcA9GHKDViAIhnbZ997Q8pSBII4OYd9lrEyTHk6T7TDN2QGjMiNUqnPWrji6lGM97zSh6Fiq9IaN/Guuu0REGo7waQYhy9z3wbTiBtMQx0JnFYhMgC7HYhb15Rywyu5Q8PRiDaRmCQXBfWkiilagpO0FmHoNmEnwAx5WuByjvNdHsuCnUL4k2BqglRHLZe5mZGby9XRNePXSQyzcMv4CuHKbw== 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=dOfxTJ7PoE5t67NFLkxHca0wFWuVUHa6Y9ymsGkUSnY=; b=mDn4+P0mr7gHCKiTn8Lh+qsr6t/Yzo8K0Q8xZ5yZfWBZQx8WXD90N+Tl+oRAcSDd5hosMZPXoGFvKWKbbwGDrURQE/F61WzYxZXG6P0Rig+0EhZrkxZ2/TNleIR94hYn71LphMXHQEpWEmL0/ld0wNKUQXNxypXyQlzEHCIZxr7A5M9qLLuelrWyzKtq2belZ222QMlwLWNe40Sc/G6BePPTqoFAQJ3i2gPK7zWtcYG0ocl7kvGPBEi7ySrcmAAHxdsJ15S6GEFGV8l/cF5hj2wzMBH7gPdGnnLJMCnNYdnT1L7wsAtvs+RJX8gv9lHBOM4InU7oPC78VFt1QGkH6w== 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=dOfxTJ7PoE5t67NFLkxHca0wFWuVUHa6Y9ymsGkUSnY=; b=E25O9ZrPLGh3ZeCiniH7AJh/P++jI27MLWoOP0Q0otngrLF+DkhfWheN52pRjffSChbCmMb/6p9MjGsTvbBdoBmpbJ73SK4PSvrCQ6FbqrU46iF0aTJPOIPvBPGk7IhIxnPt4MhxyWoOGEQDWnv9gIxdIwMz1Yc3wRqq3YFadSSeBj3MSY6f8bYe897wxCMDrHCghwpGpCO9C4vqZmQL/3Q6a53m2JY23TjsTxiiIV665y9e0M3iI7BAw6v2wQR+WxmqJFIpClAn5W6bZ45oiyVznDNh7gS460y0D827JPQqI+wb98B2ts/7c/RiPYp5vrXTO6MaczJ1IVCd3N/y1w== 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 AM0PR04MB6786.eurprd04.prod.outlook.com (2603:10a6:208:184::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.29; Tue, 23 May 2023 06:20:21 +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.029; Tue, 23 May 2023 06:20:20 +0000 Message-ID: Date: Tue, 23 May 2023 08:20:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v2] pe/coff - add support for base64 encoded long section names Content-Language: en-US To: Tristan Gingold References: Cc: binutils From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0057.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::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_|AM0PR04MB6786:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e8c5dac-6f3b-46b7-28f4-08db5b55c8c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8RH2NRio+OIBC3OZelLpoX3qFSfJdu6j+l8j4SMFDTKMuTCyk1gLaK1SPYdqAAbm/rrLRHx7IPWKhe2hU7NWLaUALOSQ0O0WAcBiuMdaKpr6l0AgcpAxoYXR+kegawJht0QrmYVYLeu80yDXgLIgdpW9b28yDAGsVx1wpU46MOuNqFKWvHmF3aZPY1akfxV9DBOyaiGnulaiznU1ZtHKVsaVIZD1iSgqO0kwYeBn+3Wi4/PK5GSxwSZcuL6rkTgsrcI0iknERkIIa+sysv/j7VkVJ796WDG8PzJl96/2ifNxxdeKQD9GQllhBi08NCZtg4kBgPAhVwsI+Jjej1bkOTyygi1H15jKgEb8sSW7Jdmm3mL+m55+fDFjUOuo+uqISUolvIxx5n2D0qCuGNy7/gU2IeBjSYIO+4NsiD7O0O4HZjtUqX7mXhSaKPo4K5uLKDzhOsqcOL/hrp5eRHZP0V9E0fayCuTIr4XXkh/NZac4TRXBbb2wE5OzAkY9QTC7MyQXkRXNSNmYt1kOQ/+W4wBu9I4iv1YfypaJF6Wl4uk863NwkwR8BiTFhvE/BKeR3gXKkxxAzXyNZ6/8Dc3YS+SrBhDatw1J1TQ1PN+kIqo7XoLHeepPA4Wvn4KYbRPQ+u0QPU0lyZkbYJukfwuWG6I6HZpvoVVbCl6fgghAM21lKA8JJkzw9h4F6ybzVrpR 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)(396003)(366004)(376002)(346002)(451199021)(2906002)(41300700001)(4326008)(6916009)(316002)(66946007)(66556008)(66476007)(8676002)(8936002)(5660300002)(36756003)(86362001)(31696002)(38100700002)(2616005)(6506007)(6512007)(26005)(186003)(6486002)(53546011)(83380400001)(31686004)(478600001)(43740500002)(41080700001)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VTdMejVWVzV2eWFQREdXWTEyUDBlV2hhRWpqV29xZWFEcGkvdlZxaUhJODZ6?= =?utf-8?B?ZTVwTzYxT0dQcWd3NWZ5TGoyQ1lkbW8wZVVKamlBKytiZTlYM3RjSVE5U1RM?= =?utf-8?B?bXRKOXFXY3RCSmlBUlJNZ3FZU2ZJZFVYcDZHTjIrSzI1Zk82OEs5ZDEvc3hR?= =?utf-8?B?MEJMcFl0QjNkdE5STW1pYjBHeWxXa1NTdUZ4R3ZXb2ZqZnQ3a2xXVm00UDcz?= =?utf-8?B?c25hMmoyU2tHR0Z3OHBrODJHanJzaDU1TUxzNnRxcm1jMlRIZVdjM1F3anpt?= =?utf-8?B?enFyM3Z2cFZTUzNGakgxc0NueU1hYTYyblh3TkUrT0NhajFyRU0ybXZMRDZI?= =?utf-8?B?UG9BL1BNTURJUWRJSUl1ZXVsNzdaMHJaMlRoaVEzVGtFckdlTEFQUnI4SUF3?= =?utf-8?B?Mk5qd1FlSHVjMzJ6ZkJjeGtydks3M2R3RlFHN3UvWWNtcWdrWTdpaHd2Ujdu?= =?utf-8?B?ZDR4VnhiTDM0cXdGTUkwZ3hEbk5RSFo5bGdTbFI4R2VBV0ZYL3pKTFpPN2Fx?= =?utf-8?B?bHJKVzFVaytwWVozbUVKTUgvOTEvTExLM3FkcHR3clRXQzgvZGtxeGgrN01o?= =?utf-8?B?M29IZDVHQ0lTNUtQOGJzT0Jud0hCeVNWRHVOb1ViSmFuaVpPWWNGd2o5Y2pU?= =?utf-8?B?Q01LamNLZ0ZFb3MrTTQ3L2lwWUJpUytLMFR2S1N0d3VuWWMyQ3E3OXFYOVZa?= =?utf-8?B?RUxkby8xUGZNZTRKZlExQ2dmajZiVy92TWVHM2xTQkx0RXUvMHo1M0tzN2Fs?= =?utf-8?B?Z1AvcWsxR0ZibHBONENheUVNVFlXbkk5RkZOV2E2Z1pqNm1odDZxay9qMTFq?= =?utf-8?B?bEZiaW5RbVU0eHJFeDlOME4rMTFIREkyVlYwUitUS3E1SkJkT1lJS2N6c2tv?= =?utf-8?B?QTFydjdhMXpid3QrcS9vSjhjR0FqUitxcWJYZnZERXUwNHQ0VkVOb3dZVXZt?= =?utf-8?B?aVpJenhJQVJjUW5pbER4NlhLZFFYelZZbHA0endqNDB2Q2FIRFQ5S1ByVmhJ?= =?utf-8?B?NEJiRWUrSUF4ZDZicDA1RVFHT1pnS05kVnNvbTJNMjdCckRjbG5vUG15Tjc5?= =?utf-8?B?dUZCWExPN3VhaWNGM1ZsdEZUTExaZElqcWZwQ0pjNlZ3ZnVqSytNZDNRRGZJ?= =?utf-8?B?bGNYWGJncG5VRHpSY3hzR0FUUzVXWUFrcWNST0U4NGdSVjhEWmRYUEp5bGIr?= =?utf-8?B?cjZOb0czSUpjNzZaRmErVmhwY0lldmhEYU9MRHBmS21xK2tPanBWZ1NBUHc3?= =?utf-8?B?MlkyVnZHaGlDVUYvc1RNMVNla0tENFQxdmdGWTQ1WjJWc21pNnowNlloQi9S?= =?utf-8?B?cDY4NUtCMG9YNWpya2Nvc0pIOTltVXpvd1RHSGpWdzJWbnlvQUlUdVA3N05k?= =?utf-8?B?VXg1R1dCWnRKUnZHK29RYnFLVUtwSnN3TnZQQzBaZGx1KzA0VlRVdVdsS05q?= =?utf-8?B?MmFKZFJLUmdBWG5FNWp2SW5TeHNqLzZyb3ZPd20wYUVkbTFSRTBHbjRSd0ta?= =?utf-8?B?Y2VnSWdVWjZHTkFuL3dQdmFUVTY3ZXlkcG5TV3F4eU9Fa1ZkRHdXV0hkZ2VJ?= =?utf-8?B?WSt3MzM3WDRIT1BKN3owMXIyclE4ZHZNSUdFS2RnV2VjRy90U1NKUFhLR0VK?= =?utf-8?B?RjMyZE1BRllTNkVwZUxmSXpvYUJuVXFuREIyQVhZcGJESkxwZ0lJY0xxcDNY?= =?utf-8?B?cmVaUHpoUUxMOHFzR0xTaWl5ZWliUm15UVRjbStqVExRek9aRmU3cTRodjNa?= =?utf-8?B?M29HL2tZb1RhZGJ1UVIrR2NYTGRvZTByaHdNTXh0WEQyaExjeWdFazNuSnJt?= =?utf-8?B?MjlOZGFhMGlRWkZGY0lPcVZ6clZPWnBKNXFVcEhCTytiSEc2R1lwQXRyN0k3?= =?utf-8?B?di9TeGljbjl1VitNM2xpcXBkM3RTQ2lxR2hqMVg2YjltWko4bTFzWFV2elNi?= =?utf-8?B?eU11ay8xQ3RQU3pWUUx2YkREdVNObGZKWnFZdkdGYmd1V2JHalBiV2Z2VjdD?= =?utf-8?B?NjBUeGFDTDdKVVVLNituK2NJOHQrNFM0NWYvUXlqUlJHODBBMk43dVE4cnJU?= =?utf-8?B?ZUlzeGw1UFQ0TFJ0dkl3TGlCdi9zWDNyaU1GaGRaVHJNMStxQUZjYTM2Qmpm?= =?utf-8?Q?pYmhJ2nERc/j9OYASbtGKWgJZ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e8c5dac-6f3b-46b7-28f4-08db5b55c8c2 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2023 06:20:20.4220 (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: nrtRmMLzw0QR+ZqHYG/yJugHBVuk9wgkTbli2Pe2/zsL7Jubjhh7HQwMAQrAmOja/dP06Z9E4KOEOMzY9oxPxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6786 X-Spam-Status: No, score=-3027.8 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,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 22.05.2023 21:48, Tristan Gingold via Binutils wrote: > so new version of the patch, including generation of base64 encoded > section name indexes. > > I was able to assemble the test from PR 30444 (using -mbig-obj to > overcome the 2^16 sections number limit). > > I haven't added a test due to its size. > > No failures on x86_64-gnu-linux for binutils configured for > x86_64-pc-mingw64. A couple of nits and a question, looks good to me otherwise. > --- a/bfd/coffcode.h > +++ b/bfd/coffcode.h > @@ -3625,18 +3625,54 @@ coff_write_object_contents (bfd * abfd) > len = strlen (current->name); > if (len > SCNNMLEN) > { > - /* The s_name field is defined to be NUL-padded but need not be > - NUL-terminated. We use a temporary buffer so that we can still > - sprintf all eight chars without splatting a terminating NUL > - over the first byte of the following member (s_paddr). */ > - /* PR 21096: The +20 is to stop a bogus warning from gcc7 about > - a possible buffer overflow. */ > - char s_name_buf[SCNNMLEN + 1 + 20]; > > /* An inherent limitation of the /nnnnnnn notation used to indicate > the offset of the long name in the string table is that we > cannot address entries beyone the ten million byte boundary. */ > - if (string_size >= 10000000) > + if (string_size < 10000000) > + { > + /* The s_name field is defined to be NUL-padded but need not > + be NUL-terminated. We use a temporary buffer so that we > + can still sprintf all eight chars without splatting a > + terminating NUL over the first byte of the following > + member (s_paddr). */ > + /* PR 21096: The +20 is to stop a bogus warning from gcc7 > + about a possible buffer overflow. */ > + char s_name_buf[SCNNMLEN + 1 + 20]; > + > + /* We do not need to use snprintf here as we have already > + verified that string_size is not too big, plus we have > + an overlarge buffer, just in case. */ > + sprintf (s_name_buf, "/%lu", (unsigned long) string_size); > + /* Then strncpy takes care of any padding for us. */ > + strncpy (section.s_name, s_name_buf, SCNNMLEN); > + } > + else > +#ifdef COFF_WITH_PE > + { > + /* PE use a bae64 encoding for long section names whose base64 > + index is very large. */ > + static const char base64[] = > + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" > + "abcdefghijklmnopqrstuvwxyz" > + "0123456789+/"; > + unsigned long off = string_size; > + unsigned i; > + > + section.s_name[0] = '/'; > + section.s_name[1] = '/'; > + for (i = SCNNMLEN - 1; i >=2; i--) Blank before 2 please. > +/* Decode a base64 coded string at STR of length LEN, and write the result > + to RES. Return true on success. > + Return false in case of invalid character or overflow. */ > + > +static bool > +decode_base64 (const char *str, unsigned len, uint32_t *res) > +{ > + unsigned i; > + uint32_t val; > + > + val = 0; > + for (i = 0; i < len; i++) > + { > + char c = str[i]; > + unsigned d; > + > + if (c >= 'A' && c <= 'Z') > + d = c - 'A'; > + else if (c >= 'a' && c <= 'z') > + d = c - 'a' + 26; > + else if (c >= '0' && c <= '9') > + d = c - '0' + 52; > + else if (c == '+') > + d = 62; > + else if (c == '/') > + d = 63; > + else > + return false; > + > + /* Check for overflow. */ > + if ((val >> 26) != 0) > + return false; > + > + val = (val << 6) + d; > + } > + > + *res = val; > + return true; > +} So you decided to not also permit the nul-tail-padded form along with the "canonical" 'A'-head-padded one here? (Generating just the "canonical" form in coff_write_object_contents() is of course not under question.) Jan