From 0ccab5e4a96ae1ad60a815c0045e1f0a51ea27d1 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Sat, 17 Oct 2009 01:14:16 +0200 Subject: move extend_alloca macro to alloca.h guard it by _LIBC. __MAX_ALLOCA_CUTOFF is not needed on target either Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- include/alloca.h | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'include/alloca.h') diff --git a/include/alloca.h b/include/alloca.h index b4fc31738..2565b4835 100644 --- a/include/alloca.h +++ b/include/alloca.h @@ -36,7 +36,38 @@ extern void *alloca (size_t __size) __THROW; # define alloca(size) __builtin_alloca (size) #endif /* GCC. */ -#define __MAX_ALLOCA_CUTOFF 65536 +#ifdef _LIBC +# define __MAX_ALLOCA_CUTOFF 65536 + +# include +# ifdef _STACK_GROWS_DOWN +# define extend_alloca(buf, len, newlen) \ + (__typeof (buf)) ({ size_t __newlen = (newlen); \ + char *__newbuf = alloca (__newlen); \ + if (__newbuf + __newlen == (char *) buf) \ + len += __newlen; \ + else \ + len = __newlen; \ + __newbuf; }) +# elif defined _STACK_GROWS_UP +# define extend_alloca(buf, len, newlen) \ + (__typeof (buf)) ({ size_t __newlen = (newlen); \ + char *__newbuf = alloca (__newlen); \ + char *__buf = (buf); \ + if (__buf + __newlen == __newbuf) \ + { \ + len += __newlen; \ + __newbuf = __buf; \ + } \ + else \ + len = __newlen; \ + __newbuf; }) +# else +# error unknown stack +# define extend_alloca(buf, len, newlen) \ + alloca (((len) = (newlen))) +# endif +#endif __END_DECLS -- cgit v1.2.3