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