* config/rs6000/rs6000.h (ASM_OUTPUT_WEAKREF): Define.
* defaults.h (ASM_OUTPUT_WEAKREF): Add decl argument.
* varasm.c (do_assemble_alias): Adjust call.
(weak_finish): Don't use ASM_WEAKEN_LABEL if ASM_WEAKEN_DECL
is defined.
* doc/tm.texi (ASM_OUTPUT_WEAKREF): Document it.
From-SVN: r107156
+2005-11-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/rs6000/rs6000.h (ASM_OUTPUT_WEAKREF): Define.
+ * defaults.h (ASM_OUTPUT_WEAKREF): Add decl argument.
+ * varasm.c (do_assemble_alias): Adjust call.
+ (weak_finish): Don't use ASM_WEAKEN_LABEL if ASM_WEAKEN_DECL
+ is defined.
+ * doc/tm.texi (ASM_OUTPUT_WEAKREF): Document it.
+
2005-11-17 James E Wilson <wilson@specifix.com>
* tree.def (FUNCTION_DECL): Correct typo in comment.
while (0)
#endif
+#if HAVE_GAS_WEAKREF
+#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE) \
+ do \
+ { \
+ fputs ("\t.weakref\t", (FILE)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
+ fputs (", ", (FILE)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (VALUE)); \
+ if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \
+ && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
+ { \
+ fputs ("\n\t.weakref\t.", (FILE)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
+ fputs (", .", (FILE)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (VALUE)); \
+ } \
+ fputc ('\n', (FILE)); \
+ } while (0)
+#endif
+
/* This implements the `alias' attribute. */
#undef ASM_OUTPUT_DEF_FROM_DECLS
#define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \
the latter is referenced directly, a strong reference prevails. */
#ifndef ASM_OUTPUT_WEAKREF
#if defined HAVE_GAS_WEAKREF
-#define ASM_OUTPUT_WEAKREF(FILE, NAME, VALUE) \
+#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE) \
do \
{ \
fprintf ((FILE), "\t.weakref\t"); \
to make @var{name} weak.
@end defmac
+@defmac ASM_OUTPUT_WEAKREF (@var{stream}, @var{decl}, @var{name}, @var{value})
+Outputs a directive that enables @var{name} to be used to refer to
+symbol @var{value} with weak-symbol semantics. @code{decl} is the
+declaration of @code{name}.
+@end defmac
+
@defmac SUPPORTS_WEAK
A C expression which evaluates to true if the target supports weak symbols.
#ifndef ASM_OUTPUT_WEAKREF
else if (! TREE_SYMBOL_REFERENCED (target))
{
-# ifdef ASM_WEAKEN_LABEL
+ /* Use ASM_WEAKEN_LABEL only if ASM_WEAKEN_DECL is not
+ defined, otherwise we and weak_finish_1 would use a
+ different macros. */
+# if defined ASM_WEAKEN_LABEL && ! defined ASM_WEAKEN_DECL
ASM_WEAKEN_LABEL (asm_out_file, IDENTIFIER_POINTER (target));
# else
tree decl = find_decl_and_mark_needed (alias_decl, target);
weakref_targets = tree_cons (decl, target, weakref_targets);
#ifdef ASM_OUTPUT_WEAKREF
- ASM_OUTPUT_WEAKREF (asm_out_file,
+ ASM_OUTPUT_WEAKREF (asm_out_file, decl,
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
IDENTIFIER_POINTER (target));
#else