Browse Source

+ added alloca() support for all architectures
by way of gcc's __builtin_alloca(). I think
I did it right, but we'll see.

John Beppu 24 years ago
parent
commit
5173b6de5b
2 changed files with 45 additions and 0 deletions
  1. 41 0
      include/alloca.h
  2. 4 0
      include/stdlib.h

+ 41 - 0
include/alloca.h

@@ -0,0 +1,41 @@
+/* Copyright (C) 1992, 1996, 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef	_ALLOCA_H
+#define	_ALLOCA_H	1
+
+#include <features.h>
+
+#define	__need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions.  */
+#undef	alloca
+
+/* Allocate a block that will be freed when the calling function exits.  */
+extern __ptr_t alloca __P ((size_t __size));
+
+#ifdef	__GNUC__
+# define alloca(size)	__builtin_alloca (size)
+#endif /* GCC.  */
+
+__END_DECLS
+
+#endif /* alloca.h */

+ 4 - 0
include/stdlib.h

@@ -28,6 +28,10 @@ extern void * calloc __P ((size_t, size_t));
 extern void free __P ((void *));
 extern void * realloc __P ((void *, size_t));
 
+#if defined __USE_GNU || defined __USE_BSD || defined __USE_MISC
+# include <alloca.h>
+#endif /* Use GNU, BSD, or misc.  */
+
 #ifdef DEBUG_MALLOC
 
 extern void * malloc_dbg __P ((size_t, char* func, char* file, int line));