# Copyright 2023-2024 Free Software Foundation, Inc.
# Copyright (C) 2023-2024 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 that we receive a SIGILL when trying to execute an illegal instruction
# in shader code.
load_lib rocm.exp
require allow_hip_tests
standard_testfile .cpp
if {[build_executable "failed to prepare $testfile" $testfile $srcfile \
{debug hip}]} {
return
}
proc do_test { } {
clean_restart $::binfile
with_rocm_gpu_lock {
if ![runto_main] {
return
}
gdb_breakpoint "illegal_insn" "allow-pending"
gdb_continue_to_breakpoint "illegal_insn"
# Check that the disassembler recognises the next instruction as
# illegal.
gdb_test "x/i \$pc" "=> $::hex.*"
# Step over the illegal instruction.
gdb_test "next" \
"Thread $::decimal.*received signal SIGILL, Illegal instruction\..*"
# On AMDGPU architectures, the illegal instruction exception might be
# imprecise, that is the PC might be pointing somewhere after the first
# byte which constituted the illegal instruction.
# When resuming execution, the illegal instruction is delivered to the
# runtime which is expected to print an error message then abort the
# program.
setup_kfail "*-*-mingw*" "AIRUNTIME=35"
gdb_test "continue" \
".*HSA_STATUS_ERROR_ILLEGAL_INSTRUCTION.*received signal SIGABRT, Aborted..*"
}
}
do_test