From 6f2ba57a4efa900200e677f022e93bb7e1ec4ba1 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 19 May 2008 12:49:35 +0000 Subject: [PATCH] added a fixup for addresses from shared libraries in segmentation fault handler --- src/charon/daemon.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/charon/daemon.c b/src/charon/daemon.c index 9406e89ea..1359a4a93 100644 --- a/src/charon/daemon.c +++ b/src/charon/daemon.c @@ -16,6 +16,11 @@ * for more details. */ +#ifdef HAVE_DLADDR +# define _GNU_SOURCE +# include +#endif /* HAVE_DLADDR */ + #include #include #include @@ -427,7 +432,25 @@ static void segv_handler(int signal) for (i = 0; i < size; i++) { - DBG1(DBG_DMN, " %s", strings[i]); +#ifdef HAVE_DLADDR + Dl_info info; + + if (dladdr(array[i], &info)) + { + void *ptr = array[i]; + if (strstr(info.dli_fname, ".so")) + { + ptr = (void*)(array[i] - info.dli_fbase); + } + DBG1(DBG_DMN, " %s [%p]", info.dli_fname, ptr); + } + else + { +#endif /* HAVE_DLADDR */ + DBG1(DBG_DMN, " %s", strings[i]); +#ifdef HAVE_DLADDR + } +#endif /* HAVE_DLADDR */ } free (strings); #else /* !HAVE_BACKTRACE */