Message ID | 20211103140847.454070-18-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | linux-user: Clean up siginfo_t handling | expand |
On Wed, Nov 03, 2021 at 10:08:41AM -0400, Richard Henderson wrote: > Use the new function instead of setting up a target_siginfo_t > and calling queue_signal. Fill in the missing PC for SIGTRAP. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > linux-user/openrisc/cpu_loop.c | 18 +++--------------- > 1 file changed, 3 insertions(+), 15 deletions(-) > > diff --git a/linux-user/openrisc/cpu_loop.c b/linux-user/openrisc/cpu_loop.c > index 3cfdbbf037..9b3d6743d2 100644 > --- a/linux-user/openrisc/cpu_loop.c > +++ b/linux-user/openrisc/cpu_loop.c > @@ -29,7 +29,6 @@ void cpu_loop(CPUOpenRISCState *env) > CPUState *cs = env_cpu(env); > int trapnr; > abi_long ret; > - target_siginfo_t info; > > for (;;) { > cpu_exec_start(cs); > @@ -55,27 +54,16 @@ void cpu_loop(CPUOpenRISCState *env) > } > break; > case EXCP_ALIGN: > - info.si_signo = TARGET_SIGBUS; > - info.si_errno = 0; > - info.si_code = TARGET_BUS_ADRALN; > - info._sifields._sigfault._addr = env->pc; > - queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); > + force_sig_fault(TARGET_SIGBUS, TARGET_BUS_ADRALN, env->eear); > break; > case EXCP_ILLEGAL: > - info.si_signo = TARGET_SIGILL; > - info.si_errno = 0; > - info.si_code = TARGET_ILL_ILLOPC; > - info._sifields._sigfault._addr = env->pc; > - queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); > + force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPC, env->pc); > break; > case EXCP_INTERRUPT: > /* We processed the pending cpu work above. */ > 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, QEMU_SI_FAULT, &info); > + force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc); > break; > case EXCP_ATOMIC: > cpu_exec_step_atomic(cs); This looks ok to me. Reviewed-by: Stafford Horne <shorne@gmail.com>
diff --git a/linux-user/openrisc/cpu_loop.c b/linux-user/openrisc/cpu_loop.c index 3cfdbbf037..9b3d6743d2 100644 --- a/linux-user/openrisc/cpu_loop.c +++ b/linux-user/openrisc/cpu_loop.c @@ -29,7 +29,6 @@ void cpu_loop(CPUOpenRISCState *env) CPUState *cs = env_cpu(env); int trapnr; abi_long ret; - target_siginfo_t info; for (;;) { cpu_exec_start(cs); @@ -55,27 +54,16 @@ void cpu_loop(CPUOpenRISCState *env) } break; case EXCP_ALIGN: - info.si_signo = TARGET_SIGBUS; - info.si_errno = 0; - info.si_code = TARGET_BUS_ADRALN; - info._sifields._sigfault._addr = env->pc; - queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); + force_sig_fault(TARGET_SIGBUS, TARGET_BUS_ADRALN, env->eear); break; case EXCP_ILLEGAL: - info.si_signo = TARGET_SIGILL; - info.si_errno = 0; - info.si_code = TARGET_ILL_ILLOPC; - info._sifields._sigfault._addr = env->pc; - queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); + force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPC, env->pc); break; case EXCP_INTERRUPT: /* We processed the pending cpu work above. */ 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, QEMU_SI_FAULT, &info); + force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc); break; case EXCP_ATOMIC: cpu_exec_step_atomic(cs);
Use the new function instead of setting up a target_siginfo_t and calling queue_signal. Fill in the missing PC for SIGTRAP. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- linux-user/openrisc/cpu_loop.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) -- 2.25.1