摘要
編寫執行緒狀態的一個方面。
宣告
#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_STATE_DEBUG_REGS
使用 zx_thread_write_state()
函式
旗標,您必須在核心指令列中指定 kernel.enable-serial-syscalls=true
。
否則,函式會傳回 ZX_ERR_NOT_SUPPORTED
。
州/省
如需可用狀態清單,請參閱 zx_thread_read_state()
及其對應值
ZX_THREAD_STATE_DEBUG_REGS
啟動
ARM 的偵錯中斷點和觀察點數量不固定。為此
zx_thread_state_debug_regs_t
的尺寸足以容納
無限量的中斷點但在大多數情況下
金額較低,也就是說超出上限的值不會
核心會寫入硬體中的所有可用暫存器 指定的中斷點/觀察點計數值這表示 必須在呼叫中設定狀態。
您可以呼叫
zx_thread_read_state()
。
ARM 偵錯硬體偵錯暫存器
ARM 偵錯暫存器可透過 DBGBCR
因此,系統會忽略 DBGBCR 中的所有值,除了 E 屬性以外 位元,用於判斷是否已啟用該特定的中斷點 不一定。換個方式反應,為了啟用 HW 中斷點, 才能在 DBGBVR 中設定正確的位址,並將 1 寫入 DBGBCR。
權限
handle 必須是 ZX_OBJ_TYPE_THREAD
類型,且包含 ZX_RIGHT_WRITE
。
傳回值
zx_thread_write_state()
會在成功時傳回 ZX_OK
。
如果失敗,系統會傳回負的錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
的「處理常式」不是執行緒的類型。
ZX_ERR_ACCESS_DENIED
帳號代碼缺少 ZX_RIGHT_WRITE
。
ZX_ERR_INVALID_ARGS
Kind 無效,buffer 是無效的指標。
buffer_size 與 Kind 不符預期的結構大小。
指定的值無效。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。
ZX_ERR_BAD_STATE
:執行緒未於狀態的時間點停止
可以使用。只有在執行緒終止時,才能讀取執行緒狀態
例外狀況。
ZX_ERR_NOT_SUPPORTED
不支援 Kind。
舉例來說,如果嘗試讀取的暫存器集
不支援執行程式的硬體,
或是使用 ZX_THREAD_STATE_DEBUG_REGS
種類時未指定
kernel.enable-serial-syscalls=true
執行。
啟動
ZX_ERR_INVALID_ARGS
如果提供給 DBGBVR 暫存器的地址並非
有效 (例如無法從使用者空間定址)。此外,如果 HW 設定了任何值
超過平台提供的中斷點 (請參閱上文
有關擷取該號碼的資訊)。