summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--configure.in14
-rw-r--r--vm_dump.c5
3 files changed, 16 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 1713b2ad4a..78843449ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
diff --git a/vm_dump.c b/vm_dump.c
index 7bb35ea817..f7423031cf 100644
--- a/vm_dump.c
+++ b/vm_dump.c
@@ -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)