diff options
author | Eli Zaretskii <eliz@gnu.org> | 2020-02-14 11:53:55 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2020-02-14 11:53:55 +0200 |
commit | a9b34532453a065991b32f15055adf76fa86ff8c (patch) | |
tree | db1abd4fe77955dcb4ec045acf8dae6335b25011 | |
parent | 258bf0ee3748d4354e13daf00f02266cafa96389 (diff) | |
download | gdb-a9b34532453a065991b32f15055adf76fa86ff8c.zip gdb-a9b34532453a065991b32f15055adf76fa86ff8c.tar.gz gdb-a9b34532453a065991b32f15055adf76fa86ff8c.tar.bz2 |
Fix argv[] in programs invoked by gdbserver on MS-Windows
gdbserver/ChangeLog
2020-02-14 Eli Zaretskii <eliz@gnu.org>
* win32-low.c (create_process): Prepend PROGRAM to ARGS when
preparing the command line for CreateProcess.
(win32_create_inferior): Reflect the program name in debugging
output that shows the process and its command line.
-rw-r--r-- | gdbserver/ChangeLog | 7 | ||||
-rw-r--r-- | gdbserver/win32-low.cc | 44 |
2 files changed, 33 insertions, 18 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index 6e6c268..e95177e 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2020-02-14 Eli Zaretskii <eliz@gnu.org> + + * win32-low.c (create_process): Prepend PROGRAM to ARGS when + preparing the command line for CreateProcess. + (win32_create_inferior): Reflect the program name in debugging + output that shows the process and its command line. + 2020-02-13 Simon Marchi <simon.marchi@efficios.com> * Makefile.in: Rename source files from .c to .cc. diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 557c90d..cdd70da 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -559,21 +559,25 @@ create_process (const char *program, char *args, { const char *inferior_cwd = get_inferior_cwd (); BOOL ret; + size_t argslen, proglen; + + proglen = strlen (program) + 1; + argslen = strlen (args) + proglen; #ifdef _WIN32_WCE wchar_t *p, *wprogram, *wargs, *wcwd = NULL; - size_t argslen; - wprogram = alloca ((strlen (program) + 1) * sizeof (wchar_t)); - mbstowcs (wprogram, program, strlen (program) + 1); + wprogram = (wchar_t *) alloca (proglen * sizeof (wchar_t)); + mbstowcs (wprogram, program, proglen); for (p = wprogram; *p; ++p) if (L'/' == *p) *p = L'\\'; - argslen = strlen (args); wargs = alloca ((argslen + 1) * sizeof (wchar_t)); - mbstowcs (wargs, args, argslen + 1); + wcscpy (wargs, wprogram); + wcscat (wargs, L" "); + mbstowcs (wargs + proglen, args, argslen + 1 - proglen); if (inferior_cwd != NULL) { @@ -601,20 +605,24 @@ Could not convert the expanded inferior cwd to wide-char.")); pi); /* proc info */ #else STARTUPINFOA si = { sizeof (STARTUPINFOA) }; - - ret = CreateProcessA (program, /* image name */ - args, /* command line */ - NULL, /* security */ - NULL, /* thread */ - TRUE, /* inherit handles */ - flags, /* start flags */ - NULL, /* environment */ + char *program_and_args = (char *) alloca (argslen + 1); + + strcpy (program_and_args, program); + strcat (program_and_args, " "); + strcat (program_and_args, args); + ret = CreateProcessA (program, /* image name */ + program_and_args, /* command line */ + NULL, /* security */ + NULL, /* thread */ + TRUE, /* inherit handles */ + flags, /* start flags */ + NULL, /* environment */ /* current directory */ (inferior_cwd == NULL ? NULL : gdb_tilde_expand (inferior_cwd).c_str()), - &si, /* start info */ - pi); /* proc info */ + &si, /* start info */ + pi); /* proc info */ #endif return ret; @@ -665,7 +673,7 @@ win32_create_inferior (const char *program, program = real_path; #endif - OUTMSG2 (("Command line is \"%s\"\n", args)); + OUTMSG2 (("Command line is \"%s %s\"\n", program, args)); #ifdef CREATE_NEW_PROCESS_GROUP flags |= CREATE_NEW_PROCESS_GROUP; @@ -688,12 +696,12 @@ win32_create_inferior (const char *program, if (!ret) { - error ("Error creating process \"%s%s\", (error %d): %s\n", + error ("Error creating process \"%s %s\", (error %d): %s\n", program, args, (int) err, strwinerror (err)); } else { - OUTMSG2 (("Process created: %s\n", (char *) args)); + OUTMSG2 (("Process created: %s %s\n", program, (char *) args)); } #ifndef _WIN32_WCE |