From: Kevin Wolf <kwolf@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@linaro.org>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Michael Tokarev" <mjt@tls.msk.ru>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Marcelo Tosatti" <mtosatti@redhat.com>
Subject: Re: [PATCH v3] target/i386: Restrict system-specific features from user emulation
Date: Mon, 11 Sep 2023 18:38:50 +0200 [thread overview]
Message-ID: <ZP9Cmqgy2H3ypDf3@redhat.com> (raw)
In-Reply-To: <20230911142729.25548-1-philmd@linaro.org>
Am 11.09.2023 um 16:27 hat Philippe Mathieu-Daudé geschrieben:
> Since commits 3adce820cf ("target/i386: Remove unused KVM
> stubs") and ef1cf6890f ("target/i386: Allow elision of
> kvm_hv_vpindex_settable()"), when building on a x86 host
> configured as:
>
> $ ./configure --cc=clang \
> --target-list=x86_64-linux-user,x86_64-softmmu \
> --enable-debug
>
> we get:
>
> [71/71] Linking target qemu-x86_64
> FAILED: qemu-x86_64
> /usr/bin/ld: libqemu-x86_64-linux-user.fa.p/target_i386_cpu.c.o: in function `cpu_x86_cpuid':
> cpu.c:(.text+0x1374): undefined reference to `kvm_arch_get_supported_cpuid'
> /usr/bin/ld: libqemu-x86_64-linux-user.fa.p/target_i386_cpu.c.o: in function `x86_cpu_filter_features':
> cpu.c:(.text+0x81c2): undefined reference to `kvm_arch_get_supported_cpuid'
> /usr/bin/ld: cpu.c:(.text+0x81da): undefined reference to `kvm_arch_get_supported_cpuid'
> /usr/bin/ld: cpu.c:(.text+0x81f2): undefined reference to `kvm_arch_get_supported_cpuid'
> /usr/bin/ld: cpu.c:(.text+0x820a): undefined reference to `kvm_arch_get_supported_cpuid'
> /usr/bin/ld: libqemu-x86_64-linux-user.fa.p/target_i386_cpu.c.o:cpu.c:(.text+0x8225): more undefined references to `kvm_arch_get_supported_cpuid' follow
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> ninja: build stopped: subcommand failed.
>
> libqemu-x86_64-linux-user.fa is user emulation specific, so
> having system emulation code called there is dubious.
>
> '--enable-debug' disables optimizations (CFLAGS=-O0).
>
> While at this (un)optimization level GCC eliminate the
> following dead code (CPP output of mentioned build):
>
> static void x86_cpu_get_supported_cpuid(uint32_t func, uint32_t index,
> uint32_t *eax, uint32_t *ebx,
> uint32_t *ecx, uint32_t *edx)
> {
> if ((0)) {
> *eax = kvm_arch_get_supported_cpuid(kvm_state, func, index, R_EAX);
> *ebx = kvm_arch_get_supported_cpuid(kvm_state, func, index, R_EBX);
> *ecx = kvm_arch_get_supported_cpuid(kvm_state, func, index, R_ECX);
> *edx = kvm_arch_get_supported_cpuid(kvm_state, func, index, R_EDX);
> } else if (0) {
> *eax = 0;
> *ebx = 0;
> *ecx = 0;
> *edx = 0;
> } else {
> *eax = 0;
> *ebx = 0;
> *ecx = 0;
> *edx = 0;
> }
> }
>
> Clang does not.
>
> Instead of trying to deal with compiler specific checks around
> __OPTIMIZE__ (see commit 2140cfa51d "i386: Fix build by providing
> stub kvm_arch_get_supported_cpuid()"), simply restrict code
> belonging to system emulation, easing user emulation linking.
>
> Reported-by: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Can we make the function declarations in the header file for the
functions without stubs conditional on !CONFIG_USER_ONLY, too, so that
trying to call them would already fail during compilation (and also with
-O2), not only when linking without optimisations?
Kevin
prev parent reply other threads:[~2023-09-11 20:47 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-11 14:27 [PATCH v3] target/i386: Restrict system-specific features from user emulation Philippe Mathieu-Daudé
2023-09-11 14:38 ` Michael Tokarev
2023-09-11 16:38 ` Kevin Wolf [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZP9Cmqgy2H3ypDf3@redhat.com \
--to=kwolf@redhat.com \
--cc=berrange@redhat.com \
--cc=dbarboza@ventanamicro.com \
--cc=kvm@vger.kernel.org \
--cc=mjt@tls.msk.ru \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.