Only exit TB if pc is within the memory range

This commit is contained in:
2022-05-07 00:16:31 +02:00
parent 20c0a4b643
commit 345b63ee96
13 changed files with 83 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;