Implement proper "startup-with-shell" support on gdbserver
This patch implements the proper support for the "startup-with-shell" feature on gdbserver. A new packet is added, QStartupWithShell, and it is sent on initialization. If the host sends a "QStartupWithShell:1", it means the inferior shall be started using a shell. If the host sends a "QStartupWithShell:0", it means the inferior shall be started without using a shell. Any other value is considered an error. There is no way to remotely set the shell that will be used by the target to start the inferior. In order to do that, the user must start gdbserver while providing a shell via the $SHELL environment variable. The same is true for the host side. The "set startup-with-shell" setting from the host side is used to decide whether to start the remote inferior using a shell. This same setting is also used to decide whether to use a shell to start the host inferior; this means that it is not really possible to start the inferior using different mechanisms on target and host. A documentation patch is included, along with a new testcase for the feature. gdb/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * NEWS (Changes since GDB 8.0): Announce that GDBserver is now able to start inferiors using a shell. (New remote packets): Announce new packet "QStartupWithShell". * remote.c: Add PACKET_QStartupWithShell. (extended_remote_create_inferior): Handle new PACKET_QStartupWithShell. (remote_protocol_features) <QStartupWithShell>: New entry for PACKET_QStartupWithShell. (_initialize_remote): Call "add_packet_config_cmd" for QStartupShell. gdb/gdbserver/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * server.c (handle_general_set): Handle new packet "QStartupWithShell". (handle_query): Add "QStartupWithShell" to the list of supported packets. (gdbserver_usage): Add help text explaining the new "--startup-with-shell" and "--no-startup-with-shell" CLI options. (captured_main): Recognize and act upon the presence of the new CLI options. gdb/testsuite/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/startup-with-shell.c: New file. * gdb.base/startup-with-shell.exp: Likewise. gdb/doc/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.texinfo (Starting) <startup-with-shell>: Add @anchor. (Connecting) <Remote Packet>: Add "startup-with-shell" and "QStartupWithShell" to the table. (Remote Protocol) <QStartupWithShell>: New item, explaining the packet.
This commit is contained in:
parent
2090129c36
commit
aefd8b33d9
10 changed files with 269 additions and 1 deletions
|
@ -767,6 +767,31 @@ handle_general_set (char *own_buf)
|
|||
return;
|
||||
}
|
||||
|
||||
if (startswith (own_buf, "QStartupWithShell:"))
|
||||
{
|
||||
const char *value = own_buf + strlen ("QStartupWithShell:");
|
||||
|
||||
if (strcmp (value, "1") == 0)
|
||||
startup_with_shell = true;
|
||||
else if (strcmp (value, "0") == 0)
|
||||
startup_with_shell = false;
|
||||
else
|
||||
{
|
||||
/* Unknown value. */
|
||||
fprintf (stderr, "Unknown value to startup-with-shell: %s\n",
|
||||
own_buf);
|
||||
write_enn (own_buf);
|
||||
return;
|
||||
}
|
||||
|
||||
if (remote_debug)
|
||||
debug_printf (_("[Inferior will %s started with shell]"),
|
||||
startup_with_shell ? "be" : "not be");
|
||||
|
||||
write_ok (own_buf);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Otherwise we didn't know what packet it was. Say we didn't
|
||||
understand it. */
|
||||
own_buf[0] = 0;
|
||||
|
@ -2203,7 +2228,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
|
|||
}
|
||||
|
||||
sprintf (own_buf,
|
||||
"PacketSize=%x;QPassSignals+;QProgramSignals+",
|
||||
"PacketSize=%x;QPassSignals+;QProgramSignals+;QStartupWithShell+",
|
||||
PBUFSIZ - 1);
|
||||
|
||||
if (target_supports_catch_syscall ())
|
||||
|
@ -3309,6 +3334,13 @@ gdbserver_usage (FILE *stream)
|
|||
" --no-disable-randomization\n"
|
||||
" Don't disable address space randomization when\n"
|
||||
" starting PROG.\n"
|
||||
" --startup-with-shell\n"
|
||||
" Start PROG using a shell. I.e., execs a shell that\n"
|
||||
" then execs PROG. (default)\n"
|
||||
" --no-startup-with-shell\n"
|
||||
" Exec PROG directly instead of using a shell.\n"
|
||||
" Disables argument globbing and variable substitution\n"
|
||||
" on UNIX-like systems.\n"
|
||||
"\n"
|
||||
"Debug options:\n"
|
||||
"\n"
|
||||
|
@ -3601,6 +3633,10 @@ captured_main (int argc, char *argv[])
|
|||
disable_randomization = 1;
|
||||
else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
|
||||
disable_randomization = 0;
|
||||
else if (strcmp (*next_arg, "--startup-with-shell") == 0)
|
||||
startup_with_shell = true;
|
||||
else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
|
||||
startup_with_shell = false;
|
||||
else if (strcmp (*next_arg, "--once") == 0)
|
||||
run_once = 1;
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue