From c5ff02958806ea5a672dcc9371602a6c090c6758 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 26 May 2015 01:07:08 +0300 Subject: Dump stack in nullpo*/Assert* function. Also enable in configure linker flag -rdynamic. --- configure | 3 ++- configure.in | 1 + src/common/nullpo.c | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 75fd62a97..b022ca2d5 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in 18c1133. +# From configure.in 3bd5d73. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # @@ -4616,6 +4616,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu CFLAGS="$CFLAGS -pipe -ffast-math -Wall -Wextra -Wno-sign-compare" CPPFLAGS="$CPPFLAGS -I../common" +LDFLAGS="$LDFLAGS -rdynamic" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 diff --git a/configure.in b/configure.in index 9497ce6bc..d17f5b4a7 100644 --- a/configure.in +++ b/configure.in @@ -487,6 +487,7 @@ AC_LANG([C]) CFLAGS="$CFLAGS -pipe -ffast-math -Wall -Wextra -Wno-sign-compare" CPPFLAGS="$CPPFLAGS -I../common" +LDFLAGS="$LDFLAGS -rdynamic" AC_C_BIGENDIAN( diff --git a/src/common/nullpo.c b/src/common/nullpo.c index e61d52257..97b206835 100644 --- a/src/common/nullpo.c +++ b/src/common/nullpo.c @@ -8,7 +8,11 @@ #include #include +#include #include +#ifdef __GNUC__ +#include +#endif #include "../common/showmsg.h" @@ -24,6 +28,12 @@ struct nullpo_interface nullpo_s; * @param title Message title to display (i.e. failed assertion or nullpo info) */ void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) { +#ifdef __GNUC__ + void *array[10]; + int size; + char **strings; + int i; +#endif if (file == NULL) file = "??"; @@ -32,6 +42,13 @@ void assert_report(const char *file, int line, const char *func, const char *tar ShowError("--- %s --------------------------------------------\n", title); ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func); +#ifdef __GNUC__ + size = backtrace (array, 10); + strings = backtrace_symbols (array, size); + for (i = 0; i < size; i++) + ShowError("%s\n", strings[i]); + free (strings); +#endif ShowError("--- end %s ----------------------------------------\n", title); } -- cgit v1.2.3-70-g09d2