摘要
讀取執行緒狀態的其中一個面向。
宣告
#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
緩衝區必須指向包含 128 位元 SVE 述詞暫存器 (p) 和第一個錯誤暫存器 (ffr) 的 zx_arm64_thread_state_sve_regs_t 結構;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 handle 不是執行緒的控制代碼。
ZX_ERR_ACCESS_DENIED handle 缺少 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。舉例來說,如果嘗試讀取的暫存器集不受程式目前執行的硬體支援,就可能發生這種情況。