I noted in <http://gcc.gnu.org/ml/gcc-patches/2011-05/msg02172.html> the fragile nature of the default of TARGET_HAVE_NAMED_SECTIONS based on TARGET_ASM_NAMED_SECTION (relying on (a) TARGET_ASM_NAMED_SECTION being defined in tm.h not a .c file and (b) the order in which headers are included).
This patch simplifies the logic and makes it less fragile by defaulting TARGET_HAVE_NAMED_SECTIONS to "true" - which is correct for almost all targets - and then explicitly defining it to "false" for the targets without named section support. Although this duplicates information from TARGET_ASM_NAMED_SECTION, I think doing so is better than the fragile dependencies listed above. Bootstrapped with no regressions on x86_64-unknown-linux-gnu, and tested building cc1 and xgcc for crosses to: alpha-dec-osf5.1 hppa2.0w-hp-hpux11.23 i686-openbsd2 m32c-elf m68k-openbsd pdp11-none vax-openbsd. (vax-openbsd failed because of the pre-existing PR 47122.) OK to commit? (My inclination is that the OpenBSD targets without named sections - presumably a.out - should be deprecated. In the case of the x86 target FSF GCC also has a more recent OpenBSD target with named section support; for the other architectures there isn't a more recent target in FSF GCC and I don't know if OpenBSD's own toolchain has since moved to ELF on M68K or VAX.) 2011-06-21 Joseph Myers <jos...@codesourcery.com> * common/common-target-def.h (TARGET_HAVE_NAMED_SECTIONS): Don't default based on TARGET_ASM_NAMED_SECTION. * common/common-target.def (have_named_sections): Default to true. * common/config/default-common.c: Don't include tm.h. * common/config/picochip/picochip-common.c (TARGET_HAVE_NAMED_SECTIONS): Don't define. * common/config/m32c/m32c-common.c: Remove. * config.gcc (m32c*-*-*): Set target_has_targetm_common=no. * config/alpha/osf5.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. * config/i386/openbsd.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. * config/m68k/openbsd.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. * config/pa/som.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. * config/pdp11/pdp11.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. * config/vax/openbsd.h (TARGET_HAVE_NAMED_SECTIONS): Define to false. Index: gcc/common/config/m32c/m32c-common.c =================================================================== --- gcc/common/config/m32c/m32c-common.c (revision 175248) +++ gcc/common/config/m32c/m32c-common.c (working copy) @@ -1,31 +0,0 @@ -/* Common hooks for R8C/M16C/M32C. - Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 - 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 - <http://www.gnu.org/licenses/>. */ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "tm.h" -#include "common/common-target.h" -#include "common/common-target-def.h" - -#undef TARGET_HAVE_NAMED_SECTIONS -#define TARGET_HAVE_NAMED_SECTIONS true - -struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; Index: gcc/common/config/default-common.c =================================================================== --- gcc/common/config/default-common.c (revision 175248) +++ gcc/common/config/default-common.c (working copy) @@ -21,12 +21,10 @@ along with GCC; see the file COPYING3. #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" /* For TARGET_ASM_NAMED_SECTION used in default for - TARGET_HAVE_NAMED_SECTIONS. */ #include "common/common-target.h" #include "common/common-target-def.h" -/* FIXME: Do not include tm.h or tm_p.h here; if it is useful for a target to +/* Do not include tm.h or tm_p.h here; if it is useful for a target to define some macros for the initializer in a header without defining targetm_common itself (for example, because of interactions with some hooks depending on the target OS and others on the target Index: gcc/common/config/picochip/picochip-common.c =================================================================== --- gcc/common/config/picochip/picochip-common.c (revision 175248) +++ gcc/common/config/picochip/picochip-common.c (working copy) @@ -31,9 +31,6 @@ static const struct default_options pico { OPT_LEVELS_NONE, 0, NULL, 0 } }; -#undef TARGET_HAVE_NAMED_SECTIONS -#define TARGET_HAVE_NAMED_SECTIONS 1 - #undef TARGET_OPTION_OPTIMIZATION_TABLE #define TARGET_OPTION_OPTIMIZATION_TABLE picochip_option_optimization_table Index: gcc/common/common-target.def =================================================================== --- gcc/common/common-target.def (revision 175248) +++ gcc/common/common-target.def (working copy) @@ -86,7 +86,7 @@ DEFHOOKPOD DEFHOOKPOD (have_named_sections, "", - bool, false) + bool, true) DEFHOOKPOD (always_strip_dotdot, Index: gcc/common/common-target-def.h =================================================================== --- gcc/common/common-target-def.h (revision 175248) +++ gcc/common/common-target-def.h (working copy) @@ -16,10 +16,6 @@ along with this program; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -#ifdef TARGET_ASM_NAMED_SECTION -#define TARGET_HAVE_NAMED_SECTIONS true -#endif - #include "common/common-target-hooks-def.h" #include "hooks.h" #include "common/common-targhooks.h" Index: gcc/config.gcc =================================================================== --- gcc/config.gcc (revision 175248) +++ gcc/config.gcc (working copy) @@ -298,6 +298,7 @@ case ${target} in m32c*-*-*) cpu_type=m32c tmake_file=m32c/t-m32c + target_has_targetm_common=no ;; alpha*-*-*) cpu_type=alpha Index: gcc/config/alpha/osf5.h =================================================================== --- gcc/config/alpha/osf5.h (revision 175248) +++ gcc/config/alpha/osf5.h (working copy) @@ -259,3 +259,5 @@ along with GCC; see the file COPYING3. /* Handle #pragma extern_prefix. */ #define TARGET_HANDLE_PRAGMA_EXTERN_PREFIX 1 + +#define TARGET_HAVE_NAMED_SECTIONS false Index: gcc/config/i386/openbsd.h =================================================================== --- gcc/config/i386/openbsd.h (revision 175248) +++ gcc/config/i386/openbsd.h (working copy) @@ -98,3 +98,5 @@ along with GCC; see the file COPYING3. /* OpenBSD gas currently does not support quad, so do not use it. */ #undef ASM_QUAD + +#define TARGET_HAVE_NAMED_SECTIONS false Index: gcc/config/pdp11/pdp11.h =================================================================== --- gcc/config/pdp11/pdp11.h (revision 175248) +++ gcc/config/pdp11/pdp11.h (working copy) @@ -664,3 +664,5 @@ extern rtx cc0_reg_rtx; #define COMPARE_FLAG_MODE HImode + +#define TARGET_HAVE_NAMED_SECTIONS false Index: gcc/config/m68k/openbsd.h =================================================================== --- gcc/config/m68k/openbsd.h (revision 175248) +++ gcc/config/m68k/openbsd.h (working copy) @@ -1,5 +1,5 @@ /* Configuration file for an m68k OpenBSD target. - Copyright (C) 1999, 2002, 2003, 2007, 2009, 2010 + Copyright (C) 1999, 2002, 2003, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -87,3 +87,5 @@ along with GCC; see the file COPYING3. /* All configurations that don't use elf must be explicit about not using dwarf unwind information. */ #define DWARF2_UNWIND_INFO 0 + +#define TARGET_HAVE_NAMED_SECTIONS false Index: gcc/config/pa/som.h =================================================================== --- gcc/config/pa/som.h (revision 175248) +++ gcc/config/pa/som.h (working copy) @@ -340,3 +340,5 @@ do { \ /* Shared library suffix. Collect2 strips the version string after this suffix when generating constructor/destructor names. */ #define SHLIB_SUFFIX ".sl" + +#define TARGET_HAVE_NAMED_SECTIONS false Index: gcc/config/vax/openbsd.h =================================================================== --- gcc/config/vax/openbsd.h (revision 175248) +++ gcc/config/vax/openbsd.h (working copy) @@ -1,5 +1,5 @@ /* Configuration fragment for a VAX OpenBSD target. - Copyright (C) 2000, 2002, 2007 Free Software Foundation, Inc. + Copyright (C) 2000, 2002, 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -46,3 +46,5 @@ along with GCC; see the file COPYING3. #undef WINT_TYPE #define WINT_TYPE "int" + +#define TARGET_HAVE_NAMED_SECTIONS false -- Joseph S. Myers jos...@codesourcery.com