Author: julianalbo Date: Mon Jan 26 15:27:49 2009 New Revision: 36040 Added: trunk/config/auto/backtrace/test_dlinfo_c.in Modified: trunk/config/auto/backtrace.pm trunk/src/exceptions.c
Log: check Dl_info availability Modified: trunk/config/auto/backtrace.pm ============================================================================== --- trunk/config/auto/backtrace.pm (original) +++ trunk/config/auto/backtrace.pm Mon Jan 26 15:27:49 2009 @@ -56,12 +56,26 @@ return $anyerror; } +sub _probe_for_dlinfo { + my $conf = shift; + $conf->cc_gen("config/auto/backtrace/test_dlinfo_c.in"); + + # If the program compiles, the Dl_info struct is available + + eval { $conf->cc_compile(); }; + my $anyerror = $@; + $conf->cc_clean(); + return $anyerror; +} + sub _evaluate_backtrace { my ($self, $conf, $anyerror) = @_; if ( $anyerror ) { $self->set_result("no"); } else { + my $dlinfoerror = _probe_for_dlinfo($conf); + $conf->data->set ( PARROT_HAS_DLINFO => 1 ) unless $anyerror; $conf->data->set( backtrace => 1 ); $self->set_result("yes"); } Added: trunk/config/auto/backtrace/test_dlinfo_c.in ============================================================================== --- (empty file) +++ trunk/config/auto/backtrace/test_dlinfo_c.in Mon Jan 26 15:27:49 2009 @@ -0,0 +1,24 @@ +/* + * test_dlinfo_c.c - check that Dl_info is avaible + */ + +#include <execinfo.h> +#include <dlfcn.h> +#include <stdlib.h> + +int +main(int argc, char **argv) +{ + Dl_info frameInfo; + return EXIT_SUCCESS; +} + +/* + * Local variables: + * c-indentation-style: bsd + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * + * vim: expandtab shiftwidth=4: + */ Modified: trunk/src/exceptions.c ============================================================================== --- trunk/src/exceptions.c (original) +++ trunk/src/exceptions.c Mon Jan 26 15:27:49 2009 @@ -24,7 +24,9 @@ #ifdef PARROT_HAS_BACKTRACE # include <execinfo.h> -# include <dlfcn.h> +# ifdef PARROT_HAS_DLINFO +# include <dlfcn.h> +# endif #endif /* HEADERIZER HFILE: include/parrot/exceptions.h */ @@ -565,6 +567,9 @@ #ifdef PARROT_HAS_BACKTRACE # define BACKTRACE_DEPTH 32 /*# define BACKTRACE_VERBOSE */ +# ifndef PARROT_HAS_DLINFO +# define BACKTRACE_VERBOSE +# endif /* stolen from http://www.delorie.com/gnu/docs/glibc/libc_665.html */ void *array[BACKTRACE_DEPTH]; int i;