Re: g++ and signal handlers that use sigcontext

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 17, 2004 at 11:11:20AM -0800, David L wrote:
> I found some example code regarding how to use backtrace from signal 
> handlers at: http://www.linuxjournal.com/article.php?sid=6391 .  That 
> example code compiled with warnings but no errors using old versions of g++ 
> (eg: egcs-2.91), but now has an error:
> 
> foo.cc: In function `void bt_sighandler(int, sigcontext)':
> foo.cc:26: `exit' undeclared (first use this function)
> foo.cc:26: (Each undeclared identifier is reported only once for each 
> function
>   it appears in.)

It's illegal to use a function in C++ prior to declaring it. `exit' is
declared in "stdlib.h".

> foo.cc: In function `int main()':
> foo.cc:56: invalid conversion from `void*' to `void (*)(int)'
> 
> What is the proper way to set up a signal handler with a 2nd argument 
> (sigcontext )?

See `man sigaction'. You want to assign to sa_sigaction instead of
sa_handler as shown in listing 3 of the article you just referenced above.
But leave out the stupid old style cast and just make sure bt_sighandler
has the expected signature.

> #include <stdio.h>
> #include <signal.h>
> #include <execinfo.h>
> 
> void bt_sighandler(int sig, struct sigcontext ctx) {

[...]

>  exit(0);
> }

[...]

>  sa.sa_handler = (void *)bt_sighandler;
>  sigemptyset(&sa.sa_mask);
>  sa.sa_flags = SA_RESTART;
> 
>  sigaction(SIGSEGV, &sa, NULL);
>  sigaction(SIGUSR1, &sa, NULL);
>  /* ... add any other signal here */
> 

Cheers.
-- 
Claudio Bley                                 ASCII ribbon campaign (")
Debian GNU/Linux user                         - against HTML email  X 
http://www.cs.uni-magdeburg.de/~bley/                     & vCards / \

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux