re PR middle-end/45862 (SUPPORTS_WEAK is documented as a C expression, used as a...
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Mon, 11 Oct 2010 16:52:12 +0000 (16:52 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Mon, 11 Oct 2010 16:52:12 +0000 (16:52 +0000)
PR middle-end/45862
* doc/tm.texi.in (SUPPORTS_WEAK): Update.
(TARGET_SUPPORTS_WEAK): New.
* doc/tm.texi: Regenerate.
* defaults.h (SUPPORTS_WEAK): Update comment.
(TARGET_SUPPORTS_WEAK): New.
* dwarf2asm.c (USE_LINKONCE_INDIRECT): Update define.
* varasm.c (assemble_external): Use TARGET_SUPPORTS_WEAK instead of
SUPPORTS_WEAK.
(merge_weak, declare_weak, do_assemble_alias, supports_one_only,
make_decl_one_only): Likewise.
* config/pa/som.h (SUPPORTS_WEAK): Rename defines to
TARGET_SUPPORTS_WEAK.
(SUPPORTS_ONE_ONLY, MAKE_DECL_ONE_ONLY): Use TARGET_SUPPORTS_WEAK
instead of SUPPORTS_WEAK.

From-SVN: r165319

gcc/ChangeLog
gcc/config/pa/som.h
gcc/defaults.h
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/dwarf2asm.c
gcc/varasm.c

index 63564aa..0a6120c 100644 (file)
@@ -1,3 +1,21 @@
+2010-10-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR middle-end/45862
+       * doc/tm.texi.in (SUPPORTS_WEAK): Update.
+       (TARGET_SUPPORTS_WEAK): New.
+       * doc/tm.texi: Regenerate.
+       * defaults.h (SUPPORTS_WEAK): Update comment.
+       (TARGET_SUPPORTS_WEAK): New.
+       * dwarf2asm.c (USE_LINKONCE_INDIRECT): Update define.
+       * varasm.c (assemble_external): Use TARGET_SUPPORTS_WEAK instead of
+       SUPPORTS_WEAK.
+       (merge_weak, declare_weak, do_assemble_alias, supports_one_only,
+       make_decl_one_only): Likewise.
+       * config/pa/som.h (SUPPORTS_WEAK): Rename defines to
+       TARGET_SUPPORTS_WEAK.
+       (SUPPORTS_ONE_ONLY, MAKE_DECL_ONE_ONLY): Use TARGET_SUPPORTS_WEAK
+       instead of SUPPORTS_WEAK.
+
 2010-10-11  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config/sparc/gmon-sol2.c: Don't include coretypes.h, tm.h.
index 53dddb7..c8f77d4 100644 (file)
@@ -272,11 +272,13 @@ do {                                              \
 #define ALWAYS_STRIP_DOTDOT 1
 
 /* If GAS supports weak, we can support weak when we have working linker
-   support for secondary definitions and are generating code for GAS.  */
+   support for secondary definitions and are generating code for GAS.
+   This is primarily for one-only support as SOM doesn't allow undefined
+   weak symbols.  */
 #ifdef HAVE_GAS_WEAK
-#define SUPPORTS_WEAK (TARGET_SOM_SDEF && TARGET_GAS)
+#define TARGET_SUPPORTS_WEAK (TARGET_SOM_SDEF && TARGET_GAS)
 #else
-#define SUPPORTS_WEAK 0
+#define TARGET_SUPPORTS_WEAK 0
 #endif
 
 /* CVS GAS as of 4/28/04 supports a comdat parameter for the .nsubspa
@@ -289,7 +291,7 @@ do {                                                \
 #endif
 
 /* We can support one only if we support weak or comdat.  */
-#define SUPPORTS_ONE_ONLY (SUPPORTS_WEAK || SUPPORTS_SOM_COMDAT)
+#define SUPPORTS_ONE_ONLY (TARGET_SUPPORTS_WEAK || SUPPORTS_SOM_COMDAT)
 
 /* We use DECL_COMMON for uninitialized one-only variables as we don't
    have linkonce .bss.  We use SOM secondary definitions or comdat for
@@ -300,7 +302,7 @@ do {                                                \
         && (DECL_INITIAL (DECL) == 0                                   \
             || DECL_INITIAL (DECL) == error_mark_node))                        \
       DECL_COMMON (DECL) = 1;                                          \
-    else if (SUPPORTS_WEAK)                                            \
+    else if (TARGET_SUPPORTS_WEAK)                                     \
       DECL_WEAK (DECL) = 1;                                            \
   } while (0)
 
index 6ecebb6..8858572 100644 (file)
@@ -286,7 +286,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #endif
 #endif
 
-/* This determines whether or not we support weak symbols.  */
+/* This determines whether or not we support weak symbols.  SUPPORTS_WEAK
+   must be a preprocessor constant.  */
 #ifndef SUPPORTS_WEAK
 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
 #define SUPPORTS_WEAK 1
@@ -295,6 +296,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #endif
 #endif
 
+/* This determines whether or not we support weak symbols during target
+   code generation.  TARGET_SUPPORTS_WEAK can be any valid C expression.  */
+#ifndef TARGET_SUPPORTS_WEAK
+#define TARGET_SUPPORTS_WEAK (SUPPORTS_WEAK)
+#endif
+
 /* This determines whether or not we support the discriminator
    attribute in the .loc directive.  */
 #ifndef SUPPORTS_DISCRIMINATOR
index f98176a..298b3b9 100644 (file)
@@ -7923,13 +7923,21 @@ declaration of @code{name}.
 @end defmac
 
 @defmac SUPPORTS_WEAK
-A C expression which evaluates to true if the target supports weak symbols.
+A preprocessor constant expression which evaluates to true if the target
+supports weak symbols.
 
 If you don't define this macro, @file{defaults.h} provides a default
 definition.  If either @code{ASM_WEAKEN_LABEL} or @code{ASM_WEAKEN_DECL}
-is defined, the default definition is @samp{1}; otherwise, it is
-@samp{0}.  Define this macro if you want to control weak symbol support
-with a compiler flag such as @option{-melf}.
+is defined, the default definition is @samp{1}; otherwise, it is @samp{0}.
+@end defmac
+
+@defmac TARGET_SUPPORTS_WEAK
+A C expression which evaluates to true if the target supports weak symbols.
+
+If you don't define this macro, @file{defaults.h} provides a default
+definition.  The default definition is @samp{(SUPPORTS_WEAK)}.  Define
+this macro if you want to control weak symbol support with a compiler
+flag such as @option{-melf}.
 @end defmac
 
 @defmac MAKE_DECL_ONE_ONLY (@var{decl})
index 41d5aee..c97b514 100644 (file)
@@ -7909,13 +7909,21 @@ declaration of @code{name}.
 @end defmac
 
 @defmac SUPPORTS_WEAK
-A C expression which evaluates to true if the target supports weak symbols.
+A preprocessor constant expression which evaluates to true if the target
+supports weak symbols.
 
 If you don't define this macro, @file{defaults.h} provides a default
 definition.  If either @code{ASM_WEAKEN_LABEL} or @code{ASM_WEAKEN_DECL}
-is defined, the default definition is @samp{1}; otherwise, it is
-@samp{0}.  Define this macro if you want to control weak symbol support
-with a compiler flag such as @option{-melf}.
+is defined, the default definition is @samp{1}; otherwise, it is @samp{0}.
+@end defmac
+
+@defmac TARGET_SUPPORTS_WEAK
+A C expression which evaluates to true if the target supports weak symbols.
+
+If you don't define this macro, @file{defaults.h} provides a default
+definition.  The default definition is @samp{(SUPPORTS_WEAK)}.  Define
+this macro if you want to control weak symbol support with a compiler
+flag such as @option{-melf}.
 @end defmac
 
 @defmac MAKE_DECL_ONE_ONLY (@var{decl})
index 84e8cad..eefc29f 100644 (file)
@@ -798,8 +798,8 @@ static GTY((param1_is (char *), param2_is (tree))) splay_tree indirect_pool;
 
 static GTY(()) int dw2_const_labelno;
 
-#if defined(HAVE_GAS_HIDDEN) && defined(SUPPORTS_ONE_ONLY)
-# define USE_LINKONCE_INDIRECT 1
+#if defined(HAVE_GAS_HIDDEN)
+# define USE_LINKONCE_INDIRECT (SUPPORTS_ONE_ONLY)
 #else
 # define USE_LINKONCE_INDIRECT 0
 #endif
index 4381571..03e25dd 100644 (file)
@@ -2053,7 +2053,7 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
   /* We want to output annotation for weak and external symbols at
      very last to check if they are references or not.  */
 
-  if (SUPPORTS_WEAK
+  if (TARGET_SUPPORTS_WEAK
       && DECL_WEAK (decl)
       /* TREE_STATIC is a weird and abused creature which is not
         generally the right test for whether an entity has been
@@ -5027,7 +5027,7 @@ merge_weak (tree newdecl, tree olddecl)
 {
   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
     {
-      if (DECL_WEAK (newdecl) && SUPPORTS_WEAK)
+      if (DECL_WEAK (newdecl) && TARGET_SUPPORTS_WEAK)
         {
           tree *pwd;
           /* We put the NEWDECL on the weak_decls list at some point
@@ -5064,7 +5064,7 @@ merge_weak (tree newdecl, tree olddecl)
        warning (0, "weak declaration of %q+D after first use results "
                  "in unspecified behavior", newdecl);
 
-      if (SUPPORTS_WEAK)
+      if (TARGET_SUPPORTS_WEAK)
        {
          /* We put the NEWDECL on the weak_decls list at some point.
             Replace it with the OLDDECL.  */
@@ -5098,7 +5098,7 @@ declare_weak (tree decl)
     error ("weak declaration of %q+D must be public", decl);
   else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
     error ("weak declaration of %q+D must precede definition", decl);
-  else if (!SUPPORTS_WEAK)
+  else if (!TARGET_SUPPORTS_WEAK)
     warning (0, "weak declaration of %q+D not supported", decl);
 
   mark_weak (decl);
@@ -5344,7 +5344,7 @@ do_assemble_alias (tree decl, tree target)
                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
                          IDENTIFIER_POINTER (target));
 #else
-      if (!SUPPORTS_WEAK)
+      if (!TARGET_SUPPORTS_WEAK)
        {
          error_at (DECL_SOURCE_LOCATION (decl),
                    "weakref is not supported in this configuration");
@@ -5636,7 +5636,7 @@ supports_one_only (void)
 {
   if (SUPPORTS_ONE_ONLY)
     return 1;
-  return SUPPORTS_WEAK;
+  return TARGET_SUPPORTS_WEAK;
 }
 
 /* Set up DECL as a public symbol that can be defined in multiple
@@ -5662,7 +5662,7 @@ make_decl_one_only (tree decl, tree comdat_group)
     DECL_COMMON (decl) = 1;
   else
     {
-      gcc_assert (SUPPORTS_WEAK);
+      gcc_assert (TARGET_SUPPORTS_WEAK);
       DECL_WEAK (decl) = 1;
     }
 }