diff options
author | Lancelot SIX <lancelot.six@amd.com> | 2025-03-21 11:43:07 +0000 |
---|---|---|
committer | Lancelot SIX <lancelot.six@amd.com> | 2025-03-21 22:50:38 +0000 |
commit | 64f6e72d4eb64d46baef56554f2610dd996560ad (patch) | |
tree | f993bf5b4624880bdc54c8a3edc2d1329ed9e4d7 | |
parent | da72ce7ff1bf4582214360439fe5a46e11be5a15 (diff) | |
download | binutils-64f6e72d4eb64d46baef56554f2610dd996560ad.zip binutils-64f6e72d4eb64d46baef56554f2610dd996560ad.tar.gz binutils-64f6e72d4eb64d46baef56554f2610dd996560ad.tar.bz2 |
gdb/testsuite: Test the effect of amdgpu-precise memory
The gdb.rocm/precise-memory.exp test currently checks that the "amdgpu
precise-memory" setting can be set. It does not test that this setting
has any meaningful effect.
This patch extends this test to ensure that precise-memory has the
expected behaviour.
Change-Id: I58f72a51a566f04fc89114b94ee656c2e7ac35bb
Approved-by: Pedro Alves <pedro@palves.net>
-rw-r--r-- | gdb/testsuite/gdb.rocm/precise-memory.cpp | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.rocm/precise-memory.exp | 19 |
2 files changed, 30 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.rocm/precise-memory.cpp b/gdb/testsuite/gdb.rocm/precise-memory.cpp index 769b58a..7a8c37e 100644 --- a/gdb/testsuite/gdb.rocm/precise-memory.cpp +++ b/gdb/testsuite/gdb.rocm/precise-memory.cpp @@ -31,7 +31,17 @@ __global__ void kernel () { - __builtin_amdgcn_s_sleep (1); + + /* Simple kernel which loads from address 0 to trigger a pagefault. + When precise memory is not enabled, it is expected that the memory fault + is reported after the s_nop instruction. With precise-memory, the + exception should be reported on the s_nop. */ + asm volatile ("s_mov_b64 [s10, s11], 0\n" + "s_load_dword s12, [s10, s11]\n" + "s_nop 0" + : + : + : "s10", "s11", "s12"); } int diff --git a/gdb/testsuite/gdb.rocm/precise-memory.exp b/gdb/testsuite/gdb.rocm/precise-memory.exp index 209bae6..8c39f80 100644 --- a/gdb/testsuite/gdb.rocm/precise-memory.exp +++ b/gdb/testsuite/gdb.rocm/precise-memory.exp @@ -54,6 +54,25 @@ proc do_test { } { gdb_test "show amdgpu precise-memory" \ "AMDGPU precise memory access reporting is on \\(currently ${cli_effective_value}\\)\\." \ "show precise-memory setting in CLI 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" } } |