From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 29544385382A for ; Mon, 10 Oct 2022 14:20:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 29544385382A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.95,173,1661846400"; d="scan'208,223";a="87215379" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 10 Oct 2022 06:19:45 -0800 IronPort-SDR: JOigqyrP9ulAn+CBtNIexSaYdoHEpXIoOQkdoTtfW1Cg286L4YRQJhihWYg9RLVPPAGpB8gjno PvH7W0qC3GbnlzLlbajVbJ02o0FbXTjex/xy0896xPqNNLk/qAI54xDiMT2i47d8M2akyS/pyy rFnmgjoIrTQ4cchFmfYrQ/gcMs7DzdzeD9oaUFpEZLaGqtuOG/qVagRh7TsOs6bKAahQLIARbP L5hvWDNIbtQ9/ENQutCKcJmClVzWkIsfKXkcyHRwzW7B9XNhybK/WEjo0dW9cSKOZ7xxqq92qU IsU= From: Thomas Schwinge To: Martin =?utf-8?Q?Li=C5=A1ka?= , CC: Richard Biener , Tom de Vries Subject: Restore default 'sorry' 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR' (was: [PATCH 1/3] STABS: remove -gstabs and -gxcoff functionality) In-Reply-To: <10a94ccc-e01b-b98a-0fcb-cd661c10c315@suse.cz> References: <10a94ccc-e01b-b98a-0fcb-cd661c10c315@suse.cz> User-Agent: Notmuch/0.29.3+94~g74c3f1b (https://notmuchmail.org) Emacs/27.1 (x86_64-pc-linux-gnu) Date: Mon, 10 Oct 2022 16:19:35 +0200 Message-ID: <87fsfviww8.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,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: --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi! On 2022-09-01T12:05:23+0200, Martin Li=C5=A1ka wrote: > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > I've also built all cross compilers. First: thanks for that: clean up plus "built all cross compilers"! But yet, I've now tracked down an issue related to these changes, apparently only visible via the nvptx back end -- and quite non-obvious... ;-) > --- a/gcc/config/nvptx/nvptx.cc > +++ b/gcc/config/nvptx/nvptx.cc > @@ -52,7 +52,6 @@ > #include "tm-preds.h" > #include "tm-constrs.h" > #include "langhooks.h" > -#include "dbxout.h" > #include "cfgrtl.h" > #include "gimple.h" > #include "stor-layout.h" > --- a/gcc/dbxout.cc > +++ /dev/null > @@ -1,3936 +0,0 @@ > -/* Output dbx-format symbol table information from GNU compiler. The "dbx-format symbol table information" stuff indeed is not relevant anymore, but: > -/* Record an element in the table of global destructors. SYMBOL is > - a SYMBOL_REF of the function to be called; PRIORITY is a number > - between 0 and MAX_INIT_PRIORITY. */ > - > -void > -default_stabs_asm_out_destructor (rtx symbol ATTRIBUTE_UNUSED, > - int priority ATTRIBUTE_UNUSED) > -{ > -#if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO > - /* Tell GNU LD that this is part of the static destructor set. > - This will work for any system that uses stabs, most usefully > - aout systems. */ > - dbxout_begin_simple_stabs ("___DTOR_LIST__", 22 /* N_SETT */); > - dbxout_stab_value_label (XSTR (symbol, 0)); > -#else > - sorry ("global destructors not supported on this target"); > -#endif > -} > - > -/* Likewise for global constructors. */ > - > -void > -default_stabs_asm_out_constructor (rtx symbol ATTRIBUTE_UNUSED, > - int priority ATTRIBUTE_UNUSED) > -{ > -#if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO > - /* Tell GNU LD that this is part of the static destructor set. > - This will work for any system that uses stabs, most usefully > - aout systems. */ > - dbxout_begin_simple_stabs ("___CTOR_LIST__", 22 /* N_SETT */); > - dbxout_stab_value_label (XSTR (symbol, 0)); > -#else > - sorry ("global constructors not supported on this target"); > -#endif > -} > --- a/gcc/dbxout.h > +++ /dev/null > @@ -1,60 +0,0 @@ > -/* dbxout.h - Various declarations for functions found in dbxout.cc > -extern void default_stabs_asm_out_destructor (rtx, int); > -extern void default_stabs_asm_out_constructor (rtx, int); ... these two functions, 'default_stabs_asm_out_constructor', 'default_stabs_asm_out_destructor' (specifically, now their 'sorry' branches only) used to serve as default 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR' via... > --- a/gcc/target-def.h > +++ b/gcc/target-def.h | #if !defined(TARGET_ASM_CONSTRUCTOR) && !defined(USE_COLLECT2) | # ifdef CTORS_SECTION_ASM_OP | # define TARGET_ASM_CONSTRUCTOR default_ctor_section_asm_out_constructo= r > # else > # ifdef TARGET_ASM_NAMED_SECTION > # define TARGET_ASM_CONSTRUCTOR default_named_section_asm_out_construc= tor > -# else > -# define TARGET_ASM_CONSTRUCTOR default_stabs_asm_out_constructor > # endif > # endif > #endif > @@ -74,8 +72,6 @@ | #if !defined(TARGET_ASM_DESTRUCTOR) && !defined(USE_COLLECT2) | # ifdef DTORS_SECTION_ASM_OP | # define TARGET_ASM_DESTRUCTOR default_dtor_section_asm_out_destructor > # else > # ifdef TARGET_ASM_NAMED_SECTION > # define TARGET_ASM_DESTRUCTOR default_named_section_asm_out_destructo= r > -# else > -# define TARGET_ASM_DESTRUCTOR default_stabs_asm_out_destructor > # endif > # endif > #endif ... this setup here (manually added some more context to the 'diff'). That is, if a back end was not 'USE_COLLECT2', nor manually defined 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR', or got pointed to the respective 'default_[...]' functions due to 'CTORS_SECTION_ASM_OP', 'DTORS_SECTION_ASM_OP', or 'TARGET_ASM_NAMED_SECTION', it got pointed to 'default_stabs_asm_out_constructor', 'default_stabs_asm_out_destructor'. These would emit 'sorry' for any global constructor/destructor they're run into. This is now gone, and thus in such a back end configuration case 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR' don't get defined anymore, and thus the subsequently following: #if !defined(TARGET_HAVE_CTORS_DTORS) # if defined(TARGET_ASM_CONSTRUCTOR) && defined(TARGET_ASM_DESTRUCTOR) # define TARGET_HAVE_CTORS_DTORS true # endif #endif ... doesn't define 'TARGET_HAVE_CTORS_DTORS' anymore, and thus per my understanding, 'gcc/final.cc:rest_of_handle_final': if (DECL_STATIC_CONSTRUCTOR (current_function_decl) && targetm.have_ctors_dtors) targetm.asm_out.constructor (XEXP (DECL_RTL (current_function_decl), = 0), decl_init_priority_lookup (current_function_decl)); if (DECL_STATIC_DESTRUCTOR (current_function_decl) && targetm.have_ctors_dtors) targetm.asm_out.destructor (XEXP (DECL_RTL (current_function_decl), 0= ), decl_fini_priority_lookup (current_function_decl)); ... simply does nothing anymore for a 'DECL_STATIC_CONSTRUCTOR', 'DECL_STATIC_DESTRUCTOR'. This, effectively, means that GCC/nvptx now suddenly appears to "support" global constructors/destructors, which means that a ton of test cases now erroneously PASS that previously used to FAIL: sorry, unimplemented: global constructors not supported on this target Of course, such support didn't magically happen due to "STABS: remove -gstabs and -gxcoff functionality", so this is bad. And, corresponding execution testing then regularly FAILs (due to the global constructor/destructor functions never being invoked), for example: [-UNSUPPORTED:-]{+PASS:+} gcc.dg/initpri1.c {+(test for excess errors)+= } {+FAIL: gcc.dg/initpri1.c execution test+} [-UNSUPPORTED:-]{+PASS:+} g++.dg/special/conpr-1.C {+(test for excess e= rrors)+} {+FAIL: g++.dg/special/conpr-1.C execution test+} To restore the previous GCC/nvptx behavior, I seek permission to first push the attached "Restore default 'sorry' 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR'"= . For traceability, this simply restores the previous code, stripped down to the bare minimum. As a next step, I'd then prepare a patch to re-work this thing, to make it more obvious what's actually happening there. (Details to be done. For example, do we want to continue to have 'sorry' functions called via 'gcc/target-def.h', as done previously? Or, should that be an '#error' case there, and the nvptx back end provides its own 'sorry' functions for 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR'? Or, emit 'sorry' in 'gcc/final.cc:rest_of_handle_final'? Or, something else?) In addition to 'gcc/config/nvptx/nvptx.cc' (as quoted above) three more files did '#include "dbxout.h"', and thus potentially could use these 'sorry' default functions. Per my testing of '--target=3Dpdp11-aout' as well as '--target=3Dpowerpc64-darwin', re-introducing '#include "dbxout.h"' is not relevant for 'gcc/config/pdp11/pdp11.cc' as well as for 'gcc/config/rs6000/rs6000-call.cc' and 'gcc/config/rs6000/rs6000-logue.cc' (for 'TARGET_MACHO' only). Target pdp11-aout is not affected, because of 'gcc/config.gcc' setting: # On a.out targets, we need to use collect2. case ${target} in *-*-*aout*) use_collect2=3Dyes ;; esac Target powerpc64-darwin is not affected, because it defines 'TARGET_ASM_NAMED_SECTION'. I'll thus remove those changes/TODO markers that are still present in the attached "Restore default 'sorry' 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR'"= . With that, OK to push? Gr=C3=BC=C3=9Fe Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename="0001-WIP-Restore-default-sorry-TARGET_ASM_CONSTRUCTOR-TAR.patch" >From a2fd19176bb1d9111ba0826b979ae0cdf50957dc Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Sun, 9 Oct 2022 22:39:02 +0200 Subject: [PATCH] [WIP] Restore default 'sorry' 'TARGET_ASM_CONSTRUCTOR', 'TARGET_ASM_DESTRUCTOR' ... that got lost in commit 7e0db0cdf01e9c885a29cb37415f5bc00d90c029 "STABS: remove -gstabs and -gxcoff functionality". --- gcc/Makefile.in | 1 + gcc/config/nvptx/nvptx.cc | 1 + gcc/config/pdp11/pdp11.cc | 1 + gcc/config/rs6000/rs6000-call.cc | 4 +++ gcc/config/rs6000/rs6000-logue.cc | 3 +++ gcc/dbxout.cc | 43 +++++++++++++++++++++++++++++++ gcc/dbxout.h | 25 ++++++++++++++++++ gcc/target-def.h | 4 +++ 8 files changed, 82 insertions(+) create mode 100644 gcc/dbxout.cc create mode 100644 gcc/dbxout.h diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 59b67d994415..4808f6770ca1 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1354,6 +1354,7 @@ OBJS = \ data-streamer.o \ data-streamer-in.o \ data-streamer-out.o \ + dbxout.o \ dbgcnt.o \ dce.o \ ddg.o \ diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index 2fe120b38730..4cb5d02d40cd 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -52,6 +52,7 @@ #include "tm-preds.h" #include "tm-constrs.h" #include "langhooks.h" +#include "dbxout.h" #include "cfgrtl.h" #include "gimple.h" #include "stor-layout.h" diff --git a/gcc/config/pdp11/pdp11.cc b/gcc/config/pdp11/pdp11.cc index 380223439a47..ae73c1f7bb98 100644 --- a/gcc/config/pdp11/pdp11.cc +++ b/gcc/config/pdp11/pdp11.cc @@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see #include "calls.h" #include "expr.h" #include "builtins.h" +//TODO #include "dbxout.h" #include "explow.h" #include "expmed.h" diff --git a/gcc/config/rs6000/rs6000-call.cc b/gcc/config/rs6000/rs6000-call.cc index ac3cb7e3d362..27971ecd0333 100644 --- a/gcc/config/rs6000/rs6000-call.cc +++ b/gcc/config/rs6000/rs6000-call.cc @@ -67,6 +67,10 @@ #include "rs6000-internal.h" +#if TARGET_MACHO +//TODO #include "dbxout.h" /* dbxout_ */ +#endif + #ifndef TARGET_PROFILE_KERNEL #define TARGET_PROFILE_KERNEL 0 #endif diff --git a/gcc/config/rs6000/rs6000-logue.cc b/gcc/config/rs6000/rs6000-logue.cc index a11d020ccd0c..3aa60719f3b8 100644 --- a/gcc/config/rs6000/rs6000-logue.cc +++ b/gcc/config/rs6000/rs6000-logue.cc @@ -47,6 +47,9 @@ #include "diagnostic-core.h" #include "alias.h" #include "rs6000-internal.h" +#if TARGET_MACHO +//TODO #include "dbxout.h" /* dbxout_ */ +#endif static int rs6000_ra_ever_killed (void); static void is_altivec_return_reg (rtx, void *); diff --git a/gcc/dbxout.cc b/gcc/dbxout.cc new file mode 100644 index 000000000000..161eeb196537 --- /dev/null +++ b/gcc/dbxout.cc @@ -0,0 +1,43 @@ +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "diagnostic-core.h" +#include "dbxout.h" + +/* Record an element in the table of global destructors. SYMBOL is + a SYMBOL_REF of the function to be called; PRIORITY is a number + between 0 and MAX_INIT_PRIORITY. */ + +void +default_stabs_asm_out_destructor (rtx symbol ATTRIBUTE_UNUSED, + int priority ATTRIBUTE_UNUSED) +{ + sorry ("global destructors not supported on this target"); +} + +/* Likewise for global constructors. */ + +void +default_stabs_asm_out_constructor (rtx symbol ATTRIBUTE_UNUSED, + int priority ATTRIBUTE_UNUSED) +{ + sorry ("global constructors not supported on this target"); +} diff --git a/gcc/dbxout.h b/gcc/dbxout.h new file mode 100644 index 000000000000..ad0b538cabf1 --- /dev/null +++ b/gcc/dbxout.h @@ -0,0 +1,25 @@ +/* Copyright (C) 1998-2022 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_DBXOUT_H +#define GCC_DBXOUT_H + +extern void default_stabs_asm_out_destructor (rtx, int); +extern void default_stabs_asm_out_constructor (rtx, int); + +#endif /* GCC_DBXOUT_H */ diff --git a/gcc/target-def.h b/gcc/target-def.h index f81f8fe3bb39..1c4aa2963dc4 100644 --- a/gcc/target-def.h +++ b/gcc/target-def.h @@ -62,6 +62,8 @@ # else # ifdef TARGET_ASM_NAMED_SECTION # define TARGET_ASM_CONSTRUCTOR default_named_section_asm_out_constructor +# else +# define TARGET_ASM_CONSTRUCTOR default_stabs_asm_out_constructor # endif # endif #endif @@ -72,6 +74,8 @@ # else # ifdef TARGET_ASM_NAMED_SECTION # define TARGET_ASM_DESTRUCTOR default_named_section_asm_out_destructor +# else +# define TARGET_ASM_DESTRUCTOR default_stabs_asm_out_destructor # endif # endif #endif -- 2.35.1 --=-=-=--