gdbserver with reversed arguments goes into an infinite loop

Denis PILAT denis.pilat@st.com
Wed Dec 13 09:58:00 GMT 2006


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);








More information about the Gdb-patches mailing list