zx_thread_write_state

摘要

写入线程状态的一个方面。

声明

#include <zircon/syscalls.h>

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

说明

zx_thread_write_state() 用于写入线程状态的一个方面。线程 只有在线程因异常或 线程挂起。

线程状态在很大程度上取决于处理器。查看以下结构中的结构: zircon/syscalls/debug.h,了解每个平台上的结构内容。

zx_thread_write_state() 函数与 ZX_THREAD_STATE_DEBUG_REGS 搭配使用 标志,则必须在内核命令行中指定 kernel.enable-serial-syscalls=true。 否则,该函数会返回 ZX_ERR_NOT_SUPPORTED

省/自治区/直辖市

如需查看可用状态的列表,请参阅 zx_thread_read_state() 及其对应的值。

ZX_THREAD_STATE_DEBUG_REGS

ARM

ARM 的调试断点和监视点数量可变。为此 zx_thread_state_debug_regs_t 足够大,可以容纳最大 断点的个数但在大多数情况下,指定的 CPU 实现 存储的值较小,也就是说,超出限制的上限值 。

内核会将所有可用寄存器写入硬件, 指定断点/监视点计数值。这意味着,所有正确的 必须设置该调用的状态。

您可以通过调用 zx_thread_read_state()

ARM 调试硬件调试寄存器

ARM 调试寄存器可通过其 DBGBCR 寄存器高度配置。 不过,Zircon 将该功能限制为未关联的地址匹配硬件 断点。也就是说,硬件断点仅在 相应 DBGBVR 寄存器中的指定地址出现异常。

因此,DBGBCR 内的所有值都将被忽略(E 除外) 位,用于确定是否激活了特定断点 。换句话说,为了激活硬件断点, 需要在 DBGBVR 中设置正确的地址,并将 1 写入 DBGBCR。

权限

handle 的类型必须为 ZX_OBJ_TYPE_THREAD 且包含 ZX_RIGHT_WRITE

返回值

如果成功,zx_thread_write_state() 会返回 ZX_OK。 如果失败,则返回负的错误值。

错误

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_WRONG_TYPE handle 不是线程的句柄。

ZX_ERR_ACCESS_DENIED handle 缺少 ZX_RIGHT_WRITE

ZX_ERR_INVALID_ARGS 种类无效,buffer 是无效的指针。 buffer_sizekind 预期的结构大小不符,或者 要设置的指定值无效。

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

ZX_ERR_BAD_STATE:表示线程未在状态 可用。只有在线程由于以下原因停止运行时,才能读取线程状态: 例外情况。

不支持 ZX_ERR_NOT_SUPPORTED kind。 例如,在尝试读取一个 当前运行程序的硬件不支持 或者,在使用 ZX_THREAD_STATE_DEBUG_REGS 种类时未指定 kernel.enable-serial-syscalls=true(在内核命令行中)。

ARM

ZX_ERR_INVALID_ARGS:如果提供给 DBGBVR 寄存器的地址不是 有效(即无法从用户空间寻址)。同样,如果为硬件设置了任何值 超出平台提供数量的断点(请参阅上文中 检索该号码的相关信息)。

另请参阅