Message ID | 20210918184527.408540-3-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | linux-user: Streamline handling of SIGSEGV | expand |
> On Sep 18, 2021, at 12:44 PM, Richard Henderson <richard.henderson@linaro.org> wrote: > > Currently there are only two places that require we reset this > value before exiting to the main loop, but that will change. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > accel/tcg/cpu-exec.c | 3 ++- > accel/tcg/user-exec.c | 2 -- > 2 files changed, 2 insertions(+), 3 deletions(-) Reviewed-by: Warner Losh <imp@bsdimp.com> > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c > index 5fd1ed3422..410588d08a 100644 > --- a/accel/tcg/cpu-exec.c > +++ b/accel/tcg/cpu-exec.c > @@ -451,6 +451,7 @@ void cpu_exec_step_atomic(CPUState *cpu) > * memory. > */ > #ifndef CONFIG_SOFTMMU > + clear_helper_retaddr(); > tcg_debug_assert(!have_mmap_lock()); > #endif > if (qemu_mutex_iothread_locked()) { > @@ -460,7 +461,6 @@ void cpu_exec_step_atomic(CPUState *cpu) > qemu_plugin_disable_mem_helpers(cpu); > } > > - > /* > * As we start the exclusive region before codegen we must still > * be in the region if we longjump out of either the codegen or > @@ -905,6 +905,7 @@ int cpu_exec(CPUState *cpu) > #endif > > #ifndef CONFIG_SOFTMMU > + clear_helper_retaddr(); > tcg_debug_assert(!have_mmap_lock()); > #endif > if (qemu_mutex_iothread_locked()) { > diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c > index cef025d001..e94f1fed00 100644 > --- a/accel/tcg/user-exec.c > +++ b/accel/tcg/user-exec.c > @@ -175,7 +175,6 @@ static inline int handle_cpu_signal(uintptr_t pc, siginfo_t *info, > * currently executing TB was modified and must be exited > * immediately. Clear helper_retaddr for next execution. > */ > - clear_helper_retaddr(); > cpu_exit_tb_from_sighandler(cpu, old_set); > /* NORETURN */ > > @@ -193,7 +192,6 @@ static inline int handle_cpu_signal(uintptr_t pc, siginfo_t *info, > * an exception. Undo signal and retaddr state prior to longjmp. > */ > sigprocmask(SIG_SETMASK, old_set, NULL); > - clear_helper_retaddr(); > > cc = CPU_GET_CLASS(cpu); > cc->tcg_ops->tlb_fill(cpu, address, 0, access_type, > -- > 2.25.1 > >
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 5fd1ed3422..410588d08a 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -451,6 +451,7 @@ void cpu_exec_step_atomic(CPUState *cpu) * memory. */ #ifndef CONFIG_SOFTMMU + clear_helper_retaddr(); tcg_debug_assert(!have_mmap_lock()); #endif if (qemu_mutex_iothread_locked()) { @@ -460,7 +461,6 @@ void cpu_exec_step_atomic(CPUState *cpu) qemu_plugin_disable_mem_helpers(cpu); } - /* * As we start the exclusive region before codegen we must still * be in the region if we longjump out of either the codegen or @@ -905,6 +905,7 @@ int cpu_exec(CPUState *cpu) #endif #ifndef CONFIG_SOFTMMU + clear_helper_retaddr(); tcg_debug_assert(!have_mmap_lock()); #endif if (qemu_mutex_iothread_locked()) { diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index cef025d001..e94f1fed00 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -175,7 +175,6 @@ static inline int handle_cpu_signal(uintptr_t pc, siginfo_t *info, * currently executing TB was modified and must be exited * immediately. Clear helper_retaddr for next execution. */ - clear_helper_retaddr(); cpu_exit_tb_from_sighandler(cpu, old_set); /* NORETURN */ @@ -193,7 +192,6 @@ static inline int handle_cpu_signal(uintptr_t pc, siginfo_t *info, * an exception. Undo signal and retaddr state prior to longjmp. */ sigprocmask(SIG_SETMASK, old_set, NULL); - clear_helper_retaddr(); cc = CPU_GET_CLASS(cpu); cc->tcg_ops->tlb_fill(cpu, address, 0, access_type,
Currently there are only two places that require we reset this value before exiting to the main loop, but that will change. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- accel/tcg/cpu-exec.c | 3 ++- accel/tcg/user-exec.c | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) -- 2.25.1