[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 'make test' error
From: |
Bruno Haible |
Subject: |
Re: 'make test' error |
Date: |
Sat, 6 Dec 2008 16:54:54 +0100 |
User-agent: |
KMail/1.9.9 |
Eric Blake wrote:
> In other words, it seems like we should consider
> modifying the contract of c-stack to state that the application should not
> modify SIGBUS handlers.
Yes, right. I'm adding this comment:
2008-12-06 Bruno Haible <address@hidden>
* lib/c-stack.h (c_stack_action): Clarify possible side effects.
Suggested by Eric Blake.
--- lib/c-stack.h.orig 2008-12-06 16:50:18.000000000 +0100
+++ lib/c-stack.h 2008-12-06 16:49:15.000000000 +0100
@@ -36,6 +36,9 @@
ACTION must be async-signal-safe. ACTION together with its callees
must not require more than SIGSTKSZ bytes of stack space. Also,
ACTION should not call longjmp, because this implementation does
- not guarantee that it is safe to return to the original stack. */
+ not guarantee that it is safe to return to the original stack.
+
+ This function may install a handler for the SIGSEGV signal or for the SIGBUS
+ signal or exercise other system dependent exception handling APIs. */
extern int c_stack_action (void (* /*action*/) (int));
> On looking at libsigsegv, it looks like it also conditionally installs a
> SIGBUS handler. Which means we found a bug in m4 1.4.12: if you are using
> libsigsegv, and on a platform like MacOS, then my installation of a SIGBUS
> handler overwrites the libsigsegv handler, and you lose out on stack
> overflow detection.
That might actually happen on *BSD systems. On MacOS X, this bug will not
happen, because libsigsegv installs a Mach exception handler. This handler
installed by libsigsegv will be invoked before the SIGBUS handler installed
by m4 will be invoked.
> Also, if we modify the c-stack contract to always take care of SIGBUS, is
> there a way to make it detect whether libsigsegv installed a SIBGUS handler?
You can detect it by calling sigaction(SIGBUS,NULL,&curr_handler).
Bruno