From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 98834 invoked by alias); 12 Aug 2019 09:57:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 98826 invoked by uid 89); 12 Aug 2019 09:57:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-10.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 12 Aug 2019 09:57:20 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 05018AD2B; Mon, 12 Aug 2019 09:57:19 +0000 (UTC) Subject: Re: [PATCH] Prevent LTO section collision for a symbol name starting with '*'. To: Richard Biener Cc: GCC Patches , Jan Hubicka References: <55b4acda-9673-557b-5819-50bff07fa095@suse.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: <0e977dd4-c9ff-ed24-fbe0-fa6993a9a14e@suse.cz> Date: Mon, 12 Aug 2019 10:43:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg00723.txt.bz2 On 8/12/19 11:45 AM, Richard Biener wrote: > On Fri, Aug 9, 2019 at 3:57 PM Martin Liška wrote: >> >> Hi. >> >> The patch is about prevention of LTO section name clashing. >> Now we have a situation where body of 2 functions is streamed >> into the same ELF section. Then we'll end up with smashed data. >> >> Patch can bootstrap on x86_64-linux-gnu and survives regression tests. >> >> Ready to be installed? > > I think the comment should mention why we skip a leading '*' > at all. git blame helps us here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42531 > IIRC this is some target mangling applied to DECL_ASSEMBLER_NAME? Yes, it's prepended here: set_user_assembler_name > And section names cannot contain '*'? As seen in the PR, not. > Or do we need to actually > indentify '*fn' and 'fn' as the same? No, they should be identified as different symbols. > For the testcase what is the clashing > symbol? void __open_alias(int, ...) __asm__("open"); - aka *open and: +extern __inline __attribute__((__gnu_inline__)) int open() {} > Can't we have many so that using "0" always is broken as well? If I'll define 2 symbols that alias to a same asm name, I'll get: $ cat clash.c void __open_alias(int, ...) __asm__("open"); void __open_alias2(int, ...) __asm__("open"); void __open_alias(int flags, ...) {} void __open_alias2(int flags, ...) {} extern __inline __attribute__((__gnu_inline__)) int open() {} struct { void *func; } a = {open}; int main() { return 0; } $ gcc clash.c -flto lto1: fatal error: missing resolution data for *open compilation terminated. Which is a reasonable error message to me. Martin > > Richard. > >> Thanks, >> Martin >> >> gcc/ChangeLog: >> >> 2019-08-09 Martin Liska >> >> PR lto/91393 >> PR lto/88220 >> * lto-streamer.c (lto_get_section_name): Replace '*' leading >> character with '0'. >> >> gcc/testsuite/ChangeLog: >> >> 2019-08-09 Martin Liska >> >> PR lto/91393 >> PR lto/88220 >> * gcc.dg/lto/pr91393_0.c: New test. >> --- >> gcc/lto-streamer.c | 15 ++++++++++++--- >> gcc/testsuite/gcc.dg/lto/pr91393_0.c | 11 +++++++++++ >> 2 files changed, 23 insertions(+), 3 deletions(-) >> create mode 100644 gcc/testsuite/gcc.dg/lto/pr91393_0.c >> >>