GCC version bikeshedding

Marc Glisse marc.glisse@inria.fr
Wed Aug 6 10:35:00 GMT 2014


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



More information about the Gcc mailing list