target/arm: Provide always-false kvm_arm_*_supported() stubs for usermode
If you try to build aarch64-linux-user with clang and --enable-debug then it fails to compile: ld: libqemu-aarch64-linux-user.a.p/target_arm_cpu64.c.o: in function `cpu_arm_set_sve': ../../target/arm/cpu64.c:321:(.text+0x1254): undefined reference to `kvm_arm_sve_supported' This is a regression introduced in commitf86d4220, which switched the kvm-stub.c file away from being built for all arm targets to only being built for system emulation binaries. It doesn't affect gcc, presumably because even at -O0 gcc folds away the always-false kvm_enabled() condition but clang does not. We would prefer not to build kvm-stub.c once for usermode and once for system-emulation binaries, and we can't build it just once for both because it includes cpu.h. So instead provide always-false versions of the five functions that are valid to call without KVM support in kvm_arm.h. Fixes:f86d42205c("target/arm/meson: accelerator files are not needed in user mode") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3033 Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Message-id: 20250714135152.1896214-1-peter.maydell@linaro.org
This commit is contained in:
parent
8ccd35f25c
commit
32d8fb61e5
1 changed files with 35 additions and 0 deletions
|
|
@ -161,6 +161,14 @@ void kvm_arm_add_vcpu_properties(ARMCPU *cpu);
|
|||
*/
|
||||
void kvm_arm_steal_time_finalize(ARMCPU *cpu, Error **errp);
|
||||
|
||||
/*
|
||||
* These "is some KVM subfeature enabled?" functions may be called
|
||||
* when KVM support is not present, including in the user-mode
|
||||
* emulators. The kvm-stub.c file is only built into the system
|
||||
* emulators, so for user-mode emulation we provide "always false"
|
||||
* stubs here.
|
||||
*/
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
/**
|
||||
* kvm_arm_aarch32_supported:
|
||||
*
|
||||
|
|
@ -197,6 +205,33 @@ bool kvm_arm_mte_supported(void);
|
|||
* Returns true if KVM can enable EL2 and false otherwise.
|
||||
*/
|
||||
bool kvm_arm_el2_supported(void);
|
||||
#else
|
||||
|
||||
static inline bool kvm_arm_aarch32_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool kvm_arm_pmu_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool kvm_arm_sve_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool kvm_arm_mte_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool kvm_arm_el2_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* kvm_arm_get_max_vm_ipa_size:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue