On Sun, Nov 19, 2023 at 1:23 AM Michael S. Tsirkin <m...@redhat.com> wrote:
>
> On Sat, Nov 18, 2023 at 10:25:31AM -0800, Daniel Hoffman wrote:
> > `kvm_enabled()` is compiled down to `0` and short-circuit logic is
> > used to remmove references to undefined symbols at the compile stage.
> > Some build configurations with some compilers don't attempt to
> > simplify this logic down in some cases (the pattern appears to be
> > that the literal false must be the first term) and this was causing
> > some builds to emit references to undefined symbols.
> >
> > Signed-off-by: Daniel Hoffman <dhoff...@gmail.com>
>
> Could we add a bit more detail here? Will help make sure
> this does not break again in the future.

The configuration script was ran as such:  ../configure
--without-default-features --target-list=x86_64-softmmu,i386-softmmu
--enable-debug --enable-tcg-interpreter --enable-debug-tcg
--enable-debug-mutex

I'm pretty sure the only relevant flags here are
--without-default-features, --target-list including x86_64-softmmu and
--enable-debug

The only error I see is this: [...]/hw/i386/x86.c:422:(.text+0x1004):
undefined reference to `kvm_hv_vpindex_settable' (the other
kvm_enabled() was moved for the sake of consistency). My compiler is
clang (16.0.6).

I haven't looked into the heuristics or logic for how the compile-time
short-circuit logic works, but I assumed only the first parameter is
"guaranteed" to be checked for a literal false (guaranteed is in
quotes because that's just how clang works, not because it's a feature
of the language IIRC).

This pattern relies on somes subtle behavior with the compiler, so my
suggestion going forward would be to not rely on code optimizations
removing undefined references based on short-circuit logic (instead
have some configuration macro defined that disables all relevant
code). I'm a new contributor, so I submitted the minimum to make it
work on my machine.

If you have any other questions, please let me know.

Thanks!

Reply via email to