# Copyright 2022-2024 Free Software Foundation, Inc. # Copyright (C) 2021-2025 Advanced Micro Devices, Inc. All rights reserved. # This file is part of GDB. # 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 . # Test showing the "amdgpu precise-memory" setting. load_lib rocm.exp require allow_hip_tests standard_testfile .cpp if {[build_executable "failed to prepare" $testfile $srcfile {debug hip}]} { return } proc do_test { } { clean_restart $::binfile with_rocm_gpu_lock { if ![runto_main] { return } gdb_test "show amdgpu precise-memory" \ "AMDGPU precise memory access reporting is off \\(currently disabled\\)." \ "show precise-memory setting in CLI before" gdb_test "interpreter-exec mi \"-gdb-show amdgpu precise-memory\"" \ "\\^done,value=\"off\",verbose=\"AMDGPU precise memory access reporting is off \\(currently disabled\\).\\\\n\",effective-value=\"off\"" \ "show precise-memory setting in MI before" set cli_effective_value "" set mi_effective_value "" # Assume precise-memory is available, unless GDB reports otherwise. gdb_test_multiple "set amdgpu precise-memory on" "" { -re -wrap "warning: AMDGPU precise memory access reporting could not be enabled\\." { set cli_effective_value "disabled" set mi_effective_value "off" pass $gdb_test_name } -re -wrap "^" { set cli_effective_value "enabled" set mi_effective_value "on" pass $gdb_test_name } } if {$cli_effective_value eq "" || $mi_effective_value eq ""} { return } gdb_test "show amdgpu precise-memory" \ "AMDGPU precise memory access reporting is on \\(currently ${cli_effective_value}\\)\\." \ "show precise-memory setting in CLI after" gdb_test "interpreter-exec mi \"-gdb-show amdgpu precise-memory\"" \ "\\^done,value=\"on\",verbose=\"AMDGPU precise memory access reporting is on \\(currently ${cli_effective_value}\\).\\\\n\",effective-value=\"${mi_effective_value}\"" \ "show precise-memory setting in MI after" if { $cli_effective_value eq "disabled" } { return } # Get to the begining of the GPU kernel without precise memory enabled. with_test_prefix "goto gpu code" { gdb_test_no_output "set amdgpu precise-memory off" gdb_breakpoint "kernel" allow-pending gdb_test "continue" "Thread ${::decimal}.* hit Breakpoint .*" gdb_test_no_output "set amdgpu precise-memory on" } # If precise-memory is available, run until a SIGSEGV is reported. At # that point, the PC should point to the s_nop instruction (the one # following the one which caused the memory violation). gdb_test "continue" "Thread ${::decimal}\[^\r\n\]* received signal SIGSEGV, Segmentation fault.*" gdb_test "x/i \$pc" "=> ${::hex} <_Z6kernelv\\+${::decimal}>:\[ \t\]+s_nop\[ \t\]+0" } } do_test