/* Target used to communicate with the AMD Debugger API. Copyright (C) 2019-2024 Free Software Foundation, Inc. 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 . */ #ifndef GDB_AMD_DBGAPI_TARGET_H #define GDB_AMD_DBGAPI_TARGET_H #include "gdbsupport/observable.h" #include struct inferior; namespace detail { template using is_amd_dbgapi_handle = gdb::Or, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same>; } /* namespace detail */ /* Get the token of amd-dbgapi's inferior_created observer. */ const gdb::observers::token & get_amd_dbgapi_target_inferior_created_observer_token (); /* Comparison operators for amd-dbgapi handle types. */ template >> bool operator== (const T &lhs, const T &rhs) { return lhs.handle == rhs.handle; } template >> bool operator!= (const T &lhs, const T &rhs) { return !(lhs == rhs); } /* Return true if the given ptid is a GPU thread (wave) ptid. */ static inline bool ptid_is_gpu (ptid_t ptid) { /* FIXME: Currently using values that are known not to conflict with other processes to indicate if it is a GPU thread. ptid.pid 1 is the init process and is the only process that could have a ptid.lwp of 1. The init process cannot have a GPU. No other process can have a ptid.lwp of 1. The GPU wave ID is stored in the ptid.tid. */ return ptid.pid () != 1 && ptid.lwp () == 1; } /* Return INF's amd_dbgapi process id. */ amd_dbgapi_process_id_t get_amd_dbgapi_process_id (inferior *inf); /* Get the amd-dbgapi wave id for PTID. */ static inline amd_dbgapi_wave_id_t get_amd_dbgapi_wave_id (ptid_t ptid) { gdb_assert (ptid_is_gpu (ptid)); return amd_dbgapi_wave_id_t { static_cast (ptid.tid ()) }; } /* Get the textual version of STATUS. Always returns non-nullptr, and asserts that STATUS has a valid value. */ static inline const char * get_status_string (amd_dbgapi_status_t status) { const char *ret; status = amd_dbgapi_get_status_string (status, &ret); gdb_assert (status == AMD_DBGAPI_STATUS_SUCCESS); return ret; } #endif /* GDB_AMD_DBGAPI_TARGET_H */