On Sun, Jan 23, 2022 at 4:58 AM Vitaly Zaitsev via devel <devel@lists.fedoraproject.org> wrote:
On 22/01/2022 17:22, Jakub Jelinek wrote:
> The long double change is an ABI change, so this is kind of expected.

abidiff automatic test found no ABI changes between 8.0 and 8.1.

 I think you might be missing the point.

The long double format changed (on ppc64le only?) between gcc-11 and gcc-12.

Compiling something that uses fmt (e.g. ceph) with gcc-12 now produces references (calls) to: 
  int fmt::v8::detail::format_float<__ieee128>(__ieee128, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&)
and
  int fmt::v8::detail::snprintf_float<__ieee128>(__ieee128, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&)

Those functions are not in the libfmt.so that was last successfully built with gcc-11.

That's because when fmt was compiled with gcc-11, the symbols were:
  int fmt::v8::detail::format_float<__float128>(__float128, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&)
and
  int fmt::v8::detail::snprintf_float<__float128>(__float128, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&)

That is an ABI change, no matter what abidiff might be telling you. (It's a change we knew was coming though.)

And going forward, anything (e.g. ceph) compiled with gcc-11 is not going to work with fmt and libfmt.so compiled with gcc-12 because of the ABI change.

If you already understood all this then I apologize for telling you something you already know. ;-)

Regards

--

Kaleb