Add uc_ctl_get/set_tcg_buffer_size
We still need this API because the virtual memory address space of 32 bits os is only 4GB and we default need 1G per instance Credits to @ZehMatt for original idea Co-authored-by: ζeh Matt <5415177+ZehMatt@users.noreply.github.com>
This commit is contained in:
parent
f8c7969d65
commit
8dffbc159c
@ -90,7 +90,7 @@ typedef void (*uc_args_void_t)(void *);
|
|||||||
typedef void (*uc_args_uc_t)(struct uc_struct *);
|
typedef void (*uc_args_uc_t)(struct uc_struct *);
|
||||||
typedef void (*uc_args_int_uc_t)(struct uc_struct *);
|
typedef void (*uc_args_int_uc_t)(struct uc_struct *);
|
||||||
|
|
||||||
typedef void (*uc_args_uc_long_t)(struct uc_struct *, unsigned long);
|
typedef void (*uc_args_uc_long_t)(struct uc_struct *, uint32_t);
|
||||||
|
|
||||||
typedef void (*uc_args_uc_u64_t)(struct uc_struct *, uint64_t addr);
|
typedef void (*uc_args_uc_u64_t)(struct uc_struct *, uint64_t addr);
|
||||||
|
|
||||||
@ -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
|
||||||
|
|
||||||
|
uint32_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 = (uint32_t)
|
||||||
|
// Read: @args = (uint32_t*)
|
||||||
|
UC_CTL_TCG_BUFFER_SIZE,
|
||||||
} uc_control_type;
|
} uc_control_type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1209,7 +1209,7 @@ static uc_err uc_gen_tb(struct uc_struct *uc, uint64_t addr, uc_tb *out_tb)
|
|||||||
/* Must be called before using the QEMU cpus. 'tb_size' is the size
|
/* Must be called before using the QEMU cpus. 'tb_size' is the size
|
||||||
(in bytes) allocated to the translation buffer. Zero means default
|
(in bytes) allocated to the translation buffer. Zero means default
|
||||||
size. */
|
size. */
|
||||||
void tcg_exec_init(struct uc_struct *uc, unsigned long tb_size)
|
void tcg_exec_init(struct uc_struct *uc, uint32_t tb_size)
|
||||||
{
|
{
|
||||||
/* remove tcg object. init here. */
|
/* remove tcg object. init here. */
|
||||||
/* tcg class init: tcg-all.c:tcg_accel_class_init(), skip all. */
|
/* tcg class init: tcg-all.c:tcg_accel_class_init(), skip all. */
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
|
|
||||||
struct uc_struct;
|
struct uc_struct;
|
||||||
|
|
||||||
void tcg_exec_init(struct uc_struct *uc, unsigned long tb_size);
|
void tcg_exec_init(struct uc_struct *uc, uint32_t tb_size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
// codes for unicorns purposes.
|
// codes for unicorns purposes.
|
||||||
|
|
||||||
void vm_start(struct uc_struct*);
|
void vm_start(struct uc_struct*);
|
||||||
void tcg_exec_init(struct uc_struct *uc, unsigned long tb_size);
|
void tcg_exec_init(struct uc_struct *uc, uint32_t tb_size);
|
||||||
bool unicorn_fill_tlb(CPUState *cs, vaddr address, int size,
|
bool unicorn_fill_tlb(CPUState *cs, vaddr address, int size,
|
||||||
MMUAccessType rw, int mmu_idx,
|
MMUAccessType rw, int mmu_idx,
|
||||||
bool probe, uintptr_t retaddr);
|
bool probe, uintptr_t retaddr);
|
||||||
|
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) {
|
||||||
|
uint32_t size = va_arg(args, uint32_t);
|
||||||
|
uc->tcg_buffer_size = size;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
UC_INIT(uc);
|
||||||
|
|
||||||
|
uint32_t *size = va_arg(args, uint32_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