# Copyright (C) 2019-2024 Free Software Foundation, Inc. # Copyright (C) 2019-2024 Advanced Micro Devices, Inc. All rights reserved. # 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 . load_lib rocm.exp require allow_hip_tests standard_testfile .cpp set escapedbinfile [string_to_regexp $binfile] if {![can_spawn_for_attach]} { return 0 } # Compile the hip program. if {[prepare_for_testing "failed to prepare ${testfile}" $testfile $srcfile {debug hip}]} { return -1 } # Test to do attach with pid from command line. # For example rocgdb --pid . proc_with_prefix process_attach_cmdline_tests {} { global gdb_prompt global binfile global escapedbinfile global verbose global GDB global INTERNAL_GDBFLAGS global GDBFLAGS global decimal if ![isnative] then { unsupported "command attach test" return 0 } set test_spawn_id [spawn_wait_for_attach $binfile] set testpid [spawn_id_get_pid $test_spawn_id] gdb_exit if { [gdb_spawn_attach_cmdline $testpid] } { gdb_test "detach" \ "Detaching from program: .*$escapedbinfile, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]" \ "detach the process" } # Get rid of the process. kill_wait_spawned_process $test_spawn_id } # Tests to do attach/detach in gdb console. proc_with_prefix process_attach_tests {} { global gdb_prompt global binfile global escapedbinfile global srcfile global testfile global subdir global decimal # Start the program running and then wait for a bit, to be sure # that it can be attached to. set test_spawn_id [spawn_wait_for_attach $binfile] set testpid [spawn_id_get_pid $test_spawn_id] foreach_with_prefix preloadfile { on off } { clean_restart if { $preloadfile == on } { gdb_test \ "file $binfile" \ "Reading symbols from $escapedbinfile\.\.\.*" \ "file \$binfile" } if { [gdb_attach $testpid] } { set threadid "" gdb_test_multiple "info threads" "extract thread id" { -re "\\s+(\\d+)\\s+AMDGPU Wave\\s+.*$gdb_prompt $" { set threadid "$expect_out(1,string)" pass $gdb_test_name } } if {$threadid != ""} { gdb_test "thread $threadid" \ "Switching to thread $threadid, lane 0 \\(AMDGPU Lane .*" # Show architecture info while debugging in device code. # Sample output "The target architecture is set automatically (currently amdgcn:gfx906)". gdb_test "show architecture" \ {The target architecture is set to "auto" \(currently "amdgcn:gfx\w+"\)\.} } gdb_test "detach" \ "Detaching from program: .*$escapedbinfile, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]" \ "detach, with file" } } kill_wait_spawned_process $test_spawn_id } with_rocm_gpu_lock { process_attach_tests process_attach_cmdline_tests }