Set thumb mode based on PC value in ARM. Mask off last bit of PC.

This commit is contained in:
Eloi Sanfelix 2016-06-17 13:46:34 +02:00
parent d92b37ed7d
commit 3a1c13fda9

View file

@ -106,8 +106,9 @@ int arm_reg_write(struct uc_struct *uc, unsigned int *regs, void* const* vals, i
break; break;
//case UC_ARM_REG_PC: //case UC_ARM_REG_PC:
case UC_ARM_REG_R15: case UC_ARM_REG_R15:
ARM_CPU(uc, mycpu)->env.pc = *(uint32_t *)value; ARM_CPU(uc, mycpu)->env.pc = (*(uint32_t *)value & ~1);
ARM_CPU(uc, mycpu)->env.regs[15] = *(uint32_t *)value; ARM_CPU(uc, mycpu)->env.thumb = (*(uint32_t *)value & 1);
ARM_CPU(uc, mycpu)->env.regs[15] = (*(uint32_t *)value & ~1);
// force to quit execution and flush TB // force to quit execution and flush TB
uc->quit_request = true; uc->quit_request = true;
uc_emu_stop(uc); uc_emu_stop(uc);