|
From: | Richard Henderson |
Subject: | Re: [Qemu-arm] [Qemu-devel] [PATCH v11 23/29] target/arm: [tcg] Port to translate_insn |
Date: | Fri, 7 Jul 2017 05:26:03 -1000 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 07/07/2017 01:13 AM, Lluís Vilanova wrote:
+ if (dc->ss_active && !dc->pstate_ss) { + /* Singlestep state is Active-pending. + * If we're in this state at the start of a TB then either + * a) we just took an exception to an EL which is being debugged + * and this is the first insn in the exception handler + * b) debug exceptions were masked and we just unmasked them + * without changing EL (eg by clearing PSTATE.D) + * In either case we're going to take a swstep exception in the + * "did not step an insn" case, and so the syndrome ISV and EX + * bits should be zero. + */ + assert(dc->base.num_insns == 1); + gen_exception(EXCP_UDEF, syn_swstep(dc->ss_same_el, 0, 0), + default_exception_el(dc)); + dc->base.is_jmp = DISAS_SKIP;This is surely DISAS_EXC -- see gen_step_complete_exception. Why introduce a new name?The original code goes straight to done_generating here, and that's the purpose of DISAS_SKIP (skip the code executed between the end of the loop and the done_generating label).
That is the purpose of DISAS_EXC too. We've called a noreturn helper to raise an exception and all following code is unreached. If there *was* any code being emitted afterward, that is arguably a bug.
r~
[Prev in Thread] | Current Thread | [Next in Thread] |