| // Copyright 2023 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_ZIRCON_ARCH_H_ | |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_ZIRCON_ARCH_H_ | |
| #include <lib/zx/thread.h> | |
| #include <zircon/syscalls/debug.h> | |
| #include <zircon/syscalls/exception.h> | |
| #include "src/developer/debug/shared/register_info.h" | |
| // This file contains Zircon-specific interfaces that have low-levelarchitecture-dependent | |
| // implementations. | |
| namespace debug_agent::arch { | |
| // The registers in the given category are appended to the given output vector. | |
| zx_status_t ReadRegisters(const zx::thread& thread, const debug::RegisterCategory& cat, | |
| std::vector<debug::RegisterValue>& out); | |
| // The registers must all be in the same category. | |
| zx_status_t WriteRegisters(zx::thread& thread, const debug::RegisterCategory& cat, | |
| const std::vector<debug::RegisterValue>& registers); | |
| // Given the current register value in |regs|, applies to it the new updated values for the | |
| // registers listed in |updates|. | |
| zx_status_t WriteFloatingPointRegisters(const std::vector<debug::RegisterValue>& update, | |
| zx_thread_state_fp_regs_t* regs); | |
| zx_status_t WriteVectorRegisters(const std::vector<debug::RegisterValue>& update, | |
| zx_thread_state_vector_regs_t* regs); | |
| zx_status_t WriteDebugRegisters(const std::vector<debug::RegisterValue>& update, | |
| zx_thread_state_debug_regs_t* regs); | |
| // Converts a Zircon exception type to a debug_ipc one. Some exception types require querying the | |
| // thread's debug registers. If needed, the given thread will be used for that. | |
| debug_ipc::ExceptionType DecodeExceptionType(const zx::thread& thread, uint32_t exception_type); | |
| // Converts an architecture-specific exception record to a cross-platform one. | |
| debug_ipc::ExceptionRecord FillExceptionRecord(const zx_exception_report_t& in); | |
| } // namespace debug_agent::arch | |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_ZIRCON_ARCH_H_ |