diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/startup-with-shell.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/startup-with-shell.exp | 161 |
1 files changed, 94 insertions, 67 deletions
diff --git a/gdb/testsuite/gdb.base/startup-with-shell.exp b/gdb/testsuite/gdb.base/startup-with-shell.exp index 80dfdf3..a6ebb57 100644 --- a/gdb/testsuite/gdb.base/startup-with-shell.exp +++ b/gdb/testsuite/gdb.base/startup-with-shell.exp @@ -22,6 +22,8 @@ require !use_gdb_stub # (via dejagnu) yet. require {!is_remote target} +require {expr [have_startup_shell] != -1} + standard_testfile if { [build_executable "failed to prepare" $testfile $srcfile debug] } { @@ -40,7 +42,8 @@ run_on_host \ proc initial_setup_simple { startup_with_shell run_args } { global hex decimal binfile unique_file - clean_restart $binfile + clean_restart + gdb_load $binfile gdb_test_no_output "set startup-with-shell $startup_with_shell" gdb_test_no_output "set print characters unlimited" @@ -91,73 +94,97 @@ proc run_test_same { args re testname } { run_test $args $re $re $testname } -# The regexp to match a single '\' character. -set bs "\\\\" - -# Are we using 'remote' or 'extended-remote' protocol? -set is_remote_p [gdb_protocol_is_remote] - -## Run the actual tests - -run_test "$unique_file_dir/*.unique-extension" \ - "\"$unique_file\"" \ - "\"$unique_file_dir/\\\*\.unique-extension\"" \ - "arg is glob" \ - $is_remote_p - -run_test_same "$unique_file_dir/\\*.unique-extension" \ - "\"$unique_file_dir/\\\*\.unique-extension\"" \ - "arg is escaped glob" - -save_vars { env(TEST) } { - set env(TEST) "1234" - run_test "\$TEST" \ - "\"1234\"" \ - "\"\\\$TEST\"" \ - "arg is shell variable" \ - $is_remote_p +# Run the actual tests +proc run_all_tests { { is_remote_with_split_args false } } { + # The regexp to match a single '\' character. + set bs "\\\\" + + run_test "$::unique_file_dir/*.unique-extension" \ + "\"$::unique_file\"" \ + "\"$::unique_file_dir/\\\*\.unique-extension\"" \ + "arg is glob" \ + $is_remote_with_split_args + + run_test_same "$::unique_file_dir/\\*.unique-extension" \ + "\"$::unique_file_dir/\\\*\.unique-extension\"" \ + "arg is escaped glob" + + save_vars { ::env(TEST) } { + set ::env(TEST) "1234" + run_test "\$TEST" \ + "\"1234\"" \ + "\"\\\$TEST\"" \ + "arg is shell variable" \ + $is_remote_with_split_args + + run_test_same "\\\$TEST" \ + "\"\\\$TEST\"" \ + "arg is escaped shell variable" + } - run_test_same "\\\$TEST" \ - "\"\\\$TEST\"" \ - "arg is escaped shell variable" + run_test "\$(echo foo)" \ + "\"foo\"" \ + "\"\\\$\\(echo\"" \ + "arg is parameter expansion, command execution" \ + $is_remote_with_split_args + + run_test "\$((2 + 3))" \ + "\"5\"" \ + "\"\\\$\\(\\(2\"" \ + "arg is parameter expansion, expression evaluation" \ + $is_remote_with_split_args + + run_test_same "\"\\a\"" \ + "\"${bs}${bs}a\"" \ + "retain backslash in double quote arg" + + run_test_same "'\\a'" \ + "\"${bs}${bs}a\"" \ + "retain backslash in single quote arg" + + run_test_same "\"\\\$\"" \ + "\"\\\$\"" \ + "'\$' can be escaped in double quote arg" + + run_test_same "'\\\$'" \ + "\"${bs}${bs}\\\$\"" \ + "'\$' is not escaped in single quote arg" + + run_test_same "\"\\`\"" \ + "\"\\`\"" \ + "'`' can be escaped in double quote arg" + + run_test_same "'\\`'" \ + "\"${bs}${bs}`\"" \ + "'`' is not escaped in single quote arg" + + run_test_same "\"\\\"\"" \ + "\"${bs}\"\"" \ + "'\"' can be escaped in double quote arg" + + run_test_same "'\\\"'" \ + "\"${bs}${bs}${bs}\"\"" \ + "'\"' is not escaped in single quote arg" + + run_test_same "\"\\\\\"" \ + "\"${bs}${bs}\"" \ + "'\\' can be escaped in double quote arg" + + run_test_same "'\\\\'" \ + "\"${bs}${bs}${bs}${bs}\"" \ + "'\\' is not escaped in single quote arg" } -run_test_same "\"\\a\"" \ - "\"${bs}${bs}a\"" \ - "retain backslash in double quote arg" - -run_test_same "'\\a'" \ - "\"${bs}${bs}a\"" \ - "retain backslash in single quote arg" - -run_test_same "\"\\\$\"" \ - "\"\\\$\"" \ - "'\$' can be escaped in double quote arg" +run_all_tests -run_test_same "'\\\$'" \ - "\"${bs}${bs}\\\$\"" \ - "'\$' is not escaped in single quote arg" - -run_test_same "\"\\`\"" \ - "\"\\`\"" \ - "'`' can be escaped in double quote arg" - -run_test_same "'\\`'" \ - "\"${bs}${bs}`\"" \ - "'`' is not escaped in single quote arg" - -run_test_same "\"\\\"\"" \ - "\"${bs}\"\"" \ - "'\"' can be escaped in double quote arg" - -run_test_same "'\\\"'" \ - "\"${bs}${bs}${bs}\"\"" \ - "'\"' is not escaped in single quote arg" - -run_test_same "\"\\\\\"" \ - "\"${bs}${bs}\"" \ - "'\\' can be escaped in double quote arg" - -run_test_same "'\\\\'" \ - "\"${bs}${bs}${bs}${bs}\"" \ - "'\\' is not escaped in single quote arg" +# For extended-remote targets, disable the packet which passes +# inferior arguments as a single string. This changes how the vRun +# (extended-remote only) packet works. +if {[target_info gdb_protocol] == "extended-remote"} { + with_test_prefix "single-inferior-arg disabled" { + save_vars { GDBFLAGS } { + append GDBFLAGS " -ex \"set remote single-inferior-argument-feature-packet off\"" + run_all_tests true + } + } +} |