OSDN Git Service

* server.c (handle_v_run): If GDB didn't specify an argv, use the
authorpalves <palves>
Fri, 10 Oct 2008 14:06:05 +0000 (14:06 +0000)
committerpalves <palves>
Fri, 10 Oct 2008 14:06:05 +0000 (14:06 +0000)
whole argv from the last run, not just argv[0].

gdb/gdbserver/ChangeLog
gdb/gdbserver/server.c

index 0b5d10b..225537d 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-10  Pedro Alves  <pedro@codesourcery.com>
+
+       * server.c (handle_v_run): If GDB didn't specify an argv, use the
+       whole argv from the last run, not just argv[0].
+
 2008-09-08  Pedro Alves  <pedro@codesourcery.com>
 
        * regcache.c (new_register_cache): Return NULL if the register
index 60df3d8..4adbf51 100644 (file)
@@ -1096,23 +1096,31 @@ handle_v_run (char *own_buf, char *status, int *signal)
 
   if (new_argv[0] == NULL)
     {
+      /* GDB didn't specify a program to run.  Try to use the argv
+        from the last run: either from the last vRun with a non-empty
+        argv, or from what the user specified if gdbserver was
+        started as: `gdbserver :1234 PROG ARGS'.  */
+
       if (program_argv == NULL)
        {
          write_enn (own_buf);
          return 0;
        }
 
-      new_argv[0] = strdup (program_argv[0]);
+      /* We can reuse the old args.  We don't need this then.  */
+      free (new_argv);
     }
-
-  /* Free the old argv.  */
-  if (program_argv)
+  else
     {
-      for (pp = program_argv; *pp != NULL; pp++)
-       free (*pp);
-      free (program_argv);
+      /* Free the old argv.  */
+      if (program_argv)
+       {
+         for (pp = program_argv; *pp != NULL; pp++)
+           free (*pp);
+         free (program_argv);
+       }
+      program_argv = new_argv;
     }
-  program_argv = new_argv;
 
   *signal = start_inferior (program_argv, status);
   if (*status == 'T')