[{"id":1759285,"web_url":"http://patchwork.ozlabs.org/comment/1759285/","msgid":"<alpine.LSU.2.20.1708291423590.14191@zhemvz.fhfr.qr>","list_archive_url":null,"date":"2017-08-29T12:28:27","subject":"Re: [PATCH] Fix PR82011, early LTO debug fallout","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Tue, 29 Aug 2017, Richard Biener wrote:\n\n> \n> The following avoids adding DW_AT_inline attributes twice on which\n> dsymutil complains.  The duplicate attribute is caused by stray\n> code I left in (I guess I hoped nothing ends up DECL_ABSTRACT_P ...).\n> Thus the following patch removes it -- DW_AT_inline is solely set\n> by dwarf2out_abstract_function now.\n> \n> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  The\n> gdb testsuite shows no regression.\n> \n> Will commit once testing finished.\n> \n> Note the assert is deliberately restricted to DW_AT_inline for now\n> given enabling it unconditionally fires left and right ... :/\n> (sth to fix, but only as followups)\n\nThe following seems to cure it as far as preliminary testing goes.\n\nFull bootstrap & regtest currently running on x86_64-unknown-linux-gnu.\n\nWill apply once it succeeds.\n\nRichard.\n\n2017-08-29  Richard Biener  <rguenther@suse.de>\n\n\t* dwarf2out.c (add_dwarf_attr): Check we don't add duplicate\n\tattributes.\n\t(gen_subprogram_die): Add DW_AT_object_pointer only early.\n\t(dwarf2out_early_global_decl): Only generate a DIE for the\n\tabstract origin if it doesn't already exist.\n\t(resolve_addr): Do not add the linkage name twice when\n\tgenerating a stub DIE for the DW_TAG_GNU_call_site target.\n\nIndex: gcc/dwarf2out.c\n===================================================================\n--- gcc/dwarf2out.c\t(revision 251409)\n+++ gcc/dwarf2out.c\t(working copy)\n@@ -4129,7 +4129,7 @@ add_dwarf_attr (dw_die_ref die, dw_attr_\n       dw_attr_node *a;\n       unsigned ix;\n       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)\n-\tgcc_assert (a->dw_attr != attr->dw_attr || a->dw_attr != DW_AT_inline);\n+\tgcc_assert (a->dw_attr != attr->dw_attr);\n     }\n \n   vec_safe_reserve (die->die_attr, 1);\n@@ -22334,7 +22334,8 @@ gen_subprogram_die (tree decl, dw_die_re\n \t    {\n \t      dw_die_ref parm_die = gen_decl_die (parm, NULL, NULL, subr_die);\n \n-\t      if (parm == DECL_ARGUMENTS (decl)\n+\t      if (early_dwarf\n+\t\t  && parm == DECL_ARGUMENTS (decl)\n \t\t  && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE\n \t\t  && parm_die\n \t\t  && (dwarf_version >= 3 || !dwarf_strict))\n@@ -25479,10 +25480,11 @@ dwarf2out_early_global_decl (tree decl)\n \t     with C++ constructor clones for example and makes\n \t     dwarf2out_abstract_function happy which requires the early\n \t     DIE of the abstract instance to be present.  */\n-\t  if (DECL_ABSTRACT_ORIGIN (decl))\n+\t  tree origin = DECL_ABSTRACT_ORIGIN (decl);\n+\t  if (origin != NULL && lookup_decl_die (origin) == NULL)\n \t    {\n-\t      current_function_decl = DECL_ABSTRACT_ORIGIN (decl);\n-\t      dwarf2out_decl (DECL_ABSTRACT_ORIGIN (decl));\n+\t      current_function_decl = origin;\n+\t      dwarf2out_decl (origin);\n \t    }\n \n \t  current_function_decl = decl;\n@@ -29047,7 +29049,7 @@ resolve_addr (dw_die_ref die)\n \t\t    add_AT_flag (tdie, DW_AT_external, 1);\n \t\t    add_AT_flag (tdie, DW_AT_declaration, 1);\n \t\t    add_linkage_attr (tdie, tdecl);\n-\t\t    add_name_and_src_coords_attributes (tdie, tdecl);\n+\t\t    add_name_and_src_coords_attributes (tdie, tdecl, true);\n \t\t    equate_decl_number_to_die (tdecl, tdie);\n \t\t  }\n \t      }","headers":{"Return-Path":"<gcc-patches-return-461082-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461082-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"WaxLxbeR\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhSc46Lkyz9sNc\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 22:28:51 +1000 (AEST)","(qmail 52012 invoked by alias); 29 Aug 2017 12:28:43 -0000","(qmail 50381 invoked by uid 89); 29 Aug 2017 12:28:42 -0000","from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tTue, 29 Aug 2017 12:28:29 +0000","from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254])\tby\n\tmx1.suse.de (Postfix) with ESMTP id 5AC38AE69\tfor\n\t<gcc-patches@gcc.gnu.org>; Tue, 29 Aug 2017 12:28:27 +0000 (UTC)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:in-reply-to:message-id:references:mime-version\n\t:content-type; q=dns; s=default; b=f93OkNl6fcryNoO0Nct+o0sSm1PLe\n\ttJuFWO7T3uyMzH9qMoeqyFZaSYlOor7vtDXXHyfHmsV70QTILJ+NxWh9d1hpigoV\n\tRS7fVtUcR+lyBn84EEhyaIMKS7NIgW0krKLADutJMqVYHjbND0IFy/lY3Hw4jFnj\n\tpuTbgpkrx2VbyM=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:in-reply-to:message-id:references:mime-version\n\t:content-type; s=default; bh=So+jKUy8vMQCgoWj5NA1mhE8C6g=; b=Wax\n\tLxbeRrkswno2pHvoWCglbHb8w0Zf2FgSohJ74AHO9ZF40z+T0djSF855n82Zbuuy\n\tpMl6brMz0YYBiC3uzOF9Hn0wRmV9iYu6DxEf51McV1MVd+awKdBngJ4p/9etYQDb\n\tMepmFOYGPrsignm955EiPEu99jv+8BlqVQ+2CEtA=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_2,\n\tGIT_PATCH_3, RP_MATCHES_RCVD,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=cure","X-HELO":"mx1.suse.de","Date":"Tue, 29 Aug 2017 14:28:27 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"gcc-patches@gcc.gnu.org","Subject":"Re: [PATCH] Fix PR82011, early LTO debug fallout","In-Reply-To":"<alpine.LSU.2.20.1708291232400.14191@zhemvz.fhfr.qr>","Message-ID":"<alpine.LSU.2.20.1708291423590.14191@zhemvz.fhfr.qr>","References":"<alpine.LSU.2.20.1708291232400.14191@zhemvz.fhfr.qr>","User-Agent":"Alpine 2.20 (LSU 67 2015-01-07)","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII"}},{"id":1759993,"web_url":"http://patchwork.ozlabs.org/comment/1759993/","msgid":"<alpine.LSU.2.20.1708301126140.14191@zhemvz.fhfr.qr>","list_archive_url":null,"date":"2017-08-30T09:27:21","subject":"Re: [PATCH] Fix PR82011, early LTO debug fallout","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Tue, 29 Aug 2017, Richard Biener wrote:\n\n> On Tue, 29 Aug 2017, Richard Biener wrote:\n> \n> > \n> > The following avoids adding DW_AT_inline attributes twice on which\n> > dsymutil complains.  The duplicate attribute is caused by stray\n> > code I left in (I guess I hoped nothing ends up DECL_ABSTRACT_P ...).\n> > Thus the following patch removes it -- DW_AT_inline is solely set\n> > by dwarf2out_abstract_function now.\n> > \n> > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  The\n> > gdb testsuite shows no regression.\n> > \n> > Will commit once testing finished.\n> > \n> > Note the assert is deliberately restricted to DW_AT_inline for now\n> > given enabling it unconditionally fires left and right ... :/\n> > (sth to fix, but only as followups)\n> \n> The following seems to cure it as far as preliminary testing goes.\n> \n> Full bootstrap & regtest currently running on x86_64-unknown-linux-gnu.\n\nMinor issue with the dwarf2out_early_global_decl hunk - we need to\nre-process declaration DIEs which can end up generated by processing\nmember functions.\n\nBootstrapped and tested on x86_64-unknown-linux-gnu, no gdb testsuite\nregressions, applied to trunk.\n\nRichard.\n\n2017-08-30  Richard Biener  <rguenther@suse.de>\n\n\t* dwarf2out.c (add_dwarf_attr): Check we don't add duplicate\n\tattributes.\n\t(gen_subprogram_die): Add DW_AT_object_pointer only early.\n\t(dwarf2out_early_global_decl): Only generate a DIE for the\n\tabstract origin if it doesn't already exist or is a declaration DIE.\n\t(resolve_addr): Do not add the linkage name twice when\n\tgenerating a stub DIE for the DW_TAG_GNU_call_site target.\n\n\t* g++.dg/pr78112-2.C: Do not expect duplicate DW_AT_object_pointer.\n\nIndex: gcc/dwarf2out.c\n===================================================================\n--- gcc/dwarf2out.c\t(revision 251409)\n+++ gcc/dwarf2out.c\t(working copy)\n@@ -4129,7 +4129,7 @@ add_dwarf_attr (dw_die_ref die, dw_attr_\n       dw_attr_node *a;\n       unsigned ix;\n       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)\n-\tgcc_assert (a->dw_attr != attr->dw_attr || a->dw_attr != DW_AT_inline);\n+\tgcc_assert (a->dw_attr != attr->dw_attr);\n     }\n \n   vec_safe_reserve (die->die_attr, 1);\n@@ -22334,7 +22334,8 @@ gen_subprogram_die (tree decl, dw_die_re\n \t    {\n \t      dw_die_ref parm_die = gen_decl_die (parm, NULL, NULL, subr_die);\n \n-\t      if (parm == DECL_ARGUMENTS (decl)\n+\t      if (early_dwarf\n+\t\t  && parm == DECL_ARGUMENTS (decl)\n \t\t  && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE\n \t\t  && parm_die\n \t\t  && (dwarf_version >= 3 || !dwarf_strict))\n@@ -25479,10 +25480,16 @@ dwarf2out_early_global_decl (tree decl)\n \t     with C++ constructor clones for example and makes\n \t     dwarf2out_abstract_function happy which requires the early\n \t     DIE of the abstract instance to be present.  */\n-\t  if (DECL_ABSTRACT_ORIGIN (decl))\n+\t  tree origin = DECL_ABSTRACT_ORIGIN (decl);\n+\t  dw_die_ref origin_die;\n+\t  if (origin != NULL\n+\t      /* Do not emit the DIE multiple times but make sure to\n+\t         process it fully here in case we just saw a declaration.  */\n+\t      && ((origin_die = lookup_decl_die (origin)) == NULL\n+\t\t  || is_declaration_die (origin_die)))\n \t    {\n-\t      current_function_decl = DECL_ABSTRACT_ORIGIN (decl);\n-\t      dwarf2out_decl (DECL_ABSTRACT_ORIGIN (decl));\n+\t      current_function_decl = origin;\n+\t      dwarf2out_decl (origin);\n \t    }\n \n \t  current_function_decl = decl;\n@@ -29047,7 +29054,7 @@ resolve_addr (dw_die_ref die)\n \t\t    add_AT_flag (tdie, DW_AT_external, 1);\n \t\t    add_AT_flag (tdie, DW_AT_declaration, 1);\n \t\t    add_linkage_attr (tdie, tdecl);\n-\t\t    add_name_and_src_coords_attributes (tdie, tdecl);\n+\t\t    add_name_and_src_coords_attributes (tdie, tdecl, true);\n \t\t    equate_decl_number_to_die (tdecl, tdie);\n \t\t  }\n \t      }\nIndex: gcc/testsuite/g++.dg/pr78112-2.C\n===================================================================\n--- gcc/testsuite/g++.dg/pr78112-2.C\t(revision 251408)\n+++ gcc/testsuite/g++.dg/pr78112-2.C\t(working copy)\n@@ -2,7 +2,7 @@\n /* { dg-skip-if \"No dwarf debug support\" { hppa*-*-hpux* } } */\n /* { dg-options \"-g -dA -gdwarf-4 -std=gnu++11\" } */\n /* { dg-options \"-g -dA -std=gnu++11 -gdwarf-4\" } */\n-/* { dg-final { scan-assembler-times DW_AT_object_pointer 18 } } */\n+/* { dg-final { scan-assembler-times DW_AT_object_pointer 12 } } */\n \n void run (int *int_p, void(*func)(int *)) { func (int_p); }\n namespace foo {","headers":{"Return-Path":"<gcc-patches-return-461142-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461142-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"uoGku9Y/\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xj0XX3vB5z9t0F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 30 Aug 2017 19:27:32 +1000 (AEST)","(qmail 53891 invoked by alias); 30 Aug 2017 09:27:25 -0000","(qmail 53881 invoked by uid 89); 30 Aug 2017 09:27:25 -0000","from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tWed, 30 Aug 2017 09:27:23 +0000","from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254])\tby\n\tmx1.suse.de (Postfix) with ESMTP id 68F15AC10\tfor\n\t<gcc-patches@gcc.gnu.org>; Wed, 30 Aug 2017 09:27:21 +0000 (UTC)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:in-reply-to:message-id:references:mime-version\n\t:content-type; q=dns; s=default; b=qTPq+84kHznMvRATtb8Q/7DXQQBP8\n\t+1lBCs4GPZsvTt071IZqL6AFFT+vNR/oEQ3ZRNyW3J+hdpAUVfuMSzJLy9JV9xBK\n\tEKWvkFOaXql/CxhW9ehtF1sPQ8r+mVdYE+UWVKrVc+ZmwCqNfiQEajSLOsd4FvX9\n\t8k/U8p6kxQlFNc=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:in-reply-to:message-id:references:mime-version\n\t:content-type; s=default; bh=2FylDRGYpD1uVazxlMd5HRy1dT4=; b=uoG\n\tku9Y/Ti1nKe9GEanYEmqy5aDxFKRFCOLSJ97cJMVrJhb7ulaCW1O1x8YBuVgjJys\n\tVxay7aSqGmox+Vp1rrboMoDUkAs3tu4S3HxKrK5mRWg+XcEDIcI0j6Sr1620WgTr\n\t2GvbEbDLPx60MhLHYvA4dRdZrQK6fOTgm/2WyhUk=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-11.1 required=5.0 tests=BAYES_00, GIT_PATCH_2,\n\tGIT_PATCH_3, KAM_ASCII_DIVIDERS, RP_MATCHES_RCVD,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mx1.suse.de","Date":"Wed, 30 Aug 2017 11:27:21 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"gcc-patches@gcc.gnu.org","Subject":"Re: [PATCH] Fix PR82011, early LTO debug fallout","In-Reply-To":"<alpine.LSU.2.20.1708291423590.14191@zhemvz.fhfr.qr>","Message-ID":"<alpine.LSU.2.20.1708301126140.14191@zhemvz.fhfr.qr>","References":"<alpine.LSU.2.20.1708291232400.14191@zhemvz.fhfr.qr>\n\t<alpine.LSU.2.20.1708291423590.14191@zhemvz.fhfr.qr>","User-Agent":"Alpine 2.20 (LSU 67 2015-01-07)","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII"}}]