线程线程读取状态

摘要

读取线程状态的一个方面。

声明

#include <zircon/syscalls.h>

zx_status_t zx_thread_read_state(zx_handle_t handle,
                                 uint32_t kind,
                                 void* buffer,
                                 size_t buffer_size);

说明

zx_thread_read_state() 会读取线程状态的一个方面。只有在线程因异常而停止或线程被暂停时,才能读取线程状态。

线程状态高度依赖于处理器。如需了解每个平台上结构的内容,请参阅 zircon/syscalls/debug.h 中的结构。

STATES

ZX_THREAD_STATE_GENERAL_REGS

缓冲区必须指向包含当前架构的通用寄存器的 zx_thread_state_general_regs_t 结构。

ZX_THREAD_STATE_FP_REGS

缓冲区必须指向 zx_thread_state_fp_regs_t 结构。在 64 位 ARM 平台上,浮点状态位于矢量寄存器中,此结构为空。

ZX_THREAD_STATE_VECTOR_REGS

缓冲区必须指向 zx_thread_state_vector_regs_t 结构。

ZX_THREAD_STATE_DEBUG_REGS

缓冲区必须指向 zx_thread_state_debug_regs_t 结构。所有输入字段都将被忽略,并被替换为会话的实际值。

ZX_THREAD_STATE_SINGLE_STEP

缓冲区必须指向一个 zx_thread_state_single_step_t 值,该值可能包含 0(正常运行)或 1(已启用单步执行)。

ZX_THREAD_STATE_ARM64_SVE

缓冲区必须指向一个 zx_arm64_thread_state_sve_regs_t 结构,该结构包含 128 位 SVE 谓词寄存器 (p) 和 First Fault 寄存器 (ffr);SVE Z0-Z31 的低 128 位与 ZX_THREAD_STATE_VECTOR_REGS 中的 v 共享。仅在存在 ZX_ARM64_FEATURE_ISA_SVE 时在 64 位 ARM 平台上受支持;否则返回 ZX_ERR_NOT_SUPPORTED。

权限

handle 必须为 ZX_OBJ_TYPE_THREAD 类型,且具有 ZX_RIGHT_READ。

返回值

zx_thread_read_state() 成功时返回 ZX_OK。 如果失败,则返回负错误值。

错误

ZX_ERR_BAD_HANDLE 标识名不是有效的标识名。

ZX_ERR_WRONG_TYPE 句柄不是线程的句柄。

ZX_ERR_ACCESS_DENIED 标识名缺少 ZX_RIGHT_READ。

ZX_ERR_INVALID_ARGS kind 无效或 buffer 是无效指针。

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有很好的方法来处理这种(不太可能发生的)错误。 在未来的 build 中,此错误将不再发生。

ZX_ERR_BUFFER_TOO_SMALL 缓冲区长度 buffer_size 太小,无法容纳 kind 所需的数据。

ZX_ERR_BAD_STATE 线程未在状态可用的位置停止。只有在线程因异常而停止时,才能读取线程状态。

不支持 ZX_ERR_NOT_SUPPORTED 种类。 例如,当尝试读取当前运行程序的硬件不支持的寄存器集时,可能会发生这种情况。

另请参阅

thread_write_state。