gdbserver with reversed arguments goes into an infinite loop

Denis PILAT
2006-12-13T09:58:40Z

I've found that if you revert the argument of gdbserver, means writing
the program's name before the COMM argument, it goes into an infinite
loop, and as the CTRL+C does not work, you have to kill the process from
an other shell.

In gdbserver/server.c, the loop in question does the remote_open on the
wrong passed argument (argv[1]) which unfortunately is the binary file
you'd expect to open so remote_open does not exit on error.

I think either we could check that we pass correct argument before using
start_inferior(), this is executing before the loop. The bellow patch is
in that sense.

Or we find a way to exit the loop by adding a test in it. May be by
adding something in remote_open to let it fail.

I'd like your opinion about that
Thanks
--
Denis Pilat / STMicroelectronics

Index: server.c
===================================================================
--- server.c (revision 544)
+++ server.c (working copy)
@@ -408,6 +408,13 @@ main (int argc, char *argv[])

if (pid == 0)
{
+ if (access (argv[2], F_OK) != 0)
+ {
+ fprintf (stderr, "File %s does not exist.\n",argv[2]);
+ gdbserver_usage ();
+ exit (0);
+ }
+
/* Wait till we are at first instruction in program. */
signal = start_inferior (&argv[2], &status);