| # Copyright 2007-2025 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 is a test for the gcore script (not the gcore command from |
| # inside GDB). It also tests the gcore script being run without its |
| # accessible terminal. |
| |
| standard_testfile |
| require {!is_remote host} |
| require {!is_remote target} |
| require has_gcore_script |
| require can_spawn_for_attach |
| |
| set corefile [standard_output_file ${testfile}.core] |
| |
| if {[build_executable "failed to build" $testfile ${srcfile}] == -1 } { |
| return -1 |
| } |
| |
| # Cleanup. |
| |
| proc core_clean {} { |
| global corefile |
| |
| foreach file [glob -nocomplain [join [list $corefile *] ""]] { |
| verbose "Delete file $file" 1 |
| remote_file target delete $file |
| } |
| } |
| core_clean |
| |
| # Generate the core file. |
| proc test_body { detached } { |
| global binfile |
| global GCORE |
| global corefile |
| global GDB_DATA_DIRECTORY |
| |
| # We can't use gdb_test_multiple here because GDB is not started. |
| set gcore_cmd $GCORE |
| if {$GDB_DATA_DIRECTORY ne ""} { |
| set gcore_cmd "$gcore_cmd -d '$GDB_DATA_DIRECTORY'" |
| } |
| set res [remote_spawn target "$binfile $detached \"$gcore_cmd\" $corefile"] |
| if { ![gdb_assert { ![expr {$res < 0 || $res == ""}] } \ |
| "spawned gcore"] } { |
| return |
| } |
| |
| set saw_corefile_created false |
| set testname "Spawned gcore finished" |
| remote_expect target 20 { |
| timeout { |
| fail "$testname (timeout)" |
| remote_exec target "kill -9 -[exp_pid -i $res]" |
| return |
| } |
| -re "Saved corefile \[^\r\n\]+\r\n" { |
| set saw_corefile_created true |
| exp_continue |
| } |
| eof { |
| gdb_assert { $saw_corefile_created } $testname |
| } |
| } |
| |
| gdb_assert {1 == [llength [glob -nocomplain [join [list $corefile *] ""]]]}\ |
| "Core file generated by gcore" |
| core_clean |
| } |
| |
| foreach_with_prefix detached { detached standard } { |
| test_body $detached |
| } |