V Thu, Mar 03, 2022 at 07:44:45AM -0600, Richard Shaw napsal(a):
In this instance, it's not clear to me whether sub-type changes
are ABI
breaking or not...
$ fedabipkgdiff --from fc37 codec2-1.0.3-1.fc37.x86_64.rpm
Comparing the ABI of binaries between codec2-1.0.1-2.fc36.x86_64.rpm and
codec2-1.0.3-1.fc37.x86_64.rpm:
================ changes of 'libcodec2.so.1.0'===============
Functions changes summary: 0 Removed, 1 Changed, 5 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
5 Added functions:
[A] 'function void fdmdv_48_to_8(float*, float*, int)'
{fdmdv_48_to_8}
[A] 'function void fdmdv_48_to_8_short(short int*, short int*, int)'
{fdmdv_48_to_8_short}
[A] 'function void fdmdv_8_to_48(float*, float*, int)'
{fdmdv_8_to_48}
[A] 'function void fdmdv_8_to_48_short(short int*, short int*, int)'
{fdmdv_8_to_48_short}
[A] 'function void mbest_precompute_weight(float*, float*, int, int)'
{mbest_precompute_weight}
1 function with some indirect sub-type change:
[C] 'function void mbest_search(const float*, float*, float*, int, int,
MBEST*, int*)' at mbest.c:123:1 has some indirect sub-type changes:
parameter 3 of type 'float*' changed:
entity changed from 'float*' to 'int'
type size changed from 64 to 32 (in bits)
parameter 5 of type 'int' changed:
entity changed from 'int' to 'MBEST*'
type size changed from 32 to 64 (in bits)
parameter 6 of type 'MBEST*' changed:
in pointed to type 'struct MBEST':
entity changed from 'struct MBEST' to 'int'
type size changed from 128 to 32 (in bits)
parameter 7 of type 'int*' was removed
================ end of changes of 'libcodec2.so.1.0'===============
Do I need to rebuild deps or not?
I have no idea what "indirect sub-type" means. Maybe it means that the
function is called indirectly by other functions.
If you look at the header files, there is no mbest_search() declaration. Hence
mbest_search() cannot be part of public API. Therefore I believe you don't
need to rebuild other packages because none of them should call it.
Instead you could recommend upstream to hide that symbol from a symbol table
using an linker script or a GCC-specific function attribute
visibility("hidden"). That way nobody will be able to call it and various
static scanners like the abidiff won't trip over it. As a reasult it would
disappear from this output:
$ nm -D /usr/lib64/libcodec2.so |grep mbest_search
0000000000024790 T mbest_search
0000000000024860 T mbest_search450
-- Petr