Created attachment 13830 [details] compressed list of abi differences for tagged releases. Even though you use the pimpl idiom the library versions should increase according to because the interface of libabigail is changing. https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html This confuses some of our tooling which actually looks for cases where library interfaces change but the library soname does not. Of all packages, libabigail should be aware of its own API/ABI changes and recognize how not updating the library version can disable some of the few checks that ld.so does provide. For example from the tag libabigail-2.0 to the current trunk the difference is: $ g5/bin/abidiff libabigail-2.0/lib/libabigail.so.0.0.0 g5/lib/libabigail.so.0.0.0 Functions changes summary: 15 Removed (12 filtered out), 4 Changed (164 filtered out), 21 Added (3 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable 15 Removed functions: [D] 'function abigail::dwarf_reader::status abigail::dwarf_reader::operator&(abigail::dwarf_reader::status, abigail::dwarf_reader::status)' {_ZN7abigail12dwarf_readeranENS0_6statusES1_} [D] 'function abigail::dwarf_reader::status& abigail::dwarf_reader::operator&=(abigail::dwarf_reader::status&, abigail::dwarf_reader::status)' {_ZN7abigail12dwarf_readeraNERNS0_6statusES1_} [D] 'function abigail::dwarf_reader::status abigail::dwarf_reader::operator|(abigail::dwarf_reader::status, abigail::dwarf_reader::status)' {_ZN7abigail12dwarf_readerorENS0_6statusES1_} [D] 'function abigail::dwarf_reader::status& abigail::dwarf_reader::operator|=(abigail::dwarf_reader::status&, abigail::dwarf_reader::status)' {_ZN7abigail12dwarf_readeroRERNS0_6statusES1_} [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_and_add_corpus_to_group_from_elf(abigail::dwarf_reader::read_context&, abigail::ir::corpus_group&, abigail::dwarf_reader::status&)' {_ZN7abigail12dwarf_reader37read_and_add_corpus_to_group_from_elfERNS0_12read_contextERNS_2ir12corpus_groupERNS0_6statusE} [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(abigail::dwarf_reader::read_context&, abigail::dwarf_reader::status&)' {_ZN7abigail12dwarf_reader20read_corpus_from_elfERNS0_12read_contextERNS0_6statusE} [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(const std::string&, const std::vector<char**, std::allocator<char**> >&, abigail::ir::environment*, bool, abigail::dwarf_reader::status&)' {_ZN7abigail12dwarf_reader20read_corpus_from_elfERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorIPPcSaISB_EEPNS_2ir11environmentEbRNS0_6statusE} [D] 'function std::string abigail::dwarf_reader::status_to_diagnostic_string(abigail::dwarf_reader::status)' {_ZN7abigail12dwarf_reader27status_to_diagnostic_stringB5cxx11ENS0_6statusE} [D] 'function abigail::ir::type_base_sptr abigail::ir::look_through_no_op_qualified_type(const abigail::ir::type_base_sptr&)' {_ZN7abigail2ir33look_through_no_op_qualified_typeERKSt10shared_ptrINS0_9type_baseEE} [D] 'method bool abigail::suppr::type_suppression::insertion_range::eval_boundary(abigail::ir::class_decl_sptr, ssize_t&)' {_ZN7abigail5suppr16type_suppression15insertion_range13eval_boundaryESt10shared_ptrINS2_8boundaryEES3_INS_2ir10class_declEERl} [D] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::integer_boundary(int)' {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC2Ei, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC1Ei} [D] 'method int abigail::suppr::type_suppression::insertion_range::integer_boundary::operator int() const' {_ZNK7abigail5suppr16type_suppression15insertion_range16integer_boundarycviEv} [D] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::priv::priv(int)' {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC2Ei, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC1Ei} [D] 'method bool abigail::xml_writer::write_context::decl_name_is_emitted(const abigail::interned_string&) const' {_ZNK7abigail10xml_writer13write_context20decl_name_is_emittedERKNS_15interned_stringE} [D] 'method void abigail::xml_writer::write_context::record_decl_as_emitted(const abigail::ir::decl_base_sptr&) const' {_ZNK7abigail10xml_writer13write_context22record_decl_as_emittedERKSt10shared_ptrINS_2ir9decl_baseEE} 21 Added functions: [A] 'function void abigail::abigail_get_abixml_version(std::string&, std::string&)' {abigail_get_abixml_version} [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_and_add_corpus_to_group_from_elf(abigail::dwarf_reader::read_context&, abigail::ir::corpus_group&, abigail::elf_reader::status&)' {_ZN7abigail12dwarf_reader37read_and_add_corpus_to_group_from_elfERNS0_12read_contextERNS_2ir12corpus_groupERNS_10elf_reader6statusE} [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(abigail::dwarf_reader::read_context&, abigail::elf_reader::status&)' {_ZN7abigail12dwarf_reader20read_corpus_from_elfERNS0_12read_contextERNS_10elf_reader6statusE} [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(const std::string&, const std::vector<char**, std::allocator<char**> >&, abigail::ir::environment*, bool, abigail::elf_reader::status&)' {_ZN7abigail12dwarf_reader20read_corpus_from_elfERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorIPPcSaISB_EEPNS_2ir11environmentEbRNS_10elf_reader6statusE} [A] 'function abigail::elf_reader::status abigail::elf_reader::operator&(abigail::elf_reader::status, abigail::elf_reader::status)' {_ZN7abigail10elf_readeranENS0_6statusES1_} [A] 'function abigail::elf_reader::status& abigail::elf_reader::operator&=(abigail::elf_reader::status&, abigail::elf_reader::status)' {_ZN7abigail10elf_readeraNERNS0_6statusES1_} [A] 'function abigail::elf_reader::status abigail::elf_reader::operator|(abigail::elf_reader::status, abigail::elf_reader::status)' {_ZN7abigail10elf_readerorENS0_6statusES1_} [A] 'function abigail::elf_reader::status& abigail::elf_reader::operator|=(abigail::elf_reader::status&, abigail::elf_reader::status)' {_ZN7abigail10elf_readeroRERNS0_6statusES1_} [A] 'function std::string abigail::elf_reader::status_to_diagnostic_string(abigail::elf_reader::status)' {_ZN7abigail10elf_reader27status_to_diagnostic_stringB5cxx11ENS0_6statusE} [A] 'function abigail::ir::var_decl_sptr abigail::ir::get_last_data_member(const abigail::ir::class_or_union_sptr&)' {_ZN7abigail2ir20get_last_data_memberERKSt10shared_ptrINS0_14class_or_unionEE} [A] 'function bool abigail::ir::get_next_data_member_offset(const abigail::ir::class_or_union_sptr&, const abigail::ir::var_decl_sptr&, uint64_t&)' {_ZN7abigail2ir27get_next_data_member_offsetERKSt10shared_ptrINS0_14class_or_unionEERKS1_INS0_8var_declEERm} [A] 'function bool abigail::ir::is_non_canonicalized_type(const abigail::ir::type_base*)' {_ZN7abigail2ir25is_non_canonicalized_typeEPKNS0_9type_baseE} [A] 'function bool abigail::ir::is_non_canonicalized_type(const abigail::ir::type_base_sptr&)' {_ZN7abigail2ir25is_non_canonicalized_typeERKSt10shared_ptrINS0_9type_baseEE} [A] 'function abigail::ir::decl_base_sptr abigail::ir::strip_useless_const_qualification(const abigail::ir::qualified_type_def_sptr)' {_ZN7abigail2ir33strip_useless_const_qualificationESt10shared_ptrINS0_18qualified_type_defEE} [A] 'method bool abigail::suppr::type_suppression::insertion_range::boundary_value_is_end()' {_ZN7abigail5suppr16type_suppression15insertion_range21boundary_value_is_endEm} [A] 'method bool abigail::suppr::type_suppression::insertion_range::eval_boundary(abigail::ir::class_decl_sptr, uint64_t&)' {_ZN7abigail5suppr16type_suppression15insertion_range13eval_boundaryESt10shared_ptrINS2_8boundaryEES3_INS_2ir10class_declEERm} [A] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::integer_boundary(uint64_t)' {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC2Em, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC1Em} [A] 'method uint64_t abigail::suppr::type_suppression::insertion_range::integer_boundary::operator uint64_t() const' {_ZNK7abigail5suppr16type_suppression15insertion_range16integer_boundarycvmEv} [A] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::priv::priv(uint64_t)' {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC2Em, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC1Em} [A] 'function std::string abigail::tools_utils::get_abixml_version_string()' {_ZN7abigail11tools_utils25get_abixml_version_stringB5cxx11Ev} [A] 'method void abigail::xml_writer::write_context::record_decl_as_emitted(const abigail::ir::decl_base_sptr&)' {_ZN7abigail10xml_writer13write_context22record_decl_as_emittedERKSt10shared_ptrINS_2ir9decl_baseEE} 4 functions with some indirect sub-type change: [C] 'method abigail::ir::corpus::origin abigail::ir::corpus::get_origin() const' at abg-corpus.cc:855:1 has some indirect sub-type changes: return type changed: type size hasn't changed 1 enumerator insertion: 'abigail::ir::corpus::origin::CTF_ORIGIN' value '3' 1 enumerator change: 'abigail::ir::corpus::origin::LINUX_KERNEL_BINARY_ORIGIN' from value '3' to '4' at abg-corpus.h:44:1 [C] 'method void abigail::ir::corpus::set_origin(abigail::ir::corpus::origin)' at abg-corpus.cc:862:1 has some indirect sub-type changes: parameter 1 of type 'enum abigail::ir::corpus::origin' has sub-type changes: enum type 'enum abigail::ir::corpus::origin' changed at abg-corpus.h:44:1, as reported earlier [C] 'method int abigail::suppr::type_suppression::insertion_range::integer_boundary::as_integer() const' at abg-suppression.cc:1470:1 has some indirect sub-type changes: return type changed: entity changed from 'int' to compatible type 'typedef uint64_t' at stdint-uintn.h:27:1 type name changed from 'int' to 'unsigned long int' type size changed from 32 to 64 (in bits) [C] 'function void abigail::xml_writer::set_annotate(abigail::xml_writer::write_context&, bool)' at abg-writer.cc:2098:1 has some indirect sub-type changes: parameter 1 of type 'abigail::xml_writer::write_context&' has sub-type changes: in referenced type 'class abigail::xml_writer::write_context' at abg-writer.cc:143:1: type size hasn't changed 1 data member change: name of 'abigail::xml_writer::write_context::m_emitted_decls_map' changed to 'abigail::xml_writer::write_context::m_emitted_decls_set' at abg-writer.cc:171:1 This has not just this particular release every tagged release since 1.0 has had ABI changes. libabigail-1.0_to_libabigail-1.1.abidiff Functions changes summary: 3 Removed, 0 Changed, 12 Added (1 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable libabigail-1.1_to_libabigail-1.2.abidiff Functions changes summary: 5 Removed, 1 Changed (150 filtered out), 24 Added (6 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 18 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info libabigail-1.2_to_libabigail-1.3.abidiff Functions changes summary: 2 Removed, 7 Changed (295 filtered out), 48 Added (54 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info libabigail-1.3_to_libabigail-1.4.abidiff Functions changes summary: 0 Removed, 24 Changed (357 filtered out), 19 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable libabigail-1.4_to_libabigail-1.5.abidiff Functions changes summary: 0 Removed, 5 Changed (684 filtered out), 14 Added (11 filtered out) functions Variables changes summary: 1 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 11 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 5 Added variable symbols not referenced by debug info libabigail-1.5_to_libabigail-1.6.abidiff Functions changes summary: 18 Removed, 9 Changed (580 filtered out), 50 Added (111 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 2 Removed, 2 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info libabigail-1.6_to_libabigail-1.7.abidiff Functions changes summary: 635 Removed (6515 filtered out), 377 Changed (1061 filtered out), 807 Added (8698 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 1 Added variable Function symbols changes summary: 1673 Removed, 1207 Added function symbols not referenced by debug info Variable symbols changes summary: 674 Removed, 408 Added variable symbols not referenced by debug info libabigail-1.7_to_libabigail-1.8.abidiff Functions changes summary: 55 Removed (278 filtered out), 184 Changed (1679 filtered out), 126 Added (637 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 59 Removed, 85 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 11 Added variable symbols not referenced by debug info libabigail-1.8.1_to_libabigail-1.8.2.abidiff Functions changes summary: 5 Removed (41 filtered out), 3 Changed (1209 filtered out), 35 Added (601 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 11 Added variables Function symbols changes summary: 0 Removed, 4 Added function symbols not referenced by debug info Variable symbols changes summary: 1 Removed, 1 Added variable symbols not referenced by debug info libabigail-1.8.2_to_libabigail-2.0.abidiff Functions changes summary: 95 Removed (1155 filtered out), 61 Changed (2209 filtered out), 122 Added (2563 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 422 Removed, 197 Added function symbols not referenced by debug info Variable symbols changes summary: 249 Removed, 5 Added variable symbols not referenced by debug info libabigail-1.8_to_libabigail-1.8.1.abidiff Functions changes summary: 0 Removed (31 filtered out), 0 Changed (7 filtered out), 3 Added (38 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 2 Removed, 0 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 3 Added variable symbols not referenced by debug info libabigail-2.0_to_master.abidiff Functions changes summary: 15 Removed (12 filtered out), 4 Changed (164 filtered out), 21 Added (3 filtered out) functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
By compiling with -flto the library version changes seem less monumental because the LTO passes eliminate many of the intralibrary TU TU references. However the overall situation with changes in the API/ABI still are the same. ==> libabigail-1.0_to_libabigail-1.1.abidiff <== Functions changes summary: 3 Removed, 0 Changed, 12 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable ==> libabigail-1.1_to_libabigail-1.2.abidiff <== Functions changes summary: 3 Removed, 2 Changed (108 filtered out), 21 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 6 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info ==> libabigail-1.2_to_libabigail-1.3.abidiff <== Functions changes summary: 2 Removed, 8 Changed (222 filtered out), 47 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info ==> libabigail-1.3_to_libabigail-1.4.abidiff <== Functions changes summary: 0 Removed, 23 Changed (282 filtered out), 19 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable ==> libabigail-1.4_to_libabigail-1.5.abidiff <== Functions changes summary: 0 Removed, 3 Changed (349 filtered out), 14 Added functions Variables changes summary: 1 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 2 Added variable symbols not referenced by debug info ==> libabigail-1.5_to_libabigail-1.6.abidiff <== Functions changes summary: 12 Removed, 8 Changed (280 filtered out), 34 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable ==> libabigail-1.6_to_libabigail-1.7.abidiff <== Functions changes summary: 510 Removed, 289 Changed (712 filtered out), 625 Added functions Variables changes summary: 0 Removed, 0 Changed, 1 Added (1 filtered out) variables Function symbols changes summary: 107 Removed, 106 Added function symbols not referenced by debug info Variable symbols changes summary: 273 Removed, 138 Added variable symbols not referenced by debug info ==> libabigail-1.7_to_libabigail-1.8.abidiff <== Functions changes summary: 31 Removed, 183 Changed (589 filtered out), 105 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 39 Removed, 44 Added function symbols not referenced by debug info Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info ==> libabigail-1.8_to_libabigail-1.8.1.abidiff <== Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 1 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 1 Added variable symbol not referenced by debug info ==> libabigail-1.8.1_to_libabigail-1.8.2.abidiff <== Functions changes summary: 1 Removed, 3 Changed (440 filtered out), 28 Added functions Variables changes summary: 0 Removed (1 filtered out), 0 Changed, 11 Added variables ==> libabigail-1.8.2_to_libabigail-2.0.abidiff <== Functions changes summary: 22 Removed, 57 Changed (819 filtered out), 78 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 11 Removed, 28 Added function symbols not referenced by debug info Variable symbols changes summary: 83 Removed, 4 Added variable symbols not referenced by debug info ==> libabigail-2.0_to_master.abidiff <== Functions changes summary: 12 Removed, 4 Changed (35 filtered out), 19 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Created attachment 13833 [details] patch to add library version This is a patch for libabigail-2.0 which sets the library version.
Created attachment 13834 [details] 0001-Increment-Library-version.patch Update library version in 2.0 branch.
Created attachment 13835 [details] 0001-Increment-Library-version.patch 2.1 Patch for master which sets the library version. Apply this now.
Created attachment 13836 [details] 0002-Increment-library-version-for-2.1-release.patch This is the patch that you should apply just before you release version 2.1
fixed in 2.1