Add uc_ctl_get/set_tcg_buffer_size
This commit is contained in:
parent
5057f9925b
commit
3145e3c426
@ -400,6 +400,7 @@ struct uc_struct {
|
|||||||
|
|
||||||
FlatView *empty_view; // Static function variable moved from flatviews_init
|
FlatView *empty_view; // Static function variable moved from flatviews_init
|
||||||
|
|
||||||
|
uint64_t tcg_buffer_size; // The buffer size we are going to use
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
PVOID seh_handle;
|
PVOID seh_handle;
|
||||||
void* seh_closure;
|
void* seh_closure;
|
||||||
|
@ -571,8 +571,12 @@ typedef enum uc_control_type {
|
|||||||
// Change the tlb implementation
|
// Change the tlb implementation
|
||||||
// see uc_tlb_type for current implemented types
|
// see uc_tlb_type for current implemented types
|
||||||
// Write: @args = (int)
|
// Write: @args = (int)
|
||||||
UC_CTL_TLB_TYPE
|
UC_CTL_TLB_TYPE,
|
||||||
|
// Change the tcg translation buffer size, note that
|
||||||
|
// unicorn may adjust this value.
|
||||||
|
// Write: @args = (uint64_t)
|
||||||
|
// Read: @args = (uint64_t*)
|
||||||
|
UC_CTL_TCG_BUFFER_SIZE,
|
||||||
} uc_control_type;
|
} uc_control_type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -649,6 +653,11 @@ See sample_ctl.c for a detailed example.
|
|||||||
#define uc_ctl_flush_tb(uc) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TB_FLUSH, 0))
|
#define uc_ctl_flush_tb(uc) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TB_FLUSH, 0))
|
||||||
#define uc_ctl_flush_tlb(uc) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TLB_FLUSH, 0))
|
#define uc_ctl_flush_tlb(uc) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TLB_FLUSH, 0))
|
||||||
#define uc_ctl_tlb_mode(uc, mode) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TLB_TYPE, 1), (mode))
|
#define uc_ctl_tlb_mode(uc, mode) uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TLB_TYPE, 1), (mode))
|
||||||
|
#define uc_ctl_get_tcg_buffer_size(uc, size) \
|
||||||
|
uc_ctl(uc, UC_CTL_READ(UC_CTL_TCG_BUFFER_SIZE, 1), (size))
|
||||||
|
#define uc_ctl_set_tcg_buffer_size(uc, size) \
|
||||||
|
uc_ctl(uc, UC_CTL_WRITE(UC_CTL_TCG_BUFFER_SIZE, 1), (size))
|
||||||
|
|
||||||
// Opaque storage for CPU context, used with uc_context_*()
|
// Opaque storage for CPU context, used with uc_context_*()
|
||||||
struct uc_context;
|
struct uc_context;
|
||||||
typedef struct uc_context uc_context;
|
typedef struct uc_context uc_context;
|
||||||
|
@ -1085,6 +1085,7 @@ static inline void code_gen_alloc(struct uc_struct *uc, size_t tb_size)
|
|||||||
tcg_ctx->code_gen_buffer = alloc_code_gen_buffer(uc);
|
tcg_ctx->code_gen_buffer = alloc_code_gen_buffer(uc);
|
||||||
tcg_ctx->initial_buffer = tcg_ctx->code_gen_buffer;
|
tcg_ctx->initial_buffer = tcg_ctx->code_gen_buffer;
|
||||||
tcg_ctx->initial_buffer_size = tcg_ctx->code_gen_buffer_size;
|
tcg_ctx->initial_buffer_size = tcg_ctx->code_gen_buffer_size;
|
||||||
|
uc->tcg_buffer_size = tcg_ctx->initial_buffer_size;
|
||||||
if (tcg_ctx->code_gen_buffer == NULL) {
|
if (tcg_ctx->code_gen_buffer == NULL) {
|
||||||
fprintf(stderr, "Could not allocate dynamic translator buffer\n");
|
fprintf(stderr, "Could not allocate dynamic translator buffer\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -50,7 +50,7 @@ int machine_initialize(struct uc_struct *uc)
|
|||||||
uc->target_page(uc);
|
uc->target_page(uc);
|
||||||
|
|
||||||
/* Init tcg. use DEFAULT_CODE_GEN_BUFFER_SIZE. */
|
/* Init tcg. use DEFAULT_CODE_GEN_BUFFER_SIZE. */
|
||||||
uc->tcg_exec_init(uc, 0);
|
uc->tcg_exec_init(uc, uc->tcg_buffer_size);
|
||||||
|
|
||||||
/* Init cpu. use default cpu_model. */
|
/* Init cpu. use default cpu_model. */
|
||||||
return uc->cpus_init(uc, NULL);
|
return uc->cpus_init(uc, NULL);
|
||||||
|
14
uc.c
14
uc.c
@ -2374,6 +2374,20 @@ uc_err uc_ctl(uc_engine *uc, uc_control_type control, ...)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case UC_CTL_TCG_BUFFER_SIZE: {
|
||||||
|
if (rw == UC_CTL_IO_WRITE) {
|
||||||
|
uint64_t size = va_arg(args, uint64_t);
|
||||||
|
uc->tcg_buffer_size = size;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
UC_INIT(uc);
|
||||||
|
|
||||||
|
uint64_t *size = va_arg(args, uint64_t *);
|
||||||
|
*size = uc->tcg_buffer_size;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
err = UC_ERR_ARG;
|
err = UC_ERR_ARG;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user