Bug#873362: coinor-libcoinutils3v5: unannounced ABI change without SONAME change?

James Cowgill jcowgill at debian.org
Mon Aug 28 15:56:58 UTC 2017


Hi,

On 28/08/17 13:58, Mattia Rizzolo wrote:
> On Sun, 27 Aug 2017, 8:37 p.m. Anton Gladky <gladk at debian.org> wrote:
> 
>> Hi Mattia,
>>
>> thanks for the tip! I have recompiled both libs with the same
>> current gcc-7.2. And it looks like there are no dropped symbols
>> (see file old-gcc7_new-gcc7.diff in attachment).
>>
>> But if I compare new so-file with the one shipped with Stretch
>> (compiled with gcc6)
>> the diff contains some missing symbols (see file  old-gcc6_new-gcc7.diff).
>>
> 
> Oh!  That's interesting...
> 
> What is the best practice for such kind of libs? Provide symbol-files?
> 
> Not sure.  I'd suggest to try to ask to -mentors@ or -devel@, or perhaps to
> James Cowgirl (CCed now) who helped with gcc-7 related stuff :)

These appear to be the 4 symbols which have disappeared after compiling
with GCC-7:

 469: 00000000000cce10   430 FUNC    WEAK   DEFAULT   12 _ZNK16CoinPackedMatrix14getVectorFirstEi
 614: 00000000000ccfc0   437 FUNC    WEAK   DEFAULT   12 _ZNK16CoinPackedMatrix13getVectorLastEi
1119: 00000000000fc710   120 FUNC    WEAK   DEFAULT   12 _Z26presolve_delete_from_majoriiPKiPiS1_Pd
1198: 0000000000043f80   566 FUNC    WEAK   DEFAULT   12 _Z9CoinFillNItEvPT_iS0_

As you can see all of these symbols are declared as weak. GCC will often
do this for inline functions which it has decided not to inline for some
reason. To satisfy the ODR, GCC will export all these symbols as weak
from any object (including executables) which use them so that the same
function is used throughout the entire application. Because consumers
are supposed to generate their own versions of these functions, they do
not form a part of the ABI and can safely be removed. In this case,
GCC-7 simply decided that these functions should be inlined and
therefore didn't generate symbols for them.

I think it's more likely these ABI issues are caused by changes in the
class layout (but I have not investigated this much). You can see a few
cases of new fields being added if you diff the headers from the old and
new packages. Generally, any issues with symbols would be found by the
dynamic linker before an application has a chance to segfault.

Thanks,
James

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.alioth.debian.org/pipermail/debian-science-maintainers/attachments/20170828/39e4674f/attachment.sig>


More information about the debian-science-maintainers mailing list