diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | configure.in | 14 | ||||
-rw-r--r-- | vm_dump.c | 5 |
3 files changed, 16 insertions, 13 deletions
@@ -1,3 +1,13 @@ +Tue Feb 19 06:04:06 2013 NARUSE, Yui <naruse@ruby-lang.org> + + * vm_dump: FreeBSD ports' libexecinfo's backtrace(3) can't trace + beyond signal trampoline, and as described in r38342 it can't + trace on -O because it see stack frame pointers. + libunwind unw_backtrace see dwarf information in the binary + and it works with -O (without frame pointers). + + * configure.in: remove r38342's hack and check libunwind. + Tue Feb 19 04:26:29 2013 NARUSE, Yui <naruse@ruby-lang.org> * configure.in: check whether backtrace(3) works well or not. diff --git a/configure.in b/configure.in index 669fb972da..e143053121 100644 --- a/configure.in +++ b/configure.in @@ -2417,19 +2417,7 @@ AS_CASE(["$target_cpu-$target_os"], AC_CHECK_HEADERS([execinfo.h]) if test "x$ac_cv_header_execinfo_h" = xyes; then AC_CHECK_LIB([execinfo], [backtrace]) - execinfo_frame_pointer=no - RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [execinfo_frame_pointer=yes]) - if test "x$execinfo_frame_pointer" = xyes; then - # optflags must be manipulated very carefully. For the - # later cflagspat/cxxflagspat substitution to work, CFLAGS - # and CXXFLAGS must start exactly with the value of - # optflags. - CFLAGS="${CFLAGS# }"; CFLAGS="${CFLAGS#"$optflags "}" - CXXFLAGS="${CXXFLAGS# }"; CXXFLAGS="${CXXFLAGS#"$optflags "}" - RUBY_APPEND_OPTION(optflags, -fno-omit-frame-pointer) - CFLAGS=" $optflags $CFLAGS" - CXXFLAGS=" $optflags $CXXFLAGS" - fi + AC_CHECK_LIB([unwind], [unw_backtrace]) fi]) AC_CHECK_FUNCS(backtrace) @@ -431,6 +431,11 @@ rb_vmdebug_thread_dump_state(VALUE self) # undef HAVE_BACKTRACE # define HAVE_BACKTRACE 0 #endif +#if HAVE_LIBUNWIND +# define HAVE_BACKTRACE 1 +# undef backtrace +# define backtrace unw_backtrace +#endif #if HAVE_BACKTRACE # include <execinfo.h> #elif defined(_WIN32) |