From 063bea58bcc1c27864a0351bba07254855903377 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 19 Jul 2013 14:09:58 -0400 Subject: Basic backtrace ability On platforms with the backtrace/backtrace_symbols_fd interface, Tor can now dump stack traces on assertion failure. By default, I log them to DataDir/stack_dump and to stderr. --- configure.ac | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index 4aeec929e..5059079f7 100644 --- a/configure.ac +++ b/configure.ac @@ -302,6 +302,8 @@ dnl exports strlcpy without defining it in a header. AC_CHECK_FUNCS( _NSGetEnviron \ accept4 \ + backtrace \ + backtrace_symbols_fd \ clock_gettime \ flock \ ftime \ @@ -319,6 +321,7 @@ AC_CHECK_FUNCS( memmem \ prctl \ rint \ + sigaction \ socketpair \ strlcat \ strlcpy \ @@ -802,6 +805,7 @@ dnl These headers are not essential AC_CHECK_HEADERS( arpa/inet.h \ crt_externs.h \ + execinfo.h \ grp.h \ ifaddrs.h \ inttypes.h \ -- cgit v1.2.3 From b0023083c413c6447ef34cf3c6cfaf54a1cc8793 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 19 Jul 2013 14:18:43 -0400 Subject: On Linux (and some other systems) we need -rdynamic for backtraces --- configure.ac | 3 +++ 1 file changed, 3 insertions(+) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index 5059079f7..8e247db32 100644 --- a/configure.ac +++ b/configure.ac @@ -593,6 +593,9 @@ if test x$enable_linker_hardening != xno; then TOR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check") fi +# For backtrace support +TOR_CHECK_LDFLAGS(-rdynamic) + dnl ------------------------------------------------------ dnl Now see if we have a -fomit-frame-pointer compiler option. -- cgit v1.2.3 From 2662885aa9cb6c9b7447b729d0321a633e8c46c3 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 26 Jul 2013 12:46:17 +0200 Subject: Use pc_from_ucontext.m4 from Google Performance Tools This M4 module lets us learn the right way (out of at least 18 possibilities) to extract the current PC for stack-trace-fixup-in-signal purposes. The Google Performance Tools license is 3-clause BSD. --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index 8e247db32..06e9e3b37 100644 --- a/configure.ac +++ b/configure.ac @@ -937,6 +937,8 @@ AC_CHECK_SIZEOF(pid_t) AC_CHECK_TYPES([uint, u_char, ssize_t]) +AC_PC_FROM_UCONTEXT([/bin/true]) + dnl used to include sockaddr_storage, but everybody has that. AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t], , , [#ifdef HAVE_SYS_TYPES_H -- cgit v1.2.3