emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Using gnulib's alloca-opt module in Emacs


From: Paul Eggert
Subject: Using gnulib's alloca-opt module in Emacs
Date: Tue, 21 Jun 2011 10:33:32 -0700
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc14 Thunderbird/3.1.10

I plan to install the following patch, to port Emacs's use of alloca
a bit better to some rarely-used machines, and to simplify Emacs proper
by having it borrow more from gnulib.  This may affect the Windows build
so I'm giving a heads-up here.

Most of this patch is automatically-generated: the files I modified by
hand are Makefile.in, configure.in, and .bzrignore.

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: bzr+ssh://address@hidden/emacs/trunk
# testament_sha1: 6518c0208f2cbe054b79341eef0ba1e7b78e3972
# timestamp: 2011-06-21 10:24:07 -0700
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file '.bzrignore'
--- .bzrignore  2011-05-20 09:54:04 +0000
+++ .bzrignore  2011-06-21 16:15:07 +0000
@@ -47,6 +47,7 @@
 lib/.deps/
 lib/Makefile.in
 lib/deps/
+lib/alloca.h
 lib/arg-nonnull.h
 lib/c++defs.h
 lib/getopt.h

=== modified file 'ChangeLog'
--- ChangeLog   2011-06-21 08:45:39 +0000
+++ ChangeLog   2011-06-21 17:10:10 +0000
@@ -1,3 +1,14 @@
+2011-06-21  Paul Eggert  <address@hidden>
+
+       Use gnulib's alloca-opt module.
+       * .bzrignore: Add lib/alloca.h.
+       * Makefile.in (GNULIB_MODULES): Add alloca-opt.
+       * configure.in (AC_FUNC_ALLOCA): Remove almost all the alloca stuff,
+       as gnulib now does that for us.  Put alloca check in config.h.
+       Include <alloca.h> before any other include file, for AIX 3.
+       * lib/gnulib.mk, m4/gl-comp.m4: Regenerate.
+       * lib/alloca.in.h, m4/alloca.m4: New files, from gnulib.
+
 2011-06-21  Leo Liu  <address@hidden>
 
        * m4/sha256.m4:

=== modified file 'Makefile.in'
--- Makefile.in 2011-06-21 08:45:39 +0000
+++ Makefile.in 2011-06-21 16:15:07 +0000
@@ -332,6 +332,7 @@
 # $(gnulib_srcdir) (relative to $(srcdir) and should have build tools
 # as per $(gnulib_srcdir)/DEPENDENCIES.
 GNULIB_MODULES = \
+  alloca-opt \
   careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr \
   filemode getloadavg getopt-gnu ignore-value intprops lstat mktime readlink \
   socklen stdarg stdio strftime strtoumax symlink sys_stat

=== modified file 'configure.in'
--- configure.in        2011-06-17 17:32:58 +0000
+++ configure.in        2011-06-21 17:10:10 +0000
@@ -990,7 +990,7 @@
 
 ## If user specified a crt-dir, use that unconditionally.
 if test "X$CRT_DIR" = "X"; then
-  
+
   case "$canonical" in
     x86_64-*-linux-gnu* | s390x-*-linux-gnu*)
     ## On x86-64 and s390x GNU/Linux distributions, the standard library
@@ -2565,15 +2565,6 @@
   AC_DEFINE(HAVE_H_ERRNO, 1, [Define to 1 if netdb.h declares h_errno.])
 fi
 
-AC_FUNC_ALLOCA
-
-dnl src/alloca.c has been removed.  Could also check if $ALLOCA is set?
-dnl FIXME is there an autoconf test that does the right thing, without
-dnl needing to call A_M_E afterwards?
-if test x"$ac_cv_func_alloca_works" != xyes; then
-   AC_MSG_ERROR( [a system implementation of alloca is required] )
-fi
-
 # fmod, logb, and frexp are found in -lm on most systems.
 # On HPUX 9.01, -lm does not contain logb, so check for sqrt.
 AC_CHECK_LIB(m, sqrt)
@@ -3459,6 +3450,12 @@
 ])dnl
 
 AH_BOTTOM([
+/* On AIX 3 this must be included before any other include file.  */
+#include <alloca.h>
+#if ! HAVE_ALLOCA
+# error "alloca not available on this machine"
+#endif
+
 /* Define AMPERSAND_FULL_NAME if you use the convention
    that & in the full name stands for the login id.  */
 /* Turned on June 1996 supposing nobody will mind it.  */
@@ -3535,20 +3532,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#elif defined __GNUC__
-# define alloca __builtin_alloca
-#elif defined _AIX
-# define alloca __alloca
-#else
-# include <stddef.h>
-# ifdef  __cplusplus
-extern "C"
-# endif
-void *alloca (size_t);
-#endif
-
 #ifndef HAVE_STRCHR
 #define strchr(a, b) index (a, b)
 #endif

=== added file 'lib/alloca.in.h'
--- lib/alloca.in.h     1970-01-01 00:00:00 +0000
+++ lib/alloca.in.h     2011-06-21 16:15:07 +0000
@@ -0,0 +1,56 @@
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2011 Free Software Foundation,
+   Inc.
+
+   This program 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 3, or (at your option)
+   any later version.
+
+   This program 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 this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */

=== modified file 'lib/gnulib.mk'
--- lib/gnulib.mk       2011-06-21 08:45:39 +0000
+++ lib/gnulib.mk       2011-06-21 16:15:07 +0000
@@ -9,7 +9,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool 
--macro-prefix=gl --no-vc-files careadlinkat crypto/md5 crypto/sha1 
crypto/sha256 crypto/sha512 dtoastr filemode getloadavg getopt-gnu ignore-value 
intprops lstat mktime readlink socklen stdarg stdio strftime strtoumax symlink 
sys_stat
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool 
--macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 
crypto/sha256 crypto/sha512 dtoastr filemode getloadavg getopt-gnu ignore-value 
intprops lstat mktime readlink socklen stdarg stdio strftime strtoumax symlink 
sys_stat
 
 
 MOSTLYCLEANFILES += core *.stackdump
@@ -21,6 +21,29 @@
 libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
 EXTRA_libgnu_a_SOURCES =
 
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+alloca.h: alloca.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f address@hidden $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(srcdir)/alloca.in.h; \
+       } > address@hidden && \
+       mv -f address@hidden $@
+else
+alloca.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end   gnulib module alloca-opt
+
 ## begin gnulib module allocator
 
 libgnu_a_SOURCES += allocator.c

=== added file 'm4/alloca.m4'
--- m4/alloca.m4        1970-01-01 00:00:00 +0000
+++ m4/alloca.m4        2011-06-21 16:15:07 +0000
@@ -0,0 +1,121 @@
+# alloca.m4 serial 12
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2011 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ALLOCA],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  if test $ac_cv_func_alloca_works = no; then
+    gl_PREREQ_ALLOCA
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
+      AC_EGREP_CPP([Need own alloca], [
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+        ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
+    ])
+    if test $gl_cv_rpl_alloca = yes; then
+      dnl OK, alloca can be implemented through a compiler built-in.
+      AC_DEFINE([HAVE_ALLOCA], [1],
+        [Define to 1 if you have 'alloca' after including <alloca.h>,
+         a header that may be supplied by this distribution.])
+      ALLOCA_H=alloca.h
+    else
+      dnl alloca exists as a library function, i.e. it is slow and probably
+      dnl a memory leak. Don't define HAVE_ALLOCA in this case.
+      ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+  AC_SUBST([ALLOCA_H])
+  AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
+
+# This works around a bug in autoconf <= 2.68.
+# See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>.
+
+m4_version_prereq([2.69], [] ,[
+
+# This is taken from the following Autoconf patch:
+# 
http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of `alloca'.  Well, not exactly
+# AC_LIBOBJ since we actually set the output variable `ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using `alloca.c'.])
+
+AC_CACHE_CHECK(whether `alloca.c' needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    AC_CHECK_FUNC($ac_func,
+                 [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
+                                     [Define to one of `_getb67', `GETB67',
+                                      `getb67' for Cray-2 and Cray-YMP
+                                      systems. This function is required for
+                                      `alloca.c' support on those systems.])
+    break])
+  done
+fi
+
+AC_CACHE_CHECK([stack direction for C alloca],
+              [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+              [ac_cv_c_stack_direction=1],
+              [ac_cv_c_stack_direction=-1],
+              [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([STACK_DIRECTION],
+[/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+       STACK_DIRECTION > 0 => grows toward higher addresses
+       STACK_DIRECTION < 0 => grows toward lower addresses
+       STACK_DIRECTION = 0 => direction of growth unknown */
address@hidden:@undef STACK_DIRECTION])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+])

=== modified file 'm4/gl-comp.m4'
--- m4/gl-comp.m4       2011-06-21 08:45:39 +0000
+++ m4/gl-comp.m4       2011-06-21 16:15:07 +0000
@@ -26,6 +26,7 @@
   m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
   AC_REQUIRE([AC_PROG_RANLIB])
+  # Code from module alloca-opt:
   # Code from module allocator:
   # Code from module arg-nonnull:
   # Code from module c++defs:
@@ -94,6 +95,7 @@
   m4_pushdef([gl_LIBSOURCES_DIR], [])
   gl_COMMON
   gl_source_base='lib'
+gl_FUNC_ALLOCA
 AC_CHECK_FUNCS_ONCE([readlinkat])
 gl_MD5
 gl_SHA1
@@ -392,6 +394,7 @@
   build-aux/arg-nonnull.h
   build-aux/c++defs.h
   build-aux/warn-on-use.h
+  lib/alloca.in.h
   lib/allocator.c
   lib/allocator.h
   lib/careadlinkat.c
@@ -445,6 +448,7 @@
   lib/unistd.in.h
   lib/verify.h
   m4/00gnulib.m4
+  m4/alloca.m4
   m4/c-strtod.m4
   m4/extensions.m4
   m4/filemode.m4

# Begin bundle
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
//xdyRThQkLeF9bo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]