1 #ifndef _ALLOCA_H 2 3 #include <stdlib/alloca.h> 4 5 # ifndef _ISOMAC 6 7 #include <stackinfo.h> 8 9 #undef __alloca 10 11 /* Now define the internal interfaces. */ 12 extern void *__alloca (size_t __size); 13 14 #ifdef __GNUC__ 15 # define __alloca(size) __builtin_alloca (size) 16 #endif /* GCC. */ 17 18 extern int __libc_use_alloca (size_t size) __attribute__ ((const)); 19 extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const)); 20 libc_hidden_proto (__libc_alloca_cutoff) 21 22 #define __MAX_ALLOCA_CUTOFF 65536 23 24 #include <allocalim.h> 25 26 #if defined stackinfo_get_sp && defined stackinfo_sub_sp 27 # define alloca_account(size, avar) \ 28 ({ void *old__ = stackinfo_get_sp (); \ 29 void *m__ = __alloca (size); \ 30 avar += stackinfo_sub_sp (old__); \ 31 m__; }) 32 #else 33 # define alloca_account(size, avar) \ 34 ({ size_t s__ = (size); \ 35 avar += s__; \ 36 __alloca (s__); }) 37 #endif 38 39 # endif /* !_ISOMAC */ 40 #endif 41