aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-11-01 22:24:49 -0400
committerUlrich Drepper <drepper@gmail.com>2011-11-01 22:24:49 -0400
commitd35dce5213b357c218e252cbcb7a853cdecfcb41 (patch)
treed74c39739e52583229de726b281c6f97e4c9cef2 /include
parent34372fc6d3e7bb8870905a6ac124bb2217e3800a (diff)
parent647776f663e8bb9ee365e0dbabd3702b8cb80bc3 (diff)
downloadglibc-d35dce5213b357c218e252cbcb7a853cdecfcb41.tar.xz
glibc-d35dce5213b357c218e252cbcb7a853cdecfcb41.zip
Merge branch 'master' of ssh://sourceware.org/git/glibc
Diffstat (limited to 'include')
-rw-r--r--include/alloca.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/include/alloca.h b/include/alloca.h
index 83504135f4..f741d25d54 100644
--- a/include/alloca.h
+++ b/include/alloca.h
@@ -20,9 +20,13 @@ libc_hidden_proto (__libc_alloca_cutoff)
#include <allocalim.h>
+#ifndef stackinfo_alloca_round
+# define stackinfo_alloca_round(l) (((l) + 15) & -16)
+#endif
+
#if _STACK_GROWS_DOWN
# define extend_alloca(buf, len, newlen) \
- (__typeof (buf)) ({ size_t __newlen = (newlen); \
+ (__typeof (buf)) ({ size_t __newlen = stackinfo_alloca_round (newlen); \
char *__newbuf = __alloca (__newlen); \
if (__newbuf + __newlen == (char *) buf) \
len += __newlen; \
@@ -31,10 +35,10 @@ libc_hidden_proto (__libc_alloca_cutoff)
__newbuf; })
#elif _STACK_GROWS_UP
# define extend_alloca(buf, len, newlen) \
- (__typeof (buf)) ({ size_t __newlen = (newlen); \
+ (__typeof (buf)) ({ size_t __newlen = stackinfo_alloca_round (newlen); \
char *__newbuf = __alloca (__newlen); \
char *__buf = (buf); \
- if (__buf + __newlen == __newbuf) \
+ if (__buf + len == __newbuf) \
{ \
len += __newlen; \
__newbuf = __buf; \