From c588c53caf5aad8ebbee231437d2146359392725 Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Fri, 27 Jul 2007 18:44:40 +0000 Subject: [PATCH] 2007-07-27 Michael Snyder * server.c (main): Check for inferior exit before main loop. --- gdb/gdbserver/ChangeLog | 4 ++++ gdb/gdbserver/server.c | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 6b169cc548..9e04c04022 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,7 @@ +2007-07-27 Michael Snyder + + * server.c (main): Check for inferior exit before main loop. + 2007-07-18 Pedro Alves * remote-utils.c (remote_open): Set SO_KEEPALIVE on remote_desc diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9225f663e2..2b9866f950 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -80,6 +80,8 @@ start_inferior (char *argv[], char *statusptr) signal_pid = create_inferior (argv[0], argv); + /* FIXME: we don't actually know at this point that the create + actually succeeded. We won't know that until we wait. */ fprintf (stderr, "Process %s created; pid = %ld\n", argv[0], signal_pid); fflush (stderr); @@ -93,7 +95,8 @@ start_inferior (char *argv[], char *statusptr) atexit (restore_old_foreground_pgrp); #endif - /* Wait till we are at 1st instruction in program, return signal number. */ + /* Wait till we are at 1st instruction in program, return signal + number (assuming success). */ return mywait (statusptr, 0); } @@ -899,7 +902,9 @@ main (int argc, char *argv[]) /* Wait till we are at first instruction in program. */ signal = start_inferior (&argv[2], &status); - /* We are now stopped at the first instruction of the target process */ + /* We are now (hopefully) stopped at the first instruction of + the target process. This assumes that the target process was + successfully created. */ /* Don't report shared library events on the initial connection, even if some libraries are preloaded. */ @@ -925,6 +930,12 @@ main (int argc, char *argv[]) exit (1); } + if (status == 'W' || status == 'X') + { + fprintf (stderr, "No inferior, GDBserver exiting.\n"); + exit (1); + } + while (1) { remote_open (argv[1]);