summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-17 12:55:19 +0000
committerro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-17 12:55:19 +0000
commit3285e5302f721411653de27a20770b30dc803767 (patch)
tree1bb5a4c22af007bf7d40f8f54c148c7d84c03b48
parentecb4f65ebe8d7e92574b8317a2e28439ed7c9cc0 (diff)
downloadgcc-3285e5302f721411653de27a20770b30dc803767.tar.gz
* c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and
ASM_OUTPUT_WEAK_ALIAS are defined. * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Define if possible. * config/mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL): Moved ... * config/mips/iris5.h: ... here. (HANDLE_SYSV_PRAGMA): Defined as 1. * varasm.c (weak_finish): Use ASM_OUTPUT_WEAK_ALIAS. * doc/tm.texi (ASM_OUTPUT_WEAK_ALIAS): Support the undefined weak symbol. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44072 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/c-pragma.h6
-rw-r--r--gcc/config/mips/iris5.h23
-rw-r--r--gcc/config/mips/iris6.h17
-rw-r--r--gcc/defaults.h12
-rw-r--r--gcc/doc/tm.texi3
-rw-r--r--gcc/varasm.c6
7 files changed, 55 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48466608a65..ce3195a6586 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,17 @@
+2001-07-17 H.J. Lu <hjl@gnu.org>
+ Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and
+ ASM_OUTPUT_WEAK_ALIAS are defined.
+ * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Define if possible.
+ * config/mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL):
+ Moved ...
+ * config/mips/iris5.h: ... here.
+ (HANDLE_SYSV_PRAGMA): Defined as 1.
+ * varasm.c (weak_finish): Use ASM_OUTPUT_WEAK_ALIAS.
+ * doc/tm.texi (ASM_OUTPUT_WEAK_ALIAS): Support the undefined weak
+ symbol.
+
2001-07-17 Joseph S. Myers <jsm28@cam.ac.uk>
* c-parse.in (all_prefix_attributes): New variable.
diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h
index d15c3e5d35a..89ee4a7ef55 100644
--- a/gcc/c-pragma.h
+++ b/gcc/c-pragma.h
@@ -1,5 +1,5 @@
/* Pragma related interfaces.
- Copyright (C) 1995, 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -22,9 +22,9 @@ Boston, MA 02111-1307, USA. */
#define GCC_C_PRAGMA_H
#ifdef HANDLE_SYSV_PRAGMA
-/* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_DEF are
+/* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_WEAK_ALIAS are
defined. */
-#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF)
+#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_WEAK_ALIAS)
#define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK
#endif
diff --git a/gcc/config/mips/iris5.h b/gcc/config/mips/iris5.h
index 59d172c96e8..eab210f9d44 100644
--- a/gcc/config/mips/iris5.h
+++ b/gcc/config/mips/iris5.h
@@ -170,3 +170,26 @@ do { \
tree name_tree = get_identifier (NAME); \
TREE_ASM_WRITTEN (name_tree) = 1; \
} while (0)
+
+/* This is how we tell the assembler that a symbol is weak. */
+
+#define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE) \
+ do \
+ { \
+ ASM_GLOBALIZE_LABEL (FILE, NAME); \
+ fputs ("\t.weakext\t", FILE); \
+ assemble_name (FILE, NAME); \
+ if (VALUE) \
+ { \
+ fputc (' ', FILE); \
+ assemble_name (FILE, VALUE); \
+ } \
+ fputc ('\n', FILE); \
+ } \
+ while (0)
+
+#define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, 0)
+
+/* Handle #pragma weak and #pragma pack. */
+#undef HANDLE_SYSV_PRAGMA
+#define HANDLE_SYSV_PRAGMA 1
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index 6f45cbb385f..bec3414f14f 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -207,23 +207,6 @@ Boston, MA 02111-1307, USA. */
#define TYPE_ASM_OP "\t.type\t"
#define SIZE_ASM_OP "\t.size\t"
-/* This is how we tell the assembler that a symbol is weak. */
-
-#define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \
- do { \
- ASM_GLOBALIZE_LABEL (FILE, NAME); \
- fputs ("\t.weakext\t", FILE); \
- assemble_name (FILE, NAME); \
- if (VALUE) \
- { \
- fputc (' ', FILE); \
- assemble_name (FILE, VALUE); \
- } \
- fputc ('\n', FILE); \
- } while (0)
-
-#define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0)
-
/* Irix assembler does not support the init_priority C++ attribute. */
#undef SUPPORTS_INIT_PRIORITY
#define SUPPORTS_INIT_PRIORITY 0
diff --git a/gcc/defaults.h b/gcc/defaults.h
index a1001b99259..ed5be8bcf6e 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -142,6 +142,18 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
#endif
+/* This is how we tell the assembler that a symbol is weak. */
+#if !defined (ASM_OUTPUT_WEAK_ALIAS) && defined (ASM_OUTPUT_DEF)
+#define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE) \
+ do \
+ { \
+ ASM_WEAKEN_LABEL (STREAM, NAME); \
+ if (VALUE) \
+ ASM_OUTPUT_DEF (STREAM, NAME, VALUE); \
+ } \
+ while (0)
+#endif
+
/* This determines whether or not we support weak symbols. */
#ifndef SUPPORTS_WEAK
#ifdef ASM_WEAKEN_LABEL
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index adf9870789c..6fcc3ba8a47 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -6423,7 +6423,8 @@ correct for most systems.
@item ASM_OUTPUT_WEAK_ALIAS (@var{stream}, @var{name}, @var{value})
A C statement to output to the stdio stream @var{stream} assembler code
which defines (equates) the weak symbol @var{name} to have the value
-@var{value}.
+@var{value}. If @var{value} is @code{NULL}, it defines @var{name} as
+an undefined weak symbol.
Define this macro if the target only supports weak aliases; define
@code{ASM_OUTPUT_DEF} instead if possible.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 8d7000c9dd9..76f1c675792 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -4773,11 +4773,7 @@ weak_finish ()
for (t = weak_decls; t; t = t->next)
{
if (t->name)
- {
- ASM_WEAKEN_LABEL (asm_out_file, t->name);
- if (t->value)
- ASM_OUTPUT_DEF (asm_out_file, t->name, t->value);
- }
+ ASM_OUTPUT_WEAK_ALIAS (asm_out_file, t->name, t->value);
}
}
#endif