Only exit TB if pc is within the memory range
This commit is contained in:
@@ -18,6 +18,11 @@ static void arm64_set_pc(struct uc_struct *uc, uint64_t address)
|
||||
((CPUARMState *)uc->cpu->env_ptr)->pc = address;
|
||||
}
|
||||
|
||||
static uint64_t arm64_get_pc(struct uc_struct *uc)
|
||||
{
|
||||
return ((CPUARMState *)uc->cpu->env_ptr)->pc;
|
||||
}
|
||||
|
||||
static void arm64_release(void *ctx)
|
||||
{
|
||||
int i;
|
||||
@@ -431,6 +436,7 @@ void arm64_uc_init(struct uc_struct *uc)
|
||||
uc->reg_write = arm64_reg_write;
|
||||
uc->reg_reset = arm64_reg_reset;
|
||||
uc->set_pc = arm64_set_pc;
|
||||
uc->get_pc = arm64_get_pc;
|
||||
uc->release = arm64_release;
|
||||
uc->cpus_init = arm64_cpus_init;
|
||||
uc->cpu_context_size = offsetof(CPUARMState, cpu_watchpoint);
|
||||
|
||||
@@ -16,7 +16,13 @@ ARMCPU *cpu_arm_init(struct uc_struct *uc);
|
||||
static void arm_set_pc(struct uc_struct *uc, uint64_t address)
|
||||
{
|
||||
((CPUARMState *)uc->cpu->env_ptr)->pc = address;
|
||||
((CPUARMState *)uc->cpu->env_ptr)->regs[15] = address;
|
||||
((CPUARMState *)uc->cpu->env_ptr)->regs[15] = address & ~1;
|
||||
((CPUARMState *)uc->cpu->env_ptr)->thumb = address & 1;
|
||||
}
|
||||
|
||||
static uint64_t arm_get_pc(struct uc_struct *uc)
|
||||
{
|
||||
return ((CPUARMState *)uc->cpu->env_ptr)->regs[15] | ((CPUARMState *)uc->cpu->env_ptr)->thumb;
|
||||
}
|
||||
|
||||
static void arm_release(void *ctx)
|
||||
@@ -591,6 +597,7 @@ void arm_uc_init(struct uc_struct *uc)
|
||||
uc->reg_write = arm_reg_write;
|
||||
uc->reg_reset = arm_reg_reset;
|
||||
uc->set_pc = arm_set_pc;
|
||||
uc->get_pc = arm_get_pc;
|
||||
uc->stop_interrupt = arm_stop_interrupt;
|
||||
uc->release = arm_release;
|
||||
uc->query = arm_query;
|
||||
|
||||
Reference in New Issue
Block a user