This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Pragma handling: non-C front ends should not require c_lex()


Richard Henderson wrote:-

> On Tue, Oct 16, 2001 at 10:06:24PM +0100, Neil Booth wrote:
> > That leaves c4x and i370.  Would you accept a patch to have those
> > targets use c{,xx}_target_objs with their pragma routines bropken out
> > into a separate file?
> 
> Certainly.

How about this then?  I've successfully created a stage1 cross C
compiler to i370-ibm-mvs and i370-ibm-linux (couldn't do a fortran one
because of some #error about needing exact target floating point
representation).  Also a stage1 C and F77 compiler to c4x-foo-rtems.

Neil.

	* config.gcc: Update c4x and i370 for C front end-specific
	dependencies.
	* config/c4x/c4x-c.c: New.
	* config/c4x/c4x-protos.h (c4x_handle_pragma): Remove.
	(code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree):
	New declarations.
	* config/c4x/c4x.c: Don't include c-lex.h or c-pragma.h.
	(code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree):
	Make extern.
	(c4x_init_pragma): Remove.
	(c4x_parse_pragma, c4x_pr_CODE_SECTION, c4x_pr_DATA_SECTION,
	c4x_pr_FUNC_IS_PURE, c4x_pr_FUNC_NEVER_RETURNS, c4x_pr_INTERRUPT,
	c4x_pr_ignored): Move to c4x-c.c.
	* config/c4x/c4x.h (REGISTER_TARGET_PRAGMAS): Update.
	* config/c4x/t-c4x: Update.
	* config/i370/i370-c.c: New.
	* config/i370/i370.c: Don't include c-lex.h or c-pragma.h.
	(i370_pr_map): Move to i370-c.c.
	* config/i370/t-i370: New.	

	* doc/tm.texi: Update.

Index: config.gcc
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config.gcc,v
retrieving revision 1.96
diff -u -p -r1.96 config.gcc
--- config.gcc	2001/10/11 17:02:34	1.96
+++ config.gcc	2001/10/17 19:01:45
@@ -644,11 +644,15 @@ c4x-*-rtems*)
 	if test x$enable_threads = xyes; then
 	  thread_file='rtems'
 	fi
+	c_target_objs="c4x-c.o"
+	cxx_target_objs="c4x-c.o"
 	;;
 c4x-*)
 	cpu_type=c4x
 	float_format=c4x
 	tmake_file=c4x/t-c4x
+	c_target_objs="c4x-c.o"
+	cxx_target_objs="c4x-c.o"
 	;;
 clipper-intergraph-clix*)
 	tm_file="${tm_file} svr3.h clipper/clix.h"
@@ -941,11 +945,17 @@ hppa*-*-mpeix*)
 i370-*-opened*)			 # IBM 360/370/390 Architecture
 	xm_defines='POSIX FATAL_EXIT_CODE=12'
 	tm_file=i370/oe.h
+	tmake_file="i370/t-i370"
 	xmake_file=i370/x-oe
+	c_target_objs="i370-c.o"
+	cxx_target_objs="i370-c.o"
 	;;
 i370-*-mvs*)
 	xm_defines='POSIX FATAL_EXIT_CODE=12'
 	tm_file=i370/mvs.h
+	tmake_file="i370/t-i370"
+	c_target_objs="i370-c.o"
+	cxx_target_objs="i370-c.o"
 	;;
 i370-*-linux*)
 	xmake_file=x-linux
Index: config/c4x/c4x-c.c
===================================================================
RCS file: c4x-c.c
diff -N c4x-c.c
--- /dev/null	Tue May  5 13:32:27 1998
+++ c4x-c.c	Wed Oct 17 12:01:55 2001
@@ -0,0 +1,159 @@
+/* Subroutines for the C front end on the TMS320C[34]x
+   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
+
+   Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
+              and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "tree.h"
+#include "toplev.h"
+#include "cpplib.h"
+#include "c-pragma.h"
+#include "c-lex.h"
+#include "c4x-protos.h"
+
+static int c4x_parse_pragma PARAMS ((const char *, tree *, tree *));
+
+/* Handle machine specific pragmas for compatibility with existing
+   compilers for the C3x/C4x.
+
+   pragma				   attribute
+   ----------------------------------------------------------
+   CODE_SECTION(symbol,"section")          section("section")
+   DATA_SECTION(symbol,"section")          section("section")
+   FUNC_CANNOT_INLINE(function)            
+   FUNC_EXT_CALLED(function)               
+   FUNC_IS_PURE(function)                  const
+   FUNC_IS_SYSTEM(function)                
+   FUNC_NEVER_RETURNS(function)            noreturn
+   FUNC_NO_GLOBAL_ASG(function)            
+   FUNC_NO_IND_ASG(function)               
+   INTERRUPT(function)                     interrupt
+
+   */
+
+/* Parse a C4x pragma, of the form ( function [, "section"] ) \n.
+   FUNC is loaded with the IDENTIFIER_NODE of the function, SECT with
+   the STRING_CST node of the string.  If SECT is null, then this
+   pragma doesn't take a section string.  Returns 0 for a good pragma,
+   -1 for a malformed pragma.  */
+#define BAD(msgid, arg) do { warning (msgid, arg); return -1; } while (0)
+
+static int
+c4x_parse_pragma (name, func, sect)
+     const char *name;
+     tree *func;
+     tree *sect;
+{
+  tree f, s, x;
+
+  if (c_lex (&x) != CPP_OPEN_PAREN)
+    BAD ("missing '(' after '#pragma %s' - ignored", name);
+
+  if (c_lex (&f) != CPP_NAME)
+    BAD ("missing function name in '#pragma %s' - ignored", name);
+
+  if (sect)
+    {
+      if (c_lex (&x) != CPP_COMMA)
+	BAD ("malformed '#pragma %s' - ignored", name);
+      if (c_lex (&s) != CPP_STRING)
+	BAD ("missing section name in '#pragma %s' - ignored", name);
+      *sect = s;
+    }
+
+  if (c_lex (&x) != CPP_CLOSE_PAREN)
+    BAD ("missing ')' for '#pragma %s' - ignored", name);
+
+  if (c_lex (&x) != CPP_EOF)
+    warning ("junk at end of '#pragma %s'", name);
+
+  *func = f;
+  return 0;
+}
+
+void
+c4x_pr_CODE_SECTION (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree func, sect;
+
+  if (c4x_parse_pragma ("CODE_SECTION", &func, &sect))
+    return;
+  code_tree = chainon (code_tree,
+		       build_tree_list (func,
+					build_tree_list (NULL_TREE, sect)));
+}
+
+void
+c4x_pr_DATA_SECTION (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree func, sect;
+
+  if (c4x_parse_pragma ("DATA_SECTION", &func, &sect))
+    return;
+  data_tree = chainon (data_tree,
+		       build_tree_list (func,
+					build_tree_list (NULL_TREE, sect)));
+}
+
+void
+c4x_pr_FUNC_IS_PURE (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree func;
+
+  if (c4x_parse_pragma ("FUNC_IS_PURE", &func, 0))
+    return;
+  pure_tree = chainon (pure_tree, build_tree_list (func, NULL_TREE));
+}
+
+void
+c4x_pr_FUNC_NEVER_RETURNS (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree func;
+
+  if (c4x_parse_pragma ("FUNC_NEVER_RETURNS", &func, 0))
+    return;
+  noreturn_tree = chainon (noreturn_tree, build_tree_list (func, NULL_TREE));
+}
+
+void
+c4x_pr_INTERRUPT (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree func;
+
+  if (c4x_parse_pragma ("INTERRUPT", &func, 0))
+    return;
+  interrupt_tree = chainon (interrupt_tree, build_tree_list (func, NULL_TREE));
+}
+
+/* Used for FUNC_CANNOT_INLINE, FUNC_EXT_CALLED, FUNC_IS_SYSTEM,
+   FUNC_NO_GLOBAL_ASG, and FUNC_NO_IND_ASG.  */
+void
+c4x_pr_ignored (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+}
Index: config/c4x/c4x-protos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/c4x/c4x-protos.h,v
retrieving revision 1.21
diff -u -p -r1.21 c4x-protos.h
--- c4x-protos.h	2001/08/18 20:25:51	1.21
+++ c4x-protos.h	2001/10/17 19:01:57
@@ -39,10 +39,6 @@ extern void c4x_expand_epilogue PARAMS (
 
 extern int c4x_null_epilogue_p PARAMS ((void));
 
-extern int c4x_handle_pragma PARAMS ((int (* p_getc) (void),
-				      void (* p_ungetc) (int),
-				      char *));
-
 extern void c4x_global_label (const char *);
 
 extern void c4x_external_ref (const char *);
@@ -305,6 +301,7 @@ extern void c4x_pr_FUNC_NEVER_RETURNS	PA
 extern void c4x_pr_INTERRUPT		PARAMS ((cpp_reader *));
 extern void c4x_pr_ignored		PARAMS ((cpp_reader *));
 extern void c4x_init_pragma		PARAMS ((int (*) (tree *)));
+extern tree code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree;
 #endif
 
 #endif /* ! GCC_C4X_PROTOS_H */
Index: config/c4x/c4x.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/c4x/c4x.c,v
retrieving revision 1.95
diff -u -p -r1.95 c4x.c
--- c4x.c	2001/10/07 16:51:09	1.95
+++ c4x.c	2001/10/17 19:02:04
@@ -45,8 +45,6 @@ Boston, MA 02111-1307, USA.  */
 #include "c-tree.h"
 #include "ggc.h"
 #include "cpplib.h"
-#include "c-lex.h"
-#include "c-pragma.h"
 #include "toplev.h"
 #include "c4x-protos.h"
 #include "target.h"
@@ -160,11 +158,11 @@ int c4x_cpu_version = 40;	/* CPU version
 
 /* Pragma definitions.  */
 
-static tree code_tree = NULL_TREE;
-static tree data_tree = NULL_TREE;
-static tree pure_tree = NULL_TREE;
-static tree noreturn_tree = NULL_TREE;
-static tree interrupt_tree = NULL_TREE;
+tree code_tree = NULL_TREE;
+tree data_tree = NULL_TREE;
+tree pure_tree = NULL_TREE;
+tree noreturn_tree = NULL_TREE;
+tree interrupt_tree = NULL_TREE;
 
 /* Forward declarations */
 static void c4x_add_gc_roots PARAMS ((void));
@@ -187,7 +185,6 @@ static int c4x_valid_operands PARAMS ((e
 static int c4x_arn_reg_operand PARAMS ((rtx, enum machine_mode, unsigned int));
 static int c4x_arn_mem_operand PARAMS ((rtx, enum machine_mode, unsigned int));
 static void c4x_check_attribute PARAMS ((const char *, tree, tree, tree *));
-static int c4x_parse_pragma PARAMS ((const char *, tree *, tree *));
 static int c4x_r11_set_p PARAMS ((rtx));
 static int c4x_rptb_valid_p PARAMS ((rtx, rtx));
 static int c4x_label_ref_used_p PARAMS ((rtx, rtx));
@@ -4485,141 +4482,6 @@ c4x_operand_subword (op, i, validate_add
     }
   
   return operand_subword (op, i, validate_address, mode);
-}
-
-/* Handle machine specific pragmas for compatibility with existing
-   compilers for the C3x/C4x.
-
-   pragma				   attribute
-   ----------------------------------------------------------
-   CODE_SECTION(symbol,"section")          section("section")
-   DATA_SECTION(symbol,"section")          section("section")
-   FUNC_CANNOT_INLINE(function)            
-   FUNC_EXT_CALLED(function)               
-   FUNC_IS_PURE(function)                  const
-   FUNC_IS_SYSTEM(function)                
-   FUNC_NEVER_RETURNS(function)            noreturn
-   FUNC_NO_GLOBAL_ASG(function)            
-   FUNC_NO_IND_ASG(function)               
-   INTERRUPT(function)                     interrupt
-
-   */
-
-/* Parse a C4x pragma, of the form ( function [, "section"] ) \n.
-   FUNC is loaded with the IDENTIFIER_NODE of the function, SECT with
-   the STRING_CST node of the string.  If SECT is null, then this
-   pragma doesn't take a section string.  Returns 0 for a good pragma,
-   -1 for a malformed pragma.  */
-#define BAD(msgid, arg) do { warning (msgid, arg); return -1; } while (0)
-
-static int (*c_lex_func) (tree *);
-
-void
-c4x_init_pragma (get_token)
-  int (*get_token) PARAMS ((tree *));
-{
-  c_lex_func = get_token;
-}
-
-
-static int
-c4x_parse_pragma (name, func, sect)
-     const char *name;
-     tree *func;
-     tree *sect;
-{
-  tree f, s, x;
-
-  if (c_lex_func (&x) != CPP_OPEN_PAREN)
-    BAD ("missing '(' after '#pragma %s' - ignored", name);
-
-  if (c_lex_func (&f) != CPP_NAME)
-    BAD ("missing function name in '#pragma %s' - ignored", name);
-
-  if (sect)
-    {
-      if (c_lex_func (&x) != CPP_COMMA)
-	BAD ("malformed '#pragma %s' - ignored", name);
-      if (c_lex_func (&s) != CPP_STRING)
-	BAD ("missing section name in '#pragma %s' - ignored", name);
-      *sect = s;
-    }
-
-  if (c_lex_func (&x) != CPP_CLOSE_PAREN)
-    BAD ("missing ')' for '#pragma %s' - ignored", name);
-
-  if (c_lex_func (&x) != CPP_EOF)
-    warning ("junk at end of '#pragma %s'", name);
-
-  *func = f;
-  return 0;
-}
-
-void
-c4x_pr_CODE_SECTION (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree func, sect;
-
-  if (c4x_parse_pragma ("CODE_SECTION", &func, &sect))
-    return;
-  code_tree = chainon (code_tree,
-		       build_tree_list (func,
-					build_tree_list (NULL_TREE, sect)));
-}
-
-void
-c4x_pr_DATA_SECTION (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree func, sect;
-
-  if (c4x_parse_pragma ("DATA_SECTION", &func, &sect))
-    return;
-  data_tree = chainon (data_tree,
-		       build_tree_list (func,
-					build_tree_list (NULL_TREE, sect)));
-}
-
-void
-c4x_pr_FUNC_IS_PURE (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree func;
-
-  if (c4x_parse_pragma ("FUNC_IS_PURE", &func, 0))
-    return;
-  pure_tree = chainon (pure_tree, build_tree_list (func, NULL_TREE));
-}
-
-void
-c4x_pr_FUNC_NEVER_RETURNS (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree func;
-
-  if (c4x_parse_pragma ("FUNC_NEVER_RETURNS", &func, 0))
-    return;
-  noreturn_tree = chainon (noreturn_tree, build_tree_list (func, NULL_TREE));
-}
-
-void
-c4x_pr_INTERRUPT (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree func;
-
-  if (c4x_parse_pragma ("INTERRUPT", &func, 0))
-    return;
-  interrupt_tree = chainon (interrupt_tree, build_tree_list (func, NULL_TREE));
-}
-
-/* Used for FUNC_CANNOT_INLINE, FUNC_EXT_CALLED, FUNC_IS_SYSTEM,
-   FUNC_NO_GLOBAL_ASG, and FUNC_NO_IND_ASG.  */
-void
-c4x_pr_ignored (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
 }
 
 struct name_list
Index: config/c4x/c4x.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/c4x/c4x.h,v
retrieving revision 1.85
diff -u -p -r1.85 c4x.h
--- c4x.h	2001/09/11 16:49:57	1.85
+++ c4x.h	2001/10/17 19:02:13
@@ -2348,7 +2348,6 @@ do {						\
   cpp_register_pragma (PFILE, 0, "FUNC_NO_GLOBAL_ASG", c4x_pr_ignored);	\
   cpp_register_pragma (PFILE, 0, "FUNC_NO_IND_ASG", c4x_pr_ignored);	\
   cpp_register_pragma (PFILE, 0, "INTERRUPT", c4x_pr_INTERRUPT);	\
-  c4x_init_pragma (&c_lex);						\
 } while (0)
 
 /* Assembler Commands for Alignment.  */
Index: config/c4x/t-c4x
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/c4x/t-c4x,v
retrieving revision 1.8
diff -u -p -r1.8 t-c4x
--- t-c4x	2001/05/17 03:15:51	1.8
+++ t-c4x	2001/10/17 19:02:13
@@ -7,6 +7,10 @@ LIB1ASMFUNCS = _divsf3 _divsi3 _udivsi3 
 
 TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit
 
+c4x-c.o: $(srcdir)/config/c4x/c4x-c.c $(srcdir)/config/c4x/c4x-protos.h \
+    $(CONFIG_H) $(SYSTEM_H) cpplib.h $(TREE_H) c-pragma.h c-lex.h toplev.h
+	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
+
 MULTILIB_OPTIONS = m30 msmall mmemparm
 MULTILIB_DIRNAMES = c3x small mem
 MULTILIB_MATCHES = m30=mcpu?30 m30=mcpu?31 m30=mcpu?32 m30=m31 m30=m32
Index: config/i370/i370-c.c
===================================================================
RCS file: i370-c.c
diff -N i370-c.c
--- /dev/null	Tue May  5 13:32:27 1998
+++ i370-c.c	Wed Oct 17 12:02:13 2001
@@ -0,0 +1,63 @@
+/* Subroutines for the C front end for System/370.
+   Copyright (C) 1989, 1993, 1995, 1997, 1998, 1999, 2000
+   Free Software Foundation, Inc.
+   Contributed by Jan Stein (jan@cd.chalmers.se).
+   Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com)
+   Hacked for Linux-ELF/390 by Linas Vepstas (linas@linas.org) 
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "tree.h"
+#include "toplev.h"
+#include "cpplib.h"
+#include "c-pragma.h"
+#include "c-lex.h"
+#include "i370-protos.h"
+
+#ifdef TARGET_HLASM
+
+/* #pragma map (name, alias) -
+   In this implementation both name and alias are required to be
+   identifiers.  The older code seemed to be more permissive.  Can
+   anyone clarify?  */
+
+void
+i370_pr_map (pfile)
+     cpp_reader *pfile ATTRIBUTE_UNUSED;
+{
+  tree name, alias, x;
+
+  if (c_lex (&x)        == CPP_OPEN_PAREN
+      && c_lex (&name)  == CPP_NAME
+      && c_lex (&x)     == CPP_COMMA
+      && c_lex (&alias) == CPP_NAME
+      && c_lex (&x)     == CPP_CLOSE_PAREN)
+    {
+      if (c_lex (&x) != CPP_EOF)
+	warning ("junk at end of #pragma map");
+
+      mvs_add_alias (IDENTIFIER_POINTER (name), IDENTIFIER_POINTER (alias), 1);
+      return;
+    }
+
+  warning ("malformed #pragma map, ignored");
+}
+
+#endif
Index: config/i370/i370.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i370/i370.c,v
retrieving revision 1.20
diff -u -p -r1.20 i370.c
--- i370.c	2001/08/10 16:19:18	1.20
+++ i370.c	2001/10/17 19:02:17
@@ -39,8 +39,6 @@ Boston, MA 02111-1307, USA.  */
 #include "recog.h"
 #include "toplev.h"
 #include "cpplib.h"
-#include "c-pragma.h"
-#include "c-lex.h"
 #include "tm_p.h"
 #include "target.h"
 #include "target-def.h"
@@ -1029,33 +1027,6 @@ mvs_check_alias (realname, aliasname)
     }
 #endif
   return 0;
-}
-
-/* #pragma map (name, alias) -
-   In this implementation both name and alias are required to be
-   identifiers.  The older code seemed to be more permissive.  Can
-   anyone clarify?  */
-
-void
-i370_pr_map (pfile)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-{
-  tree name, alias, x;
-
-  if (c_lex (&x)        == CPP_OPEN_PAREN
-      && c_lex (&name)  == CPP_NAME
-      && c_lex (&x)     == CPP_COMMA
-      && c_lex (&alias) == CPP_NAME
-      && c_lex (&x)     == CPP_CLOSE_PAREN)
-    {
-      if (c_lex (&x) != CPP_EOF)
-	warning ("junk at end of #pragma map");
-
-      mvs_add_alias (IDENTIFIER_POINTER (name), IDENTIFIER_POINTER (alias), 1);
-      return;
-    }
-
-  warning ("malformed #pragma map, ignored");
 }
 
 /* defines and functions specific to the HLASM assembler */
Index: config/i370/t-i370
===================================================================
RCS file: t-i370
diff -N t-i370
--- /dev/null	Tue May  5 13:32:27 1998
+++ t-i370	Wed Oct 17 12:02:17 2001
@@ -0,0 +1,3 @@
+i370-c.o: $(srcdir)/config/i370/i370-c.c $(srcdir)/config/i370/i370-protos.h \
+    $(CONFIG_H) $(SYSTEM_H) cpplib.h $(TREE_H) c-pragma.h c-lex.h toplev.h
+	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
Index: doc/tm.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v
retrieving revision 1.64
diff -u -p -r1.64 tm.texi
--- tm.texi	2001/10/17 08:44:09	1.64
+++ tm.texi	2001/10/17 19:02:51
@@ -8514,12 +8514,13 @@ pragma of the form
 @var{space} is the case-sensitive namespace of the pragma, or
 @code{NULL} to put the pragma in the global namespace.  The callback
 routine receives @var{pfile} as its first argument, which can be passed
-on to cpplib's functions if necessary.  It may read any text after the
-@var{name} by making calls to @code{c_lex}.  Text which is not read by
-the callback will be silently ignored.
+on to cpplib's functions if necessary.  You can lex tokens after the
+@var{name} by calling @code{c_lex}.  Tokens that are not read by the
+callback will be silently ignored.  The end of the line is indicated by
+a token of type @code{CPP_EOF}.
 
 For an example use of this routine, see @file{c4x.h} and the callback
-routines defined in @file{c4x.c}.
+routines defined in @file{c4x-c.c}.
 
 Note that the use of @code{c_lex} is specific to the C and C++
 compilers.  It will not work in the Java or Fortran compilers, or any


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]