summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-23 19:17:49 +0000
committerro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-23 19:17:49 +0000
commit864af2096282bb2fa49507287362ec575701fe2e (patch)
tree715dfc6d43d67f4a0e0c332509b5531869b36669 /gcc
parentd6541b10200ae57ba3dedeb4dad0868f846b0a6e (diff)
downloadgcc-864af2096282bb2fa49507287362ec575701fe2e.tar.gz
* target.h (struct gcc_target): New member external_libcall.
* target-def.h (TARGET_ASM_EXTERNAL_LIBCALL): Provide default. (TARGET_ASM_OUT): Use it. * doc/tm.texi (TARGET_ASM_EXTERNAL_LIBCALL): Document. * targhooks.c: Convert to ISO C 90. (default_external_libcall): New function. * targhooks.h (default_external_libcall): Declare. * varasm.c (assemble_external_libcall): Use targetm.asm_out.external_libcall instead of ASM_OUTPUT_EXTERNAL_LIBCALL. * config/mips/mips-protos.h [TARGET_IRIX5 || TARGET_IRIX 6] (mips_output_external_libcall): Declare. * config/mips/mips.c (mips_output_external_libcall): Change definition guard. Change to match TARGET_ASM_EXTERNAL_LIBCALL. Only operate for O32 ABI. * config/mips/iris5.h (TARGET_ASM_EXTERNAL_LIBCALL): Define instead of ASM_OUTPUT_EXTERNAL_LIBCALL. * config/mips/iris6.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Don't undef, superceded by TARGET_ASM_EXTERNAL_LIBCALL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71689 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog23
-rw-r--r--gcc/config/mips/iris5.h4
-rw-r--r--gcc/config/mips/iris6.h1
-rw-r--r--gcc/config/mips/mips-protos.h6
-rw-r--r--gcc/config/mips/mips.c21
-rw-r--r--gcc/doc/tm.texi12
-rw-r--r--gcc/target-def.h7
-rw-r--r--gcc/target.h4
-rw-r--r--gcc/targhooks.c17
-rw-r--r--gcc/targhooks.h2
-rw-r--r--gcc/varasm.c6
11 files changed, 68 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bb152c8a997..6790ecc0de9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,26 @@
+2003-09-23 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * target.h (struct gcc_target): New member external_libcall.
+ * target-def.h (TARGET_ASM_EXTERNAL_LIBCALL): Provide default.
+ (TARGET_ASM_OUT): Use it.
+ * doc/tm.texi (TARGET_ASM_EXTERNAL_LIBCALL): Document.
+ * targhooks.c: Convert to ISO C 90.
+ (default_external_libcall): New function.
+ * targhooks.h (default_external_libcall): Declare.
+ * varasm.c (assemble_external_libcall): Use
+ targetm.asm_out.external_libcall instead of
+ ASM_OUTPUT_EXTERNAL_LIBCALL.
+ * config/mips/mips-protos.h [TARGET_IRIX5 || TARGET_IRIX 6]
+ (mips_output_external_libcall): Declare.
+ * config/mips/mips.c (mips_output_external_libcall): Change
+ definition guard.
+ Change to match TARGET_ASM_EXTERNAL_LIBCALL.
+ Only operate for O32 ABI.
+ * config/mips/iris5.h (TARGET_ASM_EXTERNAL_LIBCALL): Define
+ instead of ASM_OUTPUT_EXTERNAL_LIBCALL.
+ * config/mips/iris6.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Don't undef,
+ superceded by TARGET_ASM_EXTERNAL_LIBCALL.
+
2003-09-22 Nathnael Nerode <neroden@gcc.gnu.org>
* config.host: Allow unknown hosts (not targets). Allow
diff --git a/gcc/config/mips/iris5.h b/gcc/config/mips/iris5.h
index 51f80dcac87..00802c2e39a 100644
--- a/gcc/config/mips/iris5.h
+++ b/gcc/config/mips/iris5.h
@@ -215,8 +215,8 @@ do { \
} while (0)
/* Also do this for libcalls. */
-#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
- mips_output_external_libcall (FILE, XSTR (FUN, 0))
+#undef TARGET_ASM_EXTERNAL_LIBCALL
+#define TARGET_ASM_EXTERNAL_LIBCALL mips_output_external_libcall
/* This does for functions what ASM_DECLARE_OBJECT_NAME does for variables.
This is used indirectly by ASM_OUTPUT_EXTERNAL. */
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index cf68b418c3d..5ba1e120b72 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -178,7 +178,6 @@ Boston, MA 02111-1307, USA. */
/* IRIX 5 stuff that we don't need for IRIX 6. */
/* ??? We do need this for the -mabi=32 switch though. */
#undef ASM_OUTPUT_UNDEF_FUNCTION
-#undef ASM_OUTPUT_EXTERNAL_LIBCALL
#undef ASM_DECLARE_FUNCTION_SIZE
/* Stuff we need for IRIX 6 that isn't in IRIX 5. */
diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h
index 89a8cb2a420..27f3159d421 100644
--- a/gcc/config/mips/mips-protos.h
+++ b/gcc/config/mips/mips-protos.h
@@ -1,6 +1,6 @@
/* Prototypes of target machine for GNU compiler. MIPS version.
Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by A. Lichnewsky (lich@inria.inria.fr).
Changed by Michael Meissner (meissner@osf.org).
64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and
@@ -98,8 +98,8 @@ extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
extern void print_operand (FILE *, rtx, int);
extern void print_operand_address (FILE *, rtx);
extern int mips_output_external (FILE *, tree, const char *);
-#ifdef ASM_OUTPUT_UNDEF_FUNCTION
-extern int mips_output_external_libcall (FILE *, const char *);
+#if TARGET_IRIX5 || TARGET_IRIX6
+extern void mips_output_external_libcall (rtx);
#endif
extern void mips_output_filename (FILE *, const char *);
extern void mips_output_lineno (FILE *, int);
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 8bd2139d9ef..0f0a6803813 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -5517,19 +5517,20 @@ mips_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, const char *name)
return 0;
}
-#ifdef ASM_OUTPUT_UNDEF_FUNCTION
-int
-mips_output_external_libcall (FILE *file ATTRIBUTE_UNUSED, const char *name)
+#if TARGET_IRIX5 || TARGET_IRIX6
+void
+mips_output_external_libcall (rtx fun)
{
register struct extern_list *p;
- p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
- p->next = extern_head;
- p->name = name;
- p->size = -1;
- extern_head = p;
-
- return 0;
+ if (mips_abi == ABI_32)
+ {
+ p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
+ p->next = extern_head;
+ p->name = XSTR (fun, 0);
+ p->size = -1;
+ extern_head = p;
+ }
}
#endif
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ef49a688033..582953b7bb5 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -6729,15 +6729,11 @@ This macro need not be defined if it does not need to output anything.
The GNU assembler and most Unix assemblers don't require anything.
@end defmac
-@defmac ASM_OUTPUT_EXTERNAL_LIBCALL (@var{stream}, @var{symref})
-A C statement (sans semicolon) to output on @var{stream} an assembler
+@deftypefn {Target Hook} void TARGET_ASM_EXTERNAL_LIBCALL (rtx @var{symref})
+This target hook is a function to output to @var{asm_out_file} an assembler
pseudo-op to declare a library function name external. The name of the
-library function is given by @var{symref}, which has type @code{rtx} and
-is a @code{symbol_ref}.
-
-This macro need not be defined if it does not need to output anything.
-The GNU assembler and most Unix assemblers don't require anything.
-@end defmac
+library function is given by @var{symref}, which is a @code{symbol_ref}.
+@end deftypefn
@defmac ASM_OUTPUT_LABELREF (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream
diff --git a/gcc/target-def.h b/gcc/target-def.h
index da6003eff5c..aa2d96a5904 100644
--- a/gcc/target-def.h
+++ b/gcc/target-def.h
@@ -166,6 +166,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
#endif
+#ifndef TARGET_ASM_EXTERNAL_LIBCALL
+#define TARGET_ASM_EXTERNAL_LIBCALL default_external_libcall
+#endif
+
#define TARGET_ASM_ALIGNED_INT_OP \
{TARGET_ASM_ALIGNED_HI_OP, \
TARGET_ASM_ALIGNED_SI_OP, \
@@ -202,7 +206,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_ASM_OUTPUT_MI_THUNK, \
TARGET_ASM_CAN_OUTPUT_MI_THUNK, \
TARGET_ASM_FILE_START, \
- TARGET_ASM_FILE_END}
+ TARGET_ASM_FILE_END, \
+ TARGET_ASM_EXTERNAL_LIBCALL}
/* Scheduler hooks. All of these default to null pointers, which
haifa-sched.c looks for and handles. */
diff --git a/gcc/target.h b/gcc/target.h
index 3a7ea78af38..7ccca94150b 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -148,6 +148,10 @@ struct gcc_target
/* Output any boilerplate text needed at the end of a
translation unit. */
void (*file_end) (void);
+
+ /* Output an assembler pseudo-op to declare a library function name
+ external. */
+ void (*external_libcall) (rtx);
} asm_out;
/* Functions relating to instruction scheduling. */
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 97d0642540b..b1955690818 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -61,9 +61,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tm_p.h"
#include "target-def.h"
+void
+default_external_libcall (rtx fun ATTRIBUTE_UNUSED)
+{
+#ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
+ ASM_OUTPUT_EXTERNAL_LIBCALL(asm_out_file, fun);
+#endif
+}
+
bool
-default_promote_function_args (fntype)
- tree fntype ATTRIBUTE_UNUSED;
+default_promote_function_args (tree fntype ATTRIBUTE_UNUSED)
{
#ifdef PROMOTE_FUNCTION_ARGS
return true;
@@ -73,8 +80,7 @@ default_promote_function_args (fntype)
}
bool
-default_promote_function_return (fntype)
- tree fntype ATTRIBUTE_UNUSED;
+default_promote_function_return (tree fntype ATTRIBUTE_UNUSED)
{
#ifdef PROMOTE_FUNCTION_RETURN
return true;
@@ -84,8 +90,7 @@ default_promote_function_return (fntype)
}
bool
-default_promote_prototypes (fntype)
- tree fntype ATTRIBUTE_UNUSED;
+default_promote_prototypes (tree fntype ATTRIBUTE_UNUSED)
{
if (PROMOTE_PROTOTYPES)
return true;
diff --git a/gcc/targhooks.h b/gcc/targhooks.h
index 335134b81b1..0d7b276a9a4 100644
--- a/gcc/targhooks.h
+++ b/gcc/targhooks.h
@@ -18,6 +18,8 @@ along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
+extern void default_external_libcall (rtx);
+
extern bool default_promote_function_args (tree);
extern bool default_promote_function_return (tree);
extern bool default_promote_prototypes (tree);
diff --git a/gcc/varasm.c b/gcc/varasm.c
index d0bdbc15bdc..059ba5027aa 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1621,16 +1621,14 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
/* Similar, for calling a library function FUN. */
void
-assemble_external_libcall (rtx fun ATTRIBUTE_UNUSED)
+assemble_external_libcall (rtx fun)
{
-#ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
/* Declare library function name external when first used, if nec. */
if (! SYMBOL_REF_USED (fun))
{
SYMBOL_REF_USED (fun) = 1;
- ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun);
+ (*targetm.asm_out.external_libcall) (fun);
}
-#endif
}
/* Assemble a label named NAME. */