Mercurial > hg > octave-kai > gnulib-hg
changeset 11077:ddb65537c2d0
On HP-UX, don't pretend it was a SIGSEGV when it was a stack overflow.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 24 Jan 2009 14:05:48 +0100 |
parents | 990226176856 |
children | 6113cefa040d |
files | ChangeLog lib/c-stack.c |
diffstat | 2 files changed, 20 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-01-24 Bruno Haible <bruno@clisp.org> + + * lib/c-stack.c (segv_handler): If !HAVE_XSI_STACK_OVERFLOW_HEURISTIC, + set signo = 0 also if info->si_code <= 0. Needed on HP-UX 11.11. + Reported by Gary V. Vaughan <gary@gnu.org>. + 2009-01-24 Bruno Haible <bruno@clisp.org> * lib/c-strtod.h (c_strtod, c_strtold): Add specification.
--- a/lib/c-stack.c +++ b/lib/c-stack.c @@ -239,21 +239,21 @@ void *context __attribute__ ((unused))) { /* Clear SIGNO if it seems to have been a stack overflow. */ +# if ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC + /* We can't easily determine whether it is a stack overflow; so + assume that the rest of our program is perfect (!) and that + this segmentation violation is a stack overflow. + + Note that although both Linux and Solaris provide + sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only + Solaris satisfies the XSI heueristic. This is because + Solaris populates uc_stack with the details of the + interrupted stack, while Linux populates it with the details + of the current stack. */ + signo = 0; +# else if (0 < info->si_code) { -# if ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC - /* We can't easily determine whether it is a stack overflow; so - assume that the rest of our program is perfect (!) and that - this segmentation violation is a stack overflow. - - Note that although both Linux and Solaris provide - sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only - Solaris satisfies the XSI heueristic. This is because - Solaris populates uc_stack with the details of the - interrupted stack, while Linux populates it with the details - of the current stack. */ - signo = 0; -# else /* If the faulting address is within the stack, or within one page of the stack end, assume that it is a stack overflow. */ @@ -278,8 +278,8 @@ write (STDERR_FILENO, buf, strlen (buf)); } # endif + } # endif - } die (signo); }