diff mbox

[v2,for-1.7] target-i386: Fix build by providing stub kvm_arch_get_supported_cpuid()

Message ID 1384384147-11076-1-git-send-email-peter.maydell@linaro.org
State Accepted
Commit 2140cfa51d59177815f5b82e94ac48fb24909aba
Headers show

Commit Message

Peter Maydell Nov. 13, 2013, 11:09 p.m. UTC
Fix build failures with clang when KVM is not enabled by
providing a stub version of kvm_arch_get_supported_cpuid().
We retain the compile time check that this function isn't
called when CONFIG_KVM is not set by guarding the stub with
ifndef __OPTIMIZE__ (we assume that an optimizing build will
do sufficient constant folding and dead code elimination to
remove the calls before linking).

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Changes v1->v2:
 * guard stub with ifndef __OPTIMIZE__
 * make stub abort() rather than return bogus value

 target-i386/kvm-stub.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Stefan Weil Nov. 14, 2013, 5:40 a.m. UTC | #1
Am 14.11.2013 00:09, schrieb Peter Maydell:
> Fix build failures with clang when KVM is not enabled by
> providing a stub version of kvm_arch_get_supported_cpuid().
> We retain the compile time check that this function isn't
> called when CONFIG_KVM is not set by guarding the stub with
> ifndef __OPTIMIZE__ (we assume that an optimizing build will
> do sufficient constant folding and dead code elimination to
> remove the calls before linking).
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Changes v1->v2:
>  * guard stub with ifndef __OPTIMIZE__
>  * make stub abort() rather than return bogus value
>
>  target-i386/kvm-stub.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/target-i386/kvm-stub.c b/target-i386/kvm-stub.c
> index 11429c4..2b9e801 100644
> --- a/target-i386/kvm-stub.c
> +++ b/target-i386/kvm-stub.c
> @@ -16,3 +16,15 @@ bool kvm_allows_irq0_override(void)
>  {
>      return 1;
>  }
> +
> +#ifndef __OPTIMIZE__
> +/* This function is only called inside conditionals which we
> + * rely on the compiler to optimize out when CONFIG_KVM is not
> + * defined.
> + */
> +uint32_t q(KVMState *env, uint32_t function,
> +                                      uint32_t index, int reg)
> +{
> +    abort();
> +}
> +#endif


Reviewed-by: Stefan Weil <sw@weilnetz.de>

If you happen to write a v3 patch, g_assert_not_reached would be even
better than abort.

It's impossible to tell why QEMU terminated after an assert without a
debugger,
whereas g_assert_not_reached clearly shows the location.

Regards, Stefan
Paolo Bonzini Nov. 14, 2013, 8:53 a.m. UTC | #2
Il 14/11/2013 00:09, Peter Maydell ha scritto:
> +#ifndef __OPTIMIZE__
> +/* This function is only called inside conditionals which we
> + * rely on the compiler to optimize out when CONFIG_KVM is not
> + * defined.
> + */
> +uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
> +                                      uint32_t index, int reg)
> +{
> +    abort();
> +}
> +#endif

Thanks, I'll apply this to uq/master and send a pull request.

Paolo
Peter Maydell Nov. 14, 2013, 11:06 a.m. UTC | #3
On 14 November 2013 05:40, Stefan Weil <sw@weilnetz.de> wrote:
> If you happen to write a v3 patch, g_assert_not_reached would be even
> better than abort.
>
> It's impossible to tell why QEMU terminated after an assert without a
> debugger,
> whereas g_assert_not_reached clearly shows the location.

Maybe. I was mostly just following the pattern of existing
stub functions. Should all instances of abort() be replaced?
(g_assert_not_reached() is compile-time disablable, unlike
abort()).

-- PMM
Paolo Bonzini Nov. 14, 2013, 11:17 a.m. UTC | #4
Il 14/11/2013 12:06, Peter Maydell ha scritto:
> On 14 November 2013 05:40, Stefan Weil <sw@weilnetz.de> wrote:
>> If you happen to write a v3 patch, g_assert_not_reached would be even
>> better than abort.
>>
>> It's impossible to tell why QEMU terminated after an assert without a
>> debugger,
>> whereas g_assert_not_reached clearly shows the location.
> 
> Maybe. I was mostly just following the pattern of existing
> stub functions. Should all instances of abort() be replaced?
> (g_assert_not_reached() is compile-time disablable, unlike
> abort()).

No, disabling asserts is almost always bad, but disabling unconditional
asserts is even worse.

Paolo
diff mbox

Patch

diff --git a/target-i386/kvm-stub.c b/target-i386/kvm-stub.c
index 11429c4..2b9e801 100644
--- a/target-i386/kvm-stub.c
+++ b/target-i386/kvm-stub.c
@@ -16,3 +16,15 @@  bool kvm_allows_irq0_override(void)
 {
     return 1;
 }
+
+#ifndef __OPTIMIZE__
+/* This function is only called inside conditionals which we
+ * rely on the compiler to optimize out when CONFIG_KVM is not
+ * defined.
+ */
+uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
+                                      uint32_t index, int reg)
+{
+    abort();
+}
+#endif