# 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