diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/gstack.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/gstack.exp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/gstack.exp b/gdb/testsuite/gdb.base/gstack.exp new file mode 100644 index 0000000..1ad1402 --- /dev/null +++ b/gdb/testsuite/gdb.base/gstack.exp @@ -0,0 +1,92 @@ +# Copyright (C) 2024 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/>. + +require !gdb_protocol_is_remote +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}] == -1} { + return -1 +} + +set command "$binfile" +set res [remote_spawn host $command] +if { ![gdb_assert { ![expr {$res < 0 || $res == ""}] } "spawn inferior"] } { + return +} + +# The spawn id of the test inferior. +set test_spawn_id $res + +# Wait for the spawned program to loop. +set test "wait for inferior to loop" +gdb_expect { + -re "looping\r\n" { + pass $test + } + eof { + fail "$test (eof)" + return + } + timeout { + fail "$test (timeout)" + return + } +} + +# The test case uses a very simple notification not to get caught by attach on +# exiting the function. + +set test "spawn gstack" +set pid [spawn_id_get_pid $test_spawn_id] +set gstack_cmd [findfile $base_dir/../../gdb/gstack] +set command "sh -c GDB=$GDB\\ GDBARGS=-data-directory\\\\\\ $GDB_DATA_DIRECTORY\\ $gstack_cmd\\ $pid\\;echo\\ GSTACK-END" +set res [remote_spawn host $command] +if { ![gdb_assert { ![expr {$res < 0 || $res == ""}] } $test] } { + return +} + +set test "got backtrace" +set saw_backtrace false +set no_awk false +gdb_test_multiple "" $test { + -i "$res" -re "#0 +(0x\[0-9a-f\]+ in )?main \(\).*\r\nGSTACK-END\r\n\$" { + set saw_backtrace true + pass $test + exp_continue + } + + -i "$res" "could not find usable awk interpreter" { + set no_awk true + exp_continue + } + + eof { + set result [wait -i $res] + verbose $result + + gdb_assert { [lindex $result 2] == 0 } "gstack exits with no error" + gdb_assert { [lindex $result 3] == 0 } "gstack's exit status is 0" + + remote_close host + } +} +if {$no_awk} { + unsupported "no awk interpreter found" +} elseif {!$saw_backtrace} { + fail $test +} + +# Kill the test inferior. +kill_wait_spawned_process $test_spawn_id |