摘要
讀取執行緒狀態的其中一個環節。
宣告
#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 中的結構,瞭解每個平台上的結構內容。
狀態
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 (已啟用單一步驟)。
權限
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
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。
ZX_ERR_BUFFER_TOO_SMALL
緩衝區長度 buffer_size 太小,無法存放 Kind 所需資料。
ZX_ERR_BAD_STATE
執行緒未於具有狀態的時間點停止。只有在執行緒因例外狀況而停止時,才能讀取執行緒狀態。
ZX_ERR_NOT_SUPPORTED
不支援 Kind 類型。舉例來說,嘗試讀取執行程式的硬體不支援的註冊集時,就可能發生這種情況。