Support flushing translation blocks and flush when we don't need count hook
This commit is contained in:
@@ -139,6 +139,9 @@ typedef void (*uc_invalidate_tb_t)(struct uc_struct *uc, uint64_t start,
|
||||
// Request generating TB at given address
|
||||
typedef uc_err (*uc_gen_tb_t)(struct uc_struct *uc, uint64_t pc, uc_tb *out_tb);
|
||||
|
||||
// tb flush
|
||||
typedef uc_tcg_flush_tlb uc_tb_flush_t;
|
||||
|
||||
struct hook {
|
||||
int type; // UC_HOOK_*
|
||||
int insn; // instruction for HOOK_INSN
|
||||
@@ -272,6 +275,7 @@ struct uc_struct {
|
||||
uc_tcg_flush_tlb tcg_flush_tlb;
|
||||
uc_invalidate_tb_t uc_invalidate_tb;
|
||||
uc_gen_tb_t uc_gen_tb;
|
||||
uc_tb_flush_t tb_flush;
|
||||
uc_add_inline_hook_t add_inline_hook;
|
||||
uc_del_inline_hook_t del_inline_hook;
|
||||
|
||||
|
||||
@@ -530,7 +530,10 @@ typedef enum uc_control_type {
|
||||
UC_CTL_TB_REQUEST_CACHE,
|
||||
// Invalidate a tb cache at a specific address
|
||||
// Write: @args = (uint64_t, uint64_t)
|
||||
UC_CTL_TB_REMOVE_CACHE
|
||||
UC_CTL_TB_REMOVE_CACHE,
|
||||
// Invalidate all translation blocks.
|
||||
// No arguments.
|
||||
UC_CTL_TB_FLUSH
|
||||
|
||||
} uc_control_type;
|
||||
|
||||
@@ -605,7 +608,7 @@ See sample_ctl.c for a detailed example.
|
||||
uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TB_REMOVE_CACHE, 2), (address), (end))
|
||||
#define uc_ctl_request_cache(uc, address, tb) \
|
||||
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_TB_REQUEST_CACHE, 2), (address), (tb))
|
||||
|
||||
#define uc_ctl_flush_tlb(uc) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TB_FLUSH, 0))
|
||||
// Opaque storage for CPU context, used with uc_context_*()
|
||||
struct uc_context;
|
||||
typedef struct uc_context uc_context;
|
||||
|
||||
Reference in New Issue
Block a user