On Sun, Jan 23, 2022 at 4:58 AM Vitaly Zaitsev via devel <
devel(a)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