binutils-gdb/gdb/testsuite/gdb.base/startup-with-shell.exp
Sergio Durigan Junior aefd8b33d9 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.
2017-06-07 19:56:09 -04:00

90 lines
2.7 KiB
Plaintext

# This testcase is part of GDB, the GNU debugger.
# Copyright 2017 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This test doesn't make sense on native-gdbserver.
if { [use_gdb_stub] } {
untested "not supported"
return
}
# There's no easy way to set environment variables on remote targets
# (via dejagnu) yet.
if { [is_remote target] } {
untested "remote board"
return
}
standard_testfile
if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
return -1
}
set unique_file [standard_output_file "unique-file.unique-extension"]
set unique_file_dir [standard_output_file ""]
run_on_host "touch $unique_file" "touch" "$unique_file"
# Initial setup for simple test (wildcard expansion, variable substitution).
proc initial_setup_simple { startup_with_shell run_args } {
global hex decimal binfile unique_file
clean_restart $binfile
gdb_test_no_output "set startup-with-shell $startup_with_shell"
gdb_test_no_output "set args $run_args"
set test "inferior started"
if { [runto_main] } {
pass $test
} else {
fail $test
}
}
## Run the actual tests
with_test_prefix "startup_with_shell = on; run_args = *.unique-extension" {
initial_setup_simple "on" "$unique_file_dir/*.unique-extension"
gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"$unique_file\"" \
"first argument expanded"
}
with_test_prefix "startup_with_shell = off; run_args = *.unique-extension" {
initial_setup_simple "off" "$unique_file_dir/*.unique-extension"
gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"$unique_file_dir/\\\*\.unique-extension\"" \
"first argument not expanded"
}
with_test_prefix "startup_with_shell = on; run_args = \$TEST" {
set env(TEST) "1234"
initial_setup_simple "on" "\$TEST"
gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"1234\"" \
"testing first argument"
unset env(TEST)
}
with_test_prefix "startup_with_shell = off; run_args = \$TEST" {
set env(TEST) "1234"
initial_setup_simple "off" "\$TEST"
gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"\\\$TEST\"" \
"testing first argument"
unset env(TEST)
}