From fbc4c6e088842150d572364fdec4e69e6aed1e4e Mon Sep 17 00:00:00 2001 From: stan Date: Fri, 5 May 2006 11:23:26 +0000 Subject: [PATCH] Bug 315 - Handle sigcontext structures without eip. git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1959 e3e1d417-86f3-4887-817a-d78f3d33393f --- configure.in | 1 + src/zm_signal.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 7a3676797..09a2331c1 100644 --- a/configure.in +++ b/configure.in @@ -174,6 +174,7 @@ AC_TYPE_SIGNAL AC_CHECK_TYPES(siginfo_t,,,[#include ]) AC_CHECK_TYPES(struct sigcontext,,,[#include ]) +AC_CHECK_MEMBERS([struct sigcontext.eip],,,[#include ]) AC_CHECK_TYPES(ucontext_t,,,[#include ]) AC_CHECK_HEADERS(mysql/mysql.h,,AC_MSG_ERROR(zm requires mysql/mysql.h),) diff --git a/src/zm_signal.cpp b/src/zm_signal.cpp index b29518598..960f77866 100644 --- a/src/zm_signal.cpp +++ b/src/zm_signal.cpp @@ -85,13 +85,16 @@ RETSIGTYPE zm_die_handler( int signal ) void *trace[16]; int trace_size = 0; -#if HAVE_STRUCT_SIGCONTEXT +#if HAVE_STRUCT_SIGCONTEXT_EIP Error(( "Signal address is %p, from %p\n", context.cr2, context.eip )); trace_size = backtrace( trace, 16 ); // overwrite sigaction with caller's address trace[1] = (void *)context.eip; +#elif HAVE_STRUCT_SIGCONTEXT + Error(( "Signal address is %p, no eip\n", context.cr2 )); + trace_size = backtrace( trace, 16 ); #else // HAVE_STRUCT_SIGCONTEXT if ( info && context ) {