On Wed, 6 Aug 2014, Richard Biener wrote:

It's an ABI change for all modes (but not a SONAME change because the
old and new definitions will both be present in the .so).

Ugh.  That's going to be a nightmare to support.

Yes. And IMO a waste of effort compared to a clean .so.7 break, but well...

 Is there a configure
switch to change the default ABI used?  That is, on a legacy system
can I upgrate to 5.0 and get code that interoperates fine with code
built with 4.8?  (including ABI boundaries using the affected classes?
I suspect APIs with std::string passing are _very_ common, not
sure about std::list)

What's the failure mode the user will see when linking against a
4.8 compiled library with a std::string interface using 5.0?

In good cases, a linker error about a missing symbol (different mangling). In less good cases, a warning at compile-time about using a class marked with abi_tag in a class not marked with it. In worse cases (passing through void* for instance), a runtime crash.

And how do libraries with such an API avoid silently changing their
ABI dependent on the compiler used to compile them?  That is,
I suppose those need to change their SONAME dependent on
the compiler version used?!

Yes, just like a move to .so.7 would entail.

--
Marc Glisse

Reply via email to