Commit | Line | Data |
---|---|---|
f0fd9238 AC |
1 | /* This testcase is part of GDB, the GNU debugger. |
2 | ||
6aba47ca | 3 | Copyright 2004, 2007 Free Software Foundation, Inc. |
f0fd9238 AC |
4 | |
5 | This program is free software; you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation; either version 2 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
16 | along with this program; if not, write to the Free Software | |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
18 | ||
19 | */ | |
20 | ||
21 | #include <stdio.h> | |
e425eb2b | 22 | #include <string.h> |
f0fd9238 AC |
23 | #include <signal.h> |
24 | #include <sys/time.h> | |
25 | ||
26 | static volatile int done; | |
27 | ||
28 | static void | |
29 | handler (int sig) | |
30 | { | |
31 | done = 1; | |
32 | } /* handler */ | |
33 | ||
b04e311d AC |
34 | struct itimerval itime; |
35 | struct sigaction action; | |
36 | ||
37 | /* The enum is so that GDB can easily see these macro values. */ | |
38 | enum { | |
39 | itimer_real = ITIMER_REAL, | |
40 | itimer_virtual = ITIMER_VIRTUAL | |
41 | } itimer = ITIMER_VIRTUAL; | |
42 | ||
f0fd9238 AC |
43 | main () |
44 | { | |
b04e311d | 45 | |
f0fd9238 | 46 | /* Set up the signal handler. */ |
b04e311d AC |
47 | memset (&action, 0, sizeof (action)); |
48 | action.sa_handler = handler; | |
49 | sigaction (SIGVTALRM, &action, NULL); | |
50 | sigaction (SIGALRM, &action, NULL); | |
51 | ||
52 | /* The values needed for the itimer. This needs to be at least long | |
53 | enough for the setitimer() call to return. */ | |
54 | memset (&itime, 0, sizeof (itime)); | |
55 | itime.it_value.tv_usec = 250 * 1000; | |
56 | ||
57 | /* Loop for ever, constantly taking an interrupt. */ | |
58 | while (1) | |
59 | { | |
60 | /* Set up a one-off timer. A timer, rather than SIGSEGV, is | |
61 | used as after a timer handler finishes the interrupted code | |
62 | can safely resume. */ | |
63 | setitimer (itimer, &itime, NULL); | |
64 | /* Wait. */ | |
65 | while (!done); | |
66 | done = 0; | |
67 | } | |
68 | } |