From 501b79c1d2f5903ad10f2904cc64cf724b55c29d Mon Sep 17 00:00:00 2001
From: Pierre Muller <muller@sourceware.org>
Date: Mon, 15 Oct 2007 07:17:56 +0000
Subject: [PATCH] 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.
---
 gdb/testsuite/ChangeLog          |  7 +++++++
 gdb/testsuite/gdb.base/sigstep.c | 17 ++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ba9b0f47a35..23179418354 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.base/sigstep.c b/gdb/testsuite/gdb.base/sigstep.c
index c141c9664af..d5e2bba756d 100644
--- a/gdb/testsuite/gdb.base/sigstep.c
+++ b/gdb/testsuite/gdb.base/sigstep.c
@@ -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;
 }