# 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
require can_spawn_for_attach

standard_testfile

if {[build_executable "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_expect {
    -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
