OSDN Git Service

Switch the license of all .c files to GPLv3.
[pf3gnuchains/pf3gnuchains3x.git] / gdb / testsuite / gdb.base / sigstep.c
1 /* This testcase is part of GDB, the GNU debugger.
2
3    Copyright 2004, 2007 Free Software Foundation, Inc.
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 3 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, see <http://www.gnu.org/licenses/>.
17
18 */
19
20 #include <stdio.h>
21 #include <string.h>
22 #include <signal.h>
23 #include <sys/time.h>
24
25 static volatile int done;
26
27 static void
28 handler (int sig)
29 {
30   done = 1;
31 } /* handler */
32
33 struct itimerval itime;
34 struct sigaction action;
35
36 /* The enum is so that GDB can easily see these macro values.  */
37 enum {
38   itimer_real = ITIMER_REAL,
39   itimer_virtual = ITIMER_VIRTUAL
40 } itimer = ITIMER_VIRTUAL;
41
42 main ()
43 {
44
45   /* Set up the signal handler.  */
46   memset (&action, 0, sizeof (action));
47   action.sa_handler = handler;
48   sigaction (SIGVTALRM, &action, NULL);
49   sigaction (SIGALRM, &action, NULL);
50
51   /* The values needed for the itimer.  This needs to be at least long
52      enough for the setitimer() call to return.  */
53   memset (&itime, 0, sizeof (itime));
54   itime.it_value.tv_usec = 250 * 1000;
55
56   /* Loop for ever, constantly taking an interrupt.  */
57   while (1)
58     {
59       /* Set up a one-off timer.  A timer, rather than SIGSEGV, is
60          used as after a timer handler finishes the interrupted code
61          can safely resume.  */
62       setitimer (itimer, &itime, NULL);
63       /* Wait.  */
64       while (!done);
65       done = 0;
66     }
67 }