From 9b710a42944c3979ed9c8fae8b163ec5353f9c47 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 10 Oct 2008 14:06:05 +0000 Subject: [PATCH] * server.c (handle_v_run): If GDB didn't specify an argv, use the whole argv from the last run, not just argv[0]. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/server.c | 24 ++++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 0b5d10b551e..225537d74a2 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2008-10-10 Pedro Alves + + * 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 * regcache.c (new_register_cache): Return NULL if the register diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 60df3d8de00..4adbf514ef6 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -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') -- 2.47.3