2007/10/15 Pierre Muller <muller@ics.u-strasbg.fr>
authorPierre Muller <muller@sourceware.org>
Mon, 15 Oct 2007 07:17:56 +0000 (07:17 +0000)
committerPierre Muller <muller@sourceware.org>
Mon, 15 Oct 2007 07:17:56 +0000 (07:17 +0000)
* gdb.base/sigstep.c (main): Add checks for
return values for setitimer call.
Call setitimer again with itimer = ITIMER_REAL
if first call to setitimer fails.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/sigstep.c

index ba9b0f4..2317941 100644 (file)
@@ -1,3 +1,10 @@
+2007/10/15  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+       * gdb.base/sigstep.c (main): Add checks for
+       return values for setitimer call.
+       Call setitimer again with itimer = ITIMER_REAL
+       if first call to setitimer fails.
+
 2007-10-11  Kazu Hirata  <kazu@codesourcery.com>
 
        * lib/gdb.exp (gdb_load_cmd): Print out $loadtimeout instead
index c141c96..d5e2bba 100644 (file)
@@ -21,6 +21,7 @@
 #include <string.h>
 #include <signal.h>
 #include <sys/time.h>
+#include <errno.h>
 
 static volatile int done;
 
@@ -39,9 +40,11 @@ enum {
   itimer_virtual = ITIMER_VIRTUAL
 } itimer = ITIMER_VIRTUAL;
 
+int
 main ()
 {
 
+  int res;
   /* Set up the signal handler.  */
   memset (&action, 0, sizeof (action));
   action.sa_handler = handler;
@@ -59,9 +62,21 @@ main ()
       /* Set up a one-off timer.  A timer, rather than SIGSEGV, is
         used as after a timer handler finishes the interrupted code
         can safely resume.  */
-      setitimer (itimer, &itime, NULL);
+      res = setitimer (itimer, &itime, NULL);
+      if (res == -1)
+       {
+         printf ("First call to setitimer failed, errno = %d\r\n",errno);
+         itimer = ITIMER_REAL;
+         res = setitimer (itimer, &itime, NULL);
+         if (res == -1)
+           {
+             printf ("Second call to setitimer failed, errno = %d\r\n",errno);
+             return 1;
+           }
+       }
       /* Wait.  */
       while (!done);
       done = 0;
     }
+  return 0;
 }