On Tue, Oct 19, 2021 at 11:45 AM Warner Losh <i...@bsdimp.com> wrote: > > Implent EXCP_UDEF, EXCP_DEBUG, EXCP_INTERRUPT, EXCP_ATOMIC and
s/Implent/Implement/ > EXCP_YIELD. The first two generate a signal to the emulated > binary. EXCP_ATOMIC handles atomic operations. The remainder are fancy > nops. > > Signed-off-by: Stacey Son <s...@freebsd.org> > Signed-off-by: Mikaƫl Urankar <mikael.uran...@gmail.com> > Signed-off-by: Klye Evans <kev...@freebsd.org> > Signed-off-by: Warner Losh <i...@bsdimp.com> > --- > bsd-user/arm/target_arch_cpu.h | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/bsd-user/arm/target_arch_cpu.h b/bsd-user/arm/target_arch_cpu.h > index 94c9109c3f..f22384676a 100644 > --- a/bsd-user/arm/target_arch_cpu.h > +++ b/bsd-user/arm/target_arch_cpu.h > @@ -47,6 +47,34 @@ static inline void target_cpu_loop(CPUARMState *env) > cpu_exec_end(cs); > process_queued_cpu_work(cs); > switch (trapnr) { > + case EXCP_UDEF: > + { > + /* See arm/arm/undefined.c undefinedinstruction(); */ > + info.si_addr = env->regs[15]; > + info.si_signo = TARGET_SIGILL; > + info.si_errno = 0; > + info.si_code = TARGET_ILL_ILLADR; > + queue_signal(env, info.si_signo, &info); > + } > + break; > + case EXCP_INTERRUPT: > + /* just indicate that signals should be handled asap */ > + break; > + case EXCP_DEBUG: > + { > + > + info.si_signo = TARGET_SIGTRAP; > + info.si_errno = 0; > + info.si_code = TARGET_TRAP_BRKPT; > + queue_signal(env, info.si_signo, &info); > + } > + break; > + case EXCP_ATOMIC: > + cpu_exec_step_atomic(cs); > + break; > + case EXCP_YIELD: > + /* nothing to do here for user-mode, just resume guest code */ > + break; > default: > fprintf(stderr, "qemu: unhandled CPU exception 0x%x - > aborting\n", > trapnr); > -- > 2.32.0 > Modulo typo: Reviewed-by: Kyle Evans <kev...@freebsd.org>