blob: 86e01dea611d8f92a5242241b760037a483cca8a [file] [log] [blame]
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
double func_over_signal_thrower (double, float, const char *);
int signal_thrower (int);
void myhandler (int);
main (int argc, char **argv, char **envp)
{
int ret;
char *sret;
ret = func_over_signal_thrower (argc * 5.2, argc * 9999.33, argv[0]);
printf ("%d\n", ret);
}
/* Throw a signal while down on the stack, make sure we can find
our way through _sigtramp() and get all the necessary information
out of the sigcontext struct to backtrace our way out. */
double func_over_signal_thrower (double d, float f, const char *s)
{
int c = d * f;
c += s[0];
f = f * c;
c -= signal_thrower (c);
return (d * f) / c;
}
int signal_thrower (int in)
{
in--;
signal (SIGALRM, myhandler);
alarm (1);
sleep (2);
in = in - 2;
return in;
}
void myhandler (int sig)
{
signal (sig, myhandler);
}