zx_thread_read_state

摘要

讀取執行緒狀態的其中一個環節。

宣告

#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 類型。舉例來說,嘗試讀取執行程式的硬體不支援的註冊集時,就可能發生這種情況。

另請參閱

thread_write_state