diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2005-11-18 01:55:34 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2005-11-18 01:55:34 +0000 |
commit | ff2d10c1e49a8936763ea7bfa2ee335f4b797298 (patch) | |
tree | f7de15014a0085f44ce51e707c4844ee5dd161a1 /gcc | |
parent | ebb23329cd736e3f60eb60f544e9e218baa3a9ab (diff) | |
download | gcc-ff2d10c1e49a8936763ea7bfa2ee335f4b797298.zip gcc-ff2d10c1e49a8936763ea7bfa2ee335f4b797298.tar.gz gcc-ff2d10c1e49a8936763ea7bfa2ee335f4b797298.tar.bz2 |
rs6000.h (ASM_OUTPUT_WEAKREF): Define.
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 20 | ||||
-rw-r--r-- | gcc/defaults.h | 2 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 6 | ||||
-rw-r--r-- | gcc/varasm.c | 7 |
5 files changed, 41 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f7394e..22a6b70 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +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. diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index d3b3eea..d2b5491 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -2033,6 +2033,26 @@ extern int toc_initialized; 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) \ diff --git a/gcc/defaults.h b/gcc/defaults.h index 9d82960..38dab33 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -174,7 +174,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 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"); \ diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b229ee8..09279ec 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -6766,6 +6766,12 @@ defines (equates) the weak symbol @var{name} to have the value 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. diff --git a/gcc/varasm.c b/gcc/varasm.c index ad4d060..68a46ea 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4551,7 +4551,10 @@ weak_finish (void) #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); @@ -4736,7 +4739,7 @@ do_assemble_alias (tree decl, tree 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 |