Commit 846c81c7 authored by Staale Smedseng's avatar Staale Smedseng

Bug #47391 no stack trace printed to error log on

solaris after a crash
      
This patch adds a Solaris-specific version of
print_stacktrace() which uses printstack(2), available on all
Solaris versions since Solaris 9. (While Solaris 11 adds
support for the glibc functions backtrace_*() as of
PSARC/2007/162, printstack() is used for consistency over all
Solaris versions.)

The symbol names are mangled, so use of c++filt may be
required as described in the MySQL documentation.
parent eb911422
...@@ -226,6 +226,25 @@ void print_stacktrace(gptr stack_bottom, ulong thread_stack) ...@@ -226,6 +226,25 @@ void print_stacktrace(gptr stack_bottom, ulong thread_stack)
stack trace is much more helpful in diagnosing the problem, so please do \n\ stack trace is much more helpful in diagnosing the problem, so please do \n\
resolve it\n"); resolve it\n");
} }
#elif defined(__sun)
/* Use Solaris' symbolic stack trace routine. */
#include <ucontext.h>
void print_stacktrace(gptr stack_bottom __attribute__((unused)),
ulong thread_stack __attribute__((unused)))
{
if (printstack(fileno(stderr)) == -1)
fprintf(stderr, "Error when traversing the stack, stack appears corrupt.\n");
else
fprintf(stderr, "Please read "
"http://dev.mysql.com/doc/mysql/en/using-stack-trace.html "
"and follow instructions on how to resolve the stack trace. "
"Resolved\nstack trace is much more helpful in diagnosing the "
"problem, so please do \nresolve it\n");
}
#endif /* TARGET_OS_LINUX */ #endif /* TARGET_OS_LINUX */
#endif /* HAVE_STACKTRACE */ #endif /* HAVE_STACKTRACE */
......
...@@ -35,6 +35,9 @@ void check_thread_lib(void); ...@@ -35,6 +35,9 @@ void check_thread_lib(void);
#define HAVE_STACKTRACE #define HAVE_STACKTRACE
extern void set_exception_pointers(EXCEPTION_POINTERS *ep); extern void set_exception_pointers(EXCEPTION_POINTERS *ep);
#define init_stacktrace() {} #define init_stacktrace() {}
#elif defined(__sun)
#define HAVE_STACKTRACE
#define init_stacktrace() {}
#endif #endif
#ifdef HAVE_STACKTRACE #ifdef HAVE_STACKTRACE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment