For Sega/Hitachi, when simulator exits, check to see if it was because
authorJim Wilson <wilson@tuliptree.org>
Sat, 12 Aug 1995 01:03:16 +0000 (01:03 +0000)
committerJim Wilson <wilson@tuliptree.org>
Sat, 12 Aug 1995 01:03:16 +0000 (01:03 +0000)
of a signal.

sim/sh/run.c

index 02fdd40..9dffb58 100644 (file)
@@ -21,12 +21,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Steve Chamberlain
    sac@cygnus.com */
 
+#include <signal.h>
 #include <stdio.h>
 #include <varargs.h>
 #include "bfd.h"
 #include "sysdep.h"
 #include "remote-sim.h"
 
+#ifndef SIGQUIT
+#define SIGQUIT SIGTERM
+#endif
+
 void usage();
 extern int optind;
 extern char *optarg;
@@ -45,6 +50,8 @@ main (ac, av)
   int verbose = 0;
   int trace = 0;
   char *name = "";
+  enum sim_stop reason;
+  int sigrc;
 
   while ((i = getopt (ac, av, "m:p:s:tv")) != EOF) 
     switch (i)
@@ -116,14 +123,20 @@ main (ac, av)
          if (verbose)
            sim_info (0);
 
-         /* Assume we left through the exit system call,
-            in which case r5 has the exit code */
-         {
-           unsigned char b[4];
-           sim_fetch_register (5, b);
-           return b[3];
-         }
+         sim_stop_reason (&reason, &sigrc);
 
+         /* Check to see if we left through the exit system call.
+            If we did, then we will have gotten a SIGQUIT and the exit
+            code is in r5.  Otherwise, report the error number as the
+            exit code.  */
+         if (sigrc == SIGQUIT)
+           {
+             unsigned char b[4];
+             sim_fetch_register (5, b);
+             return b[3];
+           }
+         else
+           return sigrc;
        }
     }