From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113488 invoked by alias); 1 Sep 2017 12:29:38 -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 113479 invoked by uid 89); 1 Sep 2017 12:29:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 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; Fri, 01 Sep 2017 12:29:36 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 6A0FBACB8; Fri, 1 Sep 2017 12:29:34 +0000 (UTC) Date: Fri, 01 Sep 2017 12:29:00 -0000 User-Agent: K-9 Mail for Android In-Reply-To: <20170901114804.GI2323@tucnak> References: <20170901114804.GI2323@tucnak> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [PATCH] Fix asan create_odr_indicator (PR sanitizer/81923) To: Jakub Jelinek CC: gcc-patches@gcc.gnu.org From: Richard Biener Message-ID: <76F82E82-2552-4723-BD5F-B4ED1EF1B686@suse.de> X-SW-Source: 2017-09/txt/msg00038.txt.bz2 On September 1, 2017 1:48:04 PM GMT+02:00, Jakub Jelinek = wrote: >Hi! > >glibc fails to build with -fsanitize=3Daddress, because >DECL_ASSEMBLER_NAME >on some variables starts with the * character (e.g. for vars with __asm >specified names). We need to strip name encoding from those before >appending after __odr_asan. Fixed thusly, bootstrapped/regtested on >x86_64-linux and i686-linux, ok for trunk? OK.=20 Richard.=20 >2017-09-01 Jakub Jelinek > > PR sanitizer/81923 > * asan.c (create_odr_indicator): Strip name encoding from assembler > name before appending it after __odr_asan_. > > * gcc.dg/asan/pr81923.c: New test. > >--- gcc/asan.c.jj 2017-08-10 02:31:21.000000000 +0200 >+++ gcc/asan.c 2017-08-29 17:25:58.337595628 +0200 >@@ -2529,9 +2529,12 @@ create_odr_indicator (tree decl, tree ty >/* DECL_NAME theoretically might be NULL. Bail out with 0 in this >case. */ > if (decl_name =3D=3D NULL_TREE) > return build_int_cst (uptr, 0); >- size_t len =3D strlen (IDENTIFIER_POINTER (decl_name)) + sizeof >("__odr_asan_"); >+ const char *dname =3D IDENTIFIER_POINTER (decl_name); >+ if (HAS_DECL_ASSEMBLER_NAME_P (decl)) >+ dname =3D targetm.strip_name_encoding (dname); >+ size_t len =3D strlen (dname) + sizeof ("__odr_asan_"); > name =3D XALLOCAVEC (char, len); >- snprintf (name, len, "__odr_asan_%s", IDENTIFIER_POINTER >(decl_name)); >+ snprintf (name, len, "__odr_asan_%s", dname); > #ifndef NO_DOT_IN_LABEL > name[sizeof ("__odr_asan") - 1] =3D '.'; > #elif !defined(NO_DOLLAR_IN_LABEL) >--- gcc/testsuite/gcc.dg/asan/pr81923.c.jj 2017-08-29 >18:08:59.183881570 +0200 >+++ gcc/testsuite/gcc.dg/asan/pr81923.c 2017-08-29 18:09:27.643550083 >+0200 >@@ -0,0 +1,10 @@ >+/* PR sanitizer/81923 */ >+/* { dg-do link } */ >+ >+int foobar __asm (__USER_LABEL_PREFIX__ "barbaz") =3D 34; >+ >+int >+main () >+{ >+ return 0; >+} > > Jakub