Some minor cleanups and prep work

Zack Weinberg zackw@stanford.edu
Tue Nov 21 18:00:00 GMT 2000


This is a bunch of minor cleanups, plus some preparation for future
work, that were tangled into the xvalloc.c patch I sent yesterday.
I've untangled them because they should be noncontroversial.

There's three logical changes:

- Get rid of the mechanism to run MD-files through cpp.
- Clean up libiberty/configure.in, and run a couple of additional
  tests that we'll want sooner or later.
- Factor the error reporting logic out of the xmalloc family into its
  own routine.  This routine is exported, so that other memory
  allocators can use it.  (Such as xvalloc.c.)

I'm bootstrapping on i386-linux; assuming it passes, OK to commit?

zw

gcc:
	* Makefile.in, config.gcc, configure.in: Expunge remaining
	traces of facility for running MD files through C preprocessor.

libiberty:
	* aclocal.m4 (LIB_AC_PROG_CC): Moved here from configure.in.
	(AC_DEFINE_NOAUTOHEADER): New - work around bug in autoheader.
	* configure.in: Call AC_C_INLINE and AC_C_CONST.  Use three
	argument form of AC_DEFINE in dummy definitions block.  Use
	AC_DEFINE_NOAUTOHEADER for real definitions of things defined
	in dummy block.  Preload cache variables instead of bypassing
	tests, where possible.
	* acconfig.h: Removed.

	* xmalloc.c (xmalloc_failed): New function, does error
	reporting on failed allocation.
	(xmalloc, xcalloc, xrealloc): Use it.
	* libiberty.h: Move #includes to top.  Prototype xmalloc_failed.

===================================================================
Index: gcc/Makefile.in
--- gcc/Makefile.in	2000/11/22 01:22:01	1.546
+++ gcc/Makefile.in	2000/11/22 01:53:01
@@ -493,10 +493,6 @@ GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTR
 # Directory to link to, when using the target `maketest'.
 DIR = ../gcc
 
-# Guaranteed to not exist when not passing md through cpp.
-# This value is overridden directly by configure.
-MD_FILE = md-cpp-not-used
-
 # Flags to use when cross-building GCC.
 # Prefix to apply to names of object files when using them
 # to run on the machine we are compiling on.
@@ -1645,12 +1641,6 @@ s-genrtl: gengenrtl $(srcdir)/move-if-ch
 # about the target machine.  They do depend on config.h itself,
 # since that describes the host machine.
 
-# Pass the md file through cpp if the target requests it.
-$(MD_FILE): $(MD_DEPS)
-	rm -f $@
-	$(MD_CPP) $(MD_CPPFLAGS) $(md_file) | sed 's/^# /; /g' > tmp-$@
-	mv tmp-$@ $@
-
 gensupport.o: gensupport.c $(RTL_H) $(OBSTACK_H) system.h errors.h gensupport.h
 	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gensupport.c
 
@@ -2228,9 +2218,6 @@ clean: mostlyclean $(INTL_CLEAN) lang.cl
 	-rm -rf libgcc
 	-rm -f *.dvi
 	-rm -f */*.dvi
-	-if [ -f md.pre-cpp ]; then \
-	  rm -f md ; \
-	fi
 # Delete the include directory.
 	-rm -rf include
 # Delete files used by the "multilib" facility (including libgcc subdirs).
@@ -2250,7 +2237,7 @@ clean: mostlyclean $(INTL_CLEAN) lang.cl
 INTL_DISTCLEAN = intl.distclean
 distclean: clean $(INTL_DISTCLEAN) lang.distclean
 	-rm -f tm.h tm_p.h config.h auto-host.h auto-build.h tconfig.h hconfig.h
-	-rm -f md cstamp-h
+	-rm -f cstamp-h
 	-rm -f config.status config.run config.cache config.bak
 	-rm -f Make-lang Make-hooks Make-host Make-target
 	-rm -f Makefile specs.h options.h gencheck.h *.oaux
===================================================================
Index: gcc/config.gcc
--- gcc/config.gcc	2000/11/21 19:34:14	1.5
+++ gcc/config.gcc	2000/11/22 01:53:01
@@ -119,9 +119,6 @@
 #  build_install_headers_dir
 #			Target to use when installing header files.
 #
-#  md_cppflags		Non-empty list of args to pass to cpp if the target
-#  			wants its .md file passed through cpp.
-#
 #  host_truncate_target
 #			Non-empty if the target name should be truncated
 #			on this host, due to filename length issues.
@@ -182,9 +179,6 @@ use_collect2=
 target_cpu_default=
 # Set this to control how the header file directory is installed.
 install_headers_dir=install-headers-tar
-# Set this to a non-empty list of args to pass to cpp if the target
-# wants its .md file passed through cpp.
-md_cppflags=
 # Set this if directory names should be truncated to 14 characters.
 truncate_target=
 # Set this if gdb needs a dir command with `dirname $out_file`
===================================================================
Index: gcc/configure.in
--- gcc/configure.in	2000/11/21 12:50:52	1.456
+++ gcc/configure.in	2000/11/22 01:53:02
@@ -1077,20 +1077,6 @@ else
 	maybe_use_collect2="-DUSE_COLLECT2"
 fi
 
-# NEED TO CONVERT
-# Set MD_DEPS if the real md file is in md.pre-cpp.
-# Set MD_CPP to the cpp to pass the md file through.  Md files use ';'
-# for line oriented comments, so we must always use a GNU cpp.  If
-# building gcc with a cross compiler, use the cross compiler just
-# built.  Otherwise, we can use the cpp just built.
-md_file_sub=
-if test "x$md_cppflags" = x
-then
-	md_file_sub=$srcdir/config/$md_file
-else
-	md_file=md
-fi
-
 # If we have gas in the build tree, make a link to it.
 if test -f ../gas/Makefile; then
 	rm -f as; $symbolic_link ../gas/as-new$host_exeext as$host_exeext 2>/dev/null
===================================================================
Index: include/libiberty.h
--- include/libiberty.h	2000/08/24 20:28:15	1.13
+++ include/libiberty.h	2000/11/22 01:53:02
@@ -16,6 +16,13 @@ extern "C" {
 
 #include "ansidecl.h"
 
+#ifdef ANSI_PROTOTYPES
+/* Get a definition for size_t.  */
+#include <stddef.h>
+/* Get a definition for va_list.  */
+#include <stdarg.h>
+#endif
+
 /* Build an argument vector from a string.  Allocates memory using
    malloc.  Use freeargv to free the vector.  */
 
@@ -130,16 +137,13 @@ extern void xexit PARAMS ((int status)) 
 
 extern void xmalloc_set_program_name PARAMS ((const char *));
 
+/* Report an allocation failure.  */
+extern void xmalloc_failed PARAMS ((size_t)) ATTRIBUTE_NORETURN;
+
 /* Allocate memory without fail.  If malloc fails, this will print a
    message to stderr (using the name set by xmalloc_set_program_name,
    if any) and then call xexit.  */
 
-#ifdef ANSI_PROTOTYPES
-/* Get a definition for size_t.  */
-#include <stddef.h>
-/* Get a definition for va_list.  */
-#include <stdarg.h>
-#endif
 extern PTR xmalloc PARAMS ((size_t)) ATTRIBUTE_MALLOC;
 
 /* Reallocate memory without fail.  This works like xmalloc.  Note,
===================================================================
Index: libiberty/acconfig.h
--- libiberty/acconfig.h	Tue Nov 21 17:53:04 2000
+++ libiberty/acconfig.h	Tue May  5 13:32:27 1998
@@ -1,11 +0,0 @@
-/* Define if you have the sys_errlist variable.  */
-#undef HAVE_SYS_ERRLIST
-
-/* Define if you have the sys_nerr variable.  */
-#undef HAVE_SYS_NERR
-
-/* Define if you have the sys_siglist variable.  */
-#undef HAVE_SYS_SIGLIST
-
-/* Define if you have the strerror function.  */
-#undef HAVE_STRERROR
===================================================================
Index: libiberty/aclocal.m4
--- libiberty/aclocal.m4	2000/07/23 16:05:03	1.2
+++ libiberty/aclocal.m4	2000/11/22 01:53:02
@@ -83,3 +83,54 @@ then AC_DEFINE(NEED_DECLARATION_ERRNO, 1
   [Define if errno must be declared even when <errno.h> is included.])
 fi
 ])
+
+# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable.  This should really be fixed in autoconf
+# itself.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_PROVIDE([AC_PROG_CC])
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+  test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+  ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS=
+  AC_PROG_CC_G
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  elif test $ac_cv_prog_cc_g = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-O2"
+  fi
+else
+  GCC=
+  ac_libiberty_warn_cflags=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+AC_SUBST(ac_libiberty_warn_cflags)
+])
+
+# Work around a bug in autoheader.  This can go away when we switch to
+# autoconf >2.50.  The use of define instead of AC_DEFUN is
+# deliberate.
+define(AC_DEFINE_NOAUTOHEADER,
+[cat >> confdefs.h <<\EOF
+[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
+EOF
+])
===================================================================
Index: libiberty/configure.in
--- libiberty/configure.in	2000/09/05 18:43:26	1.29
+++ libiberty/configure.in	2000/11/22 01:53:02
@@ -36,51 +36,11 @@ dnl to call AC_CHECK_PROG.
 AC_CHECK_TOOL(AR, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 
-# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
-# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
-# are probably using a cross compiler, which will not be able to fully
-# link an executable.  This should really be fixed in autoconf
-# itself.
-
-AC_DEFUN(LIB_AC_PROG_CC,
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_PROVIDE([AC_PROG_CC])
-AC_CHECK_PROG(CC, gcc, gcc)
-if test -z "$CC"; then
-  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
-  test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-fi
-
-AC_PROG_CC_GNU
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
-  ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
-dnl Check whether -g works, even if CFLAGS is set, in case the package
-dnl plays around with CFLAGS (such as to build both debugging and
-dnl normal versions of a library), tasteless as that idea is.
-  ac_test_CFLAGS="${CFLAGS+set}"
-  ac_save_CFLAGS="$CFLAGS"
-  CFLAGS=
-  AC_PROG_CC_G
-  if test "$ac_test_CFLAGS" = set; then
-    CFLAGS="$ac_save_CFLAGS"
-  elif test $ac_cv_prog_cc_g = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-O2"
-  fi
-else
-  GCC=
-  ac_libiberty_warn_cflags=
-  test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-])
-AC_SUBST(ac_libiberty_warn_cflags)
-
 LIB_AC_PROG_CC
 
 AC_ISC_POSIX
+AC_C_CONST
+AC_C_INLINE
 
 dnl When we start using libtool:
 dnl Default to a non shared library.  This may be overridden by the
@@ -172,11 +132,11 @@ if test "x" = "y"; then
   AC_CHECK_FUNCS(memset putenv random rename rindex sigsetmask strcasecmp)
   AC_CHECK_FUNCS(setenv strchr strdup strncasecmp strrchr strstr strtod strtol)
   AC_CHECK_FUNCS(strtoul tmpnam vasprintf vfprintf vprintf vsprintf waitpid)
-  AC_DEFINE(HAVE_SYS_ERRLIST)
-  AC_DEFINE(HAVE_SYS_NERR)
-  AC_DEFINE(HAVE_SYS_SIGLIST)
   AC_CHECK_FUNCS(getrusage on_exit psignal strerror strsignal sysconf times)
   AC_CHECK_FUNCS(sbrk gettimeofday)
+  AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
+  AC_DEFINE(HAVE_SYS_NERR,    1, [Define if you have the sys_nerr variable.])
+  AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])
 fi
 
 # For each of these functions, if the host does not provide the
@@ -215,7 +175,7 @@ if test -n "${with_target_subdir}"; then
     # dont have to check them here.
 
     # Of the functions in $checkfuncs, newlib only has strerror.
-    AC_DEFINE(HAVE_STRERROR)
+    AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR)
 
     setobjs=yes
 
@@ -256,7 +216,7 @@ if test -z "${setobjs}"; then
     # don't have to check them here.
 
     # Of the functions in $checkfuncs, VxWorks only has strerror.
-    AC_DEFINE(HAVE_STRERROR)
+    AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR)
 
     setobjs=yes
     ;;
@@ -294,9 +254,8 @@ if test -z "${setobjs}"; then
   *-*-mingw32*)
     # Under mingw32, sys_nerr and sys_errlist exist, but they are
     # macros, so the test below won't find them.
-    vars="`echo $vars | sed -e 's/sys_nerr//' -e 's/sys_errlist//'`"
-    AC_DEFINE(HAVE_SYS_NERR)
-    AC_DEFINE(HAVE_SYS_ERRLIST)
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
     ;;
 
   *-*-uwin*)
@@ -307,8 +266,8 @@ if test -z "${setobjs}"; then
     # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
     # macros (actually, these are imported from a DLL, but the end effect 
     # is the same), so the test below won't find them.
-    AC_DEFINE(HAVE_SYS_NERR)
-    AC_DEFINE(HAVE_SYS_ERRLIST)
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
     ;;
 
   esac
===================================================================
Index: libiberty/xmalloc.c
--- libiberty/xmalloc.c	2000/05/18 22:48:34	1.9
+++ libiberty/xmalloc.c	2000/11/22 01:53:02
@@ -64,6 +64,31 @@ xmalloc_set_program_name (s)
 #endif /* HAVE_SBRK */
 }
 
+void
+xmalloc_failed (size)
+     size_t size;
+{
+#ifdef HAVE_SBRK
+  extern char **environ;
+  size_t allocated;
+
+  if (first_break != NULL)
+    allocated = (char *) sbrk (0) - first_break;
+  else
+    allocated = (char *) sbrk (0) - (char *) &environ;
+  fprintf (stderr,
+	   "\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n",
+	   name, *name ? ": " : "",
+	   (unsigned long) size, (unsigned long) allocated);
+#else /* HAVE_SBRK */
+  fprintf (stderr,
+	   "\n%s%sCannot allocate %lu bytes\n",
+	   name, *name ? ": " : "",
+	   (unsigned long) size);
+#endif /* HAVE_SBRK */
+  xexit (1);
+}  
+
 PTR
 xmalloc (size)
     size_t size;
@@ -74,27 +99,8 @@ xmalloc (size)
     size = 1;
   newmem = malloc (size);
   if (!newmem)
-    {
-#ifdef HAVE_SBRK
-      extern char **environ;
-      size_t allocated;
+    xmalloc_failed (size);
 
-      if (first_break != NULL)
-	allocated = (char *) sbrk (0) - first_break;
-      else
-	allocated = (char *) sbrk (0) - (char *) &environ;
-      fprintf (stderr,
-	       "\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n",
-	       name, *name ? ": " : "",
-	       (unsigned long) size, (unsigned long) allocated);
-#else /* HAVE_SBRK */
-      fprintf (stderr,
-              "\n%s%sCannot allocate %lu bytes\n",
-              name, *name ? ": " : "",
-              (unsigned long) size);
-#endif /* HAVE_SBRK */
-      xexit (1);
-    }
   return (newmem);
 }
 
@@ -109,27 +115,8 @@ xcalloc (nelem, elsize)
 
   newmem = calloc (nelem, elsize);
   if (!newmem)
-    {
-#ifdef HAVE_SBRK
-      extern char **environ;
-      size_t allocated;
+    xmalloc_failed (nelem * elsize);
 
-      if (first_break != NULL)
-	allocated = (char *) sbrk (0) - first_break;
-      else
-	allocated = (char *) sbrk (0) - (char *) &environ;
-      fprintf (stderr,
-	       "\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n",
-	       name, *name ? ": " : "",
-	       (unsigned long) (nelem * elsize), (unsigned long) allocated);
-#else /* HAVE_SBRK */
-      fprintf (stderr,
-              "\n%s%sCannot allocate %lu bytes\n",
-              name, *name ? ": " : "",
-              (unsigned long) (nelem * elsize));
-#endif /* HAVE_SBRK */
-      xexit (1);
-    }
   return (newmem);
 }
 
@@ -147,26 +134,7 @@ xrealloc (oldmem, size)
   else
     newmem = realloc (oldmem, size);
   if (!newmem)
-    {
-#ifdef HAVE_SBRK
-      extern char **environ;
-      size_t allocated;
+    xmalloc_failed (size);
 
-      if (first_break != NULL)
-	allocated = (char *) sbrk (0) - first_break;
-      else
-	allocated = (char *) sbrk (0) - (char *) &environ;
-      fprintf (stderr,
-	       "\n%s%sCannot reallocate %lu bytes after allocating %lu bytes\n",
-	       name, *name ? ": " : "",
-	       (unsigned long) size, (unsigned long) allocated);
-#else /* HAVE_SBRK */
-      fprintf (stderr,
-              "\n%s%sCannot reallocate %lu bytes\n",
-              name, *name ? ": " : "",
-              (unsigned long) size);
-#endif /* HAVE_SBRK */
-      xexit (1);
-    }
   return (newmem);
 }


More information about the Gcc-patches mailing list