From 1c0323adbc390c40453c4ad02150e26b55e0dbf5 Mon Sep 17 00:00:00 2001 From: knu Date: Fri, 9 Nov 2012 03:34:08 +0000 Subject: Fix build when gcc is used and the platform's libc lacks alloca(). * include/ruby/ruby.h (alloca), eval_intern.h (alloca), gc.c (alloca): Make alloca() globally available by moving the ultimate ifdef's to ruby/ruby.h. Gcc hides its builtin alloca() when compiling with -ansi, and linking thus fails on platforms that lack their own alloca() implementation in libc, which include OpenBSD and some ports of NetBSD. We use alloca() everywhere including from within third party C extentions, so alloca() must be made globally available. [Bug #7307] * addr2line.c (alloca): Replace the alloca() part with the ultimate ifdef's. [Bug #7307] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- addr2line.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'addr2line.c') diff --git a/addr2line.c b/addr2line.c index 9528a8fa43..e102abba4f 100644 --- a/addr2line.c +++ b/addr2line.c @@ -32,9 +32,26 @@ #include #include -#if defined(HAVE_ALLOCA_H) -#include -#endif +/* Make alloca work the best possible way. */ +#ifdef __GNUC__ +# ifndef atarist +# ifndef alloca +# define alloca __builtin_alloca +# endif +# endif /* atarist */ +#else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +#pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca(); +# endif +# endif /* AIX */ +# endif /* HAVE_ALLOCA_H */ +#endif /* __GNUC__ */ #ifdef HAVE_DL_ITERATE_PHDR # ifndef _GNU_SOURCE -- cgit v1.2.3