On 9 November 2015 at 19:37, Sergey Fedorov <serge.f...@gmail.com> wrote: > AArch32 translation code does not distinguish between DISAS_UPDATE and > DISAS_JUMP. Thus, we cannot use any of them without first updating PC in > CPU state. Furthermore, it is too complicated to update PC in CPU state > before PC gets updated in disas context. So it is hardly possible to > correctly end TB early if is is not likely to be executed before calling > disas_*_insn(), e.g. just after calling breakpoint check helper. > > Modify DISAS_UPDATE and DISAS_JUMP usage in AArch32 translation and > apply to them the same semantic as AArch64 translation does: > - DISAS_UPDATE: update PC in CPU state when finishing translation > - DISAS_JUMP: preserve current PC value in CPU state when finishing > translation > > This patch fixes a bug in AArch32 breakpoint handling: when > check_breakpoints helper does not generate an exception, ending the TB > early with DISAS_UPDATE couldn't update PC in CPU state and execution > hangs. > > Signed-off-by: Sergey Fedorov <serge.f...@gmail.com>
Applied to target-arm.next, thanks. -- PMM