/* frysk-imports/tests/frysk3231 */ #include #include #include #include #include #include #include #include int tid; void timeout (int sig) { kill (tid, SIGKILL); _exit (1); } static int clone_func (void *arg) { pause(); return 56; } main (int ac, char * av[]) { long rc; void ** newstack; signal (SIGALRM, timeout); alarm (1); #define STACKSIZE 16384 newstack = (void **) malloc(STACKSIZE); newstack = (void **) (STACKSIZE + (char *) newstack); if (-1 != (tid = clone (clone_func, newstack, SIGCHLD, (void *)88))) { if (-1 == ptrace (PTRACE_ATTACH, tid, NULL, NULL)) _exit (1); if (-1 == waitpid (tid, NULL, __WALL)) _exit (1); rc = ptrace (PTRACE_DETACH, tid, NULL, (void *)999); fprintf (stderr, "rc for invalid signal = %d\n", (int)rc); #if 0 rc = ptrace (PTRACE_DETACH, tid, NULL, (void *)0); fprintf (stderr, "rc for valid signal = %d\n", (int)rc); #endif rc = ptrace (PTRACE_DETACH, tid, NULL, (void *)SIGKILL); fprintf (stderr, "rc for valid signal = %d\n", (int)rc); _exit (0); } else _exit (1); }