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_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 註冊器高度設定。 但 Zircon 會將功能限制為「取消連結的地址比對」 中斷點。這表示硬體中斷點只會在 該機構的特定地址例外狀況。

因此,系統會忽略 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_sizeKind 不符預期的結構大小。 指定的值無效。

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 設定了任何值 超過平台提供的中斷點 (請參閱上文 有關擷取該號碼的資訊)。

另請參閱