On Thu, Jan 08, 2026 at 04:15:38PM +0100, Paolo Bonzini wrote:
> On 1/8/26 15:14, Daniel P. Berrangé wrote:
> > Historically it was required to ask for libatomic explicitly with
> > -latomic, but with GCC >= 16 apps will get linked to libatomic
> > whether they ask for it or not.
> > 
> > This invalidates QEMU's check for atomic op support for int128
> > which explicitly does NOT want to use the libatomic impl. As a
> > result with GCC >= 16, QEMU is now getting linked to libatomic
> > and is activating CONFIG_ATOMIC128. This in turn exposes a bug
> > in GCC's libatomic.a static buld which is incompatible with the
> > use of -static-pie leading to build failures like:
> > 
> >      /usr/bin/ld: 
> > /usr/lib/gcc/x86_64-redhat-linux/16/libatomic.a(cas_16_.o): relocation 
> > R_X86_64_32 against hidden symbol `libat_compare_exchange_16_i1' can not be 
> > used when making a PIE object
> >      /usr/bin/ld: failed to set dynamic section sizes: bad value
> > collect2: error: ld returned 1 exit status
> > 
> > The newly introduced -fno-link-libatomic flag can be used to
> > disable the new automatic linking of libatomic. Setting this in
> > qemu_isa_flags early on ensures that the check for CONFIG_ATOMIC128
> > still works correctly.
> > 
> > Signed-off-by: Daniel P. Berrangé <[email protected]>
> > ---
> >   meson.build | 9 +++++++++
> >   1 file changed, 9 insertions(+)
> > 
> > diff --git a/meson.build b/meson.build
> > index db87358d62..56df08c10e 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -445,6 +445,15 @@ if host_arch in ['i386', 'x86_64']
> >     endif
> >   endif
> > +# GCC >= 16 automatically tries to link libatomic for all programs.
> > +#
> > +# QEMU explicitly does NOT want to use libatomic for int128 types.
> > +#
> > +# Later checks assume we won't get atomic ops for int128 without
> > +# explicitly asking for -latomic, so we must disable GCC's new
> > +# automatic linking with the new -fno-link-libatomic flag
> > +qemu_isa_flags += cc.get_supported_arguments('-fno-link-libatomic')
> > +
> >   qemu_common_flags = qemu_isa_flags + qemu_common_flags
> >   if get_option('prefer_static')
> 
> Great. :/  Is there a bug reported for the -static-pie issue?

GCC maintainers tell me that -static-pie is unsupported for anything
except libgcc.a / libstdc++.a:

  https://bugzilla.redhat.com/show_bug.cgi?id=2427891#c10


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to