Merged to master at 14d58b82e750..6f3699b94a3d (from, to]

You can see the entire diff with 'git diff' or at
https://github.com/brho/akaros/compare/14d58b82e750...6f3699b94a3d



On 2016-07-21 at 10:20 Barret Rhoden <[email protected]> wrote:
> The old sysdep wasn't even called.  We'd need nptl to be a feature to get
> that sysdep added, I think.
> 
> Instead, we'll have to change something outside the sysdeps folder:
> alloca.h.
> 
> Glibc at least checks that alloca is okay before using it.  I don't think
> these same sanity checks go into uses of alloca() by regular programs, so
> this may pop up again in the future.
> 
> Fixes: df1135d0583e ("Specify a small alloca_cutoff (XCC)")
> 
> Rebuild glibc.
> 
> Signed-off-by: Barret Rhoden <[email protected]>
> ---
> You'll need this for the latest virtio-blk.  I'll merge it shortly if no one
> has issues.
> 
> 
>  .../gcc-glibc/glibc-2.19-akaros/include/alloca.h   | 80 
> ++++++++++++++++++++++
>  .../sysdeps/akaros/alloca_cutoff.c                 | 27 --------
>  2 files changed, 80 insertions(+), 27 deletions(-)
>  create mode 100644 
> tools/compilers/gcc-glibc/glibc-2.19-akaros/include/alloca.h
>  delete mode 100644 
> tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/alloca_cutoff.c
> 
> diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/include/alloca.h 
> b/tools/compilers/gcc-glibc/glibc-2.19-akaros/include/alloca.h
> new file mode 100644
> index 000000000000..0ca1adc5aa22
> --- /dev/null
> +++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/include/alloca.h
> @@ -0,0 +1,80 @@
> +#ifndef _ALLOCA_H
> +
> +/* AKAROS: Modified the alloca cutoff */
> +
> +#include <stdlib/alloca.h>
> +#include <stackinfo.h>
> +
> +#undef       __alloca
> +
> +/* Now define the internal interfaces.  */
> +extern void *__alloca (size_t __size);
> +
> +#ifdef       __GNUC__
> +# define __alloca(size)      __builtin_alloca (size)
> +#endif /* GCC.  */
> +
> +extern int __libc_use_alloca (size_t size) __attribute__ ((const));
> +extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const));
> +libc_hidden_proto (__libc_alloca_cutoff)
> +
> +/* AKAROS: Limit to a small amount, so 2LSs and vcore context can have small
> + * stacks. */
> +#define __MAX_ALLOCA_CUTOFF  128
> +
> +#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 = stackinfo_alloca_round (newlen);     
>  \
> +                   char *__newbuf = __alloca (__newlen);                   \
> +                   if (__newbuf + __newlen == (char *) buf)                \
> +                     len += __newlen;                                      \
> +                   else                                                    \
> +                     len = __newlen;                                       \
> +                   __newbuf; })
> +#elif _STACK_GROWS_UP
> +# define extend_alloca(buf, len, newlen) \
> +  (__typeof (buf)) ({ size_t __newlen = stackinfo_alloca_round (newlen);     
>  \
> +                   char *__newbuf = __alloca (__newlen);                   \
> +                   char *__buf = (buf);                                    \
> +                   if (__buf + len == __newbuf)                            \
> +                     {                                                     \
> +                       len += __newlen;                                    \
> +                       __newbuf = __buf;                                   \
> +                     }                                                     \
> +                   else                                                    \
> +                     len = __newlen;                                       \
> +                   __newbuf; })
> +#else
> +# define extend_alloca(buf, len, newlen) \
> +  __alloca (((len) = (newlen)))
> +#endif
> +
> +#if defined stackinfo_get_sp && defined stackinfo_sub_sp
> +# define alloca_account(size, avar) \
> +  ({ void *old__ = stackinfo_get_sp ();                                      
>       \
> +     void *m__ = __alloca (size);                                          \
> +     avar += stackinfo_sub_sp (old__);                                       
>       \
> +     m__; })
> +# define extend_alloca_account(buf, len, newlen, avar) \
> +  ({ void *old__ = stackinfo_get_sp ();                                      
>       \
> +     void *m__ = extend_alloca (buf, len, newlen);                         \
> +     avar += stackinfo_sub_sp (old__);                                       
>       \
> +     m__; })
> +#else
> +# define alloca_account(size, avar) \
> +  ({ size_t s__ = (size);                                                  \
> +     avar += s__;                                                          \
> +     __alloca (s__); })
> +# define extend_alloca_account(buf, len, newlen, avar) \
> +  ({ size_t s__ = (newlen);                                                \
> +     avar += s__;                                                          \
> +     extend_alloca (buf, len, s__); })
> +#endif
> +
> +#endif
> diff --git 
> a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/alloca_cutoff.c 
> b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/alloca_cutoff.c
> deleted file mode 100644
> index a08ab2e2cb71..000000000000
> --- 
> a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/alloca_cutoff.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/* Determine whether block of given size can be allocated on the stack or 
> not.
> -   Copyright (C) 2002-2014 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 Lesser General Public License as
> -   published by the Free Software Foundation; either version 2.1 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
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; see the file COPYING.LIB.  If
> -   not, see <http://www.gnu.org/licenses/>.  */
> -
> -#include <alloca.h>
> -#include <stdlib.h>
> -
> -
> -int __libc_alloca_cutoff(size_t size)
> -{
> -     return size <= 128;
> -}
> -libc_hidden_def(__libc_alloca_cutoff)

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to