[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 4/6] accel/tcg: Declare missing cpu_loop_exit*() stubs
From: |
Claudio Fontana |
Subject: |
Re: [PATCH 4/6] accel/tcg: Declare missing cpu_loop_exit*() stubs |
Date: |
Mon, 18 Jan 2021 10:02:00 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 |
On 1/17/21 5:48 PM, Philippe Mathieu-Daudé wrote:
> cpu_loop_exit*() functions are declared in accel/tcg/cpu-exec-common.c,
> and are not available when TCG accelerator is not built. Add stubs so
> linking without TCG succeed.
>
> Problematic files:
>
> - hw/semihosting/console.c in qemu_semihosting_console_inc()
> - hw/ppc/spapr_hcall.c in h_confer()
> - hw/s390x/ipl.c in s390_ipl_reset_request()
> - hw/misc/mips_itu.c
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> I suppose the s390x kvm-only build didn't catch this because
> of compiler optimization:
>
> in s390_ipl_reset_request():
>
> 640 if (tcg_enabled()) {
> 641 cpu_loop_exit(cs);
> 642 }
Ciao Philippe,
yes I have seen this a lot on x86 also, and seems to depend on the compiler
used.
On OpenSUSE 15.2, with gcc based on 7.5.0, I am getting this optimization also,
and so no error happens in these cases.
It is a bit inconvenient because I have to rely completely on the CI to catch
these situations.
Ciao,
Claudio
>
> and "sysemu/tcg.h" is:
>
> 13 #ifdef CONFIG_TCG
> 14 extern bool tcg_allowed;
> 15 #define tcg_enabled() (tcg_allowed)
> 16 #else
> 17 #define tcg_enabled() 0
> 18 #endif
> ---
> accel/stubs/tcg-stub.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/accel/stubs/tcg-stub.c b/accel/stubs/tcg-stub.c
> index 8c18d3eabdd..2304606f8e0 100644
> --- a/accel/stubs/tcg-stub.c
> +++ b/accel/stubs/tcg-stub.c
> @@ -28,3 +28,13 @@ void *probe_access(CPUArchState *env, target_ulong addr,
> int size,
> /* Handled by hardware accelerator. */
> g_assert_not_reached();
> }
> +
> +void QEMU_NORETURN cpu_loop_exit(CPUState *cpu)
> +{
> + g_assert_not_reached();
> +}
> +
> +void QEMU_NORETURN cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc)
> +{
> + g_assert_not_reached();
> +}
>
- [PATCH 1/6] accel/tcg: Make cpu_gen_init() static, (continued)
- [PATCH 1/6] accel/tcg: Make cpu_gen_init() static, Philippe Mathieu-Daudé, 2021/01/17
- [PATCH 2/6] accel/tcg: Restrict tb_flush_jmp_cache() from other accelerators, Philippe Mathieu-Daudé, 2021/01/17
- [PATCH 3/6] accel/tcg: Restrict tb_gen_code() from other accelerators, Philippe Mathieu-Daudé, 2021/01/17
- [PATCH 4/6] accel/tcg: Declare missing cpu_loop_exit*() stubs, Philippe Mathieu-Daudé, 2021/01/17
- Re: [PATCH 4/6] accel/tcg: Declare missing cpu_loop_exit*() stubs, Richard Henderson, 2021/01/21
- [RFC PATCH 5/6] accel/tcg: Restrict cpu_io_recompile() from other accelerators, Philippe Mathieu-Daudé, 2021/01/17
- [RFC PATCH 6/6] softmmu: Restrict watchpoint handlers to TCG accelerator, Philippe Mathieu-Daudé, 2021/01/17