12020-12-01 Dodji Seketeli <dodji@redhat.com> 2 3 Add check-self-compare to release regression testing 4 * Makefile.am: Make 'make tarball-and-all' run the 5 'check-self-compare' target as part of the release process. 6 72020-12-01 Dodji Seketeli <dodji@redhat.com> 8 9 configure: add --enable-rpm415 option 10 * configure: Introduce the --{en, dis}able-rpm415 option. 11 122020-11-30 Dodji Seketeli <dodji@redhat.com> 13 14 dwarf-reader: Bug 26908 - don't crash on empty DW_TAG_partial_unit 15 * src/abg-dwarf-reader.cc (die_has_children): Define new static 16 function. 17 (read_context::build_die_parent_relations_under): Do not try to 18 instantiate an imported_unit_point type for an imported unit with 19 no children node. 20 (imported_unit_point::imported_unit_point): Assert that the 21 imported die has a sub-tree. 22 (imported_unit_point::imported_unit_point): Remove useless spaces. 23 242020-11-27 Dodji Seketeli <dodji@redhat.com> 25 26 reader: Fix off-by-one error in assert 27 * src/abg-reader.cc (build_subrange_type): Fix off-by-one error. 28 292020-11-27 Dodji Seketeli <dodji@redhat.com> 30 31 writer: fix off-by-one error in assertion 32 * src/abg-writer.cc (write_array_subrange_type): Fix off-by-one 33 error in assertion. 34 * src/abg-dwarf-reader.cc (build_subrange_type): Assert the length 35 of the array complies with its bounds. 36 372020-11-27 Dodji Seketeli <dodji@redhat.com> 38 39 abipkgdiff: make --self-check to fail on any change against own ABIXML 40 * tools/abipkgdiff.cc (compare_to_self): Report *any* ABI change. 41 Not just the "net" changes. 42 432020-11-26 Dodji Seketeli <dodji@redhat.com> 44 45 abidw: make --abidiff report any change against own ABIXML 46 * tools/abidw.cc (load_corpus_and_write_abixml): Emit an error 47 when comparing the binary to its ABIXML representation yields any 48 change. 49 502020-11-27 Dodji Seketeli <dodji@redhat.com> 51 52 dwarf-reader: Avoid having several functions with the same symbol 53 * src/abg-dwarf-reader.cc 54 (read_context::symbol_already_belongs_to_a_function): Define new 55 member function. 56 (read_context::fixup_functions_with_no_symbols): Use the new 57 symbol_already_belongs_to_a_function function to avoid setting a 58 symbol that already belongs to a function. 59 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. 60 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 61 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 62 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 63 Likewise. 64 652020-11-27 Dodji Seketeli <dodji@redhat.com> 66 67 reader: Don't lose anonymous-ness of decl-only classes 68 * src/abg-reader.cc (build_class_decl): Set the is-anonymous flag 69 when reading a decl-only class. 70 712020-11-27 Dodji Seketeli <dodji@redhat.com> 72 73 ir: Introduce internal pretty representation for anonymous classes 74 * include/abg-fwd.h (get_class_or_union_flat_representation): 75 Introduce an "internal" parameter. 76 * src/abg-ir.cc (get_class_or_union_flat_representation): 77 Introduce an "internal" parameter. In the flat representation of 78 a class for internal purposes, always use the prefix "class" even 79 if this is a struct. 80 (get_type_name): To build an internal name for a 81 reference or pointer to an anonymous type, consider the namespace 82 name of said type. 83 (equals): In the overload for decl_base, take the namespace name 84 of anonymous decls into account when comparing them. 85 ({var_decl, union_decl}::get_pretty_representation): Adjust calls 86 to get_class_or_union_flat_representation to pass a proper 87 "internal" argument. 88 * src/abg-default-reporter.cc (default_reporter::report): Adjust 89 the call to get_class_or_union_flat_representation to pass an 90 "internal" argument set to 'false'. 91 * tests/data/test-annotate/libtest23.so.abi: Adjust. 92 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 93 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 94 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 95 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 96 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 97 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 98 * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 99 1002020-11-26 Dodji Seketeli <dodji@redhat.com> 101 102 writer: Emit definitions of declarations when they are present 103 * src/abg-writer.cc (write_class_decl, write_union_decl): Get the 104 definition of the declaration if it exists and emit that. 105 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 106 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 107 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 108 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 109 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 110 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 111 1122020-11-26 Dodji Seketeli <dodji@redhat.com> 113 114 Bug 26780 - Fix array subrange bounds (de)serialization 115 * src/abg-reader.cc (build_subrange_type): Read lower-bound 116 attribute if present. Then try to read upper-bound attribute as 117 well. If this is not an infinite subrange assert that the length 118 must be equal to the difference between the bounds. 119 * src/abg-writer.cc (write_array_subrange_type): Write the 120 lower-bound if it's present and not zero. In that case, write the 121 upper-bound as well. 122 * tests/data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.rpm: Add new 123 binary test input. 124 * tests/data/test-diff-pkg/hdf5-debuginfo-1.10.6-2.fc33.x86_64.rpm: 125 Likewise. 126 * tests/data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.self-check-report-0.txt: 127 Add new reference output. 128 * tests/data/Makefile.am: Add the new test material above to 129 source distribution. 130 * tests/test-diff-pkg.cc (in_out_specs): Add the binary test input 131 to the set of --self-check tests. 132 1332020-11-26 Dodji Seketeli <dodji@redhat.com> 134 135 reader: Read array subrange length into an uint64_t 136 * src/abg-reader.cc (build_subrange_type): Change the type of 137 length to uint64_t and read it using strtoull. 138 1392020-11-25 Dodji Seketeli <dodji@redhat.com> 140 141 abipkgdiff: Avoid uncertainty when sorting worker tasks 142 * elf_size_is_greater: Take the name of the binaries into account 143 when their size is equal. Also, assert that all comparison tasks 144 have compared binaries. 145 1462020-11-25 Dodji Seketeli <dodji@redhat.com> 147 148 tests/data/test-fedabipkgdiff: Update reference output 149 * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: 150 Adjust. 151 1522020-11-24 Matthias Maennich <maennich@google.com> 153 154 abipkgdiff: minor cleanups 155 * tools/abipkgdiff.cc: remove unused using statements 156 (self_compare_task): remove shadowing members and delegate 157 construction to base class. 158 1592020-11-23 Dodji Seketeli <dodji@redhat.com> 160 161 dwarf-reader: support artificially generated translation units 162 * configure.ac: Detect if we are running on RPM >= 4.15. If yes, 163 then define the preprocessor macro RPM_4_15. If that macro is 164 defined then test-diff-pkg.cc can support RPMs from Fedora >= 31 165 as those are compressed with zstd. Earlier RPM versions don't 166 support that compression scheme. 167 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 168 Suffix the offset of the translation unit to its name when that 169 name is "<artificial>". 170 * tests/data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.rpm: 171 New binary test input. 172 * tests/data/test-diff-pkg/mesa-libGLU-debuginfo-9.0.1-3.fc33.x86_64.rpm: Likewise. 173 * tests/data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.self-check-report-0.txt: 174 New reference output for the binary test input above. 175 * tests/data/Makefile.am: Add the new test inputs above to source 176 distribution. 177 * tests/test-diff-pkg.cc (in_out_specs): Add the binary test 178 inputs above to source distribution if we are running on an RPM 179 version >= 4.15. 180 1812020-11-20 Dodji Seketeli <dodji@redhat.com> 182 183 fedabipkgdiff: make --self-compare use abipkgdiff --self-check 184 * tools/fedabipkgdiff (abipkgdiff): If the user provides the 185 --self-compare options, generate the abipkgdiff command by using 186 the --self-check option. 187 (run_abipkgdiff): Each return value of the abipkgidiff runs can be 188 negative because they are unsigned values in essence, but as 189 python doesn't seem to have a unsigned integer type. So we need 190 to consider the max of the absolute value of the return codes 191 here. 192 * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: 193 Adjust. 194 1952020-11-19 Dodji Seketeli <dodji@redhat.com> 196 197 abipkgdiff: Add a new --self-check option 198 * tools/abipkgdiff.cc (options::self_check): Define new data 199 member. 200 (options::options): Initialize it. 201 (display_usage): Add help string for the --self-check option. 202 (parse_command): Parse the new --self-check option. 203 (extract_deb): Add missing newline. 204 (compare): Remove useless white space. 205 (compare_to_self, self_compare_prepared_userspace_package) 206 (self_compare_prepared_package, compare_to_self): Add new static 207 functions. 208 (class self_compare_task): Add new class. 209 (prepare_package): Add a new overload that takes just one 210 parameter. 211 (elf_size_is_greater): Don't crash if the args are empty. 212 (main): If the --self-check option is given, make sure we have 213 just one package in argument. Use the new compare_to_self 214 function to handle the --self-check option. 215 * doc/manuals/abipkgdiff.rst: Add documentation for the new 216 --self-check option. 217 2182020-11-16 Dodji Seketeli <dodji@redhat.com> 219 220 Bug 26769 - Fix missing types in abixml output 221 * include/abg-corpus.h (corpus::{record_canonical_type, 222 lookup_canonical_type}): Remove function declarations. 223 * src/abg-corpus-priv.h (corpus::priv::canonical_types_): Remove 224 data member. 225 * src/abg-corpus.cc (corpus::{record_canonical_type, 226 lookup_canonical_type}): Remove functions. 227 * src/abg-ir.cc (type_eligible_for_odr_based_comparison): Remove 228 static function. 229 (type_base::get_canonical_type_for): Don't perform the ODR-based 230 optimization for C++ anymore. 231 * src/abg-reader.cc 232 (read_context&::maybe_add_var_to_exported_decls): Don't add a 233 variable that hasn't been added to its scope. Otherwise, it means 234 we added a variable that wasn't yet properly constructed. Also 235 add a new overload for var_decl_sptr&. 236 (build_var_decl): Do not add the var to its the set of exported 237 declaration before we are sure it has been fully constructed and 238 added to the scope it belongs. 239 (build_class_decl): Only add *static* data members to the list of 240 exported declarations. 241 (handle_var_decl): A var decl seen here is a global variable 242 declaration. Add it to the list of exported declarations. 243 * src/abg-writer.cc (write_context::decl_only_type_is_emitted): 244 Constify parameter. 245 (write_translation_unit): Do not forget to emit referenced types 246 that were maybe not canonicalized. Also, avoid using noop_deleter 247 when it's not necessary. 248 (write_namespace_decl): Do not forget to emit canonicalized types 249 that are present in namespaces other than the global namespace. 250 * tests/runtestslowselfcompare.sh.in: New test that compares 251 libabigail.so against its own ABIXML representation. 252 * tests/Makefile.am: Add the new test runtestslowselfcompare.sh to 253 source distribution. This test is too slow to be run during the 254 course of 'make check'. It takes more than 5 minutes on my slow 255 box here. Rather, it can be run using 'make check-self-compare'. 256 I plan to run this before releases now. 257 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. 258 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 259 * tests/data/test-annotate/test0.abi: Likewise. 260 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 261 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 262 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 263 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 264 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 265 Likewise. 266 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 267 Likewise. 268 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 269 Likewise. 270 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 271 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 272 Likewise. 273 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 274 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 275 Likewise. 276 * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. 277 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 278 Likewise. 279 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 280 * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 281 * tests/data/test-read-dwarf/test0.abi: Likewise. 282 * tests/data/test-read-dwarf/test0.hash.abi: Likewise. 283 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 284 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 285 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 286 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 287 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 288 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 289 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 290 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 291 Likewise. 292 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 293 Likewise. 294 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 295 Likewise. 296 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 297 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 298 Likewise. 299 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 300 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 301 Likewise. 302 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 303 Likewise. 304 * tests/data/test-read-write/test6.xml: Likewise. 305 3062020-11-13 Dodji Seketeli <dodji@redhat.com> 307 308 Make sure to canonicalize all types but decl-only classes 309 * include/abg-fwd.h (is_declaration_only_class_or_union_type): 310 Declare new ... 311 * src/abg-ir.cc (is_declaration_only_class_or_union_type): 312 ... function. 313 (clone_array): Add the cloned array subrange to 314 its scope so that it can later be canonicalized. 315 (synthesize_type_from_translation_unit) 316 (synthesize_function_type_from_translation_unit): Canonicalize the 317 synthesized types. 318 (hash_as_canonical_type_or_constant): Ensure that all types are 319 canonicalized. 320 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Remove 321 useless overload. 322 (build_ir_node_for_variadic_parameter_type) 323 (schedule_array_tree_for_late_canonicalization): Define new static 324 functions. 325 (maybe_strip_qualification): Schedule type canonicalization for 326 types cloned prior to editing. 327 (build_function_type): Use the new 328 build_ir_node_for_variadic_parameter_type. It takes care of 329 canonicalizing variadic parameter types. 330 (build_function_decl): Canonicalize the function type that is 331 created here. 332 (build_ir_node_from_die): Use the overload of 333 maybe_canonicalize_type which canonicalizes class_or_union nodes 334 directly, rather than the one which handles DIE offsets. The 335 latter was used as an optimization to reduce the size of the array 336 of types scheduled for canonicalization, as DIE offsets take less 337 space than pointers to IR types. Now that we have DIE 338 de-duplication, my bet is that we can do away with the former. 339 And that also ensures that we miss no type for canonicalization 340 purposes. 341 * src/abg-reader.cc (build_array_type_def): Canonicalize the 342 subrange types of the array. 343 (build_type): Canonicalize all types. 344 * tests/data/test-annotate/libtest23.so.abi: Adjust. 345 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 346 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 347 * tests/data/test-annotate/test0.abi: Likewise. 348 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 349 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 350 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 351 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 352 Likewise. 353 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 354 Likewise. 355 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 356 Likewise. 357 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 358 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 359 Likewise. 360 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 361 Likewise. 362 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: 363 Likewise. 364 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 365 Likewise. 366 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 367 Likewise. 368 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 369 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 370 Likewise. 371 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 372 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 373 Likewise. 374 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 375 * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 376 * tests/data/test-read-dwarf/test0.abi: Likewise. 377 * tests/data/test-read-dwarf/test0.hash.abi: Likewise. 378 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 379 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 380 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 381 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 382 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 383 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 384 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 385 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 386 Likewise. 387 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 388 Likewise. 389 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 390 Likewise. 391 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 392 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 393 Likewise. 394 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 395 3962020-11-13 Dodji Seketeli <dodji@redhat.com> 397 398 ir: Add equality op to array_type_def::subrange_type::bound_value 399 * include/abg-ir.h 400 (array_type_def::subrange_type::bound_value::operator==): Declare 401 new ... 402 * src/abg-ir.cc 403 (array_type_def::subrange_type::bound_value::operator==): 404 ... equality operator. 405 4062020-11-12 Dodji Seketeli <dodji@redhat.com> 407 408 writer: Sort decls and fix topological sorting for types 409 * include/abg-ir.h (scope_decl::get_sorted_member_decls): Declare 410 new member function. 411 * src/abg-ir.cc (struct decl_topo_comp): New sorting functor. 412 (type_topo_comp::operator()): Re-use the decl_topo_comp to sort 413 type declarations. 414 (scope_decl::priv::sorted_members_): Add new data member. 415 (scope_decl::get_sorted_member_decls): Define new member function. 416 * src/abg-writer.cc (write_translation_unit): Use the new 417 scope_decl::get_sorted_member_decls. 418 * tests/data/test-annotate/libtest23.so.abi: Adjust. 419 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 420 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 421 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 422 Likewise. 423 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 424 Likewise. 425 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 426 Likewise. 427 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 428 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 429 * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 430 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 431 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 432 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 433 Likewise. 434 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 435 Likewise. 436 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 437 Likewise. 438 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 439 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 440 Likewise. 441 * tests/data/test-read-write/test2.xml: Likewise. 442 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 443 Likewise. 444 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 445 Likewise. 446 4472020-10-27 Dodji Seketeli <dodji@redhat.com> 448 449 Bug PR26739 - Handle qualified typedef array types 450 * include/abg-fwd.h (is_typedef_of_array, clone_array) 451 (clone_typedef, clone_qualified_type, clone_array_tree): Declare 452 new functions. 453 (peel_qualified_or_typedef_type): Declare new overload. 454 (is_array_of_qualified_element): Constify the parameter. 455 * include/abg-ir.h ({qualified_type, 456 typedef}_def::set_underlying_type): Add new member functions. 457 (array_type_def::subrange_type::subrange_type): Make constify the 458 reference to the underlying type parameter. 459 * src/abg-ir.cc (is_array_of_qualified_element): Constify the 460 parameter. 461 (peel_qualified_or_typedef_type): Define new 462 overload for type_base_sptr. 463 (clone_typedef_array_qualified_type): Define static function. 464 (clone_array clone_typedef, clone_qualified_type) 465 (clone_array_tree, is_typedef_of_array): Define new functions. 466 (qualified_type_def::get_underlying_type): Rename the return type 467 shared_ptr<type_base> into type_base_sptr. 468 ({typedef, qualified_type}_def::set_underlying_type): Define new 469 member function. 470 (array_type_def::subrange_type::priv::priv): Initialize the 471 'infinite_' data member. 472 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Handle 473 qualified typedef of arrays. Merge this with the handling of 474 qualified arrays. Note that before editing the elements of the 475 array to make the array (or typedef) qualifier apply to the 476 element the sub-tree is cloned to make its type nodes be 477 'un-shared'. This prevents us from editing type nodes that are 478 shared by other type expressions. 479 * tests/data/test-diff-filter/test-PR26739-report-0.txt: New 480 reference test output. 481 * tests/data/test-diff-filter/test-PR26739-2-report-0.txt: Likewise. 482 * tests/data/test-diff-filter/test-PR26739-v{0,1}.c: Source code 483 of new binary test input. 484 * tests/data/test-diff-filter/test-PR26739-2-v{0,1}.c: Likewise. 485 * tests/data/test-diff-filter/test-PR26739-v{0,1}.o: New binary 486 test inputs. 487 * tests/data/test-diff-filter/test-PR26739-2-v{0,1}.o: Likewise. 488 * tests/data/Makefile.am: Add the new test material above to 489 source distribution. 490 * tests/test-diff-filter.cc (in_out_specs): Add the test inputs 491 above to this harness. 492 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 493 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 494 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 495 Likewise. 496 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 497 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 498 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 499 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 500 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 501 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 502 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 503 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 504 5052020-11-03 Dodji Seketeli <dodji@redhat.com> 506 507 Update test-libandroid.so.abi 508 * tests/data/test-read-dwarf/test-libandroid.so.abi: Update. 509 5102020-10-29 Matthias Maennich <maennich@google.com> 511 512 dwarf-reader: Ignore zero length location expressions from DW_AT_location 513 * src/abg-dwarf-reader.cc (die_location_expr): Ignore zero 514 length location expressions. 515 * tests/data/Makefile.am: Add new test files. 516 * tests/data/test-read-dwarf/test-libandroid.so: New test file. 517 * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 518 * tests/test-read-dwarf.cc: Add new test case. 519 Reported-by: Dan Albert <danalbert@google.com> 520 Reviewed-by: Giuliano Procida <gprocida@google.com> 521 Cc: Mark Wielaard <mark@klomp.org> 522 5232020-10-29 Giuliano Procida <gprocida@google.com> 524 525 Improve enum synthetic type names 526 * src/abg-dwarf-reader.cc 527 (build_internal_underlying_enum_type_name): Add a size 528 argument (and don't default is_anonymous argument). Append 529 size of type to synthetic type name. 530 (build_enum_underlying_type): Pass type size to 531 build_internal_underlying_enum_type_name. 532 * tests/data/test-abidiff-exit/test-decl-enum-report-3.txt: 533 Update. Note that there may be an issue with leaf-mode 534 reporting of pointer type changes. 535 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: 536 Regenerate this (catching up with various abidw updates). 537 * tests/data/test-annotate/test-anonymous-members-0.o.abi: 538 Refresh with new type names. 539 * tests/data/test-annotate/test0.abi: Likewise. 540 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 541 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 542 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 543 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 544 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 545 Likewise. 546 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 547 Likewise. 548 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 549 Likewise. 550 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 551 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 552 Likewise. 553 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 554 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. 555 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 556 Likewise. 557 * tests/data/test-read-dwarf/test0.abi: Likewise. 558 * tests/data/test-read-dwarf/test0.hash.abi: Likewise. 559 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 560 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 561 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 562 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 563 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 564 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 565 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 566 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 567 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 568 Likewise. 569 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 570 Likewise. 571 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 572 Likewise. 573 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 574 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 575 Likewise. 576 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 577 5782020-10-29 Giuliano Procida <gprocida@google.com> 579 580 Improve and stabilise sort of member functions 581 * src/abg-ir.cc 582 (virtual_member_function_less_than::operator()): Name 583 temporaries like offsets and symbols to reduce repetition; 584 test each pair of elements (including symbol presence) and 585 return immediately if there's a difference; add a comparison 586 of linkage name just after comparing symbol names. 587 (sort_virtual_member_functions): Use stable_sort instead of 588 sort. 589 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 590 Update with new ordering of member functions. 591 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 592 Likewise. 593 5942020-11-01 Dodji Seketeli <dodji@redhat.com> 595 596 update-test-output.py: Update syntax 597 * tests/update-test-output.py: Update syntax for python3. 598 5992020-10-31 Dodji Seketeli <dodji@redhat.com> 600 601 Bug 26770 - Spurious declaration-only-ness induces spurious type changes 602 * src/abg-dwarf-reader.cc (add_or_update_class_type): When 603 creating a class, set declaration-only-ness unconditionally. When 604 updating the class however, only set the declaration-only-ness 605 when the current one is not consistent with the size of the class. 606 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 607 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 608 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 609 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 610 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 611 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 612 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 613 6142020-10-21 Matthias Maennich <maennich@google.com> 615 616 dwarf-reader: fix lookup for repeated translation unit paths 617 * src/abg-dwarf-reader.cc(build_translation_unit_and_add_to_ir): 618 Fix lookup for potentially already existing translation units. 619 Reported-by: Dan Albert <danalbert@google.com> 620 6212020-10-21 Giuliano Procida <gprocida@google.com> 622 623 Stabilise sort of canonical types 624 * src/abg-ir.cc (scope_decl::get_sorted_canonical_types): Sort 625 canonical types with std::stable_sort(..., type_topo_comp()). 626 Reviewed-by: Matthias Maennich <maennich@google.com> 627 6282020-10-27 Mark Wielaard <mark@klomp.org> 629 630 Assume subrange bounds types are unsigned if no underlying type is given. 631 * src/abg-dwarf-reader.cc (build_subrange_type): Default 632 is_signed to false. 633 6342020-10-23 Mark Wielaard <mark@klomp.org> 635 636 dwarf-reader: get subrange_type bounds signedness from underlying type 637 * src/abg-dwarf-reader.cc (die_attribute_has_form) 638 (die_attribute_is_signed, die_attribute_is_unsigned) 639 (die_attribute_has_no_signedness): Remove static functions. 640 (die_constant_attribute): Add the 'is_signed' parameter. 641 (die_address_attribute): Adjust comment. 642 (build_subrange_type): Determine signedness of the bounds by 643 looking at the DW_AT_encoding attribute of the underlying type. 644 6452020-10-23 Dodji Seketeli <dodji@redhat.com> 646 647 abg-tools-utils: Fix comment 648 * include/abg-tools-utils.h (enum abidiff_status): Fix a comment. 649 6502020-10-13 Dodji Seketeli <dodji@redhat.com> 651 652 configure: Support ABIGAIL_NO_OPTIMIZATION_DEBUG environment variable 653 * configure.ac: Set the CXXFLAGS and CFLAGS to "-g -O0 -Wall 654 -Wextra -Werror" if the ABIGAIL_NO_OPTIMIZATION_DEBUG is set. 655 6562020-10-13 Dodji Seketeli <dodji@redhat.com> 657 658 Structurally compare the few non-canonicalized types in general 659 * include/abg-fwd.h (hash_as_canonical_type_or_constant): Remove 660 public declaration of this function. 661 * src/abg-hash.cc (type_base::dynamic_hash::operator()): Add a 662 comment. 663 * src/abg-ir.cc (hash_as_canonical_type_or_constant): Make this 664 function static now. 665 (hash_type_or_decl): Use hash_type for types. 666 * src/abg-writer.cc (type_hasher::operator()): Use hash_type. 667 6682020-10-12 Dodji Seketeli <dodji@redhat.com> 669 670 Fix redundancy detection in the diff graph 671 * src/abg-comparison-priv.h 672 (diff_context::priv::last_visited_diff_node_): Remove unnecessary 673 data member. 674 (class_or_union_diff::priv::sorted_{deleted,inserted}_member_functions_): 675 Add new data members. 676 (sort_string_member_function_sptr_map): Declare new function. 677 * src/abg-comparison.cc (sort_string_member_function_sptr_map): 678 Define new function. 679 (redundancy_marking_visitor::visit_begin): If the current diff 680 node is equivalent to another one that has been already marked 681 redundant, then consider the current diff node as redundant as 682 well. Considering the fact an ancestor node has been filtered out 683 is now useless because if that's the case then the current 684 descendant node wouldn't even be walked at reporting time. So 685 remove the call to diff_has_ancestor_filtered_out. 686 (categorize_redundancy): Remove useless call here as well. 687 (diff_has_ancestor_filtered_out, diff_has_ancestor_filtered_out) 688 (diff_context::{mark_last_diff_visited_per_class_of_equivalence, 689 clear_last_diffs_visited_per_class_of_equivalence, 690 get_last_visited_diff_of_class_of_equivalence}): Remove 691 unnecessary functions. 692 (redundancy_marking_visitor::visit_end): Add comment. 693 (class_diff::ensure_lookup_tables_populated): Lexicographically 694 sort inserted/deleted member functions. 695 (class_or_union_diff::chain_into_hierarchy): Chain changed data 696 members diff nodes in a sorted manner. 697 * src/abg-default-reporter.cc (default_reporter::report): Report 698 deleted/inserted member functions in lexicographic order. 699 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 700 Adjust. 701 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 702 Likewise. 703 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: 704 Likewise. 705 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 706 Likewise. 707 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: 708 Likewise. 709 7102020-10-08 Dodji Seketeli <dodji@redhat.com> 711 712 Consider the implicit 'this' parameter when comparing methods 713 * include/abg-ir.h (function_type::get_first_parm): Declare new 714 accessor. 715 * src/abg-ir.cc (function_type::get_first_parm): Define new 716 accessor. 717 (equals): In the overload for function_type, 718 always take the implicit "this" parameter into account in 719 parameter comparisons. 720 (function_type::get_first_non_implicit_parm): Adjust comment. 721 * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): 722 Avoid potential NULL pointer dereferencing. 723 * src/abg-comparison.cc 724 (function_type_diff::ensure_lookup_tables_populated): Always take 725 the changes to the implicit 'this' parameter into account in the 726 function type diff. 727 (compute_diff): In the overload for function_type, Always compare 728 the implicit 'this' parameter when comparing function parameters. 729 * src/abg-default-reporter.cc (default_reporter::report): Refer to 730 "implicit parameter" when reporting changes on parameters 731 artificially generated by the compiler. 732 * src/abg-suppression.cc (type_suppression::suppresses_diff): Make 733 the 'access_through' predicate work on a qualified version of type 734 'S', even if it was meant to work on type 'S'. This allows it to 735 work on 'const S', especially when S is accessed through 'pointer 736 to const S', which happens when we consider the implicit 'this' 737 parameter of a const member function. 738 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Adjust. 739 * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. 740 * tests/data/test-abidiff-exit/test1-voffset-change-report0.txt: 741 Likewise. 742 * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. 743 * tests/data/test-abidiff/test-struct1-report.txt: Likewise. 744 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: 745 Likewise. 746 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 747 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Likewise. 748 * tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt: Likewise. 749 * tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt: Likewise. 750 * tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt: Likewise. 751 * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: Likewise. 752 * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: Likewise. 753 * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. 754 * tests/data/test-diff-dwarf/test5-report.txt: Likewise. 755 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 756 * tests/data/test-diff-filter/test0-report.txt: Likewise. 757 * tests/data/test-diff-filter/test01-report.txt: Likewise. 758 * tests/data/test-diff-filter/test10-report.txt: Likewise. 759 * tests/data/test-diff-filter/test13-report.txt: Likewise. 760 * tests/data/test-diff-filter/test2-report.txt: Likewise. 761 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: 762 Likewise. 763 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: 764 Likewise. 765 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 766 Likewise. 767 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 768 Likewise. 769 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: 770 Likewise. 771 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 772 Likewise. 773 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 774 Likewise. 775 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 776 Likewise. 777 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: 778 Likewise. 779 * tests/data/test-diff-filter/test4-report.txt: Likewise. 780 * tests/data/test-diff-filter/test41-report-0.txt: Likewise. 781 * tests/data/test-diff-filter/test9-report.txt: Likewise. 782 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: 783 Likewise. 784 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 785 Likewise. 786 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: 787 Likewise. 788 * tests/data/test-diff-suppr/test24-soname-report-0.txt: Likewise. 789 * tests/data/test-diff-suppr/test24-soname-report-1.txt: Likewise. 790 * tests/data/test-diff-suppr/test24-soname-report-10.txt: Likewise. 791 * tests/data/test-diff-suppr/test24-soname-report-11.txt: Likewise. 792 * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. 793 * tests/data/test-diff-suppr/test24-soname-report-13.txt: Likewise. 794 * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. 795 * tests/data/test-diff-suppr/test24-soname-report-15.txt: Likewise. 796 * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. 797 * tests/data/test-diff-suppr/test24-soname-report-2.txt: Likewise. 798 * tests/data/test-diff-suppr/test24-soname-report-3.txt: Likewise. 799 * tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise. 800 * tests/data/test-diff-suppr/test24-soname-report-5.txt: Likewise. 801 * tests/data/test-diff-suppr/test24-soname-report-6.txt: Likewise. 802 * tests/data/test-diff-suppr/test24-soname-report-7.txt: Likewise. 803 * tests/data/test-diff-suppr/test24-soname-report-8.txt: Likewise. 804 * tests/data/test-diff-suppr/test24-soname-report-9.txt: Likewise. 805 * tests/data/test-diff-suppr/test31-report-1.txt: Likewise. 806 * tests/data/test-diff-suppr/test33-report-0.txt: Likewise. 807 8082020-08-17 Giuliano Procida <gprocida@google.com> 809 810 Fix two wrongs in test suppression regex 811 * tests/data/test-diff-suppr/test38-char-class-in-ini.abignore: 812 Don't anchor regex match to beginning of file name. 813 Change "filename_regexp" to "file_name_regexp". 814 8152020-08-17 Giuliano Procida <gprocida@google.com> 816 817 Add missing newlines to end of test files. 818 * tests/data/test-diff-suppr/test0-type-suppr-2.suppr: Add 819 final new line. 820 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-4.suppr: 821 Likewise. 822 * tests/data/test-diff-suppr/test23-alias-filter-0.suppr: 823 Likewise. 824 * tests/data/test-diff-suppr/test23-alias-filter-4.suppr: 825 Likewise. 826 * tests/data/test-diff-suppr/test28-add-aliased-function-1.suppr: 827 Likewise. 828 * tests/data/test-diff-suppr/test28-add-aliased-function-2.suppr: 829 Likewise. 830 * tests/data/test-diff-suppr/test28-add-aliased-function-3.suppr: 831 Likewise. 832 * tests/data/test-diff-suppr/test28-add-aliased-function-4.suppr: 833 Likewise. 834 * tests/data/test-diff-suppr/test41-enumerator-changes-0.suppr: 835 Likewise. 836 * tests/data/test-diff-suppr/test7-var-suppr-7.suppr: 837 Likewise. 838 * tests/data/test-ini/test01-equal-in-property-string.abignore: 839 Likewise. 840 8412020-09-18 Giuliano Procida <gprocida@google.com> 842 843 abg-corpus.cc: report architecture discrepancies 844 * src/abg-corpus.cc (corpus_group::add_corpus): Report 845 architecture discrepancies. 846 8472020-09-16 Dodji Seketeli <dodji@redhat.com> 848 849 Bug 26568 - Union should support more than one anonymous member 850 * src/abg-dwarf-reader.cc (add_or_update_union_type): Don't use 851 the empty name of anonymous members in the lookup to ensure that 852 all data members are unique. Rather, use the whole anonymous 853 member itself for the lookup, just like is done to handle 854 anonymous data member in classes/structs. 855 * src/abg-reader.cc (build_union_decl): Likewise. 856 * src/abg-ir.cc (get_generic_anonymous_internal_type_name): Define 857 new static function. 858 (get_type_name): For internal purposes, make the type name of all 859 anonymous types of a given kind to be the same. This allows the 860 internal representation of anonymous types which are based on type 861 names to all be the same, so that they can be compared among 862 themselves during type canonicalization. 863 * tests/data/test-read-dwarf/test-PR26568-{1,2}.c: Source code of 864 binary test input. 865 * tests/data/test-read-dwarf/test-PR26568-{1,2}.o: New binary test input. 866 * tests/data/test-read-dwarf/test-PR26568-{1,2}.o.abi: New 867 reference test ouput. 868 * tests/data/Makefile.am: Add the new test material above to 869 source distribution. 870 * tests/test-read-dwarf.cc (in_out_specs): Add the new binary test 871 input above to this test harness. 872 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Adjust. 873 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 874 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. 875 8762020-09-02 Dodji Seketeli <dodji@redhat.com> 877 878 Make abidiff and abidw support several --headers-dir{1,2} options 879 * doc/manuals/abidiff.rst: Update documentation for the 880 --headers-dir{1,2} options. 881 * doc/manuals/abidw.rst: Likewise for the --header-dir option. 882 * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Add new 883 overload that takes a vector of headers root dirs. 884 * src/abg-tools-utils.cc (gen_suppr_spec_from_headers_root_dir): 885 Define new function. 886 (gen_suppr_spec_from_headers): Define a new overload that takes a 887 vector of head_root_dir strings; it uses the new 888 gen_suppr_spec_from_headers function. Use the new overload in the 889 previous one that takes just one head_root_dir string. 890 * tools/abidiff.cc (options::headers_dirs{1,2}): Rename 891 option::headers_dir{1,2} into this one and make it be a vector of 892 strings rather than just a string. 893 (parse_command_line): Support several --headers-dir{1,2} on the 894 command line. 895 (set_diff_context_from_opts, set_suppressions): Adjust. 896 * tools/abidw.cc (options::headers_dirs): Renamed 897 options::headers_dir into this and make it be a vector of strings 898 rather than just a string. 899 (parse_command_line): Support several --headers-dir on the command 900 line. 901 (set_suppressions): Adjust. 902 * tests/data/test-abidiff-exit/test-headers-dirs/headers-a/header-a-v{0,1}.h: 903 Header files of new binary test input. 904 * tests/data/test-abidiff-exit/test-headers-dirs/headers-b/header-b-v{0,1}.h: 905 Likewise. 906 * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v{0,1}.c: 907 Source code of new binary test input. 908 * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-{1,2}.txt: 909 Reference output of new binary test input. 910 * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v{0,1}.o: 911 New binary test input. 912 * tests/data/Makefile.am: Add the new files above to source 913 distribution. 914 * tests/test-abidiff-exit.cc (InOutSpec::in_elfv{0,1}_path): Add 915 new data members. 916 (in_out_specs): Adjust the content of this array as its type 917 changed. Also, add two new entries to run the test over the new 918 binary test inputs above. 919 (do_prefix_strings): Define new static function. 920 (main): Use it the new do_prefix_strings here. Make abidiff 921 use the --header-dir{1,2} option whenever header directories are 922 specified in an entry of the in_out_specs array. 923 9242020-09-14 Dodji Seketeli <dodji@redhat.com> 925 926 Bug 26309 - Wrong leaf reporting of changes to typedef underlying type 927 * src/abg-ir.cc (equals): In the overload for typedef_decls, 928 report changes to the underlying type as being local of kind 929 LOCAL_TYPE_CHANGE_KIND. 930 * src/abg-comparison.cc 931 (leaf_diff_node_marker_visitor::visit_begin): Do not mark typedef 932 diff node as leaf node. 933 (suppression_categorization_visitor::visit_end): Propagate the 934 'suppressed' category of the underlying type to the parent typedef 935 unless the later has a local non-type change. 936 (redundancy_marking_visitor::visit_end): Likewise for the 937 'redundant' category. 938 * include/abg-reporter.h (report_non_type_typedef_changes): Rename ... 939 * src/abg-default-reporter.cc (report_non_type_typedef_changes): 940 ... report_local_typedef_changes into this. 941 * src/abg-leaf-reporter.cc (leaf_reporter::report): Make the leaf 942 reporter invoke the reporting method of the default reporter for 943 typedefs as all typedef changes are now local. 944 * tests/data/test-diff-filter/test-PR26309-report-0.txt: Add new 945 test reference output. 946 * tests/data/test-diff-filter/test-PR26309-v{0,1}.o: Add new test 947 binary input. 948 * tests/data/test-diff-filter/test-PR26309-v{0,1}.c: Add source 949 code for new test binary input. 950 * tests/data/Makefile.am: Add the new text material above to 951 source distribution. 952 * tests/test-diff-filter.cc (in_out_specs): Add the new test input 953 above to this test harness. 954 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. 955 9562020-09-14 Dodji Seketeli <dodji@redhat.com> 957 958 Fix thinko in get_vmlinux_path_from_kernel_dist 959 * src/abg-tools-utils.cc (get_vmlinux_path_from_kernel_dist): Fix 960 thinko. 961 9622020-09-08 Dodji Seketeli <dodji@redhat.com> 963 964 writer: Avoid using dynamic hashing in type maps 965 * include/abg-fwd.h (hash_as_canonical_type_or_constant): Declare ... 966 * src/abg-ir.cc (hash_as_canonical_type_or_constant): ... new 967 function. 968 * src/abg-writer.cc (type_hasher::operator()): Use the new 969 hash_as_canonical_type_or_constant. 970 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 971 9722020-09-08 Dodji Seketeli <dodji@redhat.com> 973 974 Use flat representation to canonicalize anonymous classes and unions 975 * src/abg-ir.cc ({class, union}_decl::get_pretty_representation): 976 Use the flat representation of the class or union even for 977 internal purposes. 978 * tests/data/test-annotate/libtest23.so.abi: Adjust. 979 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Likewise. 980 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 981 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 982 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. 983 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 984 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 985 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. 986 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 987 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 988 9892020-07-24 Giuliano Procida <gprocida@google.com> 990 991 DWARF: track chained DIE declaration-only status 992 * src/abg-dwarf-reader.cc (add_or_update_class_type): Add an 993 is_declaration_only argument. Use this in favour of the 994 die_is_declaration_only helper function. 995 (add_or_update_union_type): Ditto. 996 (function_is_suppressed): Ditto. 997 (build_or_get_fn_decl_if_not_suppressed): Ditto. 998 (build_enum_type): Ditto. 999 (build_ir_node_from_die): To the main overload, add 1000 is_declaration_only argument and default this to true. 1001 Update this to false if the given DIE is not declaration 1002 only and pass this on in recusrive calls and calls to 1003 build_enum_type, add_or_update_union_type, 1004 add_or_update_class_type and 1005 build_or_get_fn_decl_if_not_suppressed. 1006 * tests/data/test-annotate/test17-pr19027.so.abi: Update 1007 test. This is mostly the removal of is-declaration-only 1008 attributes, removal of unreachable parts of the type graph and 1009 type id renumbering. 1010 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1011 Likewise. 1012 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1013 Likewise. 1014 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1015 Likewise. 1016 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: 1017 Likewise. 1018 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 1019 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1020 Likewise. 1021 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1022 Likewise. 1023 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1024 Likewise. 1025 10262020-07-24 Giuliano Procida <gprocida@google.com> 1027 1028 DWARF: look up DW_AT_declaration non-recursively 1029 * src/abg-dwarf-reader.cc (die_die_attribute): Rename 1030 'look_thru_abstract_origin' argument to 'recursively' and 1031 mention DW_AT_specification in its doc comment. Remove stale 1032 comment for non-existent argument. Simplify code with the help 1033 of the ternary operator. (die_flag_attribute): Add 1034 recursively argument, defaulted to true. If this is false, 1035 look for attribute using dwarf_attr rather than 1036 dwarf_attr_integrate. (die_is_declaration_only): Call 1037 die_flag_attribute specifying non-recursive attribute search. 1038 * tests/data/test-annotate/test15-pr18892.so.abi: Update 1039 tests. This is mostly the removal of unreachable parts of the type 1040 graph and type id renumbering. 1041 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1042 Likewise. 1043 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1044 Likewise. 1045 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: 1046 Likewise. 1047 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 1048 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1049 Likewise. 1050 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1051 Likewise. 1052 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 1053 Likewise. 1054 10552020-07-24 Giuliano Procida <gprocida@google.com> 1056 1057 Improve documentation of abidiff --type-id-style 1058 * tools/abidw.cc (display_usage): In documentation of 1059 "--type-id-style" option, add a missing closing ')', spell 1060 "type id" without a '-', split overly long string over two 1061 lines, use "<...>" to indicate mandatory argument and improve 1062 description of formats. 1063 * doc/manuals/abidw.rst: In documentation of "--type-id-style" 1064 option, use "<...>" to indicate mandatory argument. 1065 10662020-07-23 Giuliano Procida <gprocida@google.com> 1067 1068 Fix maybe_report_data_members_replaced_by_anon_dm 1069 * src/abg-reporter-priv.cc 1070 (maybe_report_data_members_replaced_by_anon_dm): Move 1071 declarations of anonymous_data_member and 1072 dms_replaced_by_same_anon_dm into inner loop. Use 1073 anonymous_data_member for testing and reporting, allowing 1074 iterators i and j to be replaced by just iterator i. Push 1075 first decl onto dms_replaced_by_same_anon_dm unconditionally 1076 and move control flow logic into loop condition. 1077 * tests/data/Makefile.am: Add new test cases. 1078 * tests/data/test-diff-filter/test-PR25661-7-report-1.txt: New 1079 test case file. 1080 * tests/data/test-diff-filter/test-PR25661-7-report-2.txt: 1081 Likewise. 1082 * tests/data/test-diff-filter/test-PR25661-7-report-3.txt: 1083 Likewise. 1084 * tests/data/test-diff-filter/test-PR25661-7-report-4.txt: 1085 Likewise. 1086 * tests/data/test-diff-filter/test-PR25661-7-v0.c: Likewise. 1087 * tests/data/test-diff-filter/test-PR25661-7-v0.o: Likewise. 1088 * tests/data/test-diff-filter/test-PR25661-7-v1.c: Likewise. 1089 * tests/data/test-diff-filter/test-PR25661-7-v1.o: Likewise. 1090 * tests/test-diff-filter.cc: Call new test cases. 1091 10922020-07-22 Giuliano Procida <gprocida@google.com> 1093 1094 Fix decl_base comparison function 1095 * src/abg-ir.cc (equals): In the decl_base overload, note that 1096 the value returned by decl_names_equal should be negated and 1097 replace decls_are_different with decls_are_same, negating all 1098 occurrences. 1099 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: 1100 Update tests, removing some spurious anonymous union name change. 1101 * tests/data/test-diff-filter/test33-report-0.txt: Diff now 1102 completely empty. 1103 * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: 1104 3 functions previously considered to have harmless changes are 1105 now deemed to have no changes. 1106 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 1107 1 struct RedStore data member previously considered to have 1108 harmless changes is now deemed to have no changes. 1109 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: 1110 One instance of an anonymous struct removed and a typedef 1111 repointed at another existing instance; many type ids 1112 renumbered. 1113 11142020-07-22 Giuliano Procida <gprocida@google.com> 1115 1116 Make decl_names_equal more accurate 1117 * src/abg-tools-utils.cc (decl_names_equal): Move {l,r}_pos2 1118 declarations into the loop and make {l,r}_length const. Avoid 1119 chance of arithmetic on string::npos values. Rework 1120 logic so there is a single test for "names compare equal" and 1121 a single test for different numbers of name components. 1122 * tests/test-tools-utils.cc (main): Add nine more tests. 1123 11242020-07-30 Dodji Seketeli <dodji@redhat.com> 1125 1126 Bug 26261 - Fix logic for canonicalizing DW_TAG_subroutine_type DIEs 1127 * src/abg-dwarf-reader.cc (compare_dies): Get out early if we are 1128 are in the middle of a potential recursive comparison of function 1129 types. Likewise if we detect that the two function types have 1130 different textual representations, linkage names, or have a the 1131 same textual representation, linkage names and are defined in the 1132 same translation unit. 1133 * tests/data/test-read-dwarf/PR26261/PR26261-exe: New test binary 1134 input file. 1135 * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: New 1136 reference test output file. 1137 * tests/data/test-read-dwarf/PR26261/PR26261-main.c: Source code 1138 of the binary above. 1139 * tests/data/test-read-dwarf/PR26261/PR26261-obj{a,b}.{c,h}: 1140 Likewise. 1141 * tests/data/test-read-dwarf/PR26261/Makefile: Makefile to 1142 build the exe out of the source files. 1143 * tests/data/Makefile.am: Add the new test input files to source 1144 distribution. 1145 * tests/test-read-dwarf.cc (in_out_spec): Add the binary test 1146 input above to the test harness. 1147 11482020-07-29 Dodji Seketeli <dodji@redhat.com> 1149 1150 dwarf-reader: re-indent a block of code 1151 * src/abg-dwarf-reader.cc (compare_dies): Properly indent a 1152 sub-block of the big switch case statement in there. 1153 11542020-07-17 Giuliano Procida <gprocida@google.com> 1155 1156 abg-ir.cc: Remove duplicated line of code 1157 * src/abg-ir.cc (decl_base::set_definition_of_declaration): 1158 Remove duplicated assignment statement. 1159 11602020-07-16 Giuliano Procida <gprocida@google.com> 1161 1162 abg-writer.cc: Fix indentation of XML output 1163 * src/abg-writer.cc (write_canonical_types_of_scope): Do not 1164 add additional indentation. (write_translation_unit): Pass 1165 additional indentation to write_canonical_types_of_scope. 1166 (write_class_decl): Ensure optional annotations of base 1167 classes have the same indentation as the base classes 1168 themselves. 1169 * tests/data/test-annotate/libtest23.so.abi: Fix indentation. 1170 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Ditto. 1171 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Ditto. 1172 * tests/data/test-annotate/test-anonymous-members-0.o.abi: 1173 Ditto. 1174 * tests/data/test-annotate/test1.abi: Ditto. 1175 * tests/data/test-annotate/test14-pr18893.so.abi: Ditto. 1176 * tests/data/test-annotate/test15-pr18892.so.abi: Ditto. 1177 * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. 1178 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1179 Ditto. 1180 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1181 Ditto. 1182 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1183 Ditto. 1184 * tests/data/test-annotate/test21-pr19092.so.abi: Ditto. 1185 * tests/data/test-diff-suppr/test45-abi-wl.xml: Ditto. 1186 * tests/data/test-diff-suppr/test45-abi.xml: Ditto. 1187 * tests/data/test-diff-suppr/test46-PR25128-base.xml: Ditto. 1188 * tests/data/test-diff-suppr/test46-PR25128-new.xml: Ditto. 1189 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 1190 Ditto. 1191 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Ditto. 1192 * tests/data/test-read-dwarf/libtest23.so.abi: Ditto. 1193 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 1194 Ditto. 1195 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Ditto. 1196 * tests/data/test-read-dwarf/test1.abi: Ditto. 1197 * tests/data/test-read-dwarf/test1.hash.abi: Ditto. 1198 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Ditto. 1199 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Ditto. 1200 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Ditto. 1201 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. 1202 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. 1203 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. 1204 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. 1205 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1206 Ditto. 1207 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1208 Ditto. 1209 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1210 Ditto. 1211 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. 1212 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 1213 Ditto. 1214 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Ditto. 1215 * tests/data/test-read-write/test10.xml: Ditto. 1216 * tests/data/test-read-write/test15.xml: Ditto. 1217 * tests/data/test-read-write/test21.xml: Ditto. 1218 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 1219 Ditto. 1220 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 1221 Ditto. 1222 12232020-07-16 Giuliano Procida <gprocida@google.com> 1224 1225 Remove ABI XML test data file blank lines 1226 * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Remove 1227 blank lines. 1228 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: 1229 Ditto. 1230 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 1231 Ditto. 1232 * tests/data/test-diff-suppr/test45-abi-wl.xml: Ditto. 1233 * tests/data/test-diff-suppr/test45-abi.xml: Ditto. 1234 * tests/data/test-diff-suppr/test46-PR25128-base.xml: Ditto. 1235 * tests/data/test-diff-suppr/test46-PR25128-new.xml: Ditto. 1236 12372020-07-15 Giuliano Procida <gprocida@google.com> 1238 1239 abg-ir.cc: Fix incorrect pop of compared types. 1240 * src/abg-ir.cc (equals): In the class_or_union overload, 1241 replace one instance of RETURN(false) with return false. 1242 12432020-07-09 Giuliano Procida <gprocida@google.com> 1244 1245 Enable Clang's -Werror-overloaded-virtual. 1246 * configure.ac: Remove the special clause that disabled 1247 -Werror-overloaded-virtual for Clang builds. 1248 12492020-07-09 Giuliano Procida <gprocida@google.com> 1250 1251 Fix inheritance of scope_decl::insert_member_decl 1252 * include/abg-ir.h (scope_decl::insert_member_decl): Change 1253 type of member argument from const decl_base_sptr& to plain 1254 decl_base_sptr. 1255 * src/abg-ir.cc (scope_decl::insert_member_decl): Likewise. 1256 12572020-07-27 Dodji Seketeli <dodji@redhat.com> 1258 1259 Pimpl-ify traversable_base and remove its unused traverse method 1260 * include/abg-traverse.h (traversable_base::priv): Declare new type. 1261 (traverse_base::priv_sptr): Add pointer to private data 1262 member. 1263 (traverse_base::visiting_): Move this data member definition into 1264 traverse_base::priv. 1265 (traverse_base::{visiting, traverse_base, ~traverse_base}): Move 1266 definitions out-of-oline. 1267 (traverse_base::traverse): Comment out. 1268 * src/abg-traverse.cc (struct traversable_base::priv): Define new 1269 type. 1270 (traversable_base::{traversable_base, ~traversable_base, traverse, 1271 visiting}): Move these previous inline definitions here. 1272 12732020-07-09 Giuliano Procida <gprocida@google.com> 1274 1275 Simplify peel_typedef_pointer_or_reference_type 1276 * include/abg-fwd.h (peel_qualified_or_typedef_type): Remove 1277 second argument in declarations of both overloads. 1278 * src/abg-comp-filter.cc (is_mostly_distinct_diff): Remove 1279 second argument to peel_qualified_or_typedef_type. 1280 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Likewise. 1281 * src/abg-ir.cc (peel_qualified_or_typedef_type): In both 1282 overloads, remove second argument peel_qual_type, simplify 1283 code with the assumption it was always false and remove 1284 incomplete array type peeling logic. In type_base_sptr 1285 overload, remove stray space. 1286 12872020-07-09 Giuliano Procida <gprocida@google.com> 1288 1289 Remove unused is_reference_or_pointer_diff. 1290 * include/abg-comparison.h (is_reference_or_pointer_diff): 1291 Drop function declaration. 1292 * src/abg-comparison.cc (is_reference_or_pointer_diff): Drop 1293 function definition. 1294 12952020-07-09 Giuliano Procida <gprocida@google.com> 1296 1297 abg-comparison.h: Remove stray declaration 1298 * include/abg-comparison 1299 (is_reference_or_pointer_diff_to_non_basic_distinct_types): 1300 Remove stray declaration. 1301 13022020-07-08 Giuliano Procida <gprocida@google.com> 1303 1304 abg-ir.cc: Refactor operator== methods with helper function 1305 * src/abg-ir.cc (try_canonical_compare): New template function. 1306 (type_decl::operator==): Use it here. 1307 (scope_type_decl::operator==): Likewise. 1308 (qualified_type_def::operator==): Likewise. 1309 (pointer_type_def::operator==): Likewise. 1310 (reference_type_def::operator==): Likewise. 1311 (array_type_def::subrange_type::operator==): Likewise. 1312 (array_type_def::operator==): Likewise. 1313 (enum_type_decl::operator==): Likewise. 1314 (typedef_decl::operator==): Likewise. 1315 (function_type::operator==): Likewise. 1316 (class_or_union::operator==): Likewise. 1317 (class_decl::operator==): Likewise. 1318 (union_decl::operator==): Likewise. 1319 13202020-07-01 Giuliano Procida <gprocida@google.com> 1321 1322 abg-comparison.cc: Tidy some corpus_diff code 1323 * src/abg-comparison.cc (corpus_diff::priv::emit_diff_stats): 1324 Adjust code whitespace; rename the second instance of 1325 total_nb_variable_changes to 1326 total_nb_unreachable_type_changes. 1327 (corpus_diff::has_incompatible_changes): Fix comment typo. 1328 13292020-07-06 Giuliano Procida <gprocida@google.com> 1330 1331 Fix --type-id-style hash for empty internal names. 1332 * src/abg-writer.cc (write_context::get_id_for_type): When 1333 hashing internal type names, convert to std::string rather 1334 than using the raw method directly as this will avoid a null 1335 pointer dereference in the case of an empty string; tabify 1336 code indentation. 1337 13382020-07-08 Giuliano Procida <gprocida@google.com> 1339 1340 abg-ir.cc: Tidy some operator== definitions 1341 * src/abg-irc.cc (scope_type_decl::operator==): Compare naked 1342 canonical type pointers instead of the shared pointers. 1343 (qualified_type_def::operator==): Remove excess blank line. 1344 (function_type::operator==): Do dynamic_cast and check of 1345 argument before comparing naked canonical type pointers. 1346 (class_or_union::operator==): Eliminate temporary reference. 1347 (class_decl::operator==): Likewise. 1348 (union_decl::operator==): Likewise. 1349 13502020-07-17 Giuliano Procida <gprocida@google.com> 1351 1352 Fix corpus_diff::has_net_changes for --leaf-changes-only mode 1353 * include/abg-reporter.h ({reporter_base, default_reporter, 1354 leaf_reporter}::diff_has_net_changes): Add new virtual function. 1355 This breaks binary compatibility but should conserve source 1356 compatibility. 1357 * src/abg-default-reporter.cc 1358 (default_reporter::diff_has_net_changes): Define new member 1359 function. 1360 * src/abg-leaf-reporter.cc (leaf_reporter::diff_has_net_changes): 1361 Likewise. 1362 * src/abg-comparison.cc (corpus_diff::has_net_changes): Invoke 1363 reporter_base::diff_has_net_changes on the current reporter, 1364 rather than trying to handle all the different kinds of reporters 1365 here. 1366 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Add a 1367 TODO to possibly delegate the implementation of this function to 1368 the reporters. 1369 * tests/data/Makefile.am: Add new test case files. 1370 * tests/data/test-abidiff-exit/test-net-change-report0.txt: 1371 Normal mode, nothing suppressed. 1372 * tests/data/test-abidiff-exit/test-net-change-report1.txt: 1373 Normal mode, everything suppressed. 1374 * tests/data/test-abidiff-exit/test-net-change-report2.txt: 1375 Leaf mode, nothing suppressed. 1376 * tests/data/test-abidiff-exit/test-net-change-report3.txt: 1377 Leaf mode, everything suppressions. 1378 * tests/data/test-abidiff-exit/test-net-change-v0.c: Test file 1379 * tests/data/test-abidiff-exit/test-net-change-v0.o: Test file 1380 * tests/data/test-abidiff-exit/test-net-change-v1.c: Test file 1381 * tests/data/test-abidiff-exit/test-net-change-v1.o: Test file 1382 * tests/data/test-abidiff-exit/test-net-change.abignore: This 1383 suppresses changes for all variables, functions and types in 1384 the test files, except for the 'victim' function. 1385 * tests/test-abidiff-exit.cc: Run new test cases. 1386 Reviewed-by: Matthias Maennich <maennich@google.com> 1387 13882020-07-01 Giuliano Procida <gprocida@google.com> 1389 1390 reporter: Fix report whitespace typos. 1391 * src/abg-reporter-priv.cc (represent): Add missing space to 1392 string split across two lines in certain anonymous data member 1393 diffs. 1394 * src/abg-default-reporter.cc (report): In the array_diff 1395 overload, eliminate trailing space at end of line. 1396 * tests/data/test-diff-dwarf/test10-report.txt: Delete 1397 trailing whitespace. 1398 * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: 1399 Ditto. 1400 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: 1401 Ditto. 1402 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: 1403 Ditto. 1404 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 1405 Ditto. 1406 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 1407 Ditto. 1408 14092020-07-09 Giuliano Procida <gprocida@google.com> 1410 1411 abg-writer.cc: Clean up new line emission. 1412 * src/abg-writer.cc (annotate): In the 1413 function_decl::parameter_sptr overload, fix code whitespace. 1414 (write_decl_in_scope): Remove wrote_context state variable and 1415 associated logic; emit new line unconditionally after end of 1416 XML tags and nowhere else. 1417 (write_canonical_types_of_scope): Emit new line after end of 1418 XML comment and nowhere else. 1419 (write_translation_unit): Emit new line after end of XML tags 1420 and nowhere else. 1421 (write_type_decl): Likewise. 1422 (write_namespace_decl): Likewise. 1423 (write_qualified_type_def): Emit new line after end of XML tag. 1424 (write_pointer_type_def): Likewise. 1425 (write_reference_type_def): Likewise. 1426 (write_array_type_def): Emit new line after end of XML tags 1427 and nowhere else. 1428 (write_enum_type_decl): Emit new line after end of XML tag. 1429 (write_elf_symbol): Likewise. 1430 (write_elf_symbols_table): Emit no new lines. 1431 (write_elf_needed): Emit new line unconditionally after end of 1432 XML tags. 1433 (write_typedef_decl): Emit new line after end of XML tag. 1434 (write_var_decl): Emit new line after end of XML tag. 1435 (write_function_decl): Likewise. 1436 (write_function_type): Fold two output statements into 1437 one; emit new line after end of XML tag. 1438 (write_class_decl_opening_tag): Emit new line unconditionally 1439 after end of XML tags and simplify empty element tag logic. 1440 (write_union_decl_opening_tag): Likewise. 1441 (write_class_decl): Emit new line after end of XML tag and 1442 nowhere else. 1443 (write_union_decl): Likewise. 1444 (write_member_type_opening_tag): Emit new line after end of 1445 XML tag. 1446 (write_member_type): Emit new lines only after XML tags. 1447 (write_type_tparameter): Emit new line after XML tag. 1448 (write_non_type_tparameter): Likewise. 1449 (write_template_tparameter): Emit new line after XML tag and 1450 nowhere else. 1451 (write_type_composition): Likewise. 1452 (write_template_parameters): Emit no new lines. 1453 (write_function_tdecl): Emit new line after XML tag and 1454 nowhere else. 1455 (write_class_tdecl): Likewise. 1456 (write_corpus): Emit new lines only after XML tags. 1457 (dump): In the decl_base_sptr overload, don't emit final new 1458 line as this is now done by write_decl. In the var_decl_sptr 1459 overload, don't emit final new line (mistakenly done to cerr 1460 instead of o) as this is now done by write_var_decl. In the 1461 translation_unit overload, don't emit final new line as this 1462 doubles that emitted by write_translation_unit. 1463 * tests/data/test-annotate/libtest23.so.abi: Delete all blank 1464 lines. 1465 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Ditto. 1466 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Ditto. 1467 * tests/data/test-annotate/test-anonymous-members-0.o.abi: 1468 Ditto. 1469 * tests/data/test-annotate/test1.abi: Ditto. 1470 * tests/data/test-annotate/test13-pr18894.so.abi: Ditto. 1471 * tests/data/test-annotate/test14-pr18893.so.abi: Ditto. 1472 * tests/data/test-annotate/test15-pr18892.so.abi: Ditto. 1473 * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. 1474 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1475 Ditto. 1476 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1477 Ditto. 1478 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1479 Ditto. 1480 * tests/data/test-annotate/test21-pr19092.so.abi: Ditto. 1481 * tests/data/test-annotate/test7.so.abi: Ditto. 1482 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 1483 Ditto. 1484 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Ditto. 1485 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Ditto. 1486 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 1487 Ditto. 1488 * tests/data/test-read-dwarf/libtest23.so.abi: Ditto. 1489 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 1490 Ditto. 1491 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Ditto. 1492 * tests/data/test-read-dwarf/test1.abi: Ditto. 1493 * tests/data/test-read-dwarf/test1.hash.abi: Ditto. 1494 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Ditto. 1495 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Ditto. 1496 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Ditto. 1497 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Ditto. 1498 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. 1499 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. 1500 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. 1501 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. 1502 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1503 Ditto. 1504 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1505 Ditto. 1506 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1507 Ditto. 1508 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. 1509 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 1510 Ditto. 1511 * tests/data/test-read-dwarf/test7.so.abi: Ditto. 1512 * tests/data/test-read-dwarf/test7.so.hash.abi: Ditto. 1513 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: 1514 Ditto. 1515 * tests/data/test-read-write/test10.xml: Ditto. 1516 * tests/data/test-read-write/test15.xml: Ditto. 1517 * tests/data/test-read-write/test21.xml: Ditto. 1518 * tests/data/test-read-write/test25.xml: Ditto. 1519 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 1520 Ditto. 1521 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 1522 Ditto. 1523 15242020-07-09 Dodji Seketeli <dodji@redhat.com> 1525 1526 reader: Remove useless support for WIP types 1527 * src/abg-reader.cc (read_context::m_wip_types_map): Remove data 1528 member. 1529 (read_context::{clear_wip_classes_map, mark_type_as_wip, 1530 unmark_type_as_wip, is_wip_type}): Remove member functions. 1531 (read_context::maybe_canonicalize_type): Remove use of 1532 is_wip_type. 1533 15342020-06-19 Giuliano Procida <gprocida@google.com> 1535 1536 Use pointers not strings in type graph comparison. 1537 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: 1538 Update. 1539 * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: 1540 Update. 1541 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 1542 Update. 1543 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 1544 Update. 1545 15462020-06-10 Giuliano Procida <gprocida@google.com> 1547 1548 Add tests for declaration-only enums. 1549 * tests/data/test-abidiff-exit/test-decl-enum-report-2.txt: Add 1550 new test reference output. 1551 * tests/data/test-abidiff-exit/test-decl-enum-report-3.txt: Likewise. 1552 * tests/data/test-abidiff-exit/test-decl-enum-report.txt: Likewise. 1553 * tests/data/test-abidiff-exit/test-decl-enum-v{0,1}.c: Add source 1554 code for the binaries below. 1555 * tests/data/test-abidiff-exit/test-decl-enum-v{0,1}.o: Add new 1556 binary test inputs. 1557 * tests/data/Makefile.am: Add the new files above to source 1558 distribution. 1559 * tests/test-abidiff-exit.cc: Add the test inputs above to the 1560 test harness. 1561 15622020-06-10 Giuliano Procida <gprocida@google.com> 1563 1564 Add declaration-only enums to XML reader/writer. 1565 * src/abg-reader.cc (build_enum_type_decl): Detect a 1566 declaration-only enum and flag it as such. 1567 (build_type_decl): Support reading the "is-declaration" attribute. 1568 (build_class_decl): Adjust. 1569 * src/abg-writer.cc (write_is_declaration_only): Renamed 1570 write_class_or_union_is_declaration_only into this. 1571 (write_enum_is_declaration_only): Remove. 1572 (write_type_decl, write_enum_type_decl) 1573 (write_class_decl_opening_tag, write_union_decl_opening_tag): Use 1574 write_is_declaration_only. 1575 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. 1576 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 1577 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 1578 15792020-06-10 Dodji Seketeli <dodji@redhat.com> 1580 1581 Support declaration-only enums in DWARF reader. 1582 * src/abg-dwarf-reader.cc (string_enums_map): Define new 1583 convenience typedef. 1584 (read_context::decl_only_enums_map_): Define new data member. 1585 (read_context::{declaration_only_enums, 1586 is_decl_only_enum_scheduled_for_resolution, 1587 resolve_declaration_only_enums}): Define new member functions. 1588 (build_internal_underlying_enum_type_name) 1589 (build_enum_underlying_type): Factorize these functions out of ... 1590 (build_enum_type): ... here. Detect a decl-only enum and flag it 1591 as such. If the enum type is decl-only, then set its underlying 1592 type as decl-only as well. 1593 (build_enum_underlying_type): Mark the underlying type as 1594 artificial. 1595 (get_opaque_version_of_type): Make this handle enums as well. So 1596 make its return type be type_or_decl_base_sptr, rather than just 1597 class_or_union_sptr as it used to be. 1598 (read_debug_info_into_corpus): Add logging to trace decl-only 1599 enums resolution. 1600 (build_ir_node_from_die): Detect when a suppression specification 1601 makes an enum opaque. In that case, get an opaque version of the 1602 enum type by invoking get_opaque_version_of_type. Note that 1603 get_opaque_version_of_type doesn't support returning opaque 1604 -- i.e, decl-only enum types -- yet, but this is going to be 1605 handled in a subsequent patch. 1606 16072020-06-10 Giuliano Procida <gprocida@google.com> 1608 1609 Support incomplete enums in core and diff code. 1610 * include/abg-comp-filter.h (has_decl_only_def_change) : Declare 1611 New function. 1612 * src/abg-comp-filter.cc (there_is_a_decl_only_enum): Define new 1613 static function and ... 1614 (type_size_changed): ... use it here. 1615 (has_decl_only_def_change): Define new function and ... 1616 (categorize_harm{less, ful}_diff_node): ... use it here. 1617 * include/abg-fwd.h (enums_type, decl_base_wptr): Declare new 1618 typedefs. 1619 (look_through_decl_only_class): Declare new overload for 1620 class_or_union*. 1621 (is_compatible_with_enum_type, is_compatible_with_enum_type) 1622 (look_through_decl_only, lookup_enum_types, lookup_enum_types): 1623 Declare new functions. 1624 * include/abg-ir.h (decl_base::{get_is_declaration_only, 1625 set_is_declaration_only, set_definition_of_declaration, 1626 get_definition_of_declaration, 1627 get_naked_definition_of_declaration}): Declare new member 1628 functions. They were moved here from the class_or_union class. 1629 (class_or_union::{get_earlier_declaration, 1630 set_earlier_declaration, get_definition_of_declaration, 1631 set_definition_of_declaration, 1632 get_naked_definition_of_declaration, get_is_declaration_only, 1633 set_is_declaration_only}): Remove these member functions. 1634 * src/abg-ir.cc (decl_base::priv::{declaration_, 1635 definition_of_declaration_, naked_definition_of_declaration_, 1636 is_declaration_only_}): Define data members. Moved here from 1637 class_or_union. 1638 (decl_base::priv::priv): Adjust to initialize the new data 1639 members. 1640 (decl_base::{get_earlier_declaration, set_earlier_declaration, 1641 get_definition_of_declaration, 1642 get_naked_definition_of_declaration, get_is_declaration_only, 1643 set_is_declaration_only, set_definition_of_declaration}): Define 1644 member functions. 1645 (operator|): In the overload for (change_kind, change_kind), 1646 adjust the return type of the call to 1647 decl_base::get_definition_of_declaration. 1648 (look_through_decl_only): Define new function. 1649 (look_through_decl_only_class): Adjust. 1650 (look_through_decl_only_enum): Likewise. 1651 (maybe_update_types_lookup_map<class_decl>): Adjust return type of 1652 call to decl_base::get_definition_of_declaration. 1653 (types_defined_same_linux_kernel_corpus_public): Use 1654 look_through_decl_only_class rather than open coding it. 1655 (class_or_union::priv::{declaration_, definition_of_declaration_, 1656 naked_definition_of_declaration_, is_declaration_only_}): Remove 1657 these data members. They are now carried by decl_base::priv. 1658 (class_or_union::{g,s}et_alignment_in_bits): Adjust. 1659 (class_or_union::{g,s}et_size_in_bits): Likewise. 1660 (class_or_union::operator==): Likewise. 1661 (equals): Adjust the overload for class_or_union. 1662 (is_compatible_with_enum_type) 1663 * src/abg-comparison.cc (try_to_diff<class_decl>): Adjust the 1664 return type of decl_base::get_definition_of_declaration. 1665 (leaf_diff_node_marker_visitor::visit_begin): Use 1666 filtering::has_decl_only_def_change rather than 1667 filtering::has_class_decl_only_def_change. Decl-only changes to 1668 enums (or any other type really) will thus not be recorded as leaf 1669 changes. 1670 * src/abg-dwarf-reader.cc (get_scope_for_die): Adjust return type 1671 of decl_base::get_definition_of_declaration. 1672 * src/abg-default-reporter.cc (default_reporter::report): Report 1673 enum decl-only <-> definition changes. 1674 * src/abg-hash.cc (class_or_union::hash::operator()): In the 1675 overload for class_or_union& adjust the return type for 1676 decl_base::get_definition_of_declaration. 1677 16782020-06-19 Giuliano Procida <gprocida@google.com> 1679 1680 abg-ir.cc: Remove unused re_canonicalize function. 1681 * include/abg-fwd.h (re_canonicalize): Remove declaration of 1682 obsolete function. 1683 * include/abg-ir.h (class {decl_base, type_base}): Remove 1684 re_canonicalize friend declarations from these classes. 1685 * src/abg-ir.cc (re_canonicalize): Remove obsolete function. 1686 16872020-06-24 Dodji Seketeli <dodji@redhat.com> 1688 1689 Bug 26135 - Wrong linkage name causes anonymous classes miscomparison 1690 * include/abg-ir.h (class_decl::class_decl): Add two overloads 1691 that take the "is_anonymous" flag. 1692 (union_decl::union_decl): Likewise. 1693 * src/abg-ir.cc (class_decl::class_decl): Define two overloads 1694 that take the "is_anonymous" flag and set the linkage name 1695 accordingly. 1696 (union_decl::union_decl): Likewise. 1697 (type_base::get_canonical_type_for): Assert that an anonymous 1698 class or union can't have a linkage name for now. 1699 * src/abg-dwarf-reader.cc (add_or_update_class_type) 1700 (add_or_update_union_type): Use a new overload for the constuctor 1701 of {class, union}_decl and set the "is_anonymous" flag. Don't use 1702 decl_base::set_is_anonymous anymore. 1703 * src/abg-reader.cc (build_class_decl, build_union_decl): 1704 Likewise. 1705 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. 1706 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 1707 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 1708 17092020-06-29 Giuliano Procida <gprocida@google.com> 1710 1711 Rename declaration-definition change category. 1712 * include/abg-comparison.h (TYPE_DECL_ONLY_DEF_CHANGE_CATEGORY): 1713 Rename CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY into this. 1714 (EVERYTHING_CATEGORY): In the value of this enumerator, rename 1715 CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY into 1716 TYPE_DECL_ONLY_DEF_CHANGE_CATEGORY. 1717 * src/abg-comp-filter.cc (categorize_harmless_diff_node): 1718 Likewise. 1719 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 1720 Likewise. 1721 (operator<<(ostream& o, diff_category c)): Likewise. 1722 * src/abg-default-reporter.cc (default_reporter::report): Likewise 1723 in the overload for class_or_union_diff. 1724 * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise in 1725 the overload for class_or_union_diff. 1726 17272020-06-10 Giuliano Procida <gprocida@google.com> 1728 1729 Tidy build_enum_type state variables. 1730 * src/abg-dwarf-reader.cc (build_enum_type): Rename local 1731 variable enum_is_anonymous to is_anonymous. Move initilisation 1732 of local variable is_artificial to location corresponding to 1733 that in add_or_update_class_type and add_or_update_union_type 1734 functions. 1735 17362020-06-10 Giuliano Procida <gprocida@google.com> 1737 1738 Refactor d.context() as ctxt in report(enum_diff). 1739 * src/abg-default-reporter.cc (report): In the enum_diff 1740 overload, introduce the name ctxt to replace four occurrences 1741 of d.context(). 1742 17432020-06-10 Giuliano Procida <gprocida@google.com> 1744 1745 Improve code comments and whitespace. 1746 * include/abg-fwd.h: Correct doc-comment reference to 1747 enum_type_decl. 1748 * src/abg-comp-filter.cc: Fix doc-comment syntax. 1749 * src/abg-comparison.cc (operator<<): In the diff_category 1750 overload, fix code indentation. 1751 * src/abg-default-reporter.cc (report): In the 1752 class_or_union_diff overload, adjust comment to reflect that 1753 the code is reporting changes between declaration-only and 1754 defined types, in either direction. 1755 17562020-06-17 Giuliano Procida <gprocida@google.com> 1757 1758 get_canonical_type_for: restore environment better 1759 * src/abg-ir.cc (get_canonical_type_for): Ensure the 1760 do_on_the_fly_canonicalization and 1761 decl_only_class_equals_definition flags are restored 1762 unconditionally. 1763 17642020-06-18 Dodji Seketeli <dodji@redhat.com> 1765 1766 Bug 26127 - abidw --annotate emits incomplete function types 1767 * include/abg-ir.h (decl_base::clear_qualified_name): Declare new 1768 protected member function. 1769 ({pointer_type_def, reference_type_def, qualified_type_def, 1770 function_type}::on_canonical_type_set): Declare virtual member 1771 functions. 1772 * src/abg-ir.cc (decl_base::clear_qualified_name): Define new 1773 protected member function. 1774 ({pointer_type_def, reference_type_def, qualified_type_def, 1775 function_type}::on_canonical_type_set): Define virtual member 1776 functions. 1777 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 1778 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1779 Likewise. 1780 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1781 Likewise. 1782 17832020-06-11 Giuliano Procida <gprocida@google.com> 1784 1785 Fix bug that suppressed DWARF read tests. 1786 * tests/test-read-dwarf.cc (in_out_specs): Use NULL instead of 1787 empty ABI paths for test25, test26 and test27. (perform): 1788 Check members of spec, rather than locals with same name, when 1789 deciding to terminate testing early; fix some code whitespace. 1790 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Update 1791 multidimensional array sizes. 1792 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. 1793 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1794 Ditto. 1795 * tests/data/test-read-dwarf/test7.so.abi: Ditto. 1796 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 1797 Update following translation unit ordering change. 1798 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Ditto. 1799 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. 1800 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. 1801 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. 1802 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. 1803 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 1804 Ditto. 1805 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 1806 Ditto. 1807 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 1808 Ditto. 1809 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. 1810 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 1811 Ditto. 1812 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Update 1813 following code changes affecting ordering of some ABI 1814 elements. 1815 * tests/data/test-read-dwarf/test16-pr18904.so.abi 1816 Reviewed-by: Matthias Maennich <maennich@google.com> 1817 Tested-by: Matthias Maennich <maennich@google.com> 1818 18192020-06-16 Matthias Maennich <maennich@google.com> 1820 1821 cleanup: std::weak_ptr use: replace manual lock by std::weak_ptr::lock 1822 * src/abg-comparison-priv.h (diff::priv::get_context): improve 1823 weak_ptr usage. 1824 (corpus_diff:diff_stats::priv::ctxt): Likewise. 1825 * src/abg-comparison.cc (corpus_diff::priv::get_context): Likewise. 1826 (var_diff::type_diff): Likewise. 1827 * src/abg-ir.cc (elf_symbol::get_next_alias): Likewise. 1828 (elf_symbol::get_next_common_instance): Likewise. 1829 (type_base::get_canonical_type): Likewise. 1830 (qualified_type_def::get_underlying_type): Likewise. 1831 (pointer_type_def::get_pointed_to_type): Likewise. 1832 (reference_type_def::get_pointed_to_type): Likewise. 1833 (array_type_def::subrange_type::get_underlying_type): Likewise. 1834 (array_type_def::get_element_type): Likewise. 1835 (typedef_decl::get_underlying_type): Likewise. 1836 (var_decl::get_type): Likewise. 1837 (function_type::get_return_type): Likewise. 1838 (function_decl::get_type): Likewise. 1839 (function_decl::parameter::get_type): Likewise. 1840 (class_or_union::get_naming_typedef): Likewise. 1841 (class_or_union::get_definition_of_declaration): Likewise. 1842 (class_decl::base_spec::get_base_class): Likewise. 1843 (template_parameter::get_enclosing_template_decl): Likewise. 1844 (non_type_tparameter::get_type): Likewise. 1845 (type_composition::get_composed_type): Likewise. 1846 18472020-06-16 Giuliano Procida <gprocida@google.com> 1848 1849 Fix leaf-mode formatting of decl <-> defn diffs. 1850 * src/abg-leaf-reporter.cc (leaf_reporter::report): In the 1851 class_or_union_diff overload, add a terminating new line after 1852 reporting a declaration-only <-> definition difference. 1853 18542020-06-15 Giuliano Procida <gprocida@google.com> 1855 1856 abg-writer: Add support for stable hash type ids. 1857 * doc/manuals/abidw.rst: Replace stray documentation of 1858 --named-type-ids with documention of new --type-id-style 1859 option. 1860 * include/abg-writer.h (type_id_style_kind): Add new enum. 1861 (set_type_id_style): Add new write_context setter. 1862 (set_common_options): Set type id style in write context. 1863 * include/abg-hash.h (fnv_hash): Declare new 32-bit FNV-1a 1864 hash function in abigail::hashing namespace. 1865 * src/abg-hash.h (fnv_hash): Define new 32-bit FNV-1a hash 1866 function in abigail::hashing namespace. 1867 * src/abg-writer.cc (write_context): Add m_type_id_style 1868 member to record type style to use, defaulting to 1869 SEQUENCE_TYPE_ID_STYLE; add m_used_type_id_hashes to record 1870 already-used hashes. 1871 (write_context::get_type_id_style): Add new getter. 1872 (write_context::set_type_id_style): Add new setter. 1873 (get_id_for_type): Add support for HASH_TYPE_ID_STYLE style. 1874 (set_type_id_style): Add new helper function. 1875 * tools/abidw.cc (options): Add type_id_style member. 1876 (display_usage): Add description of --type-id-style option. 1877 (parse_command_line): Parse --type-id-style option. 1878 * tests/data/Makefile.am: Add new hash type id ABI files. 1879 * tests/test-read-dwarf.cc: (InOutSpec): Add type_id_style 1880 member. 1881 (in_out_specs): Set type_id_style to SEQUENCE_TYPE_ID_STYLE in 1882 existing test specifications. Duplicate first 9 test cases 1883 with type_id_style set to HASH_TYPE_ID_STYLE. 1884 * tests/data/test-read-dwarf/test0.hash.abi: New ABI XML file 1885 with hash type ids. 1886 * tests/data/test-read-dwarf/test1.hash.abi: Ditto. 1887 * tests/data/test-read-dwarf/test2.so.hash.abi: Ditto. 1888 * tests/data/test-read-dwarf/test3.so.hash.abi: Ditto. 1889 * tests/data/test-read-dwarf/test4.so.hash.abi: Ditto. 1890 * tests/data/test-read-dwarf/test5.o.hash.abi: Ditto. 1891 * tests/data/test-read-dwarf/test6.so.hash.abi: Ditto. 1892 * tests/data/test-read-dwarf/test7.so.hash.abi: Ditto. 1893 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.hash.abi: 1894 Ditto. 1895 18962020-06-12 Giuliano Procida <gprocida@google.com> 1897 1898 Eliminate non-ASCII characters. 1899 * include/abg-diff-utils.h: Replace "’’" with "'". 1900 * src/abg-elf-helpers.cc: Replace "⋅" with ".". 1901 * src/abg-ini.cc: Replace "@êef" with "@ref". 1902 * src/abg-ir.cc: Ditto. 1903 * src/abg-tools-utils.cc: Replace "–" with "-". 1904 19052020-06-11 Matthias Maennich <maennich@google.com> 1906 1907 dwarf-reader: get_die_source: always initialize return value 1908 * src/abg-dwarf-reader.cc 1909 (read_context::get_die_source): Always initialize die_source. 1910 (read_context::ContainerType::get_container): Fix 1911 initialization of die_source. 1912 (read_context::compute_canonical_die): Likewise. 1913 (read_context::get_canonical_die): Likewise. 1914 (read_context::get_or_compute_canonical_die): Likewise. 1915 (read_context::associate_die_to_decl): Likewise. 1916 (read_context::set_canonical_die_offset): Likewise. 1917 (read_context::schedule_type_for_late_canonicalization): Likewise. 1918 (read_context::compare_dies): Likewise. 1919 (read_context::get_parent_die): Likewise. 1920 (read_context::get_scope_for_die): Likewise. 1921 (read_context::add_or_update_union_type): Likewise. 1922 (read_context::maybe_canonicalize_type): Likewise. 1923 (read_context::build_ir_node_from_die): Likewise. 1924 19252020-06-09 Matthias Maennich <maennich@google.com> 1926 1927 abipkgdiff: remove unused includes of elfutils/libdw.h and elf.h 1928 * tools/abipkgdiff.cc: Drop unused includes. 1929 19302020-05-29 Matthias Maennich <maennich@google.com> 1931 1932 abg-reporter: fully qualify std::string and std::ostream 1933 * include/abg-reporter.h (reporter_base::report) fully qualify 1934 std::string and std::ostream for all overloads. 1935 (default_reporter::report_local_typedef_changes): Likewise. 1936 (default_reporter::report_local_qualified_type_changes): Likewise. 1937 (default_reporter::report_local_reference_type_changes): Likewise. 1938 (default_reporter::report_local_function_type_changes): Likewise. 1939 (default_reporter::report): Likewise. 1940 (leaf_reporter::report_changes_from_diff_maps): Likewise. 1941 (leaf_reporter::report): Likewise. 1942 Suggested-by: Mark Barolak <mbar@google.com> 1943 19442020-06-05 Giuliano Procida <gprocida@google.com> 1945 1946 Fix HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY spelling 1947 * include/abg-comparison.h (enum diff_category): Rename 1948 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator to 1949 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. 1950 * src/abg-comp-filter.cc (categorize_harmless_diff_node): Replace 1951 use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with 1952 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. 1953 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 1954 Replace use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator 1955 with HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. 1956 (operator<<): In the diff_category overload, replace use of 1957 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with 1958 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY and output correct 1959 spelling for both this and HARMLESS_UNION_CHANGE_CATEGORY. 1960 * tools/abicompat.cc (create_diff_context): Replace use of 1961 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with 1962 HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. 1963 19642020-05-18 Matthias Maennich <maennich@google.com> 1965 1966 dwarf-reader: read_context: drop unused symbol versioning code 1967 * src/abg-dwarf-reader.cc 1968 (read_context::versym_section_): Delete. 1969 (read_context::verdef_section_): Delete. 1970 (read_context::verneed_section_): Delete. 1971 (read_context::symbol_versionning_sections_loaded_): Delete. 1972 (read_context::symbol_versionning_sections_found_): Delete. 1973 (read_context::initialize): Remove initializations of deleted members. 1974 (read_context::get_symbol_versionning_sections): Delete. 1975 (read_context::get_version_for_symbol): Delete. 1976 (read_context::lookup_elf_symbol_from_index): Use 1977 get_version_for_symbol provided by elf_helpers. 1978 19792020-05-18 Matthias Maennich <maennich@google.com> 1980 1981 dwarf-reader: Remove unused code 1982 * src/abg-dwarf-reader.cc 1983 (lookup_public_variable_symbol_from_elf): Delete. 1984 (read_context::bss_section_): Delete. 1985 (read_context::text_section_): Delete. 1986 (read_context::rodata_section_): Delete. 1987 (read_context::data_section_): Delete. 1988 (read_context::data1_section_): Delete. 1989 (read_context::initialize): Remove initializations of deleted members. 1990 (read_context::options): Delete. 1991 (read_context::bss_section): Delete. 1992 (read_context::text_section): Delete. 1993 (read_context::rodata_section): Delete. 1994 (read_context::data_section): Delete. 1995 (read_context::data1_section): Delete. 1996 (read_context::get_elf_file_type): Delete. 1997 (read_context::lookup_symbol_from_elf): Delete. 1998 (read_context::lookup_public_variable_symbol_from_elf): Delete. 1999 (read_context::fun_addr_sym_map_sptr): Delete. 2000 (read_context::fun_addr_sym_map): Delete. 2001 (read_context::get_data_section_for_variable_address): Delete. 2002 (read_context::suppression_matches_function_sym_name): Delete. 2003 (read_context::suppression_matches_function_name): Delete. 2004 (read_context::suppression_matches_type_name): Delete. 2005 20062020-05-29 Dodji Seketeli <dodji@redhat.com> 2007 2008 abigail.m4: Fix copyright notice 2009 * abigail.m4: Mention Red Hat in the copyright and myself as author. 2010 20112020-05-18 Matthias Maennich <maennich@google.com> 2012 2013 tests: Add kernel symtab test suite 2014 * tests/data/Makefile.am: add new test data for runtestsymtab 2015 * tests/data/test-symtab/kernel-4.14/Makefile: New test case makefile. 2016 * tests/data/test-symtab/kernel-4.14/empty.c: Likewise. 2017 * tests/data/test-symtab/kernel-4.14/one_of_each.c: Likewise. 2018 * tests/data/test-symtab/kernel-4.14/single_function.c: Likewise. 2019 * tests/data/test-symtab/kernel-4.14/single_function_gpl.c: Likewise. 2020 * tests/data/test-symtab/kernel-4.14/single_variable.c: Likewise. 2021 * tests/data/test-symtab/kernel-4.14/single_variable_gpl.c: Likewise. 2022 * tests/data/test-symtab/kernel-4.14/empty.ko: New test data. 2023 * tests/data/test-symtab/kernel-4.14/one_of_each.ko: Likewise. 2024 * tests/data/test-symtab/kernel-4.14/single_function.ko: Likewise. 2025 * tests/data/test-symtab/kernel-4.14/single_function_gpl.ko: Likewise. 2026 * tests/data/test-symtab/kernel-4.14/single_variable.ko: Likewise. 2027 * tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko: Likewise. 2028 * tests/data/test-symtab/kernel-4.19/Makefile: New test case makefile. 2029 * tests/data/test-symtab/kernel-4.19/empty.c: Likewise. 2030 * tests/data/test-symtab/kernel-4.19/one_of_each.c: Likewise. 2031 * tests/data/test-symtab/kernel-4.19/single_function.c: Likewise. 2032 * tests/data/test-symtab/kernel-4.19/single_function_gpl.c: Likewise. 2033 * tests/data/test-symtab/kernel-4.19/single_variable.c: Likewise. 2034 * tests/data/test-symtab/kernel-4.19/single_variable_gpl.c: Likewise. 2035 * tests/data/test-symtab/kernel-4.19/empty.ko: New test data. 2036 * tests/data/test-symtab/kernel-4.19/one_of_each.ko: Likewise. 2037 * tests/data/test-symtab/kernel-4.19/single_function.ko: Likewise. 2038 * tests/data/test-symtab/kernel-4.19/single_function_gpl.ko: Likewise. 2039 * tests/data/test-symtab/kernel-4.19/single_variable.ko: Likewise. 2040 * tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko: Likewise. 2041 * tests/data/test-symtab/kernel-5.4/Makefile: New test case makefile. 2042 * tests/data/test-symtab/kernel-5.4/empty.c: Likewise. 2043 * tests/data/test-symtab/kernel-5.4/one_of_each.c: Likewise. 2044 * tests/data/test-symtab/kernel-5.4/single_function.c: Likewise. 2045 * tests/data/test-symtab/kernel-5.4/single_function_gpl.c: Likewise. 2046 * tests/data/test-symtab/kernel-5.4/single_variable.c: Likewise. 2047 * tests/data/test-symtab/kernel-5.4/single_variable_gpl.c: Likewise. 2048 * tests/data/test-symtab/kernel-5.4/empty.ko: New test data. 2049 * tests/data/test-symtab/kernel-5.4/one_of_each.ko: Likewise. 2050 * tests/data/test-symtab/kernel-5.4/single_function.ko: Likewise. 2051 * tests/data/test-symtab/kernel-5.4/single_function_gpl.ko: Likewise. 2052 * tests/data/test-symtab/kernel-5.4/single_variable.ko: Likewise. 2053 * tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko: Likewise. 2054 * tests/data/test-symtab/kernel-5.6/Makefile: New test case makefile. 2055 * tests/data/test-symtab/kernel-5.6/empty.c: Likewise. 2056 * tests/data/test-symtab/kernel-5.6/one_of_each.c: Likewise. 2057 * tests/data/test-symtab/kernel-5.6/single_function.c: Likewise. 2058 * tests/data/test-symtab/kernel-5.6/single_function_gpl.c: Likewise. 2059 * tests/data/test-symtab/kernel-5.6/single_variable.c: Likewise. 2060 * tests/data/test-symtab/kernel-5.6/single_variable_gpl.c: Likewise. 2061 * tests/data/test-symtab/kernel-5.6/empty.ko: New test data. 2062 * tests/data/test-symtab/kernel-5.6/one_of_each.ko: Likewise. 2063 * tests/data/test-symtab/kernel-5.6/single_function.ko: Likewise. 2064 * tests/data/test-symtab/kernel-5.6/single_function_gpl.ko: Likewise. 2065 * tests/data/test-symtab/kernel-5.6/single_variable.ko: Likewise. 2066 * tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko: Likewise. 2067 * tests/data/test-symtab/kernel/Makefile: New test case source file. 2068 * tests/data/test-symtab/kernel/empty.c: Likewise. 2069 * tests/data/test-symtab/kernel/one_of_each.c: Likewise. 2070 * tests/data/test-symtab/kernel/single_function.c: Likewise. 2071 * tests/data/test-symtab/kernel/single_function_gpl.c: Likewise. 2072 * tests/data/test-symtab/kernel/single_variable.c: Likewise. 2073 * tests/data/test-symtab/kernel/single_variable_gpl.c: Likewise. 2074 * tests/test-symtab.cc: New test case to test kernel symtabs. 2075 20762020-05-18 Matthias Maennich <maennich@google.com> 2077 2078 tests: Add symtab test suite 2079 * tests/Makefile.am: add new test runtestsymtab 2080 * tests/data/Makefile.am: add new test data for runtestsymtab 2081 * tests/data/test-symtab/Makefile: Add this to build the binaries 2082 below from their source code. 2083 * tests/data/test-symtab/basic/empty.c: New test case source. 2084 * tests/data/test-symtab/basic/link_against_me.c: Likewise. 2085 * tests/data/test-symtab/basic/no_debug_info.c: Likewise. 2086 * tests/data/test-symtab/basic/one_function_one_variable.c: Likewise. 2087 * tests/data/test-symtab/basic/one_function_one_variable_undefined.c: Likewise. 2088 * tests/data/test-symtab/basic/single_function.c: Likewise. 2089 * tests/data/test-symtab/basic/single_undefined_function.c: Likewise. 2090 * tests/data/test-symtab/basic/single_undefined_variable.c: Likewise. 2091 * tests/data/test-symtab/basic/single_variable.c: Likewise. 2092 * tests/data/test-symtab/basic/empty.so: New test data, built from 2093 the Makefile above. 2094 * tests/data/test-symtab/basic/link_against_me.so: Likewise. 2095 * tests/data/test-symtab/basic/no_debug_info.so: Likewise. 2096 * tests/data/test-symtab/basic/one_function_one_variable.so: Likewise. 2097 * tests/data/test-symtab/basic/one_function_one_variable_undefined.so: Likewise. 2098 * tests/data/test-symtab/basic/single_function.so: Likewise. 2099 * tests/data/test-symtab/basic/single_undefined_function.so: Likewise. 2100 * tests/data/test-symtab/basic/single_undefined_variable.so: Likewise. 2101 * tests/data/test-symtab/basic/single_variable.so: Likewise. 2102 * tests/test-symtab.cc: New test driver. 2103 21042020-05-19 Dodji Seketeli <dodji@redhat.com> 2105 2106 Bug 25989 - type_topo_comp doesn't meet irreflexive requirements 2107 * src/abg-ir.cc (type_topo_comp::operator()): In the comparison 2108 operator consider two equivalent empty-qualified types as being 2109 topologically equivalent. 2110 21112020-05-07 Dodji Seketeli <dodji@redhat.com> 2112 2113 Bug 25661 - Support data member replacement by anonymous data member 2114 * include/abg-comp-filter.h (has_data_member_replaced_by_anon_dm): 2115 Declare new function. 2116 * include/abg-comparison.h (changed_var_sptr) 2117 (changed_var_sptrs_type): Declare new typedefs. 2118 (HARMLESS_DATA_MEMBER_CHANGE_CATEGORY): Add a new enumerator to 2119 the diff_category enum. 2120 (EVERYTHING_CATEGORY): In the diff_category, adjust this 2121 enumerator to OR the new HARMLESS_DATA_MEMBER_CHANGE_CATEGORY into 2122 it. 2123 (SUPPRESSED_CATEGORY, PRIVATE_TYPE_CATEGORY) 2124 (SIZE_OR_OFFSET_CHANGE_CATEGORY, VIRTUAL_MEMBER_CHANGE_CATEGORY) 2125 (CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY) 2126 (FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY) 2127 (FN_RETURN_TYPE_CV_CHANGE_CATEGORY, VAR_TYPE_CV_CHANGE_CATEGORY) 2128 (VOID_PTR_TO_PTR_CHANGE_CATEGORY) 2129 (BENIGN_INFINITE_ARRAY_CHANGE_CATEGORY): Adjust the value of these 2130 enumerators of the diff_category enum. 2131 (class_or_union_diff::{data_members_replaced_by_adms, 2132 ordered_data_members_replaced_by_adms}): Declare new member 2133 functions. 2134 * include/abg-fwd.h (var_decl_wptr): Declare new typedef. 2135 (get_next_data_member, get_first_non_anonymous_data_member) 2136 (find_data_member_from_anonymous_data_member) 2137 (get_absolute_data_member_offset): Declare new functions. 2138 * include/abg-ir.h (struct anonymous_dm_hash): Declare new type. 2139 (anonymous_data_member_sptr_set_type): Declare new typedef. 2140 (class decl_base): Befriend class class_or_union. 2141 (class dm_context_rel): Pimpl-ify this class. 2142 (dm_context_rel::{g,s}et_anonymous_data_member_types): Declare new 2143 member functions. 2144 (var_decl::get_anon_dm_reliable_name): Declare new member 2145 function. 2146 (class var_decl): Make get_absolute_data_member_offset, 2147 get_absolute_data_member_offset be friends of this. 2148 (class_or_union::maybe_fixup_members_of_anon_data_member): Declare 2149 new protected member function. 2150 * src/abg-comp-filter.cc (has_data_member_replaced_by_anon_dm): 2151 Define new function. 2152 (categorize_harmless_diff_node): Use the above. 2153 * src/abg-comparison-priv.h 2154 (class_or_union_diff::priv::{dms_replaced_by_adms_, 2155 changed_var_sptrs_type dms_replaced_by_adms_ordered_}): Add new 2156 data members. 2157 (data_member_comp::compare_data_members): Factorize this out of ... 2158 (data_member_comp::operator()(decl_base_sptr&, decl_base_sptr&)): 2159 ... this. 2160 (data_member_comp::operator()(changed_var_sptr&, 2161 changed_var_sptr&)): Add new member function. 2162 (sort_changed_data_members): Declare ... 2163 * src/abg-comparison.cc (sort_changed_data_members): ... new 2164 function. 2165 (get_default_harmless_categories_bitmap): Adjust to take the new 2166 abigail::comparison::HARMLESS_DATA_MEMBER_CHANGE_CATEGORY into 2167 account. 2168 (operator<<(ostream& o, diff_category c)): Likewise. 2169 (class_or_union_diff::ensure_lookup_tables_populated): Handle 2170 Handle the insertion of anonymous data members to replace existing 2171 data members. 2172 (class_or_union_diff::{data_members_replaced_by_adms, 2173 ordered_data_members_replaced_by_adms}): Define new accessors. 2174 (suppression_categorization_visitor::visit_end): Propagate the 2175 SUPPRESSION_CATEGORIZATION_VISITOR from changes to the type of the 2176 data member if the data member doesn't have real local changes. 2177 * src/abg-default-reporter.cc (default_reporter::report): Report 2178 about anonymous data members that replace data members. 2179 * src/abg-ir.cc (struct dm_context_rel::priv): Define new data 2180 structure. 2181 (dm_context_rel::{dm_context_rel, get_is_laid_out, 2182 set_is_laid_out, get_offset_in_bits, set_offset_in_bits, 2183 operator==, operator!=, get_anonymous_data_member, 2184 set_anonymous_data_member}): Define the member functions here as 2185 they are not inline anymore. 2186 (class_or_union::maybe_fixup_members_of_anon_data_member): Define 2187 new member function. 2188 (class_or_union::add_data_member): Use it. 2189 (get_first_non_anonymous_data_member, get_next_data_member) 2190 (get_absolute_data_member_offset) 2191 (find_data_member_from_anonymous_data_member): Define new 2192 functions. 2193 * src/abg-reporter-priv.h 2194 (maybe_report_data_members_replaced_by_anon_dm): Declare ... 2195 * src/abg-reporter-priv.cc 2196 (maybe_report_data_members_replaced_by_anon_dm): ... new function. 2197 * src/abg-leaf-reporter.cc (leaf_reporter::report): Report data 2198 members replaced by anonymous data members. 2199 * tests/data/test-diff-filter/test-PR25661-[1-6]-report-[1-4].txt: New 2200 test reference outputs. 2201 * tests/data/test-diff-filter/test-PR25661-[1-6]-v{0,1}.c: Test 2202 source code files. 2203 * tests/data/test-diff-filter/test-PR25661-[1-6]-v{0,1}.o: Test 2204 binary input files. 2205 * tests/data/Makefile.am: Add the new test files above to source 2206 distribution. 2207 * tests/test-diff-filter.cc (in_out_specs): Add the binary test 2208 inputs above to this test harness. 2209 * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: 2210 Adjust. 2211 22122020-05-07 Dodji Seketeli <dodji@redhat.com> 2213 2214 dwarf-reader: support several anonymous data members in a given class 2215 * include/abg-ir.h (class_or_union::find_anonymous_data_member): 2216 Declare a new member function. 2217 (class_or_union::find_data_member): Declare a new overload. 2218 (var_decl::get_anon_dm_reliable_name): Declare new member 2219 function. 2220 * src/abg-ir.cc (var_decl::get_pretty_representation): Make this 2221 work on a var_decl is going to be used to represent an anonymous 2222 data member even before the var_decl has been added to its finale 2223 scope. This is useful to make class_or_union::find_data_member 2224 work on a var_decl that is to be used as an anonymous data member. 2225 (var_decl::get_anon_dm_reliable_name): Define new member function. 2226 (class_or_union::find_data_member): In the existing overload that 2227 takes a string, look for the named data member inside the 2228 anonymous data members. Define a new overload that takes a 2229 var_decl_sptr, to look for anonymous data members. 2230 (class_or_union::find_anonymous_data_member): Define a new member 2231 function. 2232 (lookup_data_member): Use the existing 2233 class_or_union::find_data_member. 2234 * src/abg-reader.cc: (build_class_decl): Use the full anonymous 2235 variable for lookup, rather than its name which is empty and will 2236 thus give false positives. 2237 * src/abg-dwarf-reader.cc (add_or_update_class_type): Likewise. 2238 * src/abg-comparison.cc 2239 (class_or_union_diff::ensure_lookup_tables_populated): Name 2240 anonymous data members properly - as opposed to wrongly using 2241 their empty name. 2242 * src/abg-reporter-priv.cc (represent): In the overload for 2243 var_diff_sptr, make sure that changes to the /type/ of a variable 2244 declaration are always reported. 2245 * tests/data/test-abidiff-exit/test-member-size-report0.txt: 2246 Adjust as we now emit more detailed changes about anonymous data 2247 members. 2248 * tests/data/test-abidiff-exit/test-member-size-report1.txt: 2249 Likewise. 2250 * tests/data/test-annotate/test-anonymous-members-0.o.abi: Adjust 2251 to reflect the fact that a class can now have several anonymous 2252 data members. 2253 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: 2254 Likewise. 2255 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 2256 Likewise. 2257 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 2258 Likewise. 2259 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 2260 Likewise. 2261 22622020-05-07 Dodji Seketeli <dodji@redhat.com> 2263 2264 {default,leaf}-reporter: group data members changes reports together 2265 * include/abg-comparison.h 2266 (class_or_union_diff::{sorted_changed_data_members, 2267 count_filtered_changed_data_members, 2268 sorted_subtype_changed_data_members, 2269 count_filtered_subtype_changed_data_members}): Declare ... 2270 * src/abg-comparison.cc 2271 (class_or_union_diff::{sorted_changed_data_members, 2272 count_filtered_changed_data_members, 2273 sorted_subtype_changed_data_members, 2274 count_filtered_subtype_changed_data_members}): ... accessors for 2275 existing private data members. 2276 * src/abg-default-reporter.cc (default_reporter::report): In the 2277 class_or_union_diff& overload, group the reporting of the changes 2278 to data member sub-types with the replacement of data members. 2279 These are just data member changes after all. Use the newly 2280 declared accessors for better measure. 2281 * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. 2282 * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Adjust. 2283 * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. 2284 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 2285 Likewise. 2286 22872020-05-18 Dodji Seketeli <dodji@redhat.com> 2288 2289 Add -g back to ABIGAIL_DEVEL 2290 * configure.ac: Don't forget to set -g when ABIGAIL_DEVEL is set. 2291 22922020-05-15 Giuliano Procida <gprocida@google.com> 2293 2294 clang-format: set continuation indentation to 2 2295 * .clang-format: Set ContinuationIndentWidth to 2. 2296 22972020-05-15 Matthias Maennich <maennich@google.com> 2298 2299 configure: add more diagnostic options when ABIGAIL_DEVEL is set 2300 * configure.ac: add -D_FORTIFY_SOURCE=2 and -D_GLIBCXX_DEBUG 2301 compilation defines if ABIGAIL_DEVEL is set. Note that with GCC 4.8.5, 2302 -D_FORTIFY_SOURCE=2 requires options to be set. So I am setting 2303 the optimization level to -Og. 2304 * src/abg-dwarf-reader.cc (read_context::{compute_canonical_die, 2305 get_or_compute_canonical_die, associate_die_to_decl, 2306 set_canonical_die_offset, schedule_type_for_late_canonicalization, 2307 compare_dies}, get_scope_for_die, add_or_update_union_type) 2308 (read_debug_info_into_corpus, build_ir_node_from_die): Initialize 2309 the 'source' variable. 2310 * tests/test-diff-filter.cc (main): Check the return value of the 2311 system function. 2312 * tests/test-diff-pkg.cc (main): Likewise. 2313 * tests/test-read-write.cc (main): Likewise. 2314 23152020-05-15 Matthias Maennich <maennich@google.com> 2316 2317 configure: add ABIGAIL_DEBUG options 2318 * configure.ac: add ABIGAIL_DEBUG environment variable for 2319 improved debugging capabilities 2320 23212020-05-05 Giuliano Procida <gprocida@google.com> 2322 2323 Tidy get_pretty_representation qualified_name. 2324 * include/abg-ir.h (type_decl::get_pretty_representation) 2325 Change default for qualified_name parameter to true. 2326 23272020-05-13 Dodji Seketeli <dodji@redhat.com> 2328 2329 Bug 25986 - Wrong name of function type used in change report 2330 * src/abg-ir.cc (function_type::get_cached_name): Don't cache 2331 names for non-canonicalized types. 2332 * tests/data/test-abidiff-exit/test-fun-param-report.txt: Add 2333 reference output for new test. 2334 * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.abi: Add new test 2335 input files. 2336 * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.c: Add source 2337 files for the above. 2338 * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.o: Add 2339 binaries for the above. 2340 23412020-05-11 Mark Wielaard <mark@klomp.org> 2342 2343 Don't iterate before the start of a RandomAccessOutputIterator. 2344 * include/abg-diff-utils.h (compute_diff): Put brackets around 2345 p[ux].[xy]() + 1 calculation. 2346 23472020-05-12 Giuliano Procida <gprocida@google.com> 2348 2349 doc: Fix sufficient suppression property lists. 2350 * doc/manuals/libabigail-concepts.rst: Add missing 2351 sufficient properties for suppress_file, suppress_function and 2352 suppress_variable. Use consistent language about what will 2353 happen when no property in the list in provided. 2354 23552020-05-11 Matthias Maennich <maennich@google.com> 2356 2357 cxx-compat: add test suite for cxx-compat 2358 * tests/Makefile.am: Add new test case runtestcxxcompat. 2359 * tests/test-cxx-compat.cc: New test source file. 2360 Reviewed-by: Giuliano Procida <gprocida@google.com> 2361 23622020-05-11 Matthias Maennich <maennich@google.com> 2363 2364 dwarf-reader: read_context: drop some unused accessor methods 2365 * src/abg-dwarf-reader.cc (read_context::fun_syms_sptr): Delete method. 2366 (read_context::fun_syms): Likewise. 2367 (read_context::var_syms_sptr): Likewise. 2368 (read_context::var_syms): Likewise. 2369 (read_context::undefined_fun_syms_sptr): Likewise. 2370 (read_context::undefined_fun_syms): Likewise. Both overloads. 2371 (read_context::undefined_var_syms_sptr): Likewise. 2372 (read_context::undefined_var_syms): Likewise. Both overloads. 2373 Reviewed-by: Giuliano Procida <gprocida@google.com> 2374 23752020-05-11 Matthias Maennich <maennich@google.com> 2376 2377 tests/.gitignore: ignore all files starting with runtest* 2378 * tests/.gitignore: gitignore all files named runtest* 2379 Reviewed-by: Giuliano Procida <gprocida@google.com> 2380 23812020-05-11 Matthias Maennich <maennich@google.com> 2382 2383 configure: set -Wno-error-overloaded-virtual for clang builds 2384 * configure.ac: set -Wno-error-overloaded-virtual for clang++ 2385 23862020-05-05 Giuliano Procida <gprocida@google.com> 2387 2388 Let std::unordered_map::operator[] insert keys. 2389 * src/abg-reader.cc (read_context::key_type_decl): Rely on 2390 std::unordered_map::operator[] to create map entries if they 2391 are missing. (build_elf_symbol_db): Ditto. 2392 23932020-05-05 Giuliano Procida <gprocida@google.com> 2394 2395 abg-reader.cc: Remove key_replacement_type_map. 2396 * src/abg-reader.cc (key_replacement_type_map): Drop unused 2397 function. 2398 23992020-05-04 Giuliano Procida <gprocida@google.com> 2400 2401 Refactor read_parameter_spec_from_string logic. 2402 * src/abg-suppression.cc (read_parameter_spec_from_string): 2403 Use separate string and regex variables to simplify the 2404 creation of returned parameter specification. 2405 Reviewed-by: Matthias Maennich <maennich@google.com> 2406 24072020-05-04 Giuliano Procida <gprocida@google.com> 2408 2409 Use regex::match wrapper instead of regexec. 2410 * src/abg-corpus-priv.h: Mechanically substitute use of 2411 regexec with regex::match wrapper. 2412 * src/abg-suppression-priv.h: Ditto. 2413 * src/abg-suppression.cc: Ditto. 2414 Reviewed-by: Matthias Maennich <maennich@google.com> 2415 24162020-05-12 Giuliano Procida <gprocida@google.com> 2417 2418 Tidy checks for sufficient suppression properties. 2419 * src/abg-suppression.cc (check_sufficient_props): New helper 2420 function to check for sufficient properties in a section. 2421 (read_type_suppression): Replace conditional logic with call 2422 to check_sufficient_props. 2423 (read_function_suppression): Ditto. 2424 (read_variable_suppression): Ditto. 2425 (read_file_suppression): Ditto. 2426 * tests/data/test-diff-suppr/test15-suppr-added-fn-4.suppr: 2427 Explain why the suppression will be ignored. 2428 * tests/data/test-diff-suppr/test16-suppr-removed-fn-4.suppr: 2429 Ditto. 2430 * tests/data/test-diff-suppr/test17-suppr-added-var-4.suppr: 2431 Ditto. 2432 * tests/data/test-diff-suppr/test18-suppr-removed-var-4.suppr: 2433 Ditto. 2434 24352020-05-12 Dodji Seketeli <dodji@redhat.com> 2436 2437 Bug 25977 - runtestabidiffexit regression on EL7 2438 * abg-comparison.cc: 2439 (suppression_categorization_visitor::visit_end): Don't suppress 2440 the entire class of equivalence of a function diff node if that 2441 function diff node itself was not suppressed. 2442 24432020-05-04 Giuliano Procida <gprocida@google.com> 2444 2445 Use regex::compile wrapper instead of regcomp. 2446 * src/abg-corpus-priv.h: Mechanically substitute use of 2447 regcomp with regex::compile wrapper. 2448 * src/abg-suppression-priv.h: Ditto. 2449 There are no behavioural changes. 2450 Reviewed-by: Matthias Maennich <maennich@google.com> 2451 24522020-05-04 Giuliano Procida <gprocida@google.com> 2453 2454 Add POSIX regex wrapper functions. 2455 * include/abg-regex.h (compile): Declare new function. 2456 (match): Declare new function. 2457 * src/abg-regex.cc (compile): Add new function wrapping 2458 regcomp. (match): Add new function wrapping regexec. 2459 Reviewed-by: Matthias Maennich <maennich@google.com> 2460 24612020-05-04 Giuliano Procida <gprocida@google.com> 2462 2463 abg-suppression.cc: More uniform variable naming. 2464 * src/abg-suppression.cc (read_type_suppression): Rename "nil" 2465 variable to "result" and reset it instead of introducing 2466 "suppr" later on. (read_function_suppression): Rename "nil" 2467 variable to "result" and reset it instead of introducing 2468 "result" later on. 2469 Reviewed-by: Matthias Maennich <maennich@google.com> 2470 24712020-05-04 Giuliano Procida <gprocida@google.com> 2472 2473 Escape names used in symbol whitelisting regex. 2474 * include/regex.h (escape): New string reference holder 2475 class. (operator<<): Declaration of std::ostream, 2476 regex::escape overload. 2477 * include/regex.cc (operator<<): New std::ostream, 2478 regex::escape overload that outputs regex-escaped strings. 2479 * src/abg-tools-utils.cc 2480 (gen_suppr_spec_from_kernel_abi_whitelists): Make sure any 2481 special regex characters in symbol names are escaped. 2482 Reviewed-by: Matthias Maennich <maennich@google.com> 2483 24842020-05-04 Giuliano Procida <gprocida@google.com> 2485 2486 Document ^_^ regex in generate_from_strings. 2487 * src/abg-regex.cc (generate_from_strings): Document ^_^ 2488 regex. 2489 24902020-05-04 Giuliano Procida <gprocida@google.com> 2491 2492 Tidy #includes in a few files. 2493 * src/abg-corpus-priv.h: Separate and sort #include 2494 directives. 2495 * src/abg-corpus.cc: Ditto. 2496 * src/abg-regex.cc: Ditto. 2497 * src/abg-suppression-priv.h: Ditto. 2498 * src/abg-suppression.cc: Ditto. 2499 25002020-05-01 Giuliano Procida <gprocida@google.com> 2501 2502 Hoist some common expressions evaluating offsets. 2503 * src/abg-suppression.cc (type_suppression::suppresses_diff): 2504 Hoist some constant expressions out of loops. 2505 Reviewed-by: Matthias Maennich <maennich@google.com> 2506 25072020-05-01 Giuliano Procida <gprocida@google.com> 2508 2509 Make set_drops_artifact_from_ir non-const. 2510 * include/abg-suppression.h 2511 (suppression_base::set_drops_artifact_from_ir): 2512 Drop const qualifier. 2513 * src/abg-suppression.cc 2514 (suppression_base::set_drops_artifact_from_ir): 2515 Drop const qualifier. 2516 Reviewed-by: Matthias Maennich <maennich@google.com> 2517 25182020-05-01 Giuliano Procida <gprocida@google.com> 2519 2520 Eliminate redundant conditional operators. 2521 * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): 2522 Eliminate redundant conditional operator. 2523 * src/abg-dwarf-reader.cc (build_reference_type): Ditto. 2524 * src/abg-reader.cc (read_static): Ditto. 2525 (read_is_artificial): Ditto. (build_function_parameter): 2526 Ditto. (build_function_decl): Ditto. 2527 (build_qualified_type_decl): Ditto. 2528 (build_reference_type_def): Ditto. 2529 Reviewed-by: Matthias Maennich <maennich@google.com> 2530 25312020-05-01 Giuliano Procida <gprocida@google.com> 2532 2533 Remove stray semicolons. 2534 * include/abg-diff-utils.h (display_edit_script): Remove 2535 redundant semicolon. 2536 * include/abg-fwd.h (lookup_basic_type): Ditto. 2537 * src/abg-comparison.cc (mark_diff_as_visited): 2538 Ditto. (array_diff::has_local_changes): Ditto. 2539 (class_diff::ensure_lookup_tables_populated): Ditto. 2540 * src/abg-corpus.cc 2541 (corpus::priv::build_unreferenced_symbols_tables): Ditto. 2542 * src/abg-default-reporter.cc (default_reporter::report): 2543 Ditto. 2544 * src/abg-dwarf-reader.cc (finish_member_function_reading): 2545 Ditto. 2546 * src/abg-ir.cc (is_compatible_with_class_type): Ditto. 2547 (enum_type_decl::enumerator::set_name): Ditto. 2548 * src/abg-reader.cc (read_corpus_from_input): Ditto. 2549 (build_function_type): Ditto. 2550 * src/abg-suppression.cc (type_suppression::suppresses_type): 2551 Ditto. 2552 Reviewed-by: Matthias Maennich <maennich@google.com> 2553 25542020-05-01 Giuliano Procida <gprocida@google.com> 2555 2556 Remove excess whitespace. 2557 * src/abg-suppression.cc: Eliminate double blank lines. 2558 (read_parameter_spec_from_string): Eliminate space between 2559 ++ operator and its operand. 2560 Reviewed-by: Matthias Maennich <maennich@google.com> 2561 25622020-01-12 Matthias Maennich <maennich@google.com> 2563 2564 corpus/writer: sort emitted translation units by path name 2565 * include/abg-fwd.h: remove translation_units fwd declaration. 2566 * include/abg-ir.h (struct shared_translation_unit_comparator): 2567 Define new class. 2568 (translation_units): Define new typedef. 2569 * src/abg-corpus.cc (corpus::add): do checked insert into the 2570 translation_units set (rather than vector::push_back) 2571 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust test data. 2572 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 2573 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 2574 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 2575 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 2576 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 2577 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 2578 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 2579 25802020-04-29 Matthias Maennich <maennich@google.com> 2581 2582 tests: reorder test execution to optimize 'make check' runtime 2583 * tests/Makefile.am(TESTS): split up in expensive and non 2584 expensive tests, sort the expensive ones by runime, the cheap 2585 ones alphabetically 2586 25872020-04-29 Matthias Maennich <maennich@google.com> 2588 2589 test-types-stability: parallelize test case alternatives 2590 * tests/test-types-stability.cc (test_task): add field no_default_sizes 2591 (test_task::perform) Switch on the new flag to test a different 2592 behaviour. 2593 (main): Schedule an additional test case to test with the new flag. 2594 Cc: Mark Wielaard <mark@klomp.org> 2595 25962020-05-04 Dodji Seketeli <dodji@redhat.com> 2597 2598 Fix compilation with g++ 4.8.5 on el7 2599 * include/abg-libxml-utils.h (build_sptr<xmlTextReader>): Wrap 2600 this specialization in the namespace sptr_utils and do away with 2601 the sptr_utils qualifier. 2602 * include/abg-regex.h (build_sptr<regex_t>): Likewise. 2603 26042020-04-24 Giuliano Procida <gprocida@google.com> 2605 2606 Simplify generation of symbol whitelist regex. 2607 * include/abg-regex.h (generate_from_strings): Declare new 2608 function to build a regex from some strings, representing a 2609 membership test. 2610 * src/abg-regex.cc (generate_from_strings): Implement new 2611 function to build a regex from some strings, representing a 2612 membership test, in a straightfoward fashion. 2613 * src/abg-tools-utils.cc 2614 (gen_suppr_spec_from_kernel_abi_whitelists): Replace 2615 regex-building code with a call to generate_from_strings. 2616 * tests/test-kmi-whitelist.cc: Update regexes in test. 2617 26182020-04-24 Giuliano Procida <gprocida@google.com> 2619 2620 Move libxml bits out of abg-sptr-utils.h. 2621 * include/abg-sptr-utils.h: Remove reader_sptr and 2622 xml_char_sptr typedefs, from namespace 2623 sptr_utils. (build_sptr): Remove corresponding template 2624 function specialisations for these types. 2625 * include/abg-libxml-utils.h: Add reader_sptr and 2626 xml_char_sptr typedefs, to namespace xml. (build_sptr): Add 2627 corresponding template function specialisations for these 2628 types. 2629 26302020-04-24 Giuliano Procida <gprocida@google.com> 2631 2632 Move regex definitions to own files. 2633 * include/Makefile.am: Add abg-regex.h. 2634 * src/Makefile.am: Remove abg-sptr-utils.h, add abg-regex.cc 2635 * include/abg-sptr-utils.h (regex_t_sptr): Remove this 2636 typedef, from namespace abigail::sptr_utils. 2637 (regex_t_deleter): Remove this struct, from namespace 2638 abigail::sptr_utils. (build_sptr): Remove these template 2639 specialisations, in duplicate, for regex_t_sptr. 2640 * include/abg-regex.h: New file, introduces namespace 2641 abigail::regex. (regex_t_sptr): Add this typedef, to namespace 2642 abigail::regex. (regex_t_deleter): Add this struct, to 2643 namespace abigail::regex. (build_sptr): Add these template 2644 specialisations for regex_t_sptr 2645 * src/abg-sptr-utils.cc: Remove this file. 2646 * src/abg-regex.cc: Add new file with contents effectively 2647 the same as abg-sptr-utils.cc. 2648 * src/abg-corpus-priv.h: Update regex_t_sptr namespace 2649 qualification. 2650 * src/abg-corpus.cc: Ditto. 2651 * src/abg-suppression-priv.h: Ditto. 2652 * src/abg-suppression.cc: Ditto. 2653 26542020-04-27 Mark Wielaard <mark@klomp.org> 2655 2656 Add --no-write-default-sizes option. 2657 * doc/manuals/abidw.rst: Document --no-write-default-sizes. 2658 * include/abg-writer.h (set_write_default_sizes): New function 2659 declaration. 2660 (set_common_options): Call set_write_default_sizes. 2661 * src/abg-reader.cc (build_function_decl): Get default size. 2662 (build_pointer_type_def): Likewise. 2663 (build_reference_type_def): Likewise. 2664 (build_function_type): Likewise. 2665 * src/abg-writer.cc (write_context): Add m_write_default_sizes 2666 bool. 2667 (get_write_default_sizes): New method. 2668 (set_write_default_sizes): Likewise. 2669 (write_size_and_alignment): Add default size and alignment 2670 parameters. 2671 (set_write_default_sizes): New function. 2672 (write_type_decl): Set default size and alignment. 2673 (write_pointer_type_def): Likewise. 2674 (write_reference_type_def): Likewise. 2675 (write_function_decl): Likewise. 2676 (write_function_type): Likewise. 2677 (write_class_decl_opening_tag): Likewise. 2678 (write_union_decl_opening_tag): Likewise. 2679 * tests/test-types-stability.cc (perform): Also test --abidiff 2680 with --no-write-default-sizes. 2681 * tools/abidw.cc (option): Add default_sizes bool. 2682 (parse_command_line): Parse --no-write-default-sizes. 2683 (display_usage): Add doc string for --no-write-default-sizes. 2684 26852020-04-26 Mark Wielaard <mark@klomp.org> 2686 2687 Rename read_elf_symbol_binding to read_elf_symbol_visibility. 2688 * src/abg-reader.cc (read_elf_symbol_binding): Renamed to... 2689 (read_elf_symbol_visibility): ...this. 2690 26912020-04-22 Giuliano Procida <gprocida@google.com> 2692 2693 abidiff: Omit declaration-only type size 0 diffs. 2694 * src/abg-reporter-priv.cc (report_size_and_alignment_changes): 2695 Filter out declaration-only / defined type size changes 2696 unconditionally. 2697 * tests/data/test-abidiff-exit/test-decl-struct-report.txt: 2698 Update test. 2699 27002020-04-22 Giuliano Procida <gprocida@google.com> 2701 2702 abidiff: Blank line after declaration-only diff. 2703 * src/abg-default-reporter.cc (default_reporter::report): In 2704 the class_or_union_diff overload, emit a new line at the end 2705 of the declaration-only reporting path. 2706 * tests/data/test-abidiff-exit/test-decl-struct-report.txt: 2707 Add missing blank lines. 2708 27092020-04-22 Giuliano Procida <gprocida@google.com> 2710 2711 Add tests for declaration-only struct diffs. 2712 * tests/data/Makefile.am: Add new test case files. 2713 * tests/data/test-abidiff-exit/test-decl-struct-report.txt: 2714 New test case generating "declaration-only" output. 2715 * tests/data/test-abidiff-exit/test-decl-struct-v0.c: Ditto. 2716 * tests/data/test-abidiff-exit/test-decl-struct-v0.o: Ditto. 2717 * tests/data/test-abidiff-exit/test-decl-struct-v1.c: Ditto. 2718 * tests/data/test-abidiff-exit/test-decl-struct-v1.o: Ditto. 2719 * tests/test-abidiff-exit.cc: Run new test case. 2720 27212020-04-24 Mark Wielaard <mark@klomp.org> 2722 2723 Add --no-elf-needed option to drop DT_NEEDED list from corpus. 2724 * doc/manuals/abidw.rst: Document --no-elf-needed. 2725 * include/abg-writer.h (set_write_elf_needed): New function. 2726 (set_common_options): Call it. 2727 * src/abg-writer.cc (write_context::m_write_elf_needed): New data 2728 member. 2729 (write_context::{g,s}et_write_elf_needed): Add new accessors. 2730 (set_write_elf_needed): New function. 2731 (write_context::write_corpus): Check write_elf_needed. 2732 * tools/abidw.cc (options): Add write_elf_needed bool. 2733 (display_usage): Describe --no-elf-needed. 2734 (parse_command_line): Parse --no-elf-needed. 2735 27362020-04-21 Mark Wielaard <mark@klomp.org> 2737 2738 Add no-parameter-names to drop function parameter names. 2739 * doc/manuals/abidw.rst: Add documentation for --no-parameter-names. 2740 * include/abg-writer.h (set_write_parameter_names): New function. 2741 (set_write_parameter_names): Call it. 2742 * src/abg-writer.cc (write_context): Add m_write_parameter_names 2743 bool, get_write_parameter_names and set_write_parameter_names 2744 functions. 2745 (write_context::write_function_decl): Check write_parameter_names. 2746 * tools/abidw.cc (options): Add write_parameter_names. 2747 (display_usage): Describe --no-parameter-names. 2748 (parse_command_line): Parse --no-parameter-names. 2749 27502020-04-24 Dodji Seketeli <dodji@redhat.com> 2751 2752 abipkgdiff: Fix race condition while using private types suppr specs 2753 * tools/abipkgdiff.cc (compare_args::private_types_suppr{1,2}): 2754 Make these data member *not* be a reference anymore. 2755 (maybe_create_private_types_suppressions): Rename this into ... 2756 (create_private_types_suppressions): ... this. Also, make this 2757 function return a copy of the vector of suppression specifications 2758 for private types created. 2759 (compare_prepared_userspace_packages): Use the new 2760 create_private_types_suppressions to create a copy of private 2761 types suppression specifications, rather than sharing it from 2762 package::private_types_suppressions_. 2763 (extract_package_and_map_its_content): Adjust to avoid creating 2764 the shared suppression specifications for private types. 2765 (package::private_types_suppressions_): Remove this data member 2766 that was holding the shared suppressions for private types. 2767 (package::private_types_suppressions): Remove these accessors. 2768 27692020-04-22 Giuliano Procida <gprocida@google.com> 2770 2771 test24-soname-suppr*txt: Fix suppression syntax. 2772 * tests/data/test-diff-suppr/test24-soname-suppr-0.txt: Fix 2773 typo, change "reached_through" to "accessed_through". 2774 * tests/data/test-diff-suppr/test24-soname-suppr-1.txt: Ditto. 2775 * tests/data/test-diff-suppr/test24-soname-suppr-2.txt: Ditto. 2776 * tests/data/test-diff-suppr/test24-soname-suppr-3.txt: Ditto. 2777 * tests/data/test-diff-suppr/test24-soname-suppr-4.txt: Ditto. 2778 27792020-04-20 Giuliano Procida <gprocida@google.com> 2780 2781 test35-leaf.suppr: fix regex typo. 2782 * tests/data/test-diff-suppr/test35-leaf.suppr: Fix typo in 2783 regex, "*." -> ".*". 2784 27852020-04-21 Matthias Maennich <maennich@google.com> 2786 2787 abg-elf-helpers: migrate maybe_adjust_et_rel_sym_addr_to_abs_addr 2788 * src/abg-dwarf-reader.cc 2789 (maybe_adjust_et_rel_sym_addr_to_abs_addr) 2790 (drop the wrapped overload completely): Move out functions. 2791 * src/abg-elf-helpers.cc 2792 (maybe_adjust_et_rel_sym_addr_to_abs_addr): New function. 2793 * src/abg-elf-helpers.h 2794 (maybe_adjust_et_rel_sym_addr_to_abs_addr): New function 2795 declaration. 2796 Reviewed-by: Giuliano Procida <gprocida@google.com> 2797 27982020-04-21 Matthias Maennich <maennich@google.com> 2799 2800 abg-elf-helpers: migrate more elf helpers (architecture specific helpers) 2801 * src/abg-dwarf-reader.cc (elf_architecture_is_ppc64): Move 2802 function out and adjust callers to call the migrated 2803 functions. 2804 (elf_architecture_is_big_endian): Likewise. 2805 (architecture_word_size): Likewise. 2806 (current_elf_file_is_executable): Likewise. 2807 (current_elf_file_is_dso): Likewise. 2808 * src/abg-elf-helpers.cc (architecture_is_ppc64): Add new function. 2809 (architecture_is_big_endian): Likewise. 2810 (get_architecture_word_size): Likewise. 2811 (is_executable): Likewise. 2812 (is_dso): Likewise. 2813 * src/abg-elf-helpers.h (architecture_is_ppc64): Add new declaration. 2814 (architecture_is_big_endian): Likewise. 2815 (get_architecture_word_size): Likewise. 2816 (is_executable): Likewise. 2817 (is_dso): Likewise. 2818 Reviewed-by: Giuliano Procida <gprocida@google.com> 2819 28202020-04-21 Matthias Maennich <maennich@google.com> 2821 2822 abg-dwarf-reader: migrate more ELF helpers to elf-helpers 2823 * src/abg-dwarf-reader.cc (read_context::{opd_section_, 2824 ksymtab_section_, ksymtab_reloc_section_, ksymtab_gpl_section_, 2825 ksymtab_gpl_reloc_section_, ksymtab_strings_section_}): Make these 2826 data members mutable as they are set by their getter member 2827 functions, as an implementation detail. 2828 (read_context::find_symbol_table_section): 2829 adjust to new interface of elf_helpers::find_symbol_table_section. 2830 (find_opd_section): use elf_helpers::find_opd_section for lookup. 2831 (find_ksymtab_section): use elf_helpers::find_ksymtab_section. 2832 (find_ksymtab_gpl_section): use elf_helpers::find_ksymtab_gpl_section. 2833 (find_relocation_section): Move out function. 2834 (get_binary_load_address): Move out function. 2835 (find_ksymtab_reloc_section): use elf_helpers::find_relocation_section 2836 (find_ksymtab_gpl_reloc_section): use 2837 elf_helpers::find_relocation_section 2838 * src/elf-helpers.cc (find_symbol_table_section): change 2839 interface to match other find_*_section functions. 2840 (find_symbol_table_section_index): Adjust for the new interface of 2841 find_symbol_table_section. 2842 (find_opd_section): New function. 2843 (find_ksymtab_section): New function. 2844 (find_ksymtab_gpl_section): New function. 2845 (find_relocation_section): New function. 2846 (get_binary_load_address): New function. 2847 * src/elf-helpers.h (find_symbol_table_section): Change declaration. 2848 (find_opd_section): New function declaration. 2849 (find_ksymtab_section): New function declaration. 2850 (find_ksymtab_gpl_section): New function declaration. 2851 (find_relocation_section): New function declaration. 2852 (get_binary_load_address): New function declaration. 2853 28542020-04-21 Matthias Maennich <maennich@google.com> 2855 2856 abg-elf-helpers: consolidate the is_linux_kernel* helpers 2857 * src/abg-dwarf-reader.cc 2858 (read_context::function_symbol_is_exported): use is_linux_kernel 2859 from elf_helpers. 2860 (read_context::variable_is_exported): Likewise. 2861 (read_context::get_symtab_format): Likewise. 2862 (read_context::load_symbol_maps): Likewise. 2863 (read_debug_info_into_corpus): Likewise. 2864 (read_context::is_linux_kernel_binary): Drop function. 2865 (read_context::is_linux_kernel_module): Drop function. 2866 * src/abg-elf-helpers.cc (binary_is_linux_kernel): rename to 2867 is_linux_kernel 2868 (binary_is_linux_kernel_module): rename to is_linux_kernel_module 2869 (find_ksymtab_strings_section): Adjust to function renames. 2870 * src/abg-elf-helpers.h (binary_is_linux_kernel): rename to 2871 is_linux_kernel 2872 (binary_is_linux_kernel_module): rename to is_linux_kernel_module 2873 Reviewed-by: Giuliano Procida <gprocida@google.com> 2874 28752020-04-21 Matthias Maennich <maennich@google.com> 2876 2877 abg-elf-helpers: move some kernel helpers from abg-dwarf-reader 2878 * abg-dwarf-reader.cc (binary_is_linux_kernel): Move function out. 2879 (binary_is_linux_kernel_module): Likewise. 2880 (find_ksymtab_strings_section): Likewise. 2881 * abg-elf-helpers.cc (binary_is_linux_kernel): Move function in. 2882 (binary_is_linux_kernel_module): Likewise. 2883 (find_ksymtab_strings_section): Likewise. 2884 * abg-elf-helpers.h (binary_is_linux_kernel): Add declaration. 2885 (binary_is_linux_kernel_module): Likewise. 2886 (find_ksymtab_strings_section): Likewise. 2887 Reviewed-by: Giuliano Procida <gprocida@google.com> 2888 28892020-04-21 Matthias Maennich <maennich@google.com> 2890 2891 abg-elf-helpers: move some versioning helpers from abg-dwarf-reader 2892 * abg-dwarf-reader.cc (get_symbol_versionning_sections): Move function out. 2893 (get_version_definition_for_versym): Likewise. 2894 (get_version_needed_for_versym): Likewise. 2895 (get_version_for_symbol): Likewise. 2896 * abg-elf-helpers.cc (get_symbol_versionning_sections): Move function in. 2897 (get_version_definition_for_versym): Likewise. 2898 (get_version_needed_for_versym): Likewise. 2899 (get_version_for_symbol): Likewise. 2900 * abg-elf-helpers.h (get_symbol_versionning_sections): Add declaration. 2901 (get_version_definition_for_versym): Likewise. 2902 (get_version_needed_for_versym): Likewise. 2903 (get_version_for_symbol): Likewise. 2904 Reviewed-by: Giuliano Procida <gprocida@google.com> 2905 29062020-04-21 Matthias Maennich <maennich@google.com> 2907 2908 abg-elf-helpers: move some elf helpers from abg-dwarf-reader 2909 * abg-dwarf-reader.cc (stt_to_elf_symbol_type): Move function out. 2910 (stb_to_elf_symbol_binding): Likewise. 2911 (stv_to_elf_symbol_visibility): Likewise. 2912 (e_machine_to_string): Likewise. 2913 (find_section): Likewise. 2914 (find_symbol_table_section): Likewise. 2915 (find_symbol_table_section_index): Likewise. 2916 (enum hash_table_kind): Likewise. 2917 (find_hash_table_section_index): Likewise. 2918 (get_symbol_versionning_sections): Likewise. 2919 (find_text_section): Likewise. 2920 (find_bss_section): Likewise. 2921 (find_rodata_section): Likewise. 2922 (find_data_section): Likewise. 2923 (find_data1_section): Likewise. 2924 * abg-elf-helpers.cc (stt_to_elf_symbol_type): Move function in. 2925 (stb_to_elf_symbol_binding): Likewise. 2926 (stv_to_elf_symbol_visibility): Likewise. 2927 (e_machine_to_string): Likewise. 2928 (find_section): Likewise. 2929 (find_symbol_table_section): Likewise. 2930 (find_symbol_table_section_index): Likewise. 2931 (enum hash_table_kind): Likewise. 2932 (find_hash_table_section_index): Likewise. 2933 (get_symbol_versionning_sections): Likewise. 2934 (find_text_section): Likewise. 2935 (find_bss_section): Likewise. 2936 (find_rodata_section): Likewise. 2937 (find_data_section): Likewise. 2938 (find_data1_section): Likewise. 2939 * abg-elf-helpers.h (stt_to_elf_symbol_type): Add declaration. 2940 (stb_to_elf_symbol_binding): Likewise. 2941 (stv_to_elf_symbol_visibility): Likewise. 2942 (e_machine_to_string): Likewise. 2943 (find_section): Likewise. 2944 (find_symbol_table_section): Likewise. 2945 (find_symbol_table_section_index): Likewise. 2946 (enum hash_table_kind): Likewise. 2947 (find_hash_table_section_index): Likewise. 2948 (get_symbol_versionning_sections): Likewise. 2949 (find_text_section): Likewise. 2950 (find_bss_section): Likewise. 2951 (find_rodata_section): Likewise. 2952 (find_data_section): Likewise. 2953 (find_data1_section): Likewise. 2954 Reviewed-by: Giuliano Procida <gprocida@google.com> 2955 29562020-04-21 Matthias Maennich <maennich@google.com> 2957 2958 abg-dwarf-reader split: create abg-elf-helpers.{h,cc} and test case 2959 * src/Makefile.am: Add new source files abg-elf-helpers.{h,cc}. 2960 * src/abg-elf-helpers.cc: New source file. 2961 * src/abg-elf-helpers.h: New header file. 2962 * tests/.gitignore: Exclude runtestelfhelpers from being committed. 2963 * tests/Makefile.am: Add new test case runtestelfhelpers. 2964 * tests/test-elf-helpers.cc: New test source file. 2965 Reviewed-by: Giuliano Procida <gprocida@google.com> 2966 29672020-04-20 Matthias Maennich <maennich@google.com> 2968 2969 tests: parallelize diff-suppr test 2970 * tests/test-diff-suppr.cc(main): parallelize test execution. 2971 (test_task) new abigail::workers::task implementation to run 2972 test cases in this test as separate worker tasks. 2973 29742020-04-20 Matthias Maennich <maennich@google.com> 2975 2976 abg-dwarf-reader: simplify symbol map update 2977 * src/abg-dwarf-reader.cc 2978 (read_context::load_symbol_maps_from_symtab_section): simplify 2979 symbol map update for fun_syms_, undefined_fun_syms_, var_syms_, 2980 undefined_var_syms_. 2981 29822020-04-20 Matthias Maennich <maennich@google.com> 2983 2984 make: add distcheck-fast target 2985 * Makefile.am: add distcheck-fast make target 2986 29872020-04-14 Giuliano Procida <gprocida@google.com> 2988 2989 Fix variable suppression name_not_regex. 2990 * src/abg-suppression-priv.h: In get_symbol_name_not_regex 2991 method of variable_suppression::priv, fix typo causing 2992 miscompilation of regex. 2993 29942020-04-13 Mark Wielaard <mark@klomp.org> 2995 2996 Add --drop-undefined-syms to abidw. 2997 * include/abg-dwarf-reader.h (set_drop_undefined_syms): 2998 New declaration. 2999 * src/abg-dwarf-reader.cc (class read_context): Add private 3000 bool drop_undefined_syms_. 3001 (drop_undefined_syms): New getter and setter method. 3002 (set_drop_undefined_syms): New function. 3003 (function_is_suppressed): Check drop_undefined_syms on 3004 read_context. 3005 (variable_is_suppressed): Likewise. 3006 * src/abg-reader.cc (read_context): Add private bool 3007 m_drop_undefined_syms. 3008 (drop_undefined_syms): New getter and setter method. 3009 * tools/abidw.cc (struct options): Add drop_undefined_syms. 3010 (display_usage): Print --drop-undefined-syms. 3011 (parse_command_line): Parse --drop-undefined-syms. 3012 (main): Call set_drop_undefined_syms. 3013 30142020-04-12 Mark Wielaard <mark@klomp.org> 3015 3016 Add --drop-private-types to abidw. 3017 * tools/abidw.cc (options): Add drop_private_types bool. 3018 (display_usage): Add --drop-private-types. 3019 (parse_command_line): Parse --drop-private-types, set opts. 3020 (set_suppressions): Call set_drops_artifact_from_ir when 3021 drop_private_types set. 3022 * doc/manuals/abidw.rst: Document --drop-private-types. 3023 30242020-04-12 Mark Wielaard <mark@klomp.org> 3025 3026 Add --header-file option to add individual public header files. 3027 * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Add 3028 hdr_files string vector argument. 3029 * src/abg-tools-utils.cc (handle_file_entry): New function that 3030 adds one specific file to the type_suppression. Implementation 3031 lifted from... 3032 (handle_fts_entry): ...here. Call handle_file_entry for each file. 3033 (gen_suppr_spec_from_headers): Also takes a header_files string 3034 vector as argument. Call handle_file_entry for each file entry. 3035 * tools/abidiff.cc (options): Add header_files1 and header_files2 3036 string vectors. 3037 (display_usage): Print --header-file1 and --header-file2 usage. 3038 (parse_command_line): Handle --header-file1, --hf1 and 3039 --header-file2, --hf2. 3040 (set_diff_context_from_opts): Call gen_suppr_spec_from_headers 3041 with header_files1 and header_files2. 3042 (set_suppressions): Likewise. 3043 * tools/abidw.cc (options): Add header_files string vector. 3044 (display_usage): Print --header-file usage. 3045 (parse_command_line): Handle --header-file1, --hf1. 3046 (maybe_check_header_files): New function. 3047 (set_suppressions): Call gen_suppr_spec_from_headers with 3048 header_files. 3049 (main): Call maybe_check_header_files. 3050 * tools/abilint.cc (options): Add header_files string vector. 3051 (display_usage): Print --header-file usage. 3052 (parse_command_line): Handle --header-file1, --hf1. 3053 (set_suppressions): Call gen_suppr_spec_from_headers with 3054 header_files. 3055 * doc/manuals/abidiff.rst: Document --header-file1, --hf1 and 3056 --header-file2, --hf2. Add new options to documentation of 3057 --drop-private-types. 3058 * doc/manuals/abidw.rst: Document --header-file, --hf. 3059 * doc/manuals/abilint.rst: Likewise. 3060 30612020-04-08 Giuliano Procida <gprocida@google.com> 3062 3063 abidiff: Document and refresh tests. 3064 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc: 3065 Comment test. Reorder members of ops to get better coverage. 3066 * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.cc: 3067 Comment test. 3068 * tests/data/test-abidiff-exit/test-leaf-more-v1.cc: Ditto. 3069 * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: 3070 Comment test. Update comment on ops2. 3071 * tests/data/test-abidiff-exit/test-leaf-redundant-v1.c: 3072 Comment test. 3073 * tests/data/test-abidiff-exit/test-leaf-stats-v1.cc: Ditto. 3074 * tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt: 3075 Update locations. Update report to reflect deletion, 3076 insertion and changed members (was previously changed only).: 3077 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3078 Update locations. 3079 * tests/data/test-abidiff-exit/test-leaf-redundant-report.txt: 3080 Ditto.: 3081 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc: 3082 Added one line comment referring to -v1 source file. 3083 * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.cc: Ditto. 3084 * tests/data/test-abidiff-exit/test-leaf-more-v0.cc: Ditto. 3085 * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: Ditto. 3086 * tests/data/test-abidiff-exit/test-leaf-redundant-v0.c: Ditto. 3087 * tests/data/test-abidiff-exit/test-leaf-stats-v0.cc: Ditto. 3088 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o: Recompiled. 3089 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o: Ditto. 3090 * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.o: Ditto. 3091 * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.o: Ditto. 3092 * tests/data/test-abidiff-exit/test-leaf-more-v0.o: Ditto. 3093 * tests/data/test-abidiff-exit/test-leaf-more-v1.o: Ditto. 3094 * tests/data/test-abidiff-exit/test-leaf-peeling-v0.o: Ditto. 3095 * tests/data/test-abidiff-exit/test-leaf-peeling-v1.o: Ditto. 3096 * tests/data/test-abidiff-exit/test-leaf-redundant-v0.o: Ditto. 3097 * tests/data/test-abidiff-exit/test-leaf-redundant-v1.o: Ditto. 3098 * tests/data/test-abidiff-exit/test-leaf-stats-v0.o: Ditto. 3099 * tests/data/test-abidiff-exit/test-leaf-stats-v1.o: Ditto. 3100 31012020-04-14 Giuliano Procida <gprocida@google.com> 3102 3103 abg-reporter-priv.cc: Improve readability of represent helper function. 3104 * src/abg-reporter-priv.cc (represent): In the var_diff_sptr 3105 overload, rename pretty_representation to o_pretty_representation, 3106 introduce n_pretty_representation where needed and replace the 3107 duplicate tr1 and tr2 with these; rename all other variables foo1 3108 and foo2 to o_foo and n_foo respectively, using _type instead of 3109 _t; introduce o_anon and n_anon and use them to make the local 3110 variable is_strict_anonymous_data_member_change const, make 3111 ABG_ASSERT in anonymous data member handling more obvious in the 3112 case where anonymity has changed and allow simplification of 3113 formatting in this case; move declarations of const local 3114 variables above those of the non-const, state-tracking, variables. 3115 31162020-04-07 Giuliano Procida <gprocida@google.com> 3117 3118 abg-reporter-priv.cc: Fix anonymous member size change reports. 3119 * src/abg-reporter-priv.cc (represent): In the var_diff_sptr 3120 overload, factor out some expressions as local variables, rely 3121 on diff_to_be_reported to decide whether to emit a change, 3122 fold together local/non-local change reporting using 3123 local_changes to preserve current name formatting differences, 3124 keep track explicitly of whether size information has been 3125 emitted and ensure it happens if needed, make offset and size 3126 change reporting for anonymous data members more meaningful. 3127 * tests/test-abidiff-exit.cc: Run new test cases. 3128 * tests/data/Makefile.am: Add new test files. 3129 * tests/data/test-abidiff-exit/test-member-size-v0.cc: New 3130 test. 3131 * tests/data/test-abidiff-exit/test-member-size-v0.o: Ditto. 3132 * tests/data/test-abidiff-exit/test-member-size-v1.cc: Ditto. 3133 * tests/data/test-abidiff-exit/test-member-size-v1.o: Ditto. 3134 * tests/data/test-abidiff-exit/test-member-size-report0.txt: 3135 New test, default mode. 3136 * tests/data/test-abidiff-exit/test-member-size-report1.txt: 3137 New test, --leaf-changes-only mode. 3138 * tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt: 3139 Eliminate duplicate reporting of member sizes. 3140 * tests/data/test-abidiff-exit/test-leaf-more-report.txt: Ditto. 3141 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3142 Ditto. 3143 * tests/data/test-abidiff-exit/test-no-stray-comma-report.txt: 3144 Ditto. 3145 * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: 3146 Add size report for anonymous data member. 3147 * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: 3148 Ditto. 3149 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: 3150 Add missing size change report. 3151 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Remove 3152 size change report for previously reported type. 3153 * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: 3154 Eliminate duplicate reporting of member size change. 3155 * tests/data/test-diff-suppr/test46-PR25128-report-2.txt: 3156 Ditto. 3157 31582020-04-07 Giuliano Procida <gprocida@google.com> 3159 3160 abidiff: More compact references to prior diffs. 3161 * src/abg-reporter-priv.cc (represent): In the var_diff_sptr 3162 overload, use consistent punctuation and keep to a single line 3163 of output when referring back to an existing type diff report. 3164 Remove unnecessary braces around single line conditional 3165 blocks. 3166 * src/abg-reporter-priv.h: In the macro 3167 RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER, use 3168 consistent punctuation when referring back to an existing type 3169 diff report. 3170 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust 3171 formatting of back references to existing type diff reports. 3172 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: 3173 Ditto. 3174 * tests/data/test-diff-filter/test16-report-2.txt: Ditto. 3175 * tests/data/test-diff-filter/test17-1-report.txt: Ditto. 3176 * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: 3177 Ditto. 3178 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 3179 Ditto. 3180 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto. 3181 31822020-04-06 Giuliano Procida <gprocida@google.com> 3183 3184 test-abidiff-exit.cc: Drop redundant --redundant. 3185 * tests/test-abidiff-exit.cc: Drop obsolete --redundant flag 3186 and comment as --redundant is now implied by 3187 --leaf-changes-only. 3188 31892020-04-06 Giuliano Procida <gprocida@google.com> 3190 3191 Rename test-abidiff-exit/test-leaf[0-3] files. 3192 * tests/data/Makefile.am: Rename test files. 3193 * tests/test-abidiff-exit.cc: Rename test files. 3194 * tests/data/test-abidiff-exit/test-leaf-fun-type-report.txt: 3195 Renamed from test-leaf2-report.txt. 3196 * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.cc: 3197 Renamed from test-leaf2-v0.cc. 3198 * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.o: 3199 Renamed from test-leaf2-v0.o. 3200 * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.cc: 3201 Renamed from test-leaf2-v1.cc. 3202 * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.o: 3203 Renamed from test-leaf2-v1.o. 3204 * tests/data/test-abidiff-exit/test-leaf-more-report.txt: 3205 Renamed from test-leaf1-report.txt. 3206 * tests/data/test-abidiff-exit/test-leaf-more-v0.cc: Renamed 3207 from test-leaf1-v0.cc. 3208 * tests/data/test-abidiff-exit/test-leaf-more-v0.o: Renamed 3209 from test-leaf1-v0.o. 3210 * tests/data/test-abidiff-exit/test-leaf-more-v1.cc: Renamed 3211 from test-leaf1-v1.cc. 3212 * tests/data/test-abidiff-exit/test-leaf-more-v1.o: Renamed 3213 from test-leaf1-v1.o. 3214 * tests/data/test-abidiff-exit/test-leaf-redundant-report.txt: 3215 Renamed from test-leaf3-report.txt. 3216 * tests/data/test-abidiff-exit/test-leaf-redundant-v0.c: 3217 Renamed from test-leaf3-v0.c. 3218 * tests/data/test-abidiff-exit/test-leaf-redundant-v0.o: 3219 Renamed from test-leaf3-v0.o. 3220 * tests/data/test-abidiff-exit/test-leaf-redundant-v1.c: 3221 Renamed from test-leaf3-v1.c. 3222 * tests/data/test-abidiff-exit/test-leaf-redundant-v1.o: 3223 Renamed from test-leaf3-v1.o. 3224 * tests/data/test-abidiff-exit/test-leaf-stats-report.txt: 3225 Renamed from test-leaf0-report.txt. 3226 * tests/data/test-abidiff-exit/test-leaf-stats-v0.cc: Renamed 3227 from test-leaf0-v0.cc. 3228 * tests/data/test-abidiff-exit/test-leaf-stats-v0.o: Renamed 3229 from test-leaf0-v0.o. 3230 * tests/data/test-abidiff-exit/test-leaf-stats-v1.cc: Renamed 3231 from test-leaf0-v1.cc. 3232 * tests/data/test-abidiff-exit/test-leaf-stats-v1.o: Renamed 3233 from test-leaf0-v1.o. 3234 32352020-04-07 Dodji Seketeli <dodji@redhat.com> 3236 3237 Update the mailing list registration form on the web page 3238 * doc/website/mainpage.txt: Use the form at 3239 https://sourceware.org/mailman/listinfo/libabigail to register to 3240 the mailing list. 3241 32422020-03-30 Giuliano Procida <gprocida@google.com> 3243 3244 abg-dwarf-reader.cc: Avoid division by zero. 3245 * src/abg-dwarf-reader.cc (perform_late_type_canonicalizing): 3246 If total is zero, don't try to output percentages using it as 3247 a divisor. 3248 32492020-03-29 Giuliano Procida <gprocida@google.com> 3250 3251 abidiffpkg: Remove stray test report file. 3252 * tests/data/Makefile.am: Removed 3253 tests/data/test-diff-pkg/dirpkg-2-report-1.txt. 3254 * tests/data/test-diff-pkg/dirpkg-2-report-1.txt: Removed. 3255 32562020-03-29 Giuliano Procida <gprocida@google.com> 3257 3258 test-diff-suppr.cc: Add missing tests. 3259 * tests/test-diff-suppr.cc: Add stanzas for 3260 test6-fn-suppr-report-4, test16-suppr-removed-fn-report-5 and 3261 test22-suppr-removed-var-sym-report-5 and 3262 test23-alias-filter-report-4 tests. 3263 * tests/data/test-diff-suppr/test6-fn-suppr-report-4.txt: 3264 Number parameters from 1 and update expected output to current 3265 formatting. 3266 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-5.txt: 3267 Update expected output to current formatting. 3268 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-5.txt: 3269 Update expected output to current formatting. 3270 32712020-03-29 Giuliano Procida <gprocida@google.com> 3272 3273 abidiff: Remove blank line after typedef changes. 3274 * include/abg-reporter.h 3275 (default_reporter::report_local_typedef_changes): Change 3276 return type to void. 3277 * src/abg-default-reporter.cc: 3278 (default_reporter::report_local_typedef_changes): Change 3279 return type to void, remove emit_nl state variable and logic. 3280 * tests/data/test-abidiff/test-PR18791-report0.txt: Remove 3281 blank lines. 3282 * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: 3283 Ditto. 3284 * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: 3285 Ditto. 3286 32872020-03-26 Giuliano Procida <gprocida@google.com> 3288 3289 Fix size calculations for multidimensional arrays. 3290 * include/abg-ir.h (array_type_def::append_subrange): Remove 3291 this function. 3292 * src/abg-ir.cc (array_type_def::set_element_type): Add a note 3293 about safe usage. 3294 (array_type_def::append_subrange): Inline this function into 3295 its only caller append_subranges and remove it. 3296 (array_type_def::append_subranges): Do correct multiplicative 3297 calculation of multidimensional array sizes. 3298 * src/abg-reader.cc (build_array_type_def): When checking 3299 calculated against read array sizes, warn once if value 3300 matches old behaviour rather than raising an assertion. 3301 Otherwise, before raising an assertion, emit an informative 3302 error message. 3303 * tests/data/test-annotate/test14-pr18893.so.abi: Correct 3304 array sizes. 3305 * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. 3306 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 3307 Ditto. 3308 * tests/data/test-annotate/test7.so.abi: Ditto. 3309 * tests/data/test-diff-dwarf/test10-report.txt: Ditto. 3310 * tests/data/test-diff-dwarf/test11-report.txt: Ditto. 3311 * tests/data/test-read-write/test25.xml: Ditto. 3312 Reviewed-by: Matthias Maennich <maennich@google.com> 3313 33142020-03-27 Giuliano Procida <gprocida@google.com> 3315 3316 abidiff: Remove new lines after parameter diffs. 3317 * src/abg-default-reporter.cc: (report_local_function_type_changes): 3318 Remove unnecessary blank lines after lists of parameter changes. 3319 * tests/data/test-*/test*report*.txt: Remove blank lines after 3320 parameter change lists in 12 files. 3321 Reviewed-by: Matthias Maennich <maennich@google.com> 3322 33232020-03-27 Giuliano Procida <gprocida@google.com> 3324 3325 abidiff: Eliminate leaf mode double blank lines. 3326 * src/abg-leaf-reporter.cc: (report_diffs) Emit 1 instead of 2 3327 new lines between sections. 3328 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3329 Replace double blank lines with single ones. 3330 * tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt: 3331 Ditto. 3332 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto. 3333 * tests/data/test-*/test*report*.txt:: Ditto. 3334 Reviewed-by: Matthias Maennich <maennich@google.com> 3335 33362020-03-27 Giuliano Procida <gprocida@google.com> 3337 3338 abidiff: Fix variable declaration formatting. 3339 * src/abg-reporter-priv.cc: (represent) In the var_diff_sptr 3340 overload, make sure the state variables begin_with_and and 3341 emitted are updated consistently; add a TODO for one case 3342 which may result in the end of the function being reached 3343 without having emitted a report; add missing new lines 3344 following reporting of anonymous member changes; only emit a 3345 final new line if begin_with_and hasn't tracked one already; 3346 document state variables. 3347 * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: 3348 Add missing blank line after anonymous member change text. 3349 * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: 3350 Add missing "and " continuation. 3351 Reviewed-by: Matthias Maennich <maennich@google.com> 3352 33532020-03-27 Giuliano Procida <gprocida@google.com> 3354 3355 abidiff: Remove member function diff blank lines. 3356 * src/abg-default-reporter.cc (report): In the 3357 class_or_union_diff overload, don't emit a new line after each 3358 list of member function, member type, template member 3359 function and template member class changes. 3360 * src/abg-leaf-reporter.cc (report): : In the 3361 class_or_union_diff overload, don't emit a new line after each 3362 list of member function changes. 3363 * tests/data/Makefile.am: Add new test case files. 3364 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc: 3365 New test case for --leaf-changes-only member function diffs. 3366 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o: 3367 Ditto. 3368 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc: 3369 Ditto. Also add a TODO regarding a potentially bad diff. 3370 * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o: 3371 Ditto. 3372 * tests/data/test-abidiff/test-struct1-report.txt: Remove 3373 blank lines after member function changes lists. 3374 * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: 3375 Ditto. 3376 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 3377 Ditto. 3378 * tests/test-abidiff-exit.cc: Add new test case. 3379 Reviewed-by: Matthias Maennich <maennich@google.com> 3380 33812020-03-26 Giuliano Procida <gprocida@google.com> 3382 3383 abidiff: Fix enum impacted interfaces blank line. 3384 * src/abg-default-reporter.cc (report): In the enum_diff 3385 overload, don't emit a blank line before a possible "impacted 3386 interfaces" stanza. In the class_or_union overload, change a 3387 stray conditional to use the emitted state variable for 3388 consistency. 3389 * tests/data/test*report*.txt: Remove blank lines after enum 3390 diffs in 17 files. 3391 Reviewed-by: Matthias Maennich <maennich@google.com> 3392 33932020-03-26 Giuliano Procida <gprocida@google.com> 3394 3395 abidiff: Remove blank line after base class diffs. 3396 * src/abg-default-reporter.cc (report): In the class_diff 3397 overload, eliminate the extra blank line after base class 3398 changes and remove unneeded new line logic. 3399 * tests/data/test*report*.txt: Remove blank lines after base 3400 class diffs in 9 files. 3401 Reviewed-by: Matthias Maennich <maennich@google.com> 3402 34032020-03-26 Giuliano Procida <gprocida@google.com> 3404 3405 abidiff: Clean up new lines between sections. 3406 * src/abg-default-reporter.cc (report): In the corpus_diff 3407 override, add back the extra blank line per changed function 3408 but remove the extra one after all changed changed functions 3409 and variables; comment these. 3410 * src/abg-leaf-reporter.cc (report): In the corpus_diff 3411 override, add back the extra blank line per changed function 3412 but remove the extra one after all changed changed functions 3413 and variables; comment these. 3414 * src/abg-reporter-priv.cc 3415 (maybe_report_unreachable_type_changes): Remove extra blank 3416 line emitted after all unreachable type changes; comment 3417 this. 3418 * tests/data/test*report*.txt: Remove/add blank lines. 3419 Reviewed-by: Matthias Maennich <maennich@google.com> 3420 34212020-03-26 Giuliano Procida <gprocida@google.com> 3422 3423 abg-ir.cc: Add types_have_similar_structure tests. 3424 * src/abg-ir.cc (types_have_similar_structure): Update TODO 3425 regarding structure of arrays - multidimensional arrays are 3426 the issue. 3427 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3428 Updated following changes. 3429 * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: Add 3430 more cases (see below). 3431 * tests/data/test-abidiff-exit/test-leaf-peeling-v0.o: 3432 Updated. 3433 * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: Add 3434 comment about a potential change to local-change semantics; 3435 add test cases to demonstrate that * and & and * and *** are 3436 structurally different; add a TODO regarding multidimensional 3437 arrays where changes are sometimes missed in leaf mode. 3438 * tests/data/test-abidiff-exit/test-leaf-peeling-v1.o 3439 34402020-03-28 Giuliano Procida <gprocida@google.com> 3441 3442 abg-reader.cc: Fix code indentation and tabify. 3443 * src/abg-reader.cc (build_elf_symbol_db): Fix code 3444 indentation. 3445 (build_array_type_def): Tabify. 3446 34472020-03-26 Dodji Seketeli <dodji@redhat.com> 3448 3449 Update tests/data/test-abidiff-exit/test-leaf-peeling-report.txt 3450 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3451 Update output. 3452 34532020-03-25 Giuliano Procida <gprocida@google.com> 3454 3455 abidiff: Remove some more unnecessary blank lines. 3456 * src/abg-default-reporter.cc (report) In the 3457 class_or_union_diff overload, don't emit a new line after 3458 calls to represent. In the union_diff overload, emit a new 3459 line after a from/to change; fix indentation. In the 3460 corpus_diff overload, don't emit an extra new line after 3461 reporting a diff. 3462 * src/abg-leaf-reporter.cc (report_diffs) Don't emit a new 3463 line after reporting a canonical diff. In the 3464 class_or_union_diff overload, don't emit a new line after 3465 calls to represent. In the corpus_diff overload, don't emit an 3466 extra new line after reporting a diff. 3467 * src/abg-reporter-priv.cc (represent): Emit a final new line, 3468 but only if needed. 3469 (maybe_report_interfaces_impacted_by_diff): Emit a new line 3470 after the last impacted interface. 3471 * tests/data/test-*/*report*.txt: Remove blank lines (and add 3472 a missing one) to 77 test cases. 3473 34742020-03-25 Giuliano Procida <gprocida@google.com> 3475 3476 abg-ir.cc: Improve types_have_similar_structure. 3477 * include/abg-fwd.h (types_have_similar_structure): In both 3478 overloads, add an indirect_type argument, defaulting to 3479 false. 3480 * src/abg-ir.cc (reference_type_def constructor): Tabify. 3481 (types_have_similar_structure): In both overloads, add an 3482 indirect_type argument and update documentation text. In the 3483 type_base_sptr overload, pass indirect_type in the tail 3484 call. In the type_base* overload, replace was_indirect_type 3485 with indirect_type; peel CV qualifiers and typedefs without 3486 testing as the peel function does this; replace the 3487 indiscriminate peeling of qualifier/pointer/reference/array 3488 type components with code that checks the same 3489 pointer/reference/array type component is used on each side 3490 and makes recursive calls with indirect_type set to true; pass 3491 the indirect_type argument recursively when comparing other 3492 subtypes; move the typeid check earlier, document its purpose 3493 and remove unneccessary checks after later dynamic casts; 3494 remove an always-true conditional; add a TODO for comparing 3495 array types more accurately. 3496 * tests/data/Makefile.am: Add new test case files. 3497 * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: New 3498 test case. 3499 * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: Ditto. 3500 * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: 3501 Ditto. 3502 * tests/test-abidiff-exit.cc: Run new test case. 3503 35042020-03-19 Giuliano Procida <gprocida@google.com> 3505 3506 abg-ir.cc: Remove always-true check. 3507 * src/abg-ir.cc (types_have_similar_structure): Remove 3508 identical nested conditional. 3509 (reference_type_def::reference_type_def): Tabify. 3510 Reviewed-by: Matthias Maennich <maennich@google.com> 3511 35122020-03-19 Giuliano Procida <gprocida@google.com> 3513 3514 abg-ir.cc: Fix peel_typedef_type(const type_base*). 3515 * src/abg-ir.cc (peel_typedef_type): In the const type_base* 3516 overload, return the original argument rather than null if the 3517 type isn't actually a typedef. 3518 35192020-03-18 Giuliano Procida <gprocida@google.com> 3520 3521 Eliminate redundancy in representation of local change kinds. 3522 * include/abg-ir.h (change_kind): Remove redundant 3523 LOCAL_CHANGE_KIND member, renumber members and update 3524 comments. 3525 * src/abg-comparison.cc (distinct_diff::has_local_changes): 3526 Remove redundant LOCAL_CHANGE_KIND. 3527 (var_diff::has_local_changes 3528 * src/abg-ir.cc (equals): In the type_base, 3529 qualified_type_def, pointer_type_def, reference_type_def, 3530 array_type_def::subrange_type, array_type_def, enum_type_decl, 3531 typedef_decl, var_decl, function_type, function_decl, 3532 function_decl::parameter, class_or_union, 3533 class_decl::base_spec, class_decl, decl_base and scope_decl 3534 overloads, remove redundant LOCAL_CHANGE_KIND. 3535 (enum_has_non_name_change): Remove redundant 3536 LOCAL_CHANGE_KIND. 3537 35382020-03-20 Dodji Seketeli <dodji@redhat.com> 3539 3540 dwarf-reader: Fix bloom filter access in GNU_HASH section 3541 * src/abg-dwarf-reader.cc (bloom_word_at): Properly read an 3542 element from the bloom bitmasks array of 32-bits values as a 3543 64-bits value in a portable way. Always return a 64 bits value. 3544 (lookup_symbol_from_gnu_hash_tab): Use a 64-bits value to store 3545 the bloom bitmask. 3546 * tests/data/test-lookup-syms/test1-32bits.so: New test input, 3547 compiled as a 32bits binary to test for ELFCLASS32 binaries. 3548 * tests/data/test-lookup-syms/test1.c.compiling.txt: Documentation 3549 about how to compile the test1[-21bits].so files. 3550 * tests/data/Makefile.am: Add the new test material above to 3551 source distribution. 3552 * tests/test-lookup-syms.cc (in_out_specs): Add the 3553 test1-32bits.so test case to this test harness. 3554 35552020-03-18 Giuliano Procida <gprocida@google.com> 3556 3557 Ensure change_kind enum values are used consistently. 3558 * src/abg-comparison.cc (distinct_diff::has_local_changes): 3559 Remove unnecessary parentheses around return expression. 3560 * src/abg-default-reporter.cc (report): In the reference_diff 3561 overload, replace test against LOCAL_CHANGE_KIND with test 3562 against ALL_LOCAL_CHANGES_MASK. 3563 * src/abg-ir.cc (equals): In the array_type_def and class_decl 3564 overloads, add missing LOCAL_TYPE_CHANGE_KIND. In the 3565 class_decl overload, also add missing LOCAL_CHANGE_KIND. In 3566 the enum_type_decl and function_decl::parameter overloads 3567 clarify pairing of LOCAL*CHANGE_KIND bits. 3568 (enum_has_non_name_change): Clarify pairing of 3569 LOCAL*CHANGE_KIND bits. 3570 35712020-03-18 Giuliano Procida <gprocida@google.com> 3572 3573 dwarf-reader: Use all bits of Bloom filter words. 3574 * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): 3575 Don't narrow calculated Bloom word to 8 bits before using it 3576 to mask the fetched Bloom word. 3577 35782020-03-15 Matthias Maennich <maennich@google.com> 3579 3580 dwarf-reader: remove superfluous ABG_ASSERT 3581 * src/abg-dwarf-reader.cc 3582 (maybe_adjust_et_rel_sym_addr_to_abs_addr): improve NULL check, 3583 remove superfluous ABG_ASSERT 3584 * tests/data/Makefile.am: Add new test case to the distribution. 3585 * tests/test-read-dwarf.cc: Likewise. 3586 * tests/data/test-read-dwarf/test27-bogus-binary.elf: New test case. 3587 35882020-03-15 Matthias Maennich <maennich@google.com> 3589 3590 test-read-dwarf: ensure in_elf_path exists and add missing test files 3591 * tests/data/Makefile.am: add missing test case files 3592 * tests/test-read-dwarf.cc (test_task::perform): assert the 3593 input elf file exists. 3594 35952020-03-18 Matthias Maennich <maennich@google.com> 3596 3597 configure: add support for memory sanitizer (--enable-msan) 3598 * configure.ac: Add configure options for -fsanitize=memory 3599 36002020-03-18 Dodji Seketeli <dodji@redhat.com> 3601 3602 abipkgdiff: fix documentation of --impacted-interface 3603 * tools/abipkgdiff.cc (display_usage): Use the same help string 3604 for the --impacted-interface option as abidiff does. 3605 36062020-03-15 Matthias Maennich <maennich@google.com> 3607 3608 abidiff: fix documentation of --impacted-interfaces 3609 * tools/abidiff.cc(display_usage): Fix doc string for 3610 --impacted-interfaces. 3611 Reported-by: Saravana Kannan <saravanak@google.com> 3612 36132020-03-17 Giuliano Procida <gprocida@google.com> 3614 3615 Tag add/remove/change lines unconditionally with [A], [D], [C]. 3616 * src/abg-default-reporter.cc (report): In the corpus_diff 3617 override, remove calculations of number of changes (total) and 3618 comparisons against arbitrary threshold (large_num); emit [A], 3619 [D], [C] tags unconditionally. 3620 * src/abg-reporter-priv.cc 3621 (maybe_report_unreachable_type_changes): Remove comparisons of 3622 number of changes against arbitrary threshold (large_num); 3623 emit [A], [D], [C] tags unconditionally; fix quoting of 3624 deleted unreachable types; fix indentation of changed 3625 unreachable types. 3626 * tools/abipkgdiff.cc (compare_prepared_userspace_packages): 3627 Emit [D] and [A] tags for removed and added binaries. 3628 * tests/data/test-*/*report*.txt: In 109 report files, add 3629 tags [A], [D], [C] tags and correct some indentation and 3630 quoting. 3631 36322020-03-12 Matthias Maennich <maennich@google.com> 3633 3634 abg-workers: guard bring_workers_down to avoid dead lock 3635 * src/abg-workers.cc(do_bring_workers_down): keep 3636 task_todo_mutex locked while writing bring_workers_down, 3637 (wait_to_execute_a_task): rewrite the loop condition to ensure 3638 safe access to bring_workers_down. 3639 36402020-03-12 Matthias Maennich <maennich@google.com> 3641 3642 configure: add support for thread sanitizer (--enable-tsan) 3643 * configure.ac: Add configure options for -fsanitize=thread 3644 36452020-03-13 Matthias Maennich <maennich@google.com> 3646 3647 dwarf-reader: gnu_hash_tab lookup: fix overflow in bloom hash calculation 3648 * src/abg-dwarf-reader.cc(lookup_symbol_from_gnu_hash_tab): Fix 3649 signed integer overflow. 3650 36512020-03-12 Giuliano Procida <gprocida@google.com> 3652 3653 Treat function type changes as local. 3654 * src/abg-ir.cc (types_have_similar_structure): Always compare 3655 function types (instead of just returning true) regardless of 3656 whether they are components of pointer-to-function or 3657 reference-to-function types. 3658 * tests/data/Makefile.am: Add new test case files. 3659 * tests/data/test-abidiff-exit/test-leaf2-report.txt: New test 3660 case. 3661 * tests/data/test-abidiff-exit/test-leaf2-v0.cc: Ditto. 3662 * tests/data/test-abidiff-exit/test-leaf2-v0.o: Ditto. 3663 * tests/data/test-abidiff-exit/test-leaf2-v1.cc: Ditto. 3664 * tests/data/test-abidiff-exit/test-leaf2-v1.o: Ditto. 3665 * tests/test-abidiff-exit.cc: Run new test case. 3666 36672020-03-13 Giuliano Procida <gprocida@google.com> 3668 3669 Output 2-space indentation consistently. 3670 * src/abg-default-reporter.cc (report): In the 3671 class_or_union_diff override, use 2-space indentation when 3672 listing changed members. In the var_diff override, do the same 3673 for variable type changes. 3674 * src/abg-leaf-reporter.cc: Ditto. 3675 * tests/data/test-*/*report*.txt: Update many test cases. 3676 36772020-03-16 Giuliano Procida <gprocida@google.com> 3678 3679 Eliminate some unnecessary blank lines in diff output. 3680 * src/abg-default-reporter.cc (report): In the type_decl_diff, 3681 enum_diff, array_diff, class_diff, union_diff and var_diff 3682 overrides, simplify new line logic which no longer needs to be 3683 threaded through report_name_size_and_alignment_changes. In 3684 the distinct_diff override, simplify new line logic which no 3685 longer needs to be threaded through 3686 report_size_and_alignment_changes. In the enum_diff override, 3687 emit just one blank line after each enum. In the array_diff 3688 override, remove stray location reporting which doesn't appear 3689 to ever trigger; fix new line logic. In the 3690 class_or_union_diff override, simplify new line logic for 3691 deleted members; pass indentation to represent_data_member. 3692 * src/abg-leaf-reporter.cc (report): In the array_diff, 3693 class_diff, union_diff and var_diff overrides, simplify new 3694 line logic which no longer needs to be threaded through 3695 report_name_size_and_alignment_changes. In the distinct_diff 3696 override, simplify new line logic which no longer needs to be 3697 threaded through report_size_and_alignment_changes. In the 3698 array_diff override, remove stray location reporting which 3699 doesn't appear to ever trigger; fix new line handling. In the 3700 class_or_union_diff override, simplify new line logic for 3701 deleted members; pass indentation to represent_data_member. 3702 In the corpus_diff override, tabify source indentation. 3703 * src/abg-reporter-priv.cc (represent_data_member): Handle 3704 indentation; fix new line logic. 3705 (report_size_and_alignment_changes): Fix new line logic 3706 for "type size hasn't changed" message; simplify new line 3707 logic and replace local bool n with argument bool nl for 3708 clarity. 3709 (report_size_and_alignment_changes): Remove bool nl argument 3710 and associated code as it had become always false; take 3711 responsibility for emitting terminating new lines and change 3712 return type to void. 3713 (report_name_size_and_alignment_changes): Fix new line logic; 3714 remove bool nl argument and associated code as it had become 3715 always false; take responsibility for emitting terminating new 3716 lines and change return type to void. 3717 (maybe_report_interfaces_impacted_by_diff) In both overrides, 3718 remove new line prefix code and new_line_prefix argument. 3719 * src/abg-reporter-priv.h (represent_data_member): Add indent 3720 argument. 3721 (report_size_and_alignment_changes) Remove bool nl argument; 3722 change return type to void. 3723 (report_name_size_and_alignment_changes) Remove bool nl 3724 argument; change return type to void. 3725 (maybe_report_interfaces_impacted_by_diff) In both overrides, 3726 remove new_line_prefix argument. 3727 * tests/data/test-*/*report*.txt: Remove some blank lines. 3728 37292020-03-12 Giuliano Procida <gprocida@google.com> 3730 3731 abg-leaf-reporter.cc: Fix indentation of function parameter diffs. 3732 * src/abg-leaf-reporter.cc (report): In the fn_parm_diff 3733 override, indent the lines of detail by 2 spaces. 3734 * tests/data/test-abidiff-exit/test-leaf3-report.txt: Update 3735 report with correct indentation. 3736 37372020-03-12 Giuliano Procida <gprocida@google.com> 3738 3739 Fix interaction of --redundant and --leaf-changes-only options. 3740 * src/abg-comparison.cc (diff_context::show_leaf_changes_only): 3741 Remove "--leaf-changes-only implies --redundant" logic. 3742 * tools/abidiff.cc (display_usage): Mention that 3743 --leaf-changes-only implies --redundant. 3744 (set_diff_context_from_opts): Make --leaf-changes-only imply 3745 --redundant; document this behaviour in a comment. 3746 * tools/abipkgdiff.cc: Ditto. 3747 * tests/data/Makefile.am: Add new test case files. 3748 * tests/data/test-abidiff-exit/test-leaf3-report.txt: Add new 3749 test case, to show --leaf-changes-only implies --redundant. 3750 * tests/data/test-abidiff-exit/test-leaf3-v0.c: Ditto. 3751 * tests/data/test-abidiff-exit/test-leaf3-v0.o: Ditto. 3752 * tests/data/test-abidiff-exit/test-leaf3-v1.c: Ditto. 3753 * tests/data/test-abidiff-exit/test-leaf3-v1.o: Ditto. 3754 * tests/test-abidiff-exit.cc: Run new test case. 3755 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: 3756 Update abipkgdiff report with --redundant output. 3757 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: 3758 Ditto. 3759 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 3760 Ditto. 3761 37622020-03-13 Giuliano Procida <gprocida@google.com> 3763 3764 Add more leaf change reporting. 3765 * doc/manuals/abidiff.rst: Update the documentation for 3766 --leaf-changes-only. 3767 * doc/manuals/abipkgdiff.rst: Likewise. 3768 * src/abg-comparison.cc (emit_diff_stats): Exclude non-leaf 3769 changes to variables from the reported total of leaf changes. 3770 * src/abg-default-reporter.cc (report): In the corpus_diff 3771 override, move some code and comments for clarity. 3772 * src/abg-leaf-reporter.cc (report): In the corpus_diff 3773 override, additionally report removed/added/changed variables 3774 and removed/added symbols absent from debug info. 3775 * tests/data/Makefile.am: Add new test case files. 3776 * tests/data/test-abidiff-exit/test-leaf0-report.txt: Update 3777 to include reporting of variable diff (change of type). 3778 * tests/data/test-abidiff-exit/test-leaf1-report.txt: New test 3779 case with added/removed variables/functions and changed 3780 variables (both local and non-local type changes). 3781 * tests/data/test-abidiff-exit/test-leaf1-v0.cc: Ditto. 3782 * tests/data/test-abidiff-exit/test-leaf1-v0.o: Ditto. 3783 * tests/data/test-abidiff-exit/test-leaf1-v1.cc: Ditto. 3784 * tests/data/test-abidiff-exit/test-leaf1-v1.o: Ditto. 3785 * tests/test-abidiff-exit.cc: Run new test case. Supply 3786 --redundant otherwise the test isn't meaningful. 3787 37882020-03-12 Dodji Seketeli <dodji@redhat.com> 3789 3790 Update fedabipkgdiff tests according to commit b602f46c 3791 * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: 3792 Adjust for useless whitespace removal. 3793 * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: Likewise. 3794 * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: Likewise. 3795 * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: Likewise. 3796 * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: Likewise. 3797 37982020-03-11 Giuliano Procida <gprocida@google.com> 3799 3800 Fix spurious new lines after diff sections. 3801 * src/abg-default-reporter.cc (report): In the corpus_diff 3802 overload, just use a local boolean emitted state variable 3803 within each section to determine whether or not to follow the 3804 section with an extra new line. 3805 * src/abg-leaf-reporter.cc: Ditto. 3806 * tests/data/test-*/*report*.txt: Remove unwanted new lines 3807 from 27 files. 3808 38092020-03-10 Giuliano Procida <gprocida@google.com> 3810 3811 abg-comparison.cc: Remove stray function declaration. 3812 * src/abg-comparison.cc (show_relative_offset_changes): Remove 3813 this stray function declaration. 3814 38152020-03-10 Giuliano Procida <gprocida@google.com> 3816 3817 abisym: Remove leading space in output. 3818 * tools/abisym.cc (main): Remove leading space from output. 3819 * tests/data/test-lookup-syms/test0-report.txt: Remove leading 3820 space from expected output. 3821 * tests/data/test-lookup-syms/test01-report.txt: Ditto. 3822 * tests/data/test-lookup-syms/test02-report.txt: Ditto. 3823 * tests/data/test-lookup-syms/test1-1-report.txt: Ditto. 3824 38252020-03-09 Giuliano Procida <gprocida@google.com> 3826 3827 Fix the reporting of leaf change statistics. 3828 * src/abg-comparison.cc 3829 (apply_filters_and_compute_diff_stats): Increment the correct 3830 counter for leaf variable changes. 3831 * tests/data/Makefile.am: Add new test case files. 3832 * tests/data/test-abidiff-exit/test-leaf0-report.txt: New test 3833 case. 3834 * tests/data/test-abidiff-exit/test-leaf0-v0.cc: Ditto. 3835 * tests/data/test-abidiff-exit/test-leaf0-v0.o: Ditto. 3836 * tests/data/test-abidiff-exit/test-leaf0-v1.cc: Ditto. 3837 * tests/data/test-abidiff-exit/test-leaf0-v1.o: Ditto. 3838 * tests/test-abidiff-exit.cc: Run new test case. 3839 Reviewed-by: Matthias Maennich <maennich@google.com> 3840 38412020-03-05 Giuliano Procida <gprocida@google.com> 3842 3843 Add space missing between "[C]" tag and description of changed item. 3844 * src/abg-default-reporter.cc (report): In the overload for 3845 corpus_diff, output space after "[C]". 3846 * src/abg-leaf-reporter.cc (report): Likewise. 3847 * tests/data/test-*/*report*.txt: Update all the test 3848 reports. 3849 38502020-03-05 Giuliano Procida <gprocida@google.com> 3851 3852 Correct various inconsequential typos. 3853 * src/abg-leaf-reporter.cc (report): In the class_or_union_diff 3854 overoad, swap calls to report_mem_header to match the rest of the 3855 code. 3856 * src/abg-reporter-priv.cc (represent): In the var_diff_sptr 3857 overload, add some missing whitespace; remember we've emitted the 3858 pretty representation in 2 cases where this was omitted (though 1 3859 of these is the last case where it makes no difference). 3860 maybe_report_diff_for_symbol Add some missing whitespace; remember 3861 we've reported a diff (and need a trailing newline) in 1 case 3862 where this was omitted, also affecting the return value of the 3863 function (but no caller cares). 3864 38652020-03-05 Giuliano Procida <gprocida@google.com> 3866 3867 Correct spelling of "alignment". 3868 * src/abg-reporter-priv.cc: s/alignement/alignment/ 3869 * tests/data/test-abidiff/test-struct0-report.txt: Ditto.. 3870 * tests/data/test-abidiff/test-struct1-report.txt: Ditto. 3871 * tests/data/test-abidiff/test-var0-report.txt: Ditto. 3872 38732020-02-27 Dodji Seketeli <dodji@redhat.com> 3874 3875 Bump version number to 1.8 3876 * configure.ac: Update version number to 1.8 3877 38782020-02-26 Dodji Seketeli <dodji@redhat.com> 3879 3880 Update website for 1.7 3881 * doc/website/mainpage.txt: Update for 1.7 3882 38832020-02-25 Dodji Seketeli <dodji@redhat.com> 3884 3885 Update ChangeLog 3886 * ChangeLog: Automatically update by running: 3887 'make update-changelog'. 3888 38892020-02-25 Dodji Seketeli <dodji@redhat.com> 3890 3891 Update NEWS file for 1.7 3892 * NEWS: update for 1.7 3893 38942020-02-25 Dodji Seketeli <dodji@redhat.com> 3895 3896 gen-changelog.py: Update the script for python3 3897 * gen-changelog.py (process_commit): Use the functional notation 3898 for the print function invocation required by python3. 3899 (output_commits, get_rel_tags, ): Specify that the output stream 3900 of the subprocess running the git command is in the text format. 3901 39022020-02-26 Dodji Seketeli <dodji@redhat.com> 3903 3904 tools-utils: Drop redefinition of fopen when BAD_FTS is defined 3905 * src/abg-tools-utils.cc: Do not remap fopen to fopen64 as we 3906 don't use fopen explicitly anymore. 3907 39082020-02-21 Dodji Seketeli <dodji@redhat.com> 3909 3910 Update copyright year to 2020 3911 * include/abg-comp-filter.h: Update copyright year to 2020. 3912 * include/abg-comparison.h: Likewise. 3913 * include/abg-config.h: Likewise. 3914 * include/abg-corpus.h: Likewise. 3915 * include/abg-cxx-compat.h: Likewise. 3916 * include/abg-diff-utils.h: Likewise. 3917 * include/abg-dwarf-reader.h: Likewise. 3918 * include/abg-fwd.h: Likewise. 3919 * include/abg-hash.h: Likewise. 3920 * include/abg-ini.h: Likewise. 3921 * include/abg-interned-str.h: Likewise. 3922 * include/abg-ir.h: Likewise. 3923 * include/abg-libxml-utils.h: Likewise. 3924 * include/abg-libzip-utils.h: Likewise. 3925 * include/abg-reader.h: Likewise. 3926 * include/abg-reporter.h: Likewise. 3927 * include/abg-sptr-utils.h: Likewise. 3928 * include/abg-suppression.h: Likewise. 3929 * include/abg-tools-utils.h: Likewise. 3930 * include/abg-traverse.h: Likewise. 3931 * include/abg-viz-common.h: Likewise. 3932 * include/abg-viz-dot.h: Likewise. 3933 * include/abg-viz-svg.h: Likewise. 3934 * include/abg-workers.h: Likewise. 3935 * include/abg-writer.h: Likewise. 3936 * src/abg-comp-filter.cc: Likewise. 3937 * src/abg-comparison-priv.h: Likewise. 3938 * src/abg-comparison.cc: Likewise. 3939 * src/abg-config.cc: Likewise. 3940 * src/abg-corpus-priv.h: Likewise. 3941 * src/abg-corpus.cc: Likewise. 3942 * src/abg-default-reporter.cc: Likewise. 3943 * src/abg-diff-utils.cc: Likewise. 3944 * src/abg-dwarf-reader.cc: Likewise. 3945 * src/abg-hash.cc: Likewise. 3946 * src/abg-ini.cc: Likewise. 3947 * src/abg-internal.h: Likewise. 3948 * src/abg-ir-priv.h: Likewise. 3949 * src/abg-ir.cc: Likewise. 3950 * src/abg-leaf-reporter.cc: Likewise. 3951 * src/abg-libxml-utils.cc: Likewise. 3952 * src/abg-libzip-utils.cc: Likewise. 3953 * src/abg-reader.cc: Likewise. 3954 * src/abg-reporter-priv.cc: Likewise. 3955 * src/abg-reporter-priv.h: Likewise. 3956 * src/abg-sptr-utils.cc: Likewise. 3957 * src/abg-suppression-priv.h: Likewise. 3958 * src/abg-suppression.cc: Likewise. 3959 * src/abg-tools-utils.cc: Likewise. 3960 * src/abg-traverse.cc: Likewise. 3961 * src/abg-viz-common.cc: Likewise. 3962 * src/abg-viz-dot.cc: Likewise. 3963 * src/abg-viz-svg.cc: Likewise. 3964 * src/abg-workers.cc: Likewise. 3965 * src/abg-writer.cc: Likewise. 3966 * tests/print-diff-tree.cc: Likewise. 3967 * tests/test-abicompat.cc: Likewise. 3968 * tests/test-abidiff-exit.cc: Likewise. 3969 * tests/test-abidiff.cc: Likewise. 3970 * tests/test-alt-dwarf-file.cc: Likewise. 3971 * tests/test-core-diff.cc: Likewise. 3972 * tests/test-diff-dwarf-abixml.cc: Likewise. 3973 * tests/test-diff-dwarf.cc: Likewise. 3974 * tests/test-diff-filter.cc: Likewise. 3975 * tests/test-diff-pkg.cc: Likewise. 3976 * tests/test-diff-suppr.cc: Likewise. 3977 * tests/test-diff2.cc: Likewise. 3978 * tests/test-dot.cc: Likewise. 3979 * tests/test-ini.cc: Likewise. 3980 * tests/test-ir-walker.cc: Likewise. 3981 * tests/test-lookup-syms.cc: Likewise. 3982 * tests/test-read-dwarf.cc: Likewise. 3983 * tests/test-read-write.cc: Likewise. 3984 * tests/test-svg.cc: Likewise. 3985 * tests/test-tools-utils.cc: Likewise. 3986 * tests/test-types-stability.cc: Likewise. 3987 * tests/test-utils.cc: Likewise. 3988 * tests/test-utils.h: Likewise. 3989 * tests/test-write-read-archive.cc: Likewise. 3990 * tools/abiar.cc: Likewise. 3991 * tools/abicompat.cc: Likewise. 3992 * tools/abidiff.cc: Likewise. 3993 * tools/abidw.cc: Likewise. 3994 * tools/abilint.cc: Likewise. 3995 * tools/abipkgdiff.cc: Likewise. 3996 * tools/abisym.cc: Likewise. 3997 * tools/binilint.cc: Likewise. 3998 * tools/kmidiff.cc: Likewise. 3999 * update-copyright.sh: Fix the updating script to handle not just 4000 "Red Hat, Inc." 4001 40022020-02-21 Dodji Seketeli <dodji@redhat.com> 4003 4004 abixml-reader: Support SONAME related properties on file suppression 4005 * doc/manuals/libabigail-concepts.rst: Update the documentation to 4006 mention soname_regexp and soname_not_regexp is supported in the 4007 [suppress_file] section. 4008 * include/abg-suppression.h (suppression_matches_soname) 4009 (suppression_matches_soname_or_filename): Declare new functions. 4010 Make them be friends of class suppression_base. 4011 * src/abg-reader.cc 4012 (read_context::corpus_is_suppressed_by_soname_or_filename): Define 4013 new member function. 4014 (read_corpus_from_input): Apply file suppression. 4015 * src/abg-suppression.cc (read_file_suppression): Support 4016 "soname_regexp" and "soname_not_regexp" in the [suppress_file] 4017 section. 4018 (suppression_matches_soname) 4019 (suppression_matches_soname_or_filename): Define new functions. 4020 * tests/data/test-diff-suppr/libtest48-soname-abixml-report-{1,2}.txt: 4021 New test reference output files. 4022 Likewise. 4023 * tests/data/test-diff-suppr/libtest48-soname-abixml-suppr.txt: 4024 New test suppression file. 4025 * tests/data/test-diff-suppr/libtest48-soname-abixml-suppr-{2,3,4}.txt:: 4026 Likewise. 4027 * tests/data/test-diff-suppr/libtest48-soname-abixml-v{0,1}.so: New 4028 test binary input files. 4029 * tests/data/test-diff-suppr/libtest48-soname-abixml-v{0,1}.so.abi: 4030 New abixml for the binary input files above. 4031 * tests/data/test-diff-suppr/test48-soname-abixml-v{0,1}.c: Source 4032 code of the binary input files above. 4033 * tests/data/Makefile.am: Add the above test material to source 4034 distribution. 4035 * tests/test-diff-suppr.cc (in_out_specs): Add the test input 4036 above to this test harness. 4037 40382020-02-21 Dodji Seketeli <dodji@redhat.com> 4039 4040 suppression: Better handle soname/filename properties evaluation 4041 * include/abg-suppression.h 4042 (suppression_base::has_{soname,file_name}_related_property): Add 4043 new member functions. 4044 * src/abg-dwarf-reader.cc (read_context::suppression_can_match): 4045 Fix the logic to make a difference between the case where the 4046 suppression doesn't have any soname/filename property and the case 4047 where the suppression does have a soname/filename property that 4048 does not match the current binary. 4049 * src/abg-reader.cc (read_context::suppression_can_match): 4050 Likewise. 4051 * src/abg-suppression-priv.h 4052 (suppression_base::priv::matches_soname): If the suppression does 4053 not have any soname related property then it doesn't match the 4054 soname we are looking at. 4055 (suppression_base::priv::matches_binary_name): If the suppression 4056 does not have any filename related property then it doesn't match 4057 the filename we are looking at. 4058 * src/abg-suppression.cc 4059 (suppression_base::has_{soname,file_name}_related_property): 4060 Define new member functions. 4061 (sonames_of_binaries_match): If the suppression does not have any 4062 soname related property then it doesn't match the corpora of the 4063 diff we are looking at. 4064 (names_of_binaries_match): If the suppression does not have any 4065 filename related property then it doesn't match the corpora of the 4066 diff we are looking at. 4067 (type_suppression::suppresses_type): Fix the logic to make a 4068 difference between the case where the suppression doesn't have any 4069 soname/filename property and the case where the suppression does 4070 have a soname/filename property that does not match the current 4071 binary. 4072 (function_suppression::suppresses_{function, function_symbol}): 4073 Likewise. 4074 (variable_suppression::suppresses_{variable, variable_symbol}): 4075 Likewise. 4076 (file_suppression::suppresses_file): Likewise. 4077 40782020-02-05 Giuliano Procida <gprocida@google.com> 4079 4080 Fix stray comma in leaf-changes-only mode. 4081 * src/abg-reporter-priv.cc (represent): Don't try to follow 4082 output of indented pretty representation with a comma, just 4083 emit "and" unconditionally; remove unnecessary intermediate 4084 ostringstream. 4085 * tests/data/Makefile.am: Add new test case files. 4086 * tests/data/test-abidiff-exit/test-no-stray-comma-*: New test 4087 cases. 4088 * tests/data/test-diff-suppr/test46-PR25128-report-?.txt: 4089 Replace unindented comma with indented "and". 4090 * tests/test-abidiff-exit.cc: Add no-stray-comma test case. 4091 Reviewed-by: Matthias Maennich <maennich@google.com> 4092 40932020-02-04 Giuliano Procida <gprocida@google.com> 4094 4095 Sort kernel module object files before processing them. 4096 * src/abg-tools-utils.cc (get_binary_paths_from_kernel_dist): 4097 Sort module_paths. 4098 40992020-02-04 Matthias Maennich <maennich@google.com> 4100 4101 abg-workers: Rework the worker queue to improve concurrent behaviour 4102 * include/abg-workers.h (workers::task): move entire 4103 implementation to header and drop superfluous forward declaration. 4104 * src/abg-workers.cc (workers::task):: Likewise. 4105 (workers::queue::priv): Drop queue_cond_mutex, rename queue_cond 4106 to tasks_todo_cond, add task_done_cond, make default_notify 4107 static. 4108 (workers::queue::priv::priv): Add default arguments to fully 4109 qualified constructor, drop the remaining ones. 4110 (workers::queue:prive::more_tasks_to_execute): Drop method. 4111 (workers::queue:prive::schedule_task): Do not synchronize access 4112 to the queue condition variable, but only on the mutex. 4113 (do_bring_workers_down): Likewise. Also await tasks_done to be 4114 empty. 4115 (workers::queue:prive::worker::wait_to_execute_a_task): Await 4116 tasks on the tasks_todo with tasks_todo_(cond|mutex) and signal 4117 task completion to tasks_done_cond. 4118 41192020-02-03 Matthias Maennich <maennich@google.com> 4120 4121 abg-dwarf-reader: zero initialize local Dwarf_Addr values 4122 * src/abg-dwarf-reader.cc 4123 (read_context::get_first_exported_fn_address_from_DW_AT_ranges): 4124 initialize local Dwarf_Addr variables. 4125 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4126 41272020-01-29 Matthias Maennich <maennich@google.com> 4128 4129 abg-comparison: prefer .empty() over implicit bool conversion of .size() 4130 * src/abg-comparison.cc (corpus_diff::has_changes): prefer 4131 !container.empty() over bool(container.size()) 4132 [1] https://clang.llvm.org/extra/clang-tidy/checks/readability-container-size-empty.html 4133 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4134 41352020-01-29 Matthias Maennich <maennich@google.com> 4136 4137 Fix some parameter name inconsistencies 4138 * src/abg-comparison-priv.h 4139 (corpus_diff::priv::count_unreachable_types): use consistent 4140 parameter naming. 4141 * tools/abidiff.cc(main): Likewise. 4142 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4143 41442020-02-03 Giuliano Procida <gprocida@google.com> 4145 4146 Don't ignore options when diffing translation units (.bi files). 4147 * tests/data/Makefile.am: Add test case files. 4148 * tests/data/test-abidiff-exit/test-loc-*: New test cases. 4149 * tests/test-abidiff-exit.cc (in_out_specs): Add new test cases. 4150 * tools/abidiff.cc (main): Use populated ctxt for translation unit 4151 diff. 4152 41532020-01-29 Giuliano Procida <gprocida@google.com> 4154 4155 Fix typo in COMPILING. 4156 * COMPILING: 4157 41582020-01-29 Giuliano Procida <gprocida@google.com> 4159 4160 Remove redundant mention of libtool in COMPILING documentation. 4161 * COMPILING: Remove redundant mention of libtool. 4162 41632020-01-26 Matthias Maennich <maennich@google.com> 4164 4165 Testing: add Catch Unit test framework 4166 * tests/.gitignore: Add entry for .dirstamp 4167 * tests/Makefile.am: Add libcatch test library and use it for 4168 runtestkmiwhitelist. 4169 * tests/lib/catch.cc: New test driver implementation. 4170 * tests/lib/catch.hpp: Add Catch v1.12.2 header only test library. 4171 * tests/test-kmi-whitelist.cc: Migrate to use Catch test framework. 4172 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4173 41742020-01-25 Matthias Maennich <maennich@google.com> 4175 4176 abg-fwd: drop duplicate forward declaration for corpus_sptr 4177 * include/abg-fwd.h: drop superfluous forward declaration. 4178 41792020-01-25 Matthias Maennich <maennich@google.com> 4180 4181 Fix / add include guards 4182 * include/abg-dwarf-reader.h: Move include guard to the beginning. 4183 * include/abg-reporter-priv.h: Likewise. 4184 * include/abg-libxml-utils.h: Add include guard. 4185 * include/abg-libzip-utils.h: Likewise. 4186 41872020-01-25 Matthias Maennich <maennich@google.com> 4188 4189 dwarf-reader: handle binaries with missing symtab 4190 * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): 4191 Handle elf file with missing symtab. 4192 * tests/test-read-dwarf.cc (InOutSpec): add test case. 4193 * tests/data/test-read-dwarf/test26-bogus-binary.elf: new test data. 4194 41952020-01-24 Matthias Maennich <maennich@google.com> 4196 4197 dwarf-reader: handle symtab.section_header.sh_entsize == 0 4198 * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): 4199 Handle elf file with invalid sh_entsize. 4200 * tests/test-read-dwarf.cc (test_task::perform): handle empty 4201 in_abi_path and out_abi_path as 'read only' test. 4202 (InOutSpec): add test case. 4203 * tests/data/test-read-dwarf/test25-bogus-binary.elf: new test data. 4204 42052020-01-21 Matthias Maennich <maennich@google.com> 4206 4207 clang-format: Better approximation for binary operators and assignments 4208 * .clang-format: Add BreakBeforeBinaryOperators option. 4209 42102020-01-14 Matthias Maennich <maennich@google.com> 4211 4212 KMI Whitelists: Drop old whitelist extraction methods 4213 * include/abg-tools-utils.h 4214 (gen_suppr_spec_from_kernel_abi_whitelist): Delete declaration. 4215 * src/abg-tools-utils.cc 4216 (gen_suppr_spec_from_kernel_abi_whitelist): Delete definition 4217 and migrate users to gen_suppr_spec_from_kernel_abi_whitelists. 4218 * tools/abidiff.cc (set_suppressions): Migrate from using 4219 gen_suppr_spec_from_kernel_abi_whitelist to 4220 gen_suppr_spec_from_kernel_abi_whitelists. 4221 * tools/abidw.cc (set_suppressions): Likewise. 4222 * tools/abipkgdiff.cc: Drop unused using definition. 4223 * tools/kmidiff.cc: Likewise. 4224 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4225 42262020-01-14 Matthias Maennich <maennich@google.com> 4227 4228 KMI Whitelists: Add functionality to make whitelists additive 4229 * include/abg-tools-utils.h 4230 (gen_suppr_spec_from_kernel_abi_whitelists): New function. 4231 * src/abg-tools-utils.cc 4232 (gen_suppr_spec_from_kernel_abi_whitelists): Likewise. 4233 * tests/.gitignore: Ignore new test executable. 4234 * tests/Makefile.am: Add new test executable. 4235 * tests/data/test-kmi-whitelist/whitelist-with-another-single-entry: 4236 New test input file. 4237 * tests/data/test-kmi-whitelist/whitelist-with-duplicate-entry: 4238 Likewise. 4239 * tests/data/test-kmi-whitelist/whitelist-with-single-entry: 4240 Likewise. 4241 * tests/data/test-kmi-whitelist/whitelist-with-two-sections: 4242 Likewise. 4243 * tests/data/Makefile.am: Add above test material. 4244 * tests/test-kmi-whitelist.cc: Add new test executable. 4245 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4246 42472020-01-13 Matthias Maennich <maennich@google.com> 4248 4249 writer: completely skip over empty corpora 4250 * src/abg-writer.cc (write_corpus): completely skip empty 4251 corpora rather than creating an empty entry for them. 4252 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4253 42542020-01-13 Matthias Maennich <maennich@google.com> 4255 4256 corpus: is_empty: consider actual translation unit contents 4257 * src/abg-corpus.cc (corpus::is_empty): consider a list of 4258 empty members to be empty. 4259 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4260 42612020-01-13 Matthias Maennich <maennich@google.com> 4262 4263 abg-reader: handle empty corpus nodes in xml representation 4264 * src/abg-reader.cc (read_corpus_from_input): when assigning a 4265 corpus node, assure the node actually has children. 4266 * tests/test-abidiff.cc (main): Add test for variants of empty 4267 xml nodes to the test harness. 4268 * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input 4269 containing an empty xml node that closes immediately. 4270 * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input 4271 containing an empty xml node that closes immediately with a tag. 4272 * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input 4273 containing an empty xml node that closes with a tag on a new line. 4274 * tests/data/test-abidiff/test-empty-corpus-report.txt: 4275 Expected test output (empty abidiff) for diffing xml with itself. 4276 * tests/data/Makefile.am: Add the new test input material above 4277 to source distribution. 4278 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4279 42802020-01-17 Dodji Seketeli <dodji@redhat.com> 4281 4282 Bug 25409 - Fix reading layout-offset-in-bits attribute of data-member 4283 * src/abg-reader.cc (read_offset_in_bits): Fix comment. Use 4284 stroull rather than atoi. 4285 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0: 4286 Add new binary test input. 4287 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0-report-0.txt: 4288 Add new reference output. 4289 * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: 4290 Add new abixml representation for the binary test input above. 4291 * tests/data/Makefile.am: Add the new test material above to 4292 source distribution. 4293 * tests/test-diff-dwarf-abixml.cc (in_out_specs): Add the test 4294 input above to the test harness. 4295 42962020-01-13 Matthias Maennich <maennich@google.com> 4297 4298 abidiff/kmidiff: do not default-suppress added symbols 4299 * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Drop 4300 default suppression of added symbols. 4301 * tools/kmidiff.cc (set_diff_context): Likewise. 4302 * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: Adjust 4303 test expectation. 4304 * tests/data/test-diff-suppr/test46-PR25128-report-2.txt: Add 4305 test case for abidiff with flag --no-added-syms. 4306 * tests/data/Makefile.am: add new testcase. 4307 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4308 43092019-12-15 Matthias Maennich <maennich@google.com> 4310 4311 Add (undocumented) support for version suffixes 4312 * configure.ac: add substitution for VERSION_SUFFIX 4313 * include/abg-version.h.in: add define for ABIGAIL_VERSION_SUFFIX 4314 * include/abg-config.h(abigail_get_library_version): add support 4315 for a version suffix 4316 * src/abg-config.cc(abigail_get_library_version): Likewise. 4317 * src/abg-tools-utils.cc(get_library_version_string): Likewise. 4318 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4319 43202019-11-13 Matthias Maennich <maennich@google.com> 4321 4322 dwarf-reader: relax restriction about relocation sections in try_reading_first_ksymtab_entry 4323 * src/abg-dwarf-reader.cc (try_reading_first_ksymtab_entry): 4324 remove assertion and update documentation 4325 Fixes: 43679a610316 ("dwarf-reader: refactor try_reading_first_ksymtab_entry_using{pre,}_v4_19_format") 4326 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4327 43282019-11-11 Matthias Maennich <maennich@google.com> 4329 4330 abg-dwarf-reader: resolve relocation sections by index 4331 * src/abg-dwarf-reader.cc (find_relocation_section): New function. 4332 (find_ksymtab_reloc_section): Use find_relocation_section to 4333 resolve the ksymtab's relocation section. 4334 (find_ksymtab_gpl_reloc_section): Likewise. 4335 Fixes: e6870326e01a ("Support pre and post v4.19 ksymtabs for Linux kernel modules") 4336 Cc: Jessica Yu <jeyu@kernel.org> 4337 Cc: Android Kernel Team <kernel-team@android.com> 4338 Reviewed-by: Dodji Seketeli <dodji@seketeli.org> 4339 43402019-12-03 Dodji Seketeli <dodji@redhat.com> 4341 4342 Misc typo fixes 4343 * src/abg-comparison.cc 4344 (leaf_diff_node_marker_visitor::visit_begin): Fix typo in 4345 comments. 4346 * src/abg-corpus.cc 4347 (corpus::get_types_not_reachable_from_public_interfaces): 4348 Likewise. 4349 * src/abg-ir.cc (decl_base::set_has_anonymous_parent): Likewise. 4350 * src/abg-reader.cc (add_read_context_suppressions): Likewise. 4351 43522019-11-13 Dodji Seketeli <dodji@redhat.com> 4353 4354 Bug 24690 - Support comparing non-reachable types of a binary 4355 * include/abg-comparison.h (string_type_base_sptr_map): Define new 4356 typedef. 4357 (diff_context::show_unreachable_types): Declare new member 4358 functions. 4359 (corpus_diff::{deleted_unreachable_types, 4360 deleted_unreachable_types_sorted, added_unreachable_types, 4361 added_unreachable_types_sorted, changed_unreachable_types, 4362 changed_unreachable_types_sorted}): Likewise. 4363 (maybe_report_unreachable_type_changes): Declare this function a 4364 friend of class corpus_diff. 4365 (corpus_diff::diff_stats::{num_added_unreachable_types, 4366 num_added_unreachable_types_filtered_out, 4367 net_num_added_unreachable_types, num_removed_unreachable_types, 4368 num_removed_unreachable_types_filtered_out, 4369 net_num_removed_unreachable_types, num_changed_unreachable_types, 4370 num_changed_unreachable_types_filtered_out, 4371 net_num_changed_unreachable_types}): Likewise. 4372 * src/abg-comparison-priv.h 4373 (diff_context::priv::show_unreachable_types_): Define new data 4374 member. 4375 (diff_context::priv::priv): Initialize the new data member. 4376 (diff_comp::operator()): Use pretty representation of diff 4377 subjects to sort them, rather than just their name. Also, add 4378 comment to the other member functions of diff_comp. 4379 (corpus_diff::{unreachable_types_edit_script_, 4380 deleted_unreachable_types_, deleted_unreachable_types_sorted_, 4381 suppressed_deleted_unreachable_types_, added_unreachable_types_, 4382 added_unreachable_types_sorted_, 4383 suppressed_added_unreachable_types_, changed_unreachable_types_, 4384 changed_unreachable_types_sorted_}): Define new data members. 4385 (corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types): 4386 Changed the name of 4387 corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars into 4388 this. 4389 (corpus_diff::priv::{added_unreachable_type_is_suppressed, 4390 deleted_unreachable_type_is_suppressed, 4391 changed_unreachable_types_sorted, count_unreachable_types}): 4392 Declare new member functions. 4393 (corpus_diff::diff_stats::priv::{num_added_unreachable_types, 4394 num_added_unreachable_types_filtered_out, 4395 num_removed_unreachable_types, 4396 num_removed_unreachable_types_filtered_out, 4397 num_changed_unreachable_types, 4398 num_changed_unreachable_types_filtered_out}): Define new data 4399 members. 4400 (sort_string_type_base_sptr_map): Declare new function. 4401 * src/abg-comparison.cc (sort_string_type_base_sptr_map) 4402 (diff_context::show_unreachable_types): Define new functions. 4403 (corpus_diff::diff_stats::{num_added_unreachable_types, 4404 num_added_unreachable_types_filtered_out, 4405 net_num_added_unreachable_types, 4406 net_num_removed_unreachable_types, 4407 num_removed_unreachable_types_filtered_out, 4408 num_removed_unreachable_types}): Define new member functions. 4409 (diff_maps::insert_diff_node): Do not update the map "diff -> 4410 impacted interfaces" if the current impacted interface is nil. 4411 This happens if we are looking at a diff node for a change on a 4412 type that is not reachable from any interfaces. 4413 (corpus_diff::priv::ensure_lookup_tables_populated): Handle the 4414 edit script for unreachable types. 4415 (corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types): 4416 Rename 4417 corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars 4418 into this. Apply suppression specifications to added and removed 4419 unreachable types as well. 4420 (corpus_diff::priv::{added,deleted}_unreachable_type_is_suppressed): 4421 Define new member functions. 4422 (corpus_diff::priv::{count_unreachable_types, 4423 changed_unreachable_types_sorted}): Likewise. 4424 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Update 4425 statistics (including walking changed unreachable types to apply 4426 categorization and redundancy filters to them) related to 4427 unreachable types. 4428 (corpus_diff::priv::emit_diff_stats): Emit diff stats related to 4429 unreachable types. 4430 (corpus_diff::priv::maybe_dump_diff_tree): Dump diff tree nodes 4431 related to unreachable types. 4432 (corpus_diff::{deleted_unreachable_types, 4433 deleted_unreachable_types_sorted, added_unreachable_types, 4434 added_unreachable_types_sorted, changed_unreachable_types, 4435 changed_unreachable_types_sorted): Define new member functions. 4436 (corpus_diff::has_changes): Take deleted/added/changed unreachable 4437 types into account. 4438 (corpus_diff::has_incompatible_changes): Take net removed/changed 4439 unreachable types into account. 4440 (corpus_diff::has_net_subtype_changes): Take net removed and 4441 changed unreachable types into account. 4442 (corpus_diff::has_net_changes): Take net removed/added/changed 4443 unreachable types into account. 4444 (corpus_diff::traverse): When traversing the components of a 4445 corpus_diff node, make sure to traverse the changed unreachable 4446 types of the corpus. 4447 (leaf_diff_node_marker_visitor::visit_begin): Arrange for the fact 4448 that the current topmost interface can be nil if we are looking at 4449 types not reachable from global functions/variables. Also, make 4450 sure that only leaf nodes that are reachable from a global 4451 function/variable are recorded as leaf nodes. 4452 (compute_diff): In the overload for corpus_sptr, compute the 4453 changes between types not reachable from global functions and 4454 variables, if the user wishes that we do so. Also, add more 4455 comments. 4456 (apply_suppressions): Update for the name change of the function 4457 apply_suppressions_to_added_removed_fns_vars to 4458 apply_supprs_to_added_removed_fns_vars_unreachable_types. 4459 * include/abg-corpus.h 4460 (corpus::{record_type_as_reachable_from_public_interfaces, 4461 type_is_reachable_from_public_interfaces, 4462 get_types_not_reachable_from_public_interfaces}): Declare new 4463 member functions. 4464 (corpus::recording_types_reachable_from_public_interface_supported): 4465 Declare new virtual member function. 4466 (corpus_group::get_public_types_pretty_representations): Declare 4467 new member functons. 4468 (corpus_group::recording_types_reachable_from_public_interface_supported): 4469 Declare new virtual member function. 4470 * src/abg-corpus-priv.h 4471 (corpus::priv::{types_not_reachable_from_pub_ifaces_, 4472 pub_type_pretty_reprs_}): Define new data members. 4473 (corpus::priv::priv): Initialize the pub_type_pretty_reprs_ data 4474 member because it's a pointer. 4475 (corpus::priv::get_public_types_pretty_representations): Declare 4476 new member function. 4477 (corpus::priv::~priv): Declare a destructor. 4478 * src/abg-corpus.cc 4479 (corpus::priv::get_public_types_pretty_representations): Define 4480 new member function. 4481 (corpus::priv::~priv): Define new destructor to delete the new 4482 pub_type_pretty_reprs_ member pointer. 4483 (corpus::{record_type_as_reachable_from_public_interfaces, 4484 type_is_reachable_from_public_interfaces, 4485 get_types_not_reachable_from_public_interfaces, 4486 recording_types_reachable_from_public_interface_supported}): 4487 Define new member functions 4488 (corpus_group::get_public_types_pretty_representations): Likewise. 4489 * include/abg-diff-utils.h (struct deep_ptr_eq_functor): Document 4490 the equality operator. Also, add an overload to the equality 4491 operator, for weak_ptr<T>. The existing equality operator 4492 overload was just for shared_ptr<T>. 4493 * include/abg-fwd.h (is_user_defined_type): Declare function. 4494 * include/abg-ir.h (operator!=(const decl_base_sptr&, const 4495 decl_base_sptr&)): Declare new operator. 4496 (type_maps::get_types_sorted_by_name): Declare 4497 new member function. 4498 (decl_base::{g,s}et_is_artificial): Declare new member function. 4499 (function_decl::parameter::{g,s}et_artificial): Remove these 4500 member functions. 4501 * src/abg-ir.cc (operator!=(const decl_base_sptr&, const 4502 decl_base_sptr&)): Define new operator. 4503 (decl_base::priv::is_artificial_): Define new data 4504 member. 4505 (type_maps::priv::sorted_types_): Define new data member. 4506 (struct type_name_comp): Define new comparison functor to sort 4507 types based on their pretty representations. 4508 (decl_base::priv::priv): Initialize it. 4509 (decl_base::{g,s}et_is_artificial): Define new member functions. 4510 (type_maps::get_types_sorted_by_name): Define new member function. 4511 (is_user_defined_type): Define new function overloads. 4512 (strip_typedef, function_type::{function_type, set_parameters}): 4513 Adjust using decl_base::get_is_artificial rather than 4514 function_decl::parameter::get_artificial. 4515 (function_decl::parameter::priv::artificial_): Remove this data 4516 member. 4517 (function_decl::parameter::priv::priv): Adjust to the removal of 4518 function_decl::parameter::priv::artificial_. This constructor 4519 does not take an "is_artificial" flag anymore. 4520 (function_decl::parameter::parameter): Adjust to the removal of 4521 the is_artificial flag from the arguments of the constructor of 4522 function_decl::parameter::parameter::priv. 4523 (function_decl::parameter::get_artificial): Remove this member 4524 function. 4525 * src/abg-reporter-priv.h (maybe_report_unreachable_type_changes): 4526 Declare new function. 4527 * src/abg-reporter-priv.cc 4528 (maybe_report_unreachable_type_changes): Define new function. 4529 * src/abg-default-reporter.cc (default_reporter::report): In the 4530 overload for corpus_diff&, report added/removed/changed types that 4531 are not reachable from global functions and variables using the 4532 new function maybe_report_unreachable_type_changes. 4533 * src/abg-leaf-reporter.cc (leaf_reporter::report): In the 4534 overload for corpus_diff, report changes to types unreachable from 4535 global functions or variables, using the new function 4536 maybe_report_unreachable_type_changes. 4537 * src/abg-dwarf-reader.cc (build_ir_node_from_die): When the user 4538 requests that all types be loaded, record relevant types as 4539 reachable from global functions and variables. 4540 (build_enum_type, add_or_update_class_type) 4541 (add_or_update_union_type): Read the 'is-artificial' DWARF 4542 attribute and set the corresponding decl_base property 4543 accordingly. 4544 (finish_member_function_reading, strip_typedef) 4545 (function_type::function_type): Adjust using 4546 decl_base::get_is_artificial, rather than 4547 function_decl::parameter::get_artificial. 4548 * include/abg-reader.h 4549 (consider_types_not_reachable_from_public_interfaces): Declare new 4550 function. 4551 * src/abg-reader.cc 4552 (read_context::m_tracking_non_reachable_types): Add new data 4553 member. 4554 (read_context::read_context): Initialize it. 4555 (read_context::tracking_non_reachable_types): Define accessors for 4556 the new data member above. 4557 (read_is_declaration_only): Re-indent. 4558 (read_is_artificial): Define new helper function. 4559 (build_function_parameter): Use the new read_is_artificial 4560 function here, rather than open-coding it. 4561 (build_enum_type_decl, build_class_decl, build_union_decl): 4562 Support reading the 'is-artificial' property by using the new 4563 read_is_artificial function. 4564 (read_corpus_from_input): If the user wants us to take 4565 non-reachable types into account, then make sure we do so. 4566 (read_tracking_non_reachable_types, read_is_non_reachable_type): 4567 Define new static functions. 4568 (handle_element_node, build_type): Read the "is-non-reachable" 4569 attribute on type element nodes if the user wants us to track 4570 non-reachable types. 4571 (consider_types_not_reachable_from_public_interfaces): Define new 4572 function. 4573 * src/abg-writer.cc (write_is_artificial): Define new static 4574 helper function. 4575 (annotate): Adjust using decl_base::get_is_artificial rather than 4576 function_decl::parameter::get_artificial. 4577 (write_enum_type_decl, write_class_decl_opening_tag) 4578 (write_union_decl_opening_tag): Support writing the 4579 "is-artificial" property, using the new write_is_artificial 4580 function. 4581 (write_function_type): Adjust this to use the new 4582 write_is_artificial rather than open-coding writing the 4583 'is-artificial' attribute. 4584 (write_is_non_reachable) 4585 (write_tracking_non_reachable_types): Define new static functions. 4586 (write_enum_type_decl, write_class_decl_opening_tag) 4587 (write_union_decl_opening_tag): Write the 'is-no-reachable' 4588 attribute when applicable. 4589 (write_corpus, write_corpus_group): Write the 4590 'tracking-non-reachable-types' attribute when applicable. 4591 * tools/abidiff.cc (options::options): Initialize ... 4592 (options::show_all_types): ... new data member. 4593 (display_usage): Add help string from the new 4594 --non-reachable-types option. 4595 (parse_command_line): Parse the new --non-reachable-types option. 4596 (set_diff_context_from_opts): Set the 4597 dwarf_reader::read_context::show_unreachable_types property. 4598 (set_native_xml_reader_options): Define new 4599 static function. 4600 (main): Load all types when analyzing the DWARF or the ABIXML 4601 files, if the user wants us to do so. 4602 * tools/abipkgdiff.cc (options::show_all_types): Define new data 4603 member. 4604 (options::options): Initialize it. 4605 (parse_command_line): Parse the --non-reachable-types option to 4606 set the options::show_all_types data member. 4607 (display_usage): Add a help string for the new 4608 --non-reachable-types option. 4609 (set_diff_context_from_opts): Set the 4610 dwarf_reader::read_context::show_unreachable_types property based 4611 on the options::show_all_type data member. 4612 (compare): Configure the read context to load all types while 4613 analyzing the DWARF info, depending on the options::show_all_type 4614 data member. 4615 * doc/manuals/abidiff.rst: Document the new --non-reachable-types 4616 option added to abidiff above. 4617 * doc/manuals/abipkgdiff.rst: Add documentation for the 4618 --non-reachable-types option. 4619 * tests/data/test-diff-suppr/test47-non-reachable-types-v{0,1}.c: 4620 Source code files of test binary input. 4621 * tests/data/test-diff-suppr/test47-non-reachable-types-suppr-{1,2,3,4,5}.txt: 4622 New test input files. 4623 * tests/data/test-diff-suppr/test47-non-reachable-types-report-{1,2,3,4,5,6,7,8,9,10}.txt: 4624 New test reference output files. 4625 * tests/data/test-diff-suppr/test47-non-reachable-types-v{0,1}.o.alltypes.abixml: 4626 New test input abixml. 4627 * tests/data/Makefile.am: Add the new test material to source 4628 distribution. 4629 * tests/test-diff-suppr.cc (in_out_specs): Add the new tests above 4630 to this test harness. 4631 * tests/data/test-abidiff/test-struct1-report.txt: Adjust. 4632 * tests/data/test-diff-pkg/PR24690/flatpak-debuginfo-1.2.4-3.fc30.x86_64.rpm: 4633 New input binary RPM. 4634 * tests/data/test-diff-pkg/PR24690/flatpak-debuginfo-1.4.0-1.fc30.x86_64.rpm: 4635 Likewise. 4636 * tests/data/test-diff-pkg/PR24690/flatpak-devel-1.2.4-3.fc30.x86_64.rpm: 4637 Likewise. 4638 * tests/data/test-diff-pkg/PR24690/flatpak-devel-1.4.0-1.fc30.x86_64.rpm: 4639 Likewise. 4640 * tests/data/test-diff-pkg/PR24690/flatpak-libs-1.2.4-3.fc30.x86_64.rpm: 4641 Likewise. 4642 * tests/data/test-diff-pkg/PR24690/flatpak-libs-1.4.0-1.fc30.x86_64.rpm: 4643 Likewise. 4644 * tests/data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.2.4-3.fc30.x86_64.rpm: 4645 Likewise. 4646 * tests/data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.4.0-1.fc30.x86_64.rpm: 4647 Likewise. 4648 * tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt: New test 4649 reference output. 4650 * tests/data/Makefile.am: Add the new test material above to 4651 source distribution. 4652 * tests/test-diff-pkg.cc (in_out_specs): Add the new test material 4653 above to this test harness. 4654 46552019-11-26 Dodji Seketeli <dodji@redhat.com> 4656 4657 Small style fix in abg-default-reporter.cc 4658 * src/abg-default-reporter.cc (default_reporter::report): In the 4659 overload for corpus_diff, break a line longer than 80 characters. 4660 46612019-10-21 Matthias Maennich <maennich@google.com> 4662 4663 dwarf-reader: add support for symbol namespaces in ksymtab entries 4664 * src/abg-dwarf-reader.cc 4665 (read_context::try_reading_first_ksymtab_entry): Add 4666 symbol_offset parameter. 4667 (read_context::get_ksymtab_entry_size): Add support for variable 4668 size ksymtab entries due to symbol namespaces. 4669 (load_kernel_symbol_table): only load nb_entries when needed 4670 [1] https://lore.kernel.org/lkml/20190906103235.197072-1-maennich@google.com/ 4671 46722019-10-21 Matthias Maennich <maennich@google.com> 4673 4674 dwarf-reader: refactor try_reading_first_ksymtab_entry_using{pre,}_v4_19_format 4675 * src/abg-dwarf-reader.cc(try_reading_first_ksymtab_entry): 4676 New function to consolidate functionality for 4677 try_reading_first_ksymtab_entry_using_{pre,}v4_19_format functions. 4678 (try_reading_first_ksymtab_entry_using_v4_19_format, 4679 try_reading_first_ksymtab_entry_using_pre_v4_19_format): 4680 refactor to use try_reading_first_ksymtab_entry 4681 46822019-10-28 Dodji Seketeli <dodji@redhat.com> 4683 4684 Bug 25128 - Handle decl-only classes that differ only in size 4685 * include/abg-comp-filter.h (is_decl_only_class_with_size_change): 4686 Declare an overload. 4687 * include/abg-fwd.h (look_through_decl_only_class): Declare an 4688 overload. 4689 * src/abg-comp-filter.cc (is_decl_only_class_with_size_change): 4690 Define an overload that takes class_or_union& type. Re-write the 4691 previous overload in terms of this new one. 4692 * src/abg-ir.cc (look_through_decl_only_class): Define a new 4693 overload that takes a class_or_union&. Rewrite the previous 4694 overload in terms of this one. 4695 (equals): In the overload for class_or_union&, use 4696 is_decl_only_class_with_size_change to detect cases of decl-only 4697 classes that differ only by their size attribute and avoid 4698 comparing them. 4699 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 4700 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 4701 * tests/data/test-diff-filter/test41-report-0.txt: Likewise. 4702 47032019-10-24 Dodji Seketeli <dodji@redhat.com> 4704 4705 Bug 25128 - Leaf diff reporter shouldn't compare decl-only classes 4706 * include/abg-comp-filter.h (is_decl_only_class_with_size_change): 4707 Declare new function. 4708 * src/abg-comp-filter.cc (is_decl_only_class_with_size_change): 4709 Define new function. 4710 * src/abg-comparison.cc 4711 (leaf_diff_node_marker_visitor::visit_begin): Use the newly 4712 defined is_decl_only_class_with_size_change above to ignore bogus 4713 decl-only classes with a size change. 4714 * tests/data/test-diff-suppr/test45-abi-report-1.txt: New test input. 4715 * tests/data/test-diff-suppr/test45-abi-wl.xml: Likewise. 4716 * tests/data/test-diff-suppr/test45-abi.xml: Likewise. 4717 * tests/data/test-diff-suppr/test45-abi.suppr.txt: New reference 4718 output for the test input above. 4719 * tests/data/test-diff-suppr/test46-PR25128-base.xml: New test input. 4720 * tests/data/test-diff-suppr/test46-PR25128-new.xml: Likewise. 4721 * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: New 4722 reference input for the test input above. 4723 * tests/data/Makefile.am: Add the new test material to source distribution. 4724 * tests/test-diff-suppr.cc (in_out_spec): Add the new test input 4725 above to this test harness. 4726 47272019-10-18 Dodji Seketeli <dodji@redhat.com> 4728 4729 Bug 25095 - Apply symbol white lists to ELF symbols 4730 * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelist): 4731 Generate a suppression specification which considers the name of 4732 the symbol associated to a function/variable, rather than just the 4733 name of said function/variable. 4734 47352019-10-18 Dodji Seketeli <dodji@redhat.com> 4736 4737 Support symbol_name_not_regexp in [suppress_{function, variable}] 4738 * doc/manuals/libabigail-concepts.rst: Document the new 4739 symbol_name_not_regexp properties for the 4740 suppress_{function,variable} directives. 4741 * include/abg-suppression.h 4742 ({function,variable}_suppression::{g,s}et_symbol_name_not_regex_str): 4743 Declare new member functions. 4744 * src/abg-dwarf-reader.cc 4745 (read_context::is_elf_symbol_suppressed): Define new member functions. 4746 (read_context::{load_symbol_maps_from_symtab_section, 4747 populate_symbol_map_from_ksymtab, 4748 populate_symbol_map_from_ksymtab_reloc}): Drop suppressed symbols 4749 when reading symbol tables. 4750 ({function,variable}_is_suppressed): Consider that in C, the 4751 linkage name is _by default_ the same as the function/variable 4752 name. Remove local variable. 4753 * include/abg-ir.h (elf_symbol_is_{function,variable}): Add ... 4754 * src/abg-ir.cc (elf_symbol_is_{function,variable}): ... new 4755 functions. 4756 * src/abg-reader.cc (build_elf_symbol): Take an additional boolean 4757 to detect and drop suppressed symbols. 4758 (build_elf_symbol_db): Adjust the call to build_elf_symbol to make 4759 it detect and drop suppressed symbols. 4760 (read_corpus_from_input): Be mindful that the set of symbols for a 4761 given corpus can be empty because of suppression specifications. 4762 * src/abg-suppression-priv.h 4763 ({function,variable}_suppression::priv::symbol_name_not_regex[_str_]): 4764 Add new data members. 4765 (function,variable}_suppression::priv::get_symbol_name_not_regex): 4766 Add new member functions. 4767 ({function,variable}_is_suppressed): Guard against empty name. 4768 (is_elf_symbol_suppressed): Define new function template. 4769 * src/abg-suppression.cc 4770 ({function,variable}_suppression::{g,s}et_symbol_name_not_regex_str): 4771 Define new member functions. 4772 ({function,variable}_suppression::suppresses_function) 4773 (suppression_matches_{function,variable}_sym_name) 4774 (read_{function,variable}_suppression): Support the new 4775 "symbol_name_not_regex" property. 4776 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-report-1.txt: 4777 New test reference report. 4778 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-report-2.txt: 4779 Likewise. 4780 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.c: 4781 Sources of the new test input. 4782 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.o: 4783 New test input binaries. 4784 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.o.abi: 4785 New test input abixml files. 4786 * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp.suppr.txt: 4787 Next test suppression specification. 4788 * tests/data/Makefile.am: Add the new test material above to 4789 source distribution. 4790 * tests/test-diff-suppr.cc (in_out_specs): Add the input tests 4791 above to the test harness. 4792 47932019-10-24 Dodji Seketeli <dodji@redhat.com> 4794 4795 [abg-comparison.cc] Fix comments typo 4796 * src/abg-comparison.cc 4797 (leaf_diff_node_marker_visitor::visit_begin): Fix typo in comment. 4798 47992019-10-04 Matthias Maennich <maennich@google.com> 4800 4801 kmidiff: fix help message 4802 * tools/kmidiff.c (display_usage): add missing line breaks to 4803 help text 4804 48052019-10-04 Matthias Maennich <maennich@google.com> 4806 4807 dwarf-reader: read_corpus_from_elf: unconditionally load elf properties 4808 * src/abg-dwarf-reader.cc (read_corpus_from_elf): 4809 unconditionally load elf properties into context 4810 48112019-10-04 Dodji Seketeli <dodji@redhat.com> 4812 4813 PR25058 - Better support fn DIEs referring to symbols using DW_AT_ranges 4814 * src/abg-dwarf-reader.cc 4815 (read_context::get_first_exported_fn_address_from_DW_AT_ranges): 4816 Rename read_context::get_first_address_from_DW_AT_ranges into 4817 this. Walk through the addresses referred to by the DW_AT_ranges 4818 attribute until we find one that is for an exported function 4819 symbol, rather than just picking the first address of the set. 4820 (read_context::get_function_address): Adjust. 4821 48222019-10-03 Dodji Seketeli <dodji@redhat.com> 4823 4824 PR25058 - Support decl DIEs referring to symbols using DW_AT_ranges 4825 * src/abg-dwarf-reader.cc 4826 (read_context::get_first_address_from_DW_AT_ranges): Define new 4827 member function. 4828 (read_context::get_function_address): Use the new 4829 read_context::get_first_address_from_DW_AT_ranges here. 4830 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: 4831 New reference test output. 4832 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl.so: New test 4833 input binary. 4834 * tests/data/test-diff-dwarf/PR25058-liblttng-ctl2.10.so: New test 4835 input binary. 4836 * tests/data/Makefile.am: Add the new test materials above to 4837 source distribution. 4838 * tests/test-diff-dwarf.cc (in_out_specs): Add the new input test 4839 input binary files to this test harness. 4840 48412019-10-01 Dodji Seketeli <dodji@redhat.com> 4842 4843 Fix thinkos in DW_FORM_strx detection in configure.ac 4844 * configure.ac: Fix thinko when setting the HAVE_DW_FORM_strx 4845 macro. 4846 48472019-10-01 Dodji Seketeli <dodji@redhat.com> 4848 4849 Fix a typo in a comment of abg-dwar-reader.cc 4850 * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): 4851 Fix a typo in the comment of this function. 4852 48532019-09-30 Dodji Seketeli <dodji@redhat.com> 4854 4855 PR25042 - Support string form DW_FORM_strx{1,4} from DWARF 5 4856 * configure.ac: Detect the presence of the DW_FORM_strx{1,4} 4857 enumerators. 4858 * src/abg-dwarf-reader.cc (form_is_DW_FORM_strx): Define new 4859 function. 4860 (compare_dies_string_attribute_value): Use the new 4861 form_is_DW_FORM_strx here. 4862 * tests/data/Makefile.am: Add the new test input files below to 4863 source distribution. 4864 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0: 4865 New binary test input file. 4866 * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: 4867 Reference output of the new binary test input file. 4868 * tests/test-read-dwarf.cc (in_out_specs): Add the input test 4869 files above to the test harness, for platforms that support the 4870 DW_FORM_strx form. 4871 48722019-09-04 Dodji Seketeli <dodji@redhat.com> 4873 4874 Support the "name_not_regexp" property in the [suppress_type] section 4875 * doc/manuals/libabigail-concepts.rst: Update this to document the 4876 new name_not_regexp property of the suppress_type directive. 4877 * include/abg-suppression.h 4878 (type_suppression::{g,s}et_type_name_not_regex_str): Declare new accessors. 4879 * src/abg-suppression-priv.h 4880 (type_suppression::priv::{type_name_not_regex_str_, 4881 type_name_not_regex_}): Define new data members. 4882 (type_suppression::priv::{get_type_name_not_regex, 4883 set_type_name_not_regex, get_type_name_not_regex_str, 4884 set_type_name_not_regex_str}): Define new member functions. 4885 * src/abg-suppression.cc 4886 (type_suppression::get_type_name_regex_str): Fix comments. 4887 (type_suppression::{set_type_name_not_regex_str, 4888 get_type_name_not_regex_str}): Define new data members. 4889 (suppression_matches_type_name): Adapt to support the new 4890 type_name_not_regex property. 4891 (read_type_suppression): Support parsing the type_name_not_regexp 4892 property. 4893 * tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt: 4894 New test reference output. 4895 * tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt: Likewise. 4896 * tests/data/test-diff-suppr/test42-negative-suppr-type-suppr-1.txt: 4897 New test input. 4898 * tests/data/test-diff-suppr/test42-negative-suppr-type-suppr-2.txt: Likewise. 4899 * tests/data/test-diff-suppr/test42-negative-suppr-type-v0.{cc, o}: Likewise. 4900 * tests/data/test-diff-suppr/test42-negative-suppr-type-v1.{cc, 4901 o}: Likewise. 4902 * tests/data/Makefile.am: Add the test files above to source 4903 distribution. 4904 * tests/test-diff-suppr.cc (int_out_specs): Add the new tests to 4905 the harness. 4906 49072019-09-04 Dodji Seketeli <dodji@redhat.com> 4908 4909 Better propagation of suppressed-ness to function types 4910 * src/abg-comparison.cc 4911 (suppression_categorization_visitor::visit_end): Propagate 4912 suppression-ness from suppressed function type diff node to its 4913 parent function node if the latter doesn't have any local non-type 4914 change. 4915 * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-report-1.txt: 4916 New test reference output. 4917 * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-suppr-1.txt: 4918 New test input suppression file. 4919 * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-v{0,1}.cc: 4920 Source code of input binary file. 4921 * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-v{0,1}.o: 4922 Input binary files. 4923 * tests/data/Makefile.am: Add the new test input files above to 4924 source distribution. 4925 * tests/test-diff-suppr.cc (in_out_specs): Add the test input to 4926 test harness. 4927 49282019-09-04 Dodji Seketeli <dodji@redhat.com> 4929 4930 [has_type_change] Better detect type size changes 4931 * src/abg-comp-filter.cc (has_type_change): Support function 4932 parameters. 4933 49342019-09-23 Dodji Seketeli <dodji@redhat.com> 4935 4936 Fix reading of relocation sections when endianness mismatches 4937 * src/abg-dwarf-reader.cc 4938 (read_context::{get_ksymtab_format_module, 4939 populate_symbol_map_from_ksymtab_reloc}): Use elf_getdata rather 4940 than elf_rawdata. 4941 49422019-09-20 Dodji Seketeli <dodji@redhat.com> 4943 4944 Guard testing v4.19+ AARCH64 kernel module loading for EL6 support 4945 * tests/test-read-dwarf.cc: Do not run the test on 4946 PR25007-sdhci.ko if the macros R_AARCH64_PREL32 and 4947 R_AARCH64_ABS64 are not defined. 4948 49492019-09-19 Dodji Seketeli <dodji@redhat.com> 4950 4951 Remove the elf_symbol::get_value property 4952 * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Remove the 4953 'val' parameter. 4954 * src/abg-dwarf-reader.cc (elf_symbol::get_value): Remove this 4955 member function declaration. 4956 (lookup_symbol_from_sysv_hash_tab) 4957 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) 4958 (create_default_var_sym, create_default_fn_sym) 4959 (read_context::lookup_elf_symbol_from_index): Adjust calls to 4960 creating elf_symbol instances. 4961 * src/abg-ir.cc (elf_symbol::priv::value_): Remove this data 4962 member. 4963 (elf_symbol::{priv::priv, elf_symbol, create): Adjust. 4964 * src/abg-reader.cc (build_elf_symbol): Likewise. 4965 49662019-09-19 Dodji Seketeli <dodji@redhat.com> 4967 4968 Bug 25007 - Don't use section-relative symbol values on ET_REL binaries 4969 * src/abg-dwarf-reader.cc 4970 (read_context::{lookup_native_elf_symbol_from_index, 4971 maybe_adjust_et_rel_sym_addr_to_abs_addr}): Define new member 4972 functions. 4973 (read_context::lookup_elf_symbol_from_index): Add a new overload. 4974 Write the old overloads in terms of the new one. 4975 (read_context::{load_symbol_maps_from_symtab_section, 4976 populate_symbol_map_from_ksymtab_reloc}): Use the new 4977 maybe_adjust_et_rel_sym_addr_to_abs_addr function to translate the 4978 symbol value/address into a binary-relative address before adding 4979 it to the addr->sym maps. 4980 (read_context::maybe_adjust_{fn, var}_sym_address): Do not adjust 4981 DWARF-referred-to addresses of ET_REL symbols anymore. 4982 * tests/data/test-read-dwarf/PR25007-sdhci.ko: New binary test input. 4983 * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: ABI 4984 representation of the above. 4985 * tests/test-read-dwarf.cc: Add the new test input to the harness. 4986 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. 4987 * tests/data/test-diff-filter/test20-inline-report-0.txt: Likewise. 4988 * tests/data/test-diff-filter/test20-inline-report-1.txt: Likewise. 4989 * tests/data/test-diff-filter/test41-report-0.txt: Likewise. 4990 * tests/data/test-diff-filter/test9-report.txt: Likewise. 4991 49922019-09-18 Dodji Seketeli <dodji@redhat.com> 4993 4994 Detect the presence of R_AARCH64_{ABS64, PREL32} macros 4995 * configure.ac: Define macros HAVE_R_AARCH64_{ABS64, PREL32}_MACRO 4996 if the macros R_AARCH64_{ABS64, PREL32} are present. 4997 * src/abg-dwarf-reader.cc 4998 (read_context::get_ksymtab_format_module): Conditionalize the use 4999 of R_AARCH64_{ABS64, PREL32} using HAVE_R_AARCH64_{ABS64, PREL32}_MACRO. 5000 50012019-09-03 Jessica Yu <jeyu@kernel.org> 5002 5003 Support pre and post v4.19 ksymtabs for Linux kernel modules 5004 * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Take new 5005 symbol value and shndx parameters. 5006 (elf_symbol::{get_value, get_shndx}): Declare new accessors. 5007 * src/abg-ir.cc (elf_symbol::priv::{value_, shndx_}): New data 5008 members. 5009 (elf_symbol::priv::priv): Adjust. 5010 (elf_symbol::elf_symbol): Take new value and is_linux_string_cst 5011 parameters. 5012 (elf_symbol::create): Likewise. 5013 (elf_symbol::{get_value, get_is_linux_string_cst}): Define new 5014 accessors. 5015 * src/abg-reader.cc (build_elf_symbol): Adjust. 5016 * src/abg-dwarf-reader.cc (binary_is_linux_kernel) 5017 (binary_is_linux_kernel): New static functions. 5018 (lookup_symbol_from_sysv_hash_tab) 5019 (lookup_symbol_from_gnu_hash_tab) 5020 (lookup_symbol_from_symtab): Adjust. 5021 (read_context::{ksymtab_reloc_section_, 5022 ksymtab_gpl_reloc_section_, ksymtab_strings_section_}): New data 5023 members. 5024 (read_context::read_context): Initialize ksymtab_reloc_section_, 5025 ksymtab_gpl_reloc_section_, ksymtab_strings_section_. 5026 (read_context::{find_ksymtab_reloc_section, 5027 find_ksymtab_gpl_reloc_section, find_ksymtab_strings_section, 5028 find_any_ksymtab_reloc_section, get_ksymtab_format_module, 5029 populate_symbol_map_from_ksymtab, 5030 populate_symbol_map_from_ksymtab_reloc, is_linux_kernel_module}): 5031 New member functions. 5032 (read_context::load_kernel_symbol_table): Adjust to call either 5033 populate_symbol_map_from_ksymtab{_reloc,} depending on ksymtab 5034 format. 5035 (read_context::get_ksymtab_format): Adjust to call 5036 get_ksymtab_format_module for linux kernel modules. 5037 (read_context::lookup_elf_symbol_from_index): Adjust. 5038 (create_default_var_sym, create_default_fn_sym): Adjust. 5039 50402019-08-02 Dodji Seketeli <dodji@redhat.com> 5041 5042 Serialize canonical types to avoid testing if types have been emitted 5043 * include/abg-fwd.h (is_decl_slow) 5044 (peel_pointer_or_reference_type): Declare new functions. 5045 * include/abg-ir.h (struct canonical_type_hash): Define new type. 5046 (type_base_ptr_set_type, type_base_ptrs_type) 5047 (type_base_sptrs_type, canonical_type_sptr_set_type): Define new 5048 typedefs. 5049 (environment::get_canonical_types_map): Declare new member 5050 function. 5051 (scope_decl::{get_canonical_types, get_sorted_canonical_types}): 5052 Declare new member functions. 5053 * src/abg-ir.cc (is_ptr_ref_or_qual_type) 5054 (peel_pointer_or_reference_type, is_decl_slow): Define new 5055 functions. 5056 (environment::{get_canonical_types_map}): Define new member 5057 functions. 5058 (canonical_type_hash::operator()): Likewise. 5059 (scope_decl::{get_canonical_types, get_sorted_canonical_types}): 5060 Likewise. 5061 (struct type_topo_comp): Define new comparison functor type. 5062 (environment::{sorted_canonical_types_}): Define new data member. 5063 (scope_decl::priv::{canonical_types_, sorted_canonical_types_}): 5064 Likewise. 5065 (scope_decl::is_empty): Take the presence of canonical types into 5066 account when determining if a scope is empty or not. 5067 (is_decl): Make this work for cases where the artifact at hand is 5068 a type which has a declaration, as opposed to being a pure 5069 declaration like a variable or a function. 5070 (canonicalize): Add the canonical type the list of canonical types 5071 of its scope. 5072 * src/abg-dwarf-reader.cc (read_context::die_is_in_cplus_plus): 5073 Define new member function. 5074 * src/abg-writer.cc (write_type, write_canonical_types_of_scope): 5075 Define new static functions. 5076 (fn_type_ptr_set_type): Define new typedef. 5077 (write_context::{m_referenced_fn_types_set, 5078 m_referenced_non_canonical_types_set}): Add new data members. 5079 (write_context::m_referenced_types_set): Renamed 5080 m_referenced_types_map into this. 5081 (write_context::get_referenced_types): Adjust. 5082 (write_context::get_referenced_{function_types, 5083 non_canonical_types}): 5084 (write_context::record_type_as_referenced): Adjust to add the 5085 referenced type in the proper set which would be one of the three 5086 following: write_context::{get_referenced_types, 5087 get_referenced_function_types, 5088 get_referenced_non_canonical_types}. 5089 (write_context::{type_is_referenced, clear_referenced}): Adjust. 5090 (write_translation_unit): Use the new 5091 write_canonical_types_of_scope. Also emit declaration-only 5092 classes that have member types. Do not test if a given type of a 5093 given scope has been emitted, in general, as this was super slow 5094 given the number of types. Emit referenced function types (as 5095 these don't belong to any scope). Rather than using the expensive 5096 "is_function_type" on *all* the referenced types, just walk the 5097 set write_context::get_referenced_function_types. Likewise, 5098 rather than using type_base::get_naked_canonical_type on 5099 *all* the referenced types, just walk the set 5100 write_context::get_referenced_non_canonical_types 5101 (write_class): Use write_canonical_types_of_scope here. 5102 * tools/abilint.cc (main): Support linting corpus group abixml 5103 files. 5104 * tests/data/test-annotate/libtest23.so.abi: Adjust. 5105 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 5106 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 5107 * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. 5108 * tests/data/test-annotate/test0.abi: Likewise. 5109 * tests/data/test-annotate/test1.abi: Likewise. 5110 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 5111 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 5112 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 5113 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 5114 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 5115 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 5116 * tests/data/test-annotate/test2.so.abi: Likewise. 5117 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 5118 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 5119 * tests/data/test-annotate/test4.so.abi: Likewise. 5120 * tests/data/test-annotate/test6.so.abi: Likewise. 5121 * tests/data/test-annotate/test7.so.abi: Likewise. 5122 * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. 5123 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. 5124 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 5125 * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.abi: Likewise. 5126 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 5127 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. 5128 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 5129 * tests/data/test-read-dwarf/test0.abi: Likewise. 5130 * tests/data/test-read-dwarf/test1.abi: Likewise. 5131 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 5132 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 5133 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 5134 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 5135 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 5136 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 5137 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 5138 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 5139 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 5140 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 5141 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 5142 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 5143 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 5144 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 5145 * tests/data/test-read-dwarf/test4.so.abi: Likewise. 5146 * tests/data/test-read-dwarf/test6.so.abi: Likewise. 5147 * tests/data/test-read-dwarf/test7.so.abi: Likewise. 5148 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Likewise. 5149 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 5150 * tests/data/test-read-write/test10.xml: Likewise. 5151 * tests/data/test-read-write/test14.xml: Likewise. 5152 * tests/data/test-read-write/test15.xml: Likewise. 5153 * tests/data/test-read-write/test17.xml: Likewise. 5154 * tests/data/test-read-write/test18.xml: Likewise. 5155 * tests/data/test-read-write/test19.xml: Likewise. 5156 * tests/data/test-read-write/test2.xml: Likewise. 5157 * tests/data/test-read-write/test20.xml: Likewise. 5158 * tests/data/test-read-write/test21.xml: Likewise. 5159 * tests/data/test-read-write/test22.xml: Likewise. 5160 * tests/data/test-read-write/test23.xml: Likewise. 5161 * tests/data/test-read-write/test24.xml: Likewise. 5162 * tests/data/test-read-write/test25.xml: Likewise. 5163 * tests/data/test-read-write/test26.xml: Likewise. 5164 * tests/data/test-read-write/test27.xml: Likewise. 5165 * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. 5166 * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. 5167 * tests/data/test-read-write/test3.xml: Likewise. 5168 * tests/data/test-read-write/test6.xml: Likewise. 5169 51702019-07-24 Matthias Maennich <maennich@google.com> 5171 5172 abg-dwarf-reader: detect kernel modules without exports as such 5173 * src/abg-dwarf-reader.cc(is_linux_kernel_binary): consider 5174 binaries only having a .modinfo section to be kernel binaries 5175 Co-developed-by: Alessio Balsini <balsini@android.com> 5176 51772019-07-22 Matthias Maennich <maennich@google.com> 5178 5179 Ensure a consistent C++ standard use 5180 * configure.ac: add -std=c++11 flag to CXXFLAGS when compiling 5181 for C++11 5182 * src/Makefile.am: drop now obsolete setting of the -std flag 5183 * tests/Makefile.am: likewise 5184 Reported-by: Chun-Hung Wu <Chun-hung.Wu@mediatek.com> 5185 51862019-07-19 Dodji Seketeli <dodji@redhat.com> 5187 5188 Bug 24787 - Filter out enum changes into compatible integer types 5189 * include/abg-comparison.h (peel_typedef_or_qualified_type_diff): 5190 Declare new function. 5191 (peel_pointer_or_qualified_type_diff): Rename 5192 peel_pointer_or_qualified_type into this. 5193 * include/abg-fwd.h (is_enum_type): Declare a new overload for 5194 type_or_decl_base*. 5195 * src/abg-comp-filter.cc (has_harmless_enum_to_int_change): Define 5196 new static function. 5197 * src/abg-comparison.cc (categorize_harmless_diff_node): Use the 5198 new has_harmless_enum_to_int_change here. 5199 (peel_pointer_or_qualified_type_diff): Renamed 5200 peel_pointer_or_qualified_type into this. 5201 (is_diff_of_basic_type): Adjust. 5202 (peel_typedef_or_qualified_type_diff): Define new function. 5203 * test-diff-filter/PR24787-lib{one, two}.so: New test input 5204 binaries. 5205 * test-diff-filter/PR24787-{one, two}.c: Source files of the test 5206 input binaries above. 5207 * test-diff-filter/PR24787-report-0.txt: Test output reference. 5208 * tests/data/Makefile.am: Add the new testing material to source 5209 distribution. 5210 * tests/test-diff-filter.cc (in_out_specs): Add the new test to 5211 the test harness. 5212 52132019-07-19 Dodji Seketeli <dodji@redhat.com> 5214 5215 Add timing to the verbose logs of abidw 5216 * include/abg-tools-utils.h (class timer): Declare new type. 5217 (operator<<(ostream&, const timer&)): Declare new streaming 5218 operator for the new timer type. 5219 * src/abg-tools-utils.cc (struct timer::priv): Define new type. 5220 (timer::{timer, start, stop, value_in_seconds, value, 5221 value_as_string, ~timer}): Define member functions. 5222 (operator<<(ostream& o, const timer& t)): Define streaming 5223 operator. 5224 (build_corpus_group_from_kernel_dist_under): Add timing logs to 5225 the linux kernel reading process. 5226 * src/abg-dwarf-reader.cc 5227 (read_context::canonicalize_types_scheduled): Add timing logs to 5228 type canonicalization. 5229 (read_debug_info_into_corpus): Add timing logs for the whole debug 5230 info loading and internal representation building process. 5231 * tools/abidw.cc (load_corpus_and_write_abixml): Add timing logs 5232 for the binary loading and serizalization process. 5233 (load_kernel_corpus_group_and_write_abixml): Add timing logs the 5234 Linux Kernel binary loading and writing process. 5235 52362019-07-18 Dodji Seketeli <dodji@redhat.com> 5237 5238 [ir] Fix indentation and add comments 5239 * src/abg-ir.cc (types_defined_same_linux_kernel_corpus_public): 5240 Fix indentation and add comments. 5241 52422019-07-15 Dodji Seketeli <dodji@redhat.com> 5243 5244 Implement fast comparison of Linux Kernel types when applicable 5245 * include/abg-corpus.h (corpus::origin): Add a new 5246 LINUX_KERNEL_BINARY_ORIGIN enumerator. 5247 (corpus::{s,g}et_group): Declare new member 5248 functions. 5249 (class corpus): Make the corpus_group class friend of this one. 5250 (corpus_group::get_main_corpus): Declare new member function. 5251 * src/abg-corpus-priv.h (corpus::priv::group): Define new data 5252 member. 5253 (corpus::priv::priv): Initialize the new corpus::priv::group data 5254 member. 5255 * src/abg-corpus.cc (corpus::{g,s}et_group): Define new member 5256 functions. 5257 (corpus_group::get_main_corpus): Likewise. 5258 (corpus_group::add_corpus): Use the new corpus::set_group() here 5259 to to make the corpus be aware of the group it belongs to. 5260 * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Set the 5261 current corpus origin to the corpus::LINUX_KERNEL_BINARY_ORIGIN if 5262 we are looking at a Linux Kernel binary. 5263 (read_context::main_corpus_from_current_group): Use the 5264 corpus_group::get_main_corpus method. 5265 (should_reuse_type_from_corpus_group): Return the corpus group, 5266 rather than the main corpus. 5267 (read_debug_info_into_corpus): Add the current corpus to the 5268 current corpus group before the debug info reading is done. That 5269 way, the corpus group will be accessible from the current corpus 5270 during the construction of the internal representation. 5271 (read_and_add_corpus_to_group_from_elf): Add the corpus to the 5272 group only if it wasn't added to it before. 5273 * include/abg-ir.h (operator{==,!=}): Declare new deep equality 5274 and inequality operators for class_or_union_sptr and 5275 union_decl_sptr. 5276 * src/abg-ir.cc (types_defined_same_linux_kernel_corpus_public): 5277 Define a new static function. 5278 (type_base::get_canonical_type_for): Use the new 5279 types_defined_same_linux_kernel_corpus_public here to speed up 5280 type comparison. 5281 (equals): In the overload of class_or_union, use the new 5282 types_defined_same_linux_kernel_corpus_public as well, to speed up 5283 type comparison. 5284 (operator{==,!=}): Define new deep equality and inequality 5285 operators for class_or_union_sptr and union_decl_sptr. 5286 (maybe_update_types_lookup_map): In the overload function for 5287 type_decl_sptr, class_decl_sptr, union_decl_sptr, 5288 enum_type_decl_sptr, typedef_decl_sptr, qualified_type_def_sptr, 5289 reference_type_def_sptr, array_type_def_sptr, 5290 array_type_def::subrange_sptr, and function_type_sptr, update the 5291 type lookup maps of the containing corpus group as well, not just 5292 the ones of the current corpus. 5293 * src/abg-reader.cc (build_enum_type_decl): Forgot to set the 5294 "is-anonymous" flag. Oops, fix this. 5295 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. 5296 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 5297 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 5298 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 5299 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 5300 53012019-07-09 Matthias Maennich <maennich@google.com> 5302 5303 abg-tools-utils: add missing header include guards 5304 * include/abg-tools-utils.h: add header include guards 5305 53062019-07-05 Matthias Maennich <maennich@google.com> 5307 5308 Add compatibility layer for C++11 mode 5309 * include/abg-cxx-compat.h: new file introducing the abg_compat 5310 namespace to provide C++11 functionality from either std::tr1 5311 or std:: 5312 * include/Makefile.am: Add the new abg-cxx-compat.h to source 5313 distribution. 5314 * include/abg-comparison.h: replace std::tr1 usage by abg_compat 5315 and adjust includes accordingly: likewise 5316 * include/abg-diff-utils.h: likewise 5317 * include/abg-fwd.h: likewise 5318 * include/abg-ini.h: likewise 5319 * include/abg-interned-str.h: likewise 5320 * include/abg-ir.h: likewise 5321 * include/abg-libxml-utils.h: likewise 5322 * include/abg-libzip-utils.h: likewise 5323 * include/abg-reporter.h: likewise 5324 * include/abg-sptr-utils.h: likewise 5325 * include/abg-suppression.h: likewise 5326 * include/abg-tools-utils.h: likewise 5327 * include/abg-workers.h: likewise 5328 * src/abg-comp-filter.cc: likewise 5329 * src/abg-comparison-priv.h: likewise 5330 * src/abg-corpus.cc: likewise 5331 * src/abg-dwarf-reader.cc: likewise 5332 * src/abg-hash.cc: likewise 5333 * src/abg-ir.cc: likewise 5334 * src/abg-reader.cc: likewise 5335 * src/abg-suppression.cc: likewise 5336 * src/abg-tools-utils.cc: likewise 5337 * src/abg-writer.cc: likewise 5338 * tests/test-diff-filter.cc: likewise 5339 * tests/test-diff-pkg.cc: likewise 5340 * tests/test-read-dwarf.cc: likewise 5341 * tests/test-read-write.cc: likewise 5342 * tests/test-types-stability.cc: likewise 5343 * tests/test-write-read-archive.cc: likewise 5344 * tools/abicompat.cc: likewise 5345 * tools/abidiff.cc: likewise 5346 * tools/abidw.cc: likewise 5347 * tools/abilint.cc: likewise 5348 * tools/abipkgdiff.cc: likewise 5349 53502019-07-05 Matthias Maennich <maennich@google.com> 5351 5352 Update tests/.gitignore to ignore runtesttoolsutils 5353 * tests/.gitignore: ignore runtesttoolsutils 5354 53552019-07-05 Matthias Maennich <maennich@google.com> 5356 5357 Drop requirement to compile with GNU extensions 5358 * include/abg-tools-utils.h (get_stream): Change return type to 5359 std::fstream 5360 * src/abg-corpus.cc: remove unused #include of ext/stdio_filebuf.h 5361 * src/abg-tools-utils (temp_file::priv): remove filebuf_ member, 5362 and replace iostream_ by fstream_ with changing the shared_ptr 5363 type accordingly 5364 (temp_file::priv::priv): initialize fstream_ based on 5365 temporary file name 5366 (temp_file::priv::~priv): adjust destruction accordingly 5367 (temp_file::is_good): test the fstream rather than the fd 5368 (temp_file::get_stream): adjust return type to std::fstream 5369 and adjust implementation based on the changes in temp_file::priv 5370 * src/Makefile.am: remove gnu extension from c++ standard flag 5371 * tests/Makefile.am: likewise 5372 53732019-07-09 Dodji Seketeli <dodji@redhat.com> 5374 5375 Misc indent cleanup 5376 * src/abg-dwarf-reader.cc (addr_elf_symbol_sptr_map_sptr): Fix a 5377 typo in the comment of this typedef. 5378 * src/abg-ir.cc (hash_type_or_decl): Fix typo in a comment. 5379 * src/abg-writer.cc (write_translation_unit): Remove useless 5380 vertical space. 5381 53822019-07-08 Dodji Seketeli <dodji@redhat.com> 5383 5384 [xml-writer] Remove a useless kludge 5385 * src/abg-writer.cc (write_context::type_is_emitted): Remove 5386 useless kludge from here. 5387 53882019-07-08 Dodji Seketeli <dodji@redhat.com> 5389 5390 [xml-writter] Speedup function_type::get_cached_name 5391 * src/abg-ir.cc (function_type::get_cached_name): Really cache the 5392 computed name of function_type instances. 5393 53942019-07-08 Dodji Seketeli <dodji@redhat.com> 5395 5396 [xml-writter] Avoid using RTTI when dynamically hashing types 5397 * include/abg-fwd.h (hash_type): Declare new function. 5398 * src/abg-ir.cc (hash_type): Define new function. 5399 * src/abg-writer.cc (type_hasher::operator()): Use the new 5400 hash_type rather than the old hash_type_or_decl. 5401 54022019-07-08 Dodji Seketeli <dodji@redhat.com> 5403 5404 Implement a poor-man's RTTI for performance 5405 * include/abg-fwd.h (is_type_decl): Replace the overloads 5406 that takes a type_base* and/or a decl_base* by one that takes a 5407 type_or_decl_base*. 5408 * include/abg-ir.h (type_or_decl_base::type_or_decl_kind): Define 5409 new enum. 5410 (type_or_decl_base::{kind, runtime_type_instance, 5411 type_or_decl_base_pointer}): Declare new accessors. 5412 (operator{|,|=,&,&=): Declare new operators for the new 5413 type_or_decl_base::type_or_decl_kind enum. 5414 (global_scope::global_scope): Move the definition of this 5415 constructor to ... 5416 * src/abg-ir.cc (global_scope::global_scope): ... here. 5417 (type_or_decl_base::priv::{kind_, rtti_, type_or_decl_ptr_}): 5418 Add new data members. 5419 (type_or_decl_base::priv::priv): Take a 5420 type_or_decl_base::type_or_decl_kind enum. 5421 (type_or_decl_base::priv::kind): Define new accessors. 5422 (operator{|,|=,&,&=): Define new operators for the new 5423 type_or_decl_base::type_or_decl_kind enum. 5424 (type_or_decl_base::type_or_decl_base): Take a 5425 type_or_decl_base::type_or_decl_kind enum. 5426 (type_or_decl_base::{kind, runtime_type_instance, 5427 type_or_decl_base_pointer}): Define new accessors. 5428 (decl_base::decl_base, scope_decl::scope_decl) 5429 (type_base::type_base, scope_type_decl::scope_type_decl) 5430 (class_or_union::class_or_union) : Adjust to set the runtime type 5431 identifier of the instances of these types. 5432 (global_scope::global_scope, type_decl::type_decl) 5433 (qualified_type_def::qualified_type_def) 5434 (pointer_type_def::pointer_type_def) 5435 (reference_type_def::reference_type_def 5436 array_type_def::subrange_type::subrange_type) 5437 (array_type_def::array_type_def, enum_type_decl::enum_type_decl) 5438 (typedef_decl::typedef_decl, var_decl::var_decl) 5439 (function_type::function_type, method_type::method_type) 5440 (function_decl::function_decl) 5441 (function_decl::parameter::parameter, method_decl::method_decl) 5442 (class_decl::class_decl, class_decl::base_spec::base_spec) 5443 (union_decl::union_decl, template_decl::template_decl) 5444 (type_tparameter::type_tparameter) 5445 (non_type_tparameter::non_type_tparameter) 5446 (template_tparameter::template_tparameter) 5447 (type_composition::type_composition) 5448 (function_tdecl::function_tdecl, function_tdecl::function_tdecl) 5449 (class_tdecl::class_tdecl): 5450 Likewise and call runtime_type_instance() here to set the runtime 5451 type instance pointers of the current instance. 5452 (is_decl, is_type, is_class_type, is_pointer_type): Adjust to use 5453 the new poor-man's rtti machinery. 5454 (is_type_decl): Replace the overloads that takes a type_base* 5455 and/or a decl_base* by one that takes a type_or_decl_base*. 5456 (pointer_type_def::operator==, class_decl::operator==): Use the 5457 poor-man's rtti machinery to replace dynamic_cast. 5458 hash_type_or_decl: Replace dynamic_cast<const type_base> by 5459 is_type() and dynamic_cast<const decl_base*> by is_decl(). 5460 54612019-07-05 Dodji Seketeli <dodji@redhat.com> 5462 5463 [dwarf-reader] Make sure to canonicalize anonymous types 5464 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Add two new 5465 overloads. One that takes type_base_sptr, one that takes a 5466 Dwarf_Die* and type_base_sptr. These force canonicalization for 5467 anonymous types. 5468 (build_function_type): Schedule function types for 5469 canonicalization. 5470 (build_ir_node_from_die): For struct/classes and unions, use the 5471 new overload of maybe_canonicalize_type to schedule 5472 canonicalization. 5473 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. 5474 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 5475 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 5476 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 5477 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 5478 54792019-07-04 Dodji Seketeli <dodji@redhat.com> 5480 5481 [dwarf-reader] Constify the first parameter of maybe_canonicalize_type 5482 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Make the 5483 first parameter const. 5484 (read_context::{get_canonical_die, lookup_artifact_from_die, 5485 lookup_type_from_die, schedule_type_for_late_canonicalization}): 5486 Adjust. 5487 54882019-06-26 Dodji Seketeli <dodji@redhat.com> 5489 5490 Make abidiff --harmless show harmless changes in unions 5491 * include/abg-fwd.h (get_class_or_union_flat_representation): Add 5492 a "qualified_name" boolean parameter. 5493 * include/abg-ir.h ({type_or_decl_base, decl_base, type_decl, 5494 namespace_decl, array_type_def::subrange_type, array_type_def, 5495 enum_type_decl, typedef_decl, var_decl, function_decl, 5496 function_decl::parameter, function_type, method_type, class_decl, 5497 union_decl}::get_pretty_representation): Likewise. 5498 * src/abg-ir.cc ({type_or_decl_base, decl_base, type_decl, 5499 namespace_decl, array_type_def::subrange_type, array_type_def, enum_type_decl, 5500 typedef_decl, var_decl, function_decl, function_decl::parameter, 5501 function_type, method_type, class_decl, union_decl, 5502 }::get_pretty_representation): Adjust the code to emit qualified 5503 or non-qualified names depending on the new "qualified_name" 5504 boolean parameter. 5505 (get_class_or_union_flat_representation): Likewise. 5506 * src/abg-default-reporter.cc (default_reporter::report): Use 5507 get_class_or_union_flat_representation with the new 5508 "qualified_name" boolean set to false. 5509 * tests/data/test-diff-dwarf/test38-union-report-0.txt: Adjust. 5510 * tests/test-diff-filter.cc (in_out_specs): Run the test harness 5511 on test-PR24731-v{0,1}.o make abidiff use the --harmless option. 5512 55132019-06-26 Dodji Seketeli <dodji@redhat.com> 5514 5515 Bug 24731 - Wrongly reporting union members order change 5516 * include/abg-comp-filter.h (union_diff_has_harmless_changes): 5517 Declare new function and ... 5518 * src/abg-comp-filter.cc (union_diff_has_harmless_changes): 5519 ... define it here. 5520 (categorize_harmless_diff_node): Use the new 5521 union_diff_has_harmless_changes here. 5522 * include/abg-comparison.h (HARMLESS_UNION_CHANGE_CATEGORY): Add a 5523 new enumerator to diff_category enum. Adjust the value of the 5524 other enumerators. 5525 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 5526 Add the new HARMLESS_UNION_CHANGE_CATEGORY in here. 5527 (operator<<(ostream& o, diff_category c)): Support the new 5528 HARMLESS_UNION_CHANGE_CATEGORY. 5529 * tests/data/test-diff-filter/test-PR24731-report-0.txt: Likewise. 5530 * tests/data/test-diff-filter/test-PR24731-report-1.txt: Likewise. 5531 * tests/data/test-diff-filter/test-PR24731-v0.c: Likewise. 5532 * tests/data/test-diff-filter/test-PR24731-v0.o: Likewise. 5533 * tests/data/test-diff-filter/test-PR24731-v1.c: Likewise. 5534 * tests/data/test-diff-filter/test-PR24731-v1.o: Likewise. 5535 * tests/data/Makefile.am: Add the new test material above to 5536 source distribution. 5537 * tests/test-diff-filter.cc (in_out_spec): Add the new test input 5538 to this test harness. 5539 55402019-06-20 Dodji Seketeli <dodji@redhat.com> 5541 5542 Fully account for anonymous-ness of scopes when comparing decl names 5543 * include/abg-ir.h (decl_base::{get_has_anonymous_parent, 5544 set_has_anonymous_parent, 5545 get_is_anonymous_or_has_anonymous_parent}): Declare new member 5546 functions. 5547 * src/abg-ir.cc (decl_base::priv::has_anonymous_parent_): Define 5548 new data member. 5549 (decl_base::priv): Initialize the new data member. 5550 (decl_base::{get_has_anonymous_parent, set_has_anonymous_parent, 5551 get_is_anonymous_or_has_anonymous_parent}): Define new member 5552 functions. 5553 (equals): In the overload for decl_base, use the new 5554 decl_names_equal for decls that have anonymous scopes. 5555 (scope_decl::add_member_decl): Propagate the 5556 decl_base::has_anonymous_parent_ property. 5557 * include/abg-tools-utils.h 5558 (get_anonymous_struct_internal_name_prefix) 5559 (get_anonymous_union_internal_name_prefix) 5560 (get_anonymous_enum_internal_name_prefix, decl_names_equal): 5561 Declare new functions. 5562 * src/abg-comp-filter.cc (has_harmless_name_change): Handle the 5563 case where the name change is actually from an anonymous name to 5564 another one, using the new decl_names_equal function. 5565 * src/abg-dwarf-reader.cc 5566 (get_internal_anonymous_die_prefix_name): Renamed 5567 get_internal_anonynous_die_base_name into this. Use the new 5568 get_anonymous_{struct, union, enum}_internal_name_prefix functions 5569 here. 5570 (get_internal_anonymous_die_name, die_qualified_type_name) 5571 (build_enum_type, add_or_update_class_type) 5572 (add_or_update_union_type): Adjust. 5573 * src/abg-tools-utils.cc (get_anonymous_struct_internal_name_prefix) 5574 (get_anonymous_union_internal_name_prefix) 5575 (get_anonymous_enum_internal_name_prefix, decl_names_equal): 5576 Define new functions. 5577 * tests/test-tools-utils.cc: New test file. 5578 * tests/Makefile.am: Add new runtesttoolsutils test, built from 5579 test-tools-utils.cc. 5580 * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Adjust. 5581 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 5582 Likewise. 5583 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 5584 55852019-06-12 Matthias Maennich <maennich@google.com> 5586 5587 abg-reporter.h: add missing includes / using declarations 5588 * include/abg-reporter.h: fix includes and using declarations 5589 55902019-06-17 Dodji Seketeli <dodji@redhat.com> 5591 5592 [dwarf-reader] Fix indentation in compare_dies_string_attribute_value 5593 * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): 5594 Fix indentation. 5595 55962019-06-17 Dodji Seketeli <dodji@redhat.com> 5597 5598 [dwarf-reader] Optimize speed of compare_as_decl_dies 5599 * src/abg-dwarf-reader.cc (die_is_class_type): Take a const 5600 pointer to Dwarf_Die. 5601 (compare_as_decl_dies): For classes/structs, call 5602 compare_dies_string_attribute_value just once to compare the 5603 DW_AT_name attribute values. 5604 56052019-06-13 Dodji Seketeli <dodji@redhat.com> 5606 5607 [dwarf-reader] Better use of linkage name for fn decl de-duplication 5608 * src/abg-dwarf-reader.cc (read_context::{die_is_in_c, 5609 die_is_in_c_or_cplusplus}): Define new member functions. 5610 (fn_die_equal_by_linkage_name): Define new static function. 5611 (compare_dies): In the case for for DW_TAG_subprogram, use the new 5612 fn_die_equal_by_linkage_name. 5613 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 5614 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 5615 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 5616 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 5617 56182019-06-13 Dodji Seketeli <dodji@redhat.com> 5619 5620 [dwarf-reader] Re-use function types inside a given TU 5621 * src/abg-dwarf-reader.cc (istring_fn_type_map_type): Declare new 5622 typedef. 5623 (die_is_function_type): Define new static function. 5624 (read_context::per_tu_repr_to_fn_type_maps_): Define new data 5625 member ... 5626 (read_context::per_tu_repr_to_fn_type_maps): ... and its accessor. 5627 (read_context::{associate_die_repr_to_fn_type_per_tu, 5628 lookup_fn_type_from_die_repr_per_tu}): Define new member 5629 functions. 5630 (build_function_type): Use the new 5631 read_context::lookup_fn_type_from_die_repr_per_tu and 5632 read_context::associate_die_repr_to_fn_type_per_tu functions, 5633 instead of read_context::lookup_type_from_die. 5634 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 5635 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 5636 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 5637 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 5638 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 5639 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 5640 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 5641 56422019-06-03 Dodji Seketeli <dodji@redhat.com> 5643 5644 [dwarf-reader] const-ify Dwarf_Die* use in many places 5645 * src/abg-dwarf-reader.cc (get_parent_die, get_scope_die) 5646 (die_is_anonymous, die_is_type, die_is_decl, die_is_namespace) 5647 (die_is_pointer_type, pointer_or_qual_die_of_anonymous_class_type) 5648 (die_is_reference_type, die_is_pointer_or_reference_type) 5649 (die_is_qualified_type, die_has_object_pointer) 5650 (die_is_at_class_scope, die_unsigned_constant_attribute) 5651 (die_signed_constant_attribute, die_attribute_is_signed) 5652 (die_attribute_is_unsigned, die_attribute_has_no_signedness) 5653 (die_name, die_location, die_qualified_type_name) 5654 (die_qualified_decl_name, die_qualified_name) 5655 (die_qualified_type_name_empty) 5656 (die_return_and_parm_names_from_fn_type_die) 5657 (die_function_signature, die_function_type_is_method_type) 5658 (die_pretty_print_type, die_pretty_print_decl, die_pretty_print) 5659 (maybe_canonicalize_type, build_subrange_type) 5660 (build_subranges_from_array_type_die, compare_dies) 5661 (read_context::get_container) 5662 (read_context::compute_canonical_die_offset) 5663 (read_context::get_or_compute_canonical_die) 5664 (read_context::get_die_source) 5665 (read_context::get_die_qualified_type_name) 5666 (read_context::get_die_pretty_representation) 5667 (read_context::get_die_language, read_context::odr_is_relevant) 5668 (read_context::set_canonical_die_offset) 5669 (read_context::associate_die_to_type, die_is_anonymous) 5670 (die_string_attribute, die_constant_attribute) 5671 (die_attribute_has_form, die_linkage_name) 5672 (die_decl_file_attribute, die_die_attribute, die_size_in_bits) 5673 (die_is_decl, die_is_namespace) 5674 (pointer_or_qual_die_of_anonymous_class_type, die_is_array_type) 5675 (die_is_pointer_reference_or_typedef_type) 5676 (die_peel_pointer_and_typedef, die_function_type_is_method_type) 5677 (die_virtuality, die_is_virtual) 5678 (compare_dies_string_attribute_value, compare_dies_cu_decl_file) 5679 (die_location_expr, die_member_offset) 5680 (get_internal_anonynous_die_base_name, compare_as_decl_dies) 5681 (compare_as_type_dies): Const-ify the Dwarf_Die* parameter(s) of 5682 these functions. 5683 56842019-06-05 Dodji Seketeli <dodji@redhat.com> 5685 5686 Take anonymous scopes into account when comparing decls 5687 * include/abg-interned-str.h (interned_string::clear): Add new 5688 member function. 5689 * src/abg-ir.cc (equals): In the overload for decl_base, consider 5690 the scope of the current (anonymous) decl. If that scope is 5691 anonymous then take that into account as well. 5692 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 5693 Adjust. 5694 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 5695 56962019-05-21 Matthias Maennich <maennich@google.com> 5697 5698 .clang-format: Add more options for match existing coding style 5699 * .clang-format: Add options for ConstructorInitializers 5700 Set SortUsingDeclarations=false 5701 Set AlignConsecutiveDeclarations=true 5702 57032019-05-21 Matthias Maennich <maennich@google.com> 5704 5705 .gitignore: Add libabigail-?.* *.orig files 5706 * .gitignore: add entries for distribution artifacts 5707 * .gitignore: add *.orig files 5708 57092019-05-21 Matthias Maennich <maennich@google.com> 5710 5711 abg-writer: drop deprecated API 5712 * include/abg-fwd.h (ABG_DEPRECATED): Remove this macro. 5713 * include/abg-writer.h (write_translation_unit, write_corpus) 5714 (write_corpus_group): Drop the deprecated overloads of these 5715 declarations. 5716 * src/abg-writer.cc (write_translation_unit, write_corpus) 5717 (write_corpus_group): Drop the deprecated overloads of these 5718 definitions. 5719 57202019-05-21 Matthias Maennich <maennich@google.com> 5721 5722 abidw: add option to only emit file names (--short-locs) 5723 * include/abg-writer.h (set_short_locs): Declare new function. 5724 (set_common_options): Use it. 5725 set_opts 5726 * src/abg-writer.cc (write_context::m_short_locs): New data 5727 member. 5728 (write_context::write_context): Initialize it. 5729 (write_context::{g,s}et_short_locs): Define new accessors. 5730 (write_location, write_translation_unit, write_corpus): Honour the 5731 new write_context::get_short_locs property. 5732 (set_short_locs): Define new function. 5733 * tools/abidw.cc (options::short_locs): New data member. 5734 (display_usage): Help string for the new --no-show-locs option. 5735 (parse_command_line): Parse the new --no-show-locs option. 5736 57372019-05-21 Matthias Maennich <maennich@google.com> 5738 5739 abidw: add option to omit the compilation directory 5740 * include/abg-writer.h (set_write_comp_dir): Declare new function. 5741 (set_common_options): Use it. 5742 * src/abg-writer.cc (write_context::m_write_comp_dir): Define new 5743 data member. 5744 (write_context::write_context): Initialize it. 5745 (write_context::{g,s}et_write_comp_dir): Define new member 5746 accessors. 5747 (set_write_comp_dir): Define new free-form getter. 5748 (write_translation_unit): Teach to respect write_comp_dir flag of 5749 write_context. 5750 * tools/abidw.cc (options::write_corpus_path): Define new data 5751 member. 5752 (options::options): Initialize it. 5753 (display_usage): Add doc string for a new command line option: --no-comp-dir-path. 5754 (parse_command_line): Parse the new command line option --no-comp-dir-path. 5755 57562019-05-21 Matthias Maennich <maennich@google.com> 5757 5758 Make write_architecture and write_corpus_path flags in the write_context 5759 * include/abg-writer.h (set_write_architecture) 5760 (set_write_corpus_path): Declare new getter functions. 5761 (write_corpus): Take a new "member_of_group" argument. 5762 (set_common_options): Use set_write_{architecture, corpus_path} 5763 here. 5764 * src/abg-writer.cc (write_context::m_write_{architecture, 5765 corpus_path}}): Add new data members. 5766 (write_context::write_context): Initialize the new data members. 5767 (write_context::{s,g}et_write_{architecture, corpus}): Define new 5768 accessors. 5769 (set_write_{architecture, corpus}): Define new free-form getter 5770 functions. 5771 (write_corpus): Add flag to make aware if written as part of a 5772 group. 5773 * tools/abidw.cc (load_corpus_and_write_abixml) 5774 (load_kernel_corpus_group_and_write_abixml): Drop obsolete option 5775 handling as xml_writer::set_common_options now takes care of it. 5776 ldiff --git a/include/abg-writer.h b/include/abg-writer.h 5777 index 200b5f7..729b455 100644 5778 --- a/include/abg-writer.h 5779 +++ b/include/abg-writer.h 5780 @@ -53,6 +53,11 @@ set_show_locs(write_context& ctxt, bool flag); 5781 void 5782 set_annotate(write_context& ctxt, bool flag); 5783 +void 5784 +set_write_architecture(write_context& ctxt, bool flag); 5785 + 5786 +void 5787 +set_write_corpus_path(write_context& ctxt, bool flag); 5788 /// A convenience generic function to set common options (usually used 5789 /// by Libabigail tools) from a generic options carrying-object, into 5790 @@ -69,6 +74,8 @@ set_common_options(write_context& ctxt, const OPTS& opts) 5791 { 5792 set_annotate(ctxt, opts.annotate); 5793 set_show_locs(ctxt, opts.show_locs); 5794 + set_write_architecture(ctxt, opts.write_architecture); 5795 + set_write_corpus_path(ctxt, opts.write_corpus_path); 5796 } 5797 void 5798 @@ -105,7 +112,10 @@ write_corpus_to_archive(const corpus_sptr corp, 5799 const bool annotate = false); 5800 bool 5801 -write_corpus(write_context& ctxt, const corpus_sptr& corpus, unsigned indent); 5802 +write_corpus(write_context& ctxt, 5803 + const corpus_sptr& corpus, 5804 + unsigned indent, 5805 + bool member_of_group = false); 5806 bool ABG_DEPRECATED 5807 write_corpus(const corpus_sptr& corpus, unsigned indent, write_context& ctxt); 5808 58092019-05-21 Matthias Maennich <maennich@google.com> 5810 5811 abidw: Consolidate setting options 5812 * include/abg-writer.h (set_common_option): Declare new function. 5813 * tools/abidw.cc (load_corpus_and_write_abixml) 5814 (load_kernel_corpus_group_and_write_abixml): Use the newly 5815 introduced set_common_option. 5816 58172019-05-21 Matthias Maennich <maennich@google.com> 5818 5819 write_context: allow mutating the ostream used 5820 * include/abg-writer.h (set_ostream): Declare new function. 5821 * src/abg-writer.cc (write_context::m_ostream): Make this data 5822 member be a pointer rather than a reference. 5823 (write_context::{write_context, get_ostream): Adjust. member. 5824 (write_context::set_ostream): Define new member function. 5825 (set_ostream): Define new free-form function. 5826 * tools/abidw.cc (load_corpus_and_write_abixml) 5827 (load_kernel_corpus_group_and_write_abixml): Use the feature of 5828 mutating the ostream and reuse the write_context in most cases. 5829 58302019-05-21 Matthias Maennich <maennich@google.com> 5831 5832 abg-writer: Refactor write_corpus_group API 5833 * include/abg-writer.h (write_corpus_group): Introduce new 5834 overload write_corpus_group(ctxt, corpus_group, indent) and 5835 deprecate all others. 5836 * src/abg-writer.cc (write_corpus_group): Likewise for the 5837 definitions and adjust. 5838 * tools/abidw.cc (load_kernel_corpus_group_and_write_abixml): 5839 Migrate to new API of write_corpus_group() 5840 58412019-05-21 Matthias Maennich <maennich@google.com> 5842 5843 abg-writer: Refactor write_corpus API 5844 * include/abg-writer.h (write_corpus): Introduce new overload 5845 write_corpus(ctxt, corpus, indent) and deprecate all others. 5846 * src/abg-writer.cc (write_corpus): Likewise for the definitions 5847 and adjust. 5848 * tests/test-read-dwarf.cc (test_task::perform): Use the new 5849 write_corpus which requires a write_context. 5850 * tools/abidw.cc (load_corpus_and_write_abixml, ): Likewise. 5851 * tools/abilint.cc (main): Likewise. Also simplify logic around the 5852 locations as they now can be expressed with less code. 5853 58542019-05-21 Matthias Maennich <maennich@google.com> 5855 5856 abg-writer: Refactor write_translation_unit API 5857 * include/abg-writer.h (write_translation_unit): Declare a new 5858 overload write_translation_unit(ctxt, tu, indent) and deprecate 5859 all others. 5860 * src/abg-writer.cc (write_translation_unit): Likewise in the 5861 definitions. 5862 (write_corpus, dump, write_translation_unit): Adjust. 5863 * tools/abilint.cc (main): use new write_translation_unit() API 5864 58652019-05-21 Matthias Maennich <maennich@google.com> 5866 5867 Add deprecation facilities 5868 * include/abg-fwd.h: Introduce deprecation macro ABG_DEPRECATED 5869 58702019-05-21 Matthias Maennich <maennich@google.com> 5871 5872 abg-writer: Simplify 'annotate' propagation 5873 * src/abg-writer.cc (write_context::write_context): remove 5874 'annotate' parameter. 5875 (write_translation_unit, write_corpus, write_corpus_group, dump): Adjust. 5876 58772019-05-15 Matthias Maennich <maennich@google.com> 5878 5879 Add .clang-format approximation 5880 * .clang-format: New File. 5881 58822019-05-16 Dodji Seketeli <dodji@redhat.com> 5883 5884 Bug 24552 - abidiff fails comparing a corpus against a corpus group 5885 * include/abg-corpus.h (corpus{_group}::get_{fun, 5886 var}_symbol_map): Make these member functions virtual. 5887 * src/abg-corpus.cc (corpus::lookup_{function, variable}_symbol): 5888 Use the virtual corpus::get_{fun, var}_symbol_map() member 5889 function to get the symbols of the current corpus or corpus_group. 5890 * tests/data/Makefile.am: Add the new test input material below to 5891 source distribution. 5892 * tests/data/test-abidiff/test-PR24552-report0.txt: New test input. 5893 * tests/data/test-abidiff/test-PR24552-v0.abi: Likewise. 5894 * tests/data/test-abidiff/test-PR24552-v1.abi: Likewise. 5895 * tests/test-abidiff.cc (main): Support comparing corpus groups. 5896 (specs): Add the new test inputs to the harness. 5897 58982019-05-15 Dodji Seketeli <dodji@redhat.com> 5899 5900 Bug 24560 - Assertion failure on an abixml with an anonymous type 5901 * src/abg-reader.cc (read_context::maybe_canonicalize_type): Delay 5902 canonicalization of union types too. 5903 (build_class_decl, build_union_decl): Do not try to re-use 5904 anonymous types. 5905 59062019-05-13 Dodji Seketeli <dodji@redhat.com> 5907 5908 Handle Linux kernel binaries with no __ksymtab section 5909 * src/abg-dwarf-reader.cc (find_section): Use elf_getshdrstrndx 5910 rather than poking at the elf header on our own. 5911 (read_context::find_any_ksymtab_section): Define new member 5912 function. 5913 (read_context::{get_symtab_format, 5914 try_reading_first_ksymtab_entry_using_pre_v4_19_format}): Use the 5915 new find_any_ksymtab_section rather than find_ksymtab_section. 5916 (read_context::get_nb_ksymtab_entries): Handle the absence of 5917 __ksymtab. 5918 (read_context::get_nb_ksymtab_gpl_entries): Handle the absence of 5919 __ksymtab_gpl. 5920 (read_context::load_kernel_symbol_table): Handle the case of zero 5921 ksymtab entries. 5922 (read_context::{maybe_adjust_address_for_exec_or_dyn, 5923 maybe_adjust_fn_sym_address, load_kernel_symbol_table}): Handle an 5924 address that is zero. 5925 59262019-05-10 Dodji Seketeli <dodji@redhat.com> 5927 5928 Fix logic of get_binary_load_address 5929 * src/abg-dwarf-reader.cc (get_binary_load_address): Consider the 5930 load address pointed to by the program header pointer returned by 5931 gelf_getphdr rather than the program header itself. 5932 59332019-05-10 maennich@google.com <maennich@google.com> 5934 5935 Bug 24431 Treat __ksymtab as int32_t for v4.19+ kernels 5936 * src/abg-dwarf-reader.cc (maybe_adjust_sym_address_from_v4_19_ksymtab): 5937 treat passed addr as 32bit signed offset in case of v4.19+ __ksymtabs 5938 59392019-05-10 maennich@google.com <maennich@google.com> 5940 5941 Bug 24431 Read 32bit values when testing for the v4.19 symbol table format 5942 * src/abg-dwarf-reader.cc 5943 (try_reading_first_ksymtab_entry_using_v4_19_format): attempt to 5944 read first __ksymtab entry into int32_t to preserve sign 5945 59462019-05-10 maennich@google.com <maennich@google.com> 5947 5948 dwarf-reader: templatize read_int_from_array_of_bytes 5949 * src/abg-dwarf-reader.cc (read_int_from_array_of_bytes): 5950 templatize return type to allow passing of signed integer references 5951 59522019-05-10 maennich@google.com <maennich@google.com> 5953 5954 dwarf-reader: Fix comments for try_reading_first_ksymtab_entry_using_{pre_,}v4_19_format 5955 * src/abg-dwarf-reader.cc: swap the comments of 5956 try_reading_first_ksymtab_entry_using_{pre_,}v4_19_format 5957 59582019-05-09 Dodji Seketeli <dodji@redhat.com> 5959 5960 Better handle several anonymous types of the same kind 5961 *unqualified* name of its scope. Unlike for qualified names, the 5962 scoped name won't have a "__anonymous_*__" string in its name if its 5963 directly containing scope is not anonymous; a qualified name might 5964 still have that string in its name because the decl has a parent scope 5965 (not necessarily its directly containing scope though) that is 5966 anonymous. 5967 The patch goes on to update the logic for comparison of decls that are 5968 anonymous. For a decl which direct scope is *NOT* anonymous, the 5969 scoped name is what's used in the comparison. Otherwise, only the 5970 name of the decl is used. 5971 The patch also updates how we detect changes in data members and 5972 member types, in the comparison engine. It now uses the names of the 5973 data members, rather than their qualified name. This is in the scope 5974 of the current class/union anyway. The improvement is that the fact 5975 that the class/union itself is anonymous (even if its anonymous name 5976 changes to another anonymous name) won't have any spurious impact on 5977 the detection of name change of the members. 5978 The patch considers the change of an anonymous decl name which 5979 anonymous name changes to another anonymous name as being harmless. 5980 The patch updates the logic of category propagation in the comparison 5981 engine. Although a public typedef to private underlying type needs to 5982 stay public and thus not propagate the PRIVATE_TYPE_CATEGORY from its 5983 child diff node to himself, it still needs to suppress the changes to 5984 the private underlying diff node that were suppressed (because of the 5985 private-ness), unless that typedef has local changes. 5986 * include/abg-ir.h (decl_base::get_scoped_name): Declare new 5987 member function. 5988 (scope_decl::get_num_anonymous_member_{classes, unions, enums}): 5989 Declare new virtual member functions. 5990 (class_decl::get_num_anonymous_member_{classes, unions, enums}): 5991 Adjust to make these virtual. It's not necessary but I feel 5992 redundancy is a kind of self-documentation here. 5993 * src/abg-comp-filter.cc (has_harmless_name_change): Consider 5994 anonymous name changes as harmless. 5995 * src/abg-comparison.cc 5996 (class_or_union_diff::ensure_lookup_tables_populated): Consider 5997 the names of the members rather than their qualified names. 5998 (suppression_categorization_visitor::visit_end): Suppress the 5999 changes to the private underlying diff node that were suppressed 6000 because of the private-ness, unless that typedef has local 6001 changes. 6002 * src/abg-dwarf-reader.cc (build_enum_type) 6003 (add_or_update_class_type, add_or_update_union_type): Handle 6004 anonymous types in namespaces as well, not just in class/unions. 6005 * src/abg-ir.cc (decl_base::priv::scoped_name_): Define new data 6006 member. 6007 (decl_base::get_scoped_name): Define new member function. 6008 (equals): For the decl_base overload, use scoped name in the 6009 comparison, unless the decl belongs to an anonymous type. For the 6010 class_or_union_diff, only consider scoped_name during comparison. 6011 Avoid name comparison between anonymous types. 6012 (scope_decl::get_num_anonymous_member_{classes, unions, enums}): 6013 Define new member functions. 6014 (types_have_similar_structure): Do not compare names between 6015 anonymous types. 6016 (qualified_name_setter::do_update): Update scoped names too. 6017 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 6018 * tests/data/test-annotate/libtest23.so.abi: Likewise. 6019 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 6020 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 6021 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 6022 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6023 * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: 6024 Likewise. 6025 * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Likewise. 6026 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 6027 Likewise. 6028 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 6029 Likewise. 6030 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: 6031 Likewise. 6032 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 6033 Likewise. 6034 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 6035 Likewise. 6036 * tests/data/test-diff-filter/test33-report-0.txt: Likewise. 6037 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 6038 Likewise. 6039 * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: 6040 Likewise. 6041 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: 6042 Likewise. 6043 * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: 6044 Likewise. 6045 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: 6046 Likewise. 6047 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: 6048 Likewise. 6049 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 6050 Likewise. 6051 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 6052 Likewise. 6053 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 6054 Likewise. 6055 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6056 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 6057 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 6058 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 6059 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6060 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 6061 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 6062 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 6063 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 6064 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6065 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 6066 Likewise. 6067 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 6068 60692019-05-07 Dodji Seketeli <dodji@redhat.com> 6070 6071 Handle several member anonymous types of the same kind 6072 * include/abg-ir.h 6073 (class_or_union::get_num_anonymous_member_{classes, unions, 6074 enums}): Declare new member functions. 6075 * src/abg-dwarf-reader.cc (get_internal_anonynous_die_base_name) 6076 (build_internal_anonymous_die_name) 6077 (get_internal_anonymous_die_name, is_anonymous_type_die): Define 6078 new static functions. 6079 (die_qualified_type_name): Use the new 6080 get_internal_anonymous_die_name. 6081 (get_scope_for_die): Fix this to put anonymous types that were 6082 wrongly emitted into the scope of DW_TAG_subroutine_type or 6083 DW_TAG_array_type by buggy DWARF emitters into the enclosing 6084 namespace, rather than into the enclosing class/union. 6085 (build_enum_type): Take the scope of the enum to have a chance to 6086 properly name potential anonymous enums. 6087 (lookup_class_typedef_or_enum_type_from_corpus): Take an anonymous 6088 member type index for when the DIE we are lookup up represents an 6089 anonymous type. Support proper building of the internal anonymous 6090 name of the anonymous type we are lookup up. 6091 (add_or_update_class_type): Use the new 6092 get_internal_anonynous_die_base_name and 6093 build_internal_anonymous_die_name functions. Support making sure 6094 that the anonymous member type we are adding to the class wasn't 6095 already there, especially for cases where we are updating a class 6096 type. 6097 (add_or_update_union_type): Use the new 6098 get_internal_anonynous_die_base_name and 6099 build_internal_anonymous_die_name functions. 6100 (build_ir_node_from_die): Adjust the use of build_enum_type to 6101 pass it the scope of the enum type we are building. 6102 * src/abg-ir.cc (lookup_union_type): Add a new overload. 6103 (lookup_class_or_typedef_type): Use the new overload of 6104 lookup_union_type above to support looking up union types too. 6105 (class_or_union::get_num_anonymous_member_{classes, unions, 6106 enums}): Define new member functions. 6107 * src/abg-reporter-priv.cc (represent): Detect when anonymous 6108 types of anonymous data members have their internal names change, 6109 probably because anonymous member types were inserted in the scope. 6110 * tests/data/Makefile.am: Add the new test-anonymous-members-0.* 6111 test input files to the source distribution. 6112 * tests/data/test-annotate/test-anonymous-members-0.cc: New test 6113 input file. 6114 * tests/data/test-annotate/test-anonymous-members-0.o: Likewise. 6115 * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. 6116 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 6117 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 6118 Likewise. 6119 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6120 Likewise. 6121 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6122 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 6123 Likewise. 6124 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt 6125 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: 6126 Likewise. 6127 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 6128 Likewise. 6129 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6130 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6131 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 6132 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 6133 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 6134 Likewise. 6135 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6136 Likewise. 6137 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6138 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 6139 Likewise. 6140 * tests/test-annotate.cc (int_out_specs): Add the new test inputs 6141 to this test harness. 6142 61432019-04-24 Dodji Seketeli <dodji@redhat.com> 6144 6145 Use canonical types hash maps for type IDs in abixml writer 6146 * src/abg-writer.cc (write_context::{type_has_existing_id, 6147 get_id_for_type}): Save the canonical type of the type in the map, 6148 not the type itself. 6149 (write_context::{type_is_emitted}): Use the canonical type rather 6150 than the type itself. 6151 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 6152 61532019-04-24 Dodji Seketeli <dodji@redhat.com> 6154 6155 Don't try to de-duplicate all anonymous struct DIEs 6156 * include/abg-fwd.h (is_typedef): Remove the overloads for 6157 type_base_sptr and decl_base_sptr. Replace those with an overload 6158 for type_or_decl_base_sptr. 6159 * src/abg-ir.cc (is_typedef): Do the same for the definitions. 6160 * src/abg-dwarf-reader.cc (add_or_update_class_type) 6161 (add_or_update_union_type): Do not de-duplicate anonymous 6162 struct/union DIEs. 6163 (build_typedef_type): Try to de-duplicate typedefs DIEs. 6164 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 6165 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6166 Likewise 6167 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6168 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. 6169 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6170 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 6171 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 6172 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6173 Likewise. 6174 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6175 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 6176 61772019-04-24 Dodji Seketeli <dodji@redhat.com> 6178 6179 Canonicalize types non tied to any DWARF DIE 6180 * src/abg-dwarf-reader.cc 6181 (read_context::extra_types_to_canonicalize_): Add new data member. 6182 (read_context::{initialize, clear_types_to_canonicalize}): Adjust. 6183 (read_context::extra_types_to_canonicalize): Create new accessor. 6184 (read_context::schedule_type_for_late_canonicalization): Add new 6185 overload for type_base_sptr. 6186 (read_context::perform_late_type_canonicalizing): Perform the 6187 canonicalization of the types created by the DWARF analyzer, but 6188 that are not tied to any DIE. 6189 (maybe_strip_qualification): Take a read_context&. Schedule newly 6190 created types (during type edition) for late canonicalization. 6191 (build_ir_node_from_die): Adjust the call to 6192 maybe_strip_qualification to pass a read_context. 6193 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 6194 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 6195 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6196 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6197 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6198 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 6199 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 6200 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6201 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 6202 Likewise. 6203 62042019-04-18 Mark Wielaard <mark@klomp.org> 6205 6206 Don't try to read a build_id as string in find_alt_debug_info_link. 6207 * src/abg-dwarf-reader.cc (find_alt_debug_info_link): Remove 6208 build_id argument. Don't try to read the buildid chars as a 6209 string. 6210 (find_alt_debug_info): Don't call find_alt_debug_info_link 6211 with a build_id string argument. 6212 62132019-04-18 Mark Wielaard <mark@klomp.org> 6214 6215 Fix an undefined behaviour in has_var_type_cv_qual_change 6216 * src/abg-comp-filter.cc: (has_var_type_cv_qual_change): 6217 Initialize the ch_kind variable before using it. 6218 62192019-04-18 Dodji Seketeli <dodji@redhat.com> 6220 6221 Add --enable-{asan,ubsan} configure options 6222 * configure.ac: Add configure options for -fsanitize=address and 6223 -fsanitize=undefined. 6224 62252019-04-18 Dodji Seketeli <dodji@redhat.com> 6226 6227 abg-tools-utils.cc: Plug a leak in find_file_under_dir 6228 * src/abg-tools-utils.cc (find_file_under_dir): Call fts_close 6229 before return. 6230 62312019-04-18 Matthias Maennich <maennich@google.com> 6232 6233 dwarf-reader: fix undefined behaviour in get_binary_load_address 6234 * src/abg-dwarf-reader.cc (get_binary_load_address): Move the 6235 ph_mem and program_header variables out of the inner for-loop. 6236 62372019-04-18 Dodji Seketeli <dodji@redhat.com> 6238 6239 Delay canonicalization for array and qualified types 6240 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Delay the 6241 canonicalization of array and qualified types, just like what we 6242 do for classes and function types already. 6243 (maybe_strip_qualification): Do not 6244 re-canonicalize array and qualified types here because it should 6245 not be necessary anymore. 6246 62472019-04-18 Dodji Seketeli <dodji@redhat.com> 6248 6249 Fix a memory leak in real_path 6250 * src/abg-tools-utils.cc (real_path): Fee the returned pointer of 6251 realpath. 6252 62532019-04-18 Dodji Seketeli <dodji@redhat.com> 6254 6255 Enable building with AddressSanitizer activated 6256 * configure.ac: If ABIGAIL_DEVEL_ASAN=on (in addition to 6257 ABIGAIL_DEVEL=on), then turn on AddressSanitizer in the build. 6258 62592019-04-17 Dodji Seketeli <dodji@redhat.com> 6260 6261 Bug 24431 - ELF reader fails to determine __ksymtab format 6262 * src/abg-dwarf-reader.cc 6263 (read_context::{try_reading_first_ksymtab_entry_using_pre_v4_19_format, 6264 try_reading_first_ksymtab_entry_using_v4_19_format}): Define new 6265 member functions. 6266 (read_context::maybe_adjust_sym_address_from_v4_19_ksymtab): Make 6267 member function this const. 6268 (read_context::get_ksymtab_format): Implement the new heuristic 6269 here, using try_reading_first_ksymtab_entry_using_pre_v4_19_format 6270 and try_reading_first_ksymtab_entry_using_v4_19_format, rather 6271 than assuming that if we have no relocations, then we are in the 6272 v4.19 format. 6273 (maybe_adjust_sym_address_from_v4_19_ksymtab): When on a 64 bits 6274 architecture, ensure the 32 bits address read from the v4.19 6275 format __ksymtab section is converted into a 64 bits address. 6276 62772019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6278 6279 Update .gitignore files to ignore typical dev side products 6280 * tests/.gitignore: exclude tests binaries and test results 6281 * tools/.gitignore: update to ignore produced binaries 6282 62832019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6284 6285 dwarf-reader: fix recursion in expr_result::operator& 6286 * src/abg-dwarf-reader.cc: fix expr_result::operator& 6287 62882019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6289 6290 distinct_diff: avoid expression with side effects within typeid 6291 * src/abg-comparison.cc: fix clang warning "potentially-evaluated-expression" 6292 62932019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6294 6295 ir: drop unused data members from {environment,qualified_name}_setter 6296 * src/abg-ir.cc: drop unused data members 6297 62982019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6299 6300 suppressions: drop unused parameter from type_is_suppressed 6301 * include/abg-suppression-priv.h: drop unused argument from type_is_suppressed 6302 63032019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6304 6305 viz-dot: remove unused members from dot 6306 * include/abg-viz-dot.h: remove unused data members from 'dot' 6307 63082019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6309 6310 add missing virtual destructors 6311 * include/abg-comparison.h: add virtual destructor for corpus_diff and diff_node_visitor 6312 * include/abg-corpus.h: add virtual destructor for corpus 6313 * include/abg-reporter.h: add virtual destructor for reporter_base 6314 * include/abg-traverse.h: add virtual destructor for traversable_base 6315 63162019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6317 6318 diff-utils: point: fix postfix decrement/increment operator 6319 * include/abg-diff-utils.h: fix postfix dec/inc operator 6320 63212019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6322 6323 abg-reader: clarify boolean use of assignment 6324 * src/abg-reader.cc: clarify boolean use of assignment 6325 63262019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6327 6328 abilint: fix return types bool -> int 6329 * tools/abilint.cc: return int in main rather than bool. 6330 * tests/print-diff-tree.cc: Likewise. 6331 63322019-04-15 Matthias Maennich via libabigail <libabigail@sourceware.org> 6333 6334 abg-fwd.h: fix mismatched tags for ir_node_visitor 6335 * include/abg-fwd.h: forward-declare ir_node_visitor as class 6336 63372019-04-16 Dodji Seketeli <dodji@redhat.com> 6338 6339 Bug 24431 - ELF reader can't interpret ksymtab with Kernel 4.19+ 6340 * src/abg-dwarf-reader.cc (enum kernel_symbol_table_kind): Move this 6341 enum at the top. 6342 (enum ksymtab_format): Define new enum. 6343 (read_context::{ksymtab_format_, ksymtab_entry_size_, 6344 nb_ksymtab_entries_, nb_ksymtab_gpl_entries_}): Define new data 6345 members. 6346 (read_context::initiliaze): Initialize the new data members above. 6347 (read_context::{get_ksymtab_format, get_ksymtab_symbol_value_size, 6348 get_ksymtab_entry_size, get_nb_ksymtab_entries, 6349 get_nb_ksymtab_gpl_entries, 6350 maybe_adjust_sym_address_from_v4_19_ksymtab}): Define new member 6351 functions. 6352 (read_context::load_kernel_symbol_table): Support loading from 6353 both pre and post v4.19 linux kernels with their different ksymtab 6354 formats. Add more comments. 6355 63562019-04-10 Dodji Seketeli <dodji@redhat.com> 6357 6358 Bug 24430 - Fold away const for array types 6359 * include/abg-fwd.h (is_array_of_qualified_element): Declare 2 6360 overloads of this function. 6361 (re_canonicalize): Declare a new function. 6362 * include/abg-ir.h (class {decl_base, type_base}): Declare 6363 re_canonicalize as a friend of these classes. 6364 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Detect 6365 qualified array types and appropriately qualifies the array 6366 element type, instead of qualifying the array type itself. 6367 Re-canonicalize the resulting type if necessary. 6368 * src/abg-ir.cc (is_array_of_qualified_element): Define 2 6369 overloads of this function. 6370 (re_canonicalize): Define new function. 6371 * tests/data/Makefile.am: The two new test binary input files 6372 PR24430-fold-qualified-array-clang and 6373 PR24430-fold-qualified-array-gcc to source distribution, as well 6374 as the expected reference output. 6375 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 6376 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 6377 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6378 Likewise. 6379 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6380 * tests/data/test-diff-filter/PR24430-fold-qualified-array-clang: 6381 New binary test input coming from the bug report. 6382 * tests/data/test-diff-filter/PR24430-fold-qualified-array-gcc: 6383 Likewise. 6384 * tests/data/test-diff-filter/PR24430-fold-qualified-array-report-0.txt: 6385 Expected reference abi difference. 6386 * tests/data/test-diff-filter/test33-report-0.txt: Adjust. 6387 * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: 6388 Likewise. 6389 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6390 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6391 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 6392 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 6393 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6394 Likewise. 6395 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6396 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 6397 Likewise. 6398 * tests/test-diff-filter.cc: Add the new binary test input to this 6399 test harness. 6400 64012019-04-09 Dodji Seketeli <dodji@redhat.com> 6402 6403 Fix "Add test for the fix for PR24410" 6404 * tests/data/test-diff-pkg/PR24410-new/poppler-debuginfo-0.73.0-8.fc30.x86_64.rpm: 6405 Really add this. 6406 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-0.73.0-8.fc30.x86_64.rpm: 6407 Likewise. 6408 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-debuginfo-0.73.0-8.fc30.x86_64.rpm: 6409 Likewise. 6410 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-devel-0.73.0-8.fc30.x86_64.rpm: 6411 Likewise. 6412 * tests/data/test-diff-pkg/PR24410-old/poppler-debuginfo-0.73.0-4.fc30.x86_64.rpm: 6413 Likewise. 6414 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-0.73.0-4.fc30.x86_64.rpm: 6415 Likewise. 6416 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-debuginfo-0.73.0-4.fc30.x86_64.rpm: 6417 Likewise. 6418 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-devel-0.73.0-4.fc30.x86_64.rpm: 6419 Likewise. 6420 * tests/data/test-diff-pkg/PR24410-report-0.txt: Likewise. 6421 64222019-04-09 Dodji Seketeli <dodji@redhat.com> 6423 6424 Add test for the fix for PR24410 6425 * tests/data/test-diff-pkg/PR24410-new/poppler-debuginfo-0.73.0-8.fc30.x86_64.rpm: 6426 Add new test input. 6427 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-0.73.0-8.fc30.x86_64.rpm: 6428 Add new test input. 6429 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-debuginfo-0.73.0-8.fc30.x86_64.rpm: 6430 Add new test input. 6431 * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-devel-0.73.0-8.fc30.x86_64.rpm: 6432 Add new test input. 6433 * tests/data/test-diff-pkg/PR24410-old/poppler-debuginfo-0.73.0-4.fc30.x86_64.rpm: 6434 Add new test input. 6435 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-0.73.0-4.fc30.x86_64.rpm: 6436 Add new test input. 6437 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-debuginfo-0.73.0-4.fc30.x86_64.rpm: 6438 Add new test input. 6439 * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-devel-0.73.0-4.fc30.x86_64.rpm: 6440 Add new test input. 6441 * tests/data/test-diff-pkg/PR24410-report-0.txt: Add new test 6442 input. 6443 * tests/data/Makefile.am: Add the test input above to source 6444 distribution. 6445 * tests/test-diff-pkg.cc: Make this test harness use the new input 6446 rpms above. 6447 64482019-04-05 Dodji Seketeli <dodji@redhat.com> 6449 6450 Propagate private type diff category through refs/qualified type diffs 6451 * src/abg-comparison.cc 6452 (suppression_categorization_visitor::visit_end): Propagate 6453 suppressed and private type diff categories for reference and 6454 qualified types. For qualified types, make sure they don't have 6455 local changes. Even when there are no local changes, do not 6456 propagate private diff categories to typedefs. 6457 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 6458 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6459 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6460 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 6461 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 6462 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6463 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 6464 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 6465 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6466 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 6467 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 6468 64692019-04-05 Dodji Seketeli <dodji@redhat.com> 6470 6471 Fix anonymous union constructed under the wrong context 6472 * src/abg-dwarf-reader.cc (add_or_update_class_type) 6473 (add_or_update_union_type): Only reuse anonymous class/union types 6474 which have the same scope as the current one. 6475 64762019-04-08 Dodji Seketeli <dodji@redhat.com> 6477 6478 Internal pretty repr of union cannot be flat representation 6479 * src/abg-ir.cc (union_decl::get_pretty_representation): 6480 Anonymous internal pretty representation of unin is its fully 6481 qualified name. 6482 64832019-04-08 Dodji Seketeli <dodji@redhat.com> 6484 6485 Misc comment fixes 6486 * src/abg-comp-filter.cc (has_harmless_name_change): Fix comment. 6487 * src/abg-ir.cc (var_decl::get_qualified_name): Likewise. 6488 64892019-03-29 Dodji Seketeli <dodji@redhat.com> 6490 6491 Bump version number to 1.7 6492 * configure.ac: Bump version number to 1.7 6493 64942019-03-28 Dodji Seketeli <dodji@redhat.com> 6495 6496 Update website mainpage for 1.6 release 6497 * doc/website/mainpage.txt: Update for 1.6 release. 6498 64992019-03-27 Dodji Seketeli <dodji@redhat.com> 6500 6501 Update ChangeLog 6502 * ChangeLog: Update automatically by using "make 6503 update-changelog". 6504 65052019-03-27 Dodji Seketeli <dodji@redhat.com> 6506 6507 Update NEWS file for 1.6 6508 * NEWS: Update for 1.6 6509 65102019-03-27 Dodji Seketeli <dodji@redhat.com> 6511 6512 Add missing assignment operators 6513 * include/abg-interned-str.h (interned_string::operator=): Define 6514 assignment operator. 6515 * include/abg-ir.h 6516 ({location, enum_type_decl::enumerator}::operator=): Declare 6517 assignment operator. 6518 * src/abg-ir.cc (enum_type_decl::enumerator::operator=): Define 6519 assignment operator. 6520 65212019-03-25 Dodji Seketeli <dodji@redhat.com> 6522 6523 Bug 24378 - DW_TAG_subroutine_type as a DIE scope causes infinite loop 6524 * src/abg-dwarf-reader.cc (get_scope_die): Look through 6525 DW_TAG_subroutine_type to get the scope of a given DIE. 6526 * tests/data/Makefile.am: Add the two new files below to source 6527 distribution. 6528 * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.abi: New 6529 reference test output. 6530 * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.o: New binary 6531 test input. 6532 * tests/test-read-dwarf.cc (in_out_specs): Add the new test input 6533 to the test harness. 6534 65352019-03-22 Dodji Seketeli <dodji@redhat.com> 6536 6537 Misc cleanups 6538 * src/abg-dwarf-reader.cc (build_function_type): Cleanup 6539 indentation and comments. 6540 65412019-03-21 Dodji Seketeli <dodji@redhat.com> 6542 6543 Better pointer name equality optimization in DIE de-duplication code 6544 * src/abg-dwarf-reader.cc 6545 (die_is_pointer_reference_or_typedef_type) 6546 (die_peel_pointer_and_typedef): Define new static functions. 6547 (compare_dies_string_attribute_value): Turn this function into a 6548 static one. 6549 (compare_dies_cu_decl_file): Make this function compare the cu 6550 decl file name of the leaf type of the pointer, not just the one 6551 of the pointer itself. 6552 (compare_as_decl_dies): Compare the DWARF tags too. 6553 (compare_dies): Simplify logic. 6554 65552019-03-21 Dodji Seketeli <dodji@redhat.com> 6556 6557 Add ir::{lookup_data_member, get_function_parameter} 6558 * include/abg-ir.h (lookup_data_member, get_function_parameter): 6559 Declare new functions. 6560 * src/abg-ir.cc (lookup_data_member, get_function_parameter): 6561 Define them. 6562 65632019-03-21 Dodji Seketeli <dodji@redhat.com> 6564 6565 Better detection of void* to something* change 6566 * include/abg-ir.h (is_void_type): Add a new overload that takes 6567 type_base*. 6568 * src/abg-ir.cc (is_void_type): Define the new overload that takes 6569 type_base*. 6570 (is_void_pointer_type): Look through typedefs in 6571 the pointed-to type. 6572 65732019-03-21 Dodji Seketeli <dodji@redhat.com> 6574 6575 PR24257 - Handle DW_TAG_typedef with no underlying type 6576 * src/abg-dwarf-reader.cc (build_typedef_type): DW_TAG_typedef 6577 with no underlying type means typedef void foo. 6578 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 6579 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 6580 Likewise. 6581 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6582 Likewise. 6583 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 6584 Likewise. 6585 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 6586 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 6587 Likewise. 6588 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 6589 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 6590 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 6591 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 6592 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 6593 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 6594 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 6595 Likewise. 6596 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 6597 Likewise. 6598 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 6599 Likewise. 6600 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 6601 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 6602 Likewise. 6603 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 6604 66052019-02-20 Dodji Seketeli <dodji@redhat.com> 6606 6607 Do not build DIE -> parent map just because we see an asm TU 6608 * src/abg-dwarf-reader.cc: 6609 66102019-02-19 Dodji Seketeli <dodji@redhat.com> 6611 6612 Avoid over-suppressing fns & vars when analysing the Kernel 6613 * include/abg-dwarf-reader.h (get_ignore_symbol_table): Take a 6614 const read_context&. 6615 * src/abg-dwarf-reader.cc (get_ignore_symbol_table): Likewise. 6616 (function_is_suppressed): When the symbol table optimization is in 6617 flight -- that is, when no symbol table has been loaded -- do not 6618 try to see if a given function symbol was exported at the ELF 6619 level or not. Just look at if the function was suppressed or not. 6620 (variable_is_suppressed): Likewise for variables. 6621 66222019-02-08 Dodji Seketeli <dodji@redhat.com> 6623 6624 Bug 24188 - Assertion failed while analysing a Fortran binary 6625 * src/abg-dwarf-reader.cc (compare_as_type_dies): Handle 6626 DW_TAG_string_type DIEs here. 6627 (compare_dies): Handle DW_TAG_string_type DIEs by using 6628 compare_as_type_dies. 6629 * tests/data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-10.fc29.x86_64.rpm: 6630 New test RPM. 6631 * tests/data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-11.fc30.x86_64.rpm: 6632 Likewise. 6633 * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64-4.4.4-11.fc30.x86_64-report-0.txt: 6634 New expected test reference output. 6635 * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64.rpm: 6636 New test RPM. 6637 * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-11.fc30.x86_64.rpm: 6638 Likewise. 6639 * tests/data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-10.fc29.x86_64.rpm: 6640 Likewise. 6641 * tests/data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-11.fc30.x86_64.rpm: 6642 Likewise. 6643 * tests/data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-10.fc29.x86_64.rpm: 6644 Likewise. 6645 * tests/data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-11.fc30.x86_64.rpm: 6646 Likewise. 6647 * tests/data/Makefile.am: Add the new test input material above to 6648 source distribution. 6649 * tests/test-diff-pkg.cc (in_out_spec): Add the new test RPMs 6650 above to the set of RPMs to use as test input. 6651 66522019-02-06 Dodji Seketeli <dodji@redhat.com> 6653 6654 Bug 24157 - Wrong support of Ada ranges 6655 * include/abg-ir.h (array_type_def::subrange_type::bound_value): 6656 Define new class. 6657 (array_type_def::subrange_type::subrange_type): Adjust to use the 6658 new bound_value type for bound values. 6659 (array_type_def::subrange_type::{get_upper_bound, get_lower_bound, 6660 set_upper_bound, set_lower_bound}): Return or take int64_t rather 6661 than size_t. 6662 (array_type_def::subrange_type::get_length): Return uint64_t 6663 rather than size_t. 6664 * src/abg-dwarf-reader.cc (die_signed_constant_attribute) 6665 (die_constant_attribute, die_attribute_has_form) 6666 (die_attribute_is_signed, die_attribute_is_unsigned) 6667 (die_attribute_has_no_signedness): Define new static functions. 6668 (get_default_array_lower_bound): Return uint64_t rather than int. 6669 (build_subrange_type): Use the new 6670 array_type_def::subrange_type::bound_value type for bound values. 6671 Use the new die_constant_attribute function, rather than 6672 die_unsigned_constant_attribute to fecth the bound values. 6673 * src/abg-ir.cc 6674 (array_type_def::subrange_type::bound_value::{bound_value, 6675 get_signedness, set_signedness, get_signed_value, 6676 get_unsigned_value, set_unsigned, set_signed}): Define new member 6677 functions. 6678 (array_type_def::subrange_type::priv::{lower_bound_, 6679 upper_bound}): Use the new class bound_value. 6680 (array_type_def::subrange_type::priv::priv): Adjust to use the new 6681 bound_value class to hold bound values. 6682 (array_type_def::subrange_type::subrange_type): Likewise. 6683 (array_type_def::subrange_type::{get_upper_bound, get_lower_bound, 6684 set_upper_bound, set_lower_bound}): Return or take int64_t rather 6685 than size_t. 6686 (array_type_def::subrange_type::get_length): Return uint64_t 6687 rather than size_t. 6688 (types_have_similar_structure): Handle array_type_def::subrange_type 6689 * src/abg-reader.cc (build_subrange_type): Use the new 6690 array_type_def::subrange_type::bound_value to hold bound values. 6691 * tests/data/test-diff-pkg/GtkAda-debuginfo-2.24.2-29.fc29.x86_64.rpm: 6692 New binary RPM as test input. 6693 * tests/data/test-diff-pkg/GtkAda-debuginfo-2.24.2-30.fc30.x86_64.rpm: 6694 Likewise. 6695 * tests/data/test-diff-pkg/GtkAda-devel-2.24.2-29.fc29.x86_64.rpm: 6696 Likewise. 6697 * tests/data/test-diff-pkg/GtkAda-devel-2.24.2-30.fc30.x86_64.rpm: 6698 Likewise. 6699 * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt: 6700 New expected test output. 6701 * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64.rpm: 6702 New binary RPM as test input. 6703 * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-30.fc30.x86_64.rpm: 6704 Likewise. 6705 * tests/data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-29.fc29.x86_64.rpm: 6706 Likewise. 6707 * tests/data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-30.fc30.x86_64.rpm: 6708 Likewise. 6709 * tests/data/Makefile.am: Add the new test material above to source 6710 distribution. 6711 * tests/test-diff-pkg.cc (in_out_specs): Add the new input testing 6712 RPMs in here. 6713 67142019-01-30 Dodji Seketeli <dodji@redhat.com> 6715 6716 Small apidoc fix 6717 * src/abg-comparison.cc (enum_diff::changed_enumerators): Fix apidoc. 6718 67192019-01-30 Dodji Seketeli <dodji@redhat.com> 6720 6721 Bug 24139 - Support suppressing some enumerator changes 6722 * doc/manuals/libabigail-concepts.rst: Document the new 6723 'changed_enumerators' property. 6724 * include/abg-suppression.h 6725 (type_suppression::{g, s}et_changed_enumerator_names): Declare two 6726 new member functions. 6727 * src/abg-suppression-priv.h 6728 (type_suppression::priv::changed_enumerator_names_): Add a new 6729 data member. 6730 * src/abg-suppression.cc 6731 (type_suppression::{g,s}et_changed_enumerator_names): Define two 6732 new member functions. 6733 (type_suppression::suppresses_diff): Support evaluating the new 6734 'changed_enumerators = <vector of changed enumerators>'. 6735 (read_type_suppression): Read the new list 6736 property'changed_enumerators" and store it into the 6737 type_suppression using the new 6738 type_suppression::set_changed_enumerator_names (). 6739 * tests/data/test-diff-suppr/libtest4{0,1}-enumerator-changes-v{0,1}.so: 6740 Add new test inpujts. 6741 * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-0.suppr: 6742 Add a new suppr spec for this new test. 6743 * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-report-0.txt: 6744 The default report. 6745 * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-v{0,1}.cc: 6746 Add Source code of libtest4{0,1}-enumerator-changes-v{0,1}.so. 6747 * tests/data/Makefile.am: Add the test files above to source 6748 distribution. 6749 * tests/test-diff-suppr.cc: Add the test input files above to the 6750 harness. 6751 67522019-01-25 Dodji Seketeli <dodji@redhat.com> 6753 6754 Better comments in the comparison engine 6755 * include/abg-comparison.h (enum diff_category): Add comments to 6756 describe what to update when a new enumerator is added to this enum. 6757 * src/abg-comp-filter.cc (has_fn_return_type_cv_qual_change): Fix 6758 comment thinko here. 6759 67602019-01-25 Dodji Seketeli <dodji@redhat.com> 6761 6762 Bug 20175 - Classify CV qual changes in variable type as harmless 6763 * include/abg-comparison.h (VAR_TYPE_CV_CHANGE_CATEGORY): Add new 6764 enumerator to diff_category enum. 6765 (EVERYTHING_CATEGORY): Update this enumerator. 6766 * src/abg-comp-filter.cc (type_diff_has_cv_qual_change_only): 6767 Support array diff nodes carrying a cv qual change on the element 6768 type. 6769 (has_var_type_cv_qual_change): Define new static function. 6770 (categorize_harmless_diff_node): Use the new 6771 has_var_type_cv_qual_change to categorize variable diff node with 6772 cv qual change on its type as harmless. 6773 * src/abg-comparison.cc 6774 (get_default_harmless_categories_bitmap): Update this. 6775 (operator<<(ostream& o, diff_category c)): Likewise. 6776 * include/abg-ir.h (equals_modulo_cv_qualifier): Declare new ... 6777 * src/abg-ir.cc (equals_modulo_cv_qualifier): ... function. 6778 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: 6779 Update expected test output. 6780 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 6781 * tests/data/Makefile.am: Add the new test material below to 6782 source distribution. 6783 * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: 6784 New expecte test output. 6785 * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64.rpm: New 6786 test input. 6787 * tests/data/test-diff-pkg/nss-3.24.0-1.0.fc23.x86_64.rpm: Likewise. 6788 * tests/data/test-diff-pkg/nss-debuginfo-3.23.0-1.0.fc23.x86_64.rpm: Likewise. 6789 * tests/data/test-diff-pkg/nss-debuginfo-3.24.0-1.0.fc23.x86_64.rpm: Likewise. 6790 * tests/data/test-diff-pkg/nss-devel-3.23.0-1.0.fc23.x86_64.rpm: Likewise. 6791 * tests/data/test-diff-pkg/nss-devel-3.24.0-1.0.fc23.x86_64.rpm: Likewise. 6792 * tests/test-diff-pkg.cc (in_out_specs): Add the test input above 6793 to the test harness. 6794 67952019-01-24 Dodji Seketeli <dodji@redhat.com> 6796 6797 Properly add the new rust tests to EXTRA_DIST 6798 * tests/data/Makefile.am: Add the new rust tests to 6799 EXTRA_DIST. 6800 68012019-01-24 Dodji Seketeli <dodji@redhat.com> 6802 6803 Conditionalize the Rust support regression test 6804 * tests/test-diff-dwarf.cc: Run the rust support regression test 6805 only if we support Rust on the platform. 6806 * tests/test-utils.h: Include config.h. 6807 68082019-01-24 Dodji Seketeli <dodji@redhat.com> 6809 6810 Fix a typo in the recent Rust support and update regression tests 6811 * configure.ac: Fix the typo HAS_LANG_Rust into HAS_DW_LANG_Rust. 6812 * tests/data/test-diff-dwarf/test46-readme.txt: Add new file to 6813 the test suite. 6814 * tests/data/test-diff-dwarf/test46-rust-libone.so: Likewise. 6815 * tests/data/test-diff-dwarf/test46-rust-libtwo.so: Likewise. 6816 * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Likewise. 6817 * tests/test-diff-dwarf.cc (in_out_specs): Update the tests array 6818 to compare the two new binaries included above. 6819 68202019-01-18 Dodji Seketeli <dodji@redhat.com> 6821 6822 Overhaul detection the DW_LANG_* enumerators from dwarf.h 6823 * configure.ac: Detect the presence of DW_LANG_{UPC, D, Python, 6824 Go, C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14, 6825 Mips_Assembler, Rust} and define the corresponding 6826 HAVE_DW_LANG_*_enumerator macro accordingly. 6827 * include/abg-ir.h (LANG_C_plus_plus_03): Define this new 6828 enumerator in the translation_unit::language enum. 6829 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Use the 6830 new HAVE_DW_LANG_*_enumerator macros. 6831 (get_default_array_lower_bound): Support the 6832 translation_unit::LANG_C_plus_plus_03 enumerator. 6833 * src/abg-ir.cc (is_cplus_plus_language): Support the 6834 translation_unit::LANG_C_plus_plus_03 enumerator. 6835 68362019-01-18 Dodji Seketeli <dodji@redhat.com> 6837 6838 Fix a thinko 6839 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Fix a 6840 thinko in the detection of the support of the DW_LANG_Rust enumerator. 6841 68422019-01-17 Mark Wielaard <mark@klomp.org> 6843 6844 Conditionalize the use of DW_LANG_C_plus_plus_03 and DW_LANG_Rust 6845 * include/abg-ir.h (LANG_C_plus_plus_03): Add this new language 6846 enum to "enum translation_unit::language". 6847 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Do not 6848 use DW_LANG_Rust or DW_LANG_C_plus_plus_03 if these are not 6849 defined. 6850 (get_default_array_lower_bound): Handle the new 6851 translation_unit::LANG_C_plus_plus_03 enumerator. 6852 68532019-01-17 Dodji Seketeli <dodji@redhat.com> 6854 6855 Support some new DWARF language encoding for C and C++ 6856 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Support 6857 new DW_LANG_{C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14} 6858 enumerators. 6859 68602019-01-17 Dodji Seketeli <dodji@redhat.com> 6861 6862 Add (very) basic support for Rust 6863 * include/abg-ir.h (LANG_Rust): Add this new enumerator to the 6864 "enum language" enum. 6865 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Handle 6866 the Rust language. 6867 (get_default_array_lower_bound): Likewise. 6868 68692019-01-15 Dodji Seketeli <dodji@redhat.com> 6870 6871 Separate public types of first binary from those of the second 6872 * include/abg-dwarf-reader.h (read_context_get_path): Declare new 6873 function. 6874 * include/abg-reader.h (read_context_get_path): Likewise. 6875 * src/abg-dwarf-reader.cc (read_context_get_path): Define new function. 6876 * src/abg-reader.cc (read_context_get_path): Likewise. 6877 * tools/abidiff.cc (set_suppressions): Set the suppression 6878 specification derived from the --headers-dir1 option only for the first 6879 binary, and similarly, from the --headers-dir2 option only for the 6880 second binary. 6881 68822019-01-09 Dodji Seketeli <dodji@redhat.com> 6883 6884 Bug 23044 - Assertions with side effects 6885 * configure.ac: 6886 * include/abg-diff-utils.h: 6887 * include/abg-fwd.h: 6888 * src/abg-comp-filter.cc: 6889 * src/abg-comparison-priv.h: 6890 * src/abg-comparison.cc: 6891 * src/abg-corpus-priv.h: 6892 * src/abg-corpus.cc: 6893 * src/abg-default-reporter.cc: 6894 * src/abg-diff-utils.cc: 6895 * src/abg-dwarf-reader.cc: 6896 * src/abg-hash.cc: 6897 * src/abg-ini.cc: 6898 * src/abg-ir.cc: 6899 * src/abg-leaf-reporter.cc: 6900 * src/abg-reader.cc: 6901 * src/abg-reporter-priv.cc: 6902 * src/abg-suppression.cc: 6903 * src/abg-tools-utils.cc: 6904 * src/abg-workers.cc: 6905 * src/abg-writer.cc: 6906 * tests/test-diff-filter.cc: 6907 * tests/test-diff-pkg.cc: 6908 * tests/test-read-dwarf.cc: 6909 * tests/test-read-write.cc: 6910 * tests/test-types-stability.cc: 6911 * tools/abicompat.cc: 6912 * tools/abidw.cc: 6913 * tools/abipkgdiff.cc: 6914 69152019-01-07 Dodji Seketeli <dodji@redhat.com> 6916 6917 Update copyright for 2019 6918 * include/abg-comp-filter.h: Update copyright for 2019 6919 * include/abg-comparison.h: Update copyright for 2019 6920 * include/abg-config.h: Update copyright for 2019 6921 * include/abg-corpus.h: Update copyright for 2019 6922 * include/abg-diff-utils.h: Update copyright for 2019 6923 * include/abg-dwarf-reader.h: Update copyright for 2019 6924 * include/abg-fwd.h: Update copyright for 2019 6925 * include/abg-hash.h: Update copyright for 2019 6926 * include/abg-ini.h: Update copyright for 2019 6927 * include/abg-interned-str.h: Update copyright for 2019 6928 * include/abg-ir.h: Update copyright for 2019 6929 * include/abg-libxml-utils.h: Update copyright for 2019 6930 * include/abg-libzip-utils.h: Update copyright for 2019 6931 * include/abg-reader.h: Update copyright for 2019 6932 * include/abg-reporter.h: Update copyright for 2019 6933 * include/abg-sptr-utils.h: Update copyright for 2019 6934 * include/abg-suppression.h: Update copyright for 2019 6935 * include/abg-tools-utils.h: Update copyright for 2019 6936 * include/abg-traverse.h: Update copyright for 2019 6937 * include/abg-viz-common.h: Update copyright for 2019 6938 * include/abg-viz-dot.h: Update copyright for 2019 6939 * include/abg-viz-svg.h: Update copyright for 2019 6940 * include/abg-workers.h: Update copyright for 2019 6941 * include/abg-writer.h: Update copyright for 2019 6942 * src/abg-comp-filter.cc: Update copyright for 2019 6943 * src/abg-comparison-priv.h: Update copyright for 2019 6944 * src/abg-comparison.cc: Update copyright for 2019 6945 * src/abg-config.cc: Update copyright for 2019 6946 * src/abg-corpus-priv.h: Update copyright for 2019 6947 * src/abg-corpus.cc: Update copyright for 2019 6948 * src/abg-default-reporter.cc: Update copyright for 2019 6949 * src/abg-diff-utils.cc: Update copyright for 2019 6950 * src/abg-dwarf-reader.cc: Update copyright for 2019 6951 * src/abg-hash.cc: Update copyright for 2019 6952 * src/abg-ini.cc: Update copyright for 2019 6953 * src/abg-internal.h: Update copyright for 2019 6954 * src/abg-ir-priv.h: Update copyright for 2019 6955 * src/abg-ir.cc: Update copyright for 2019 6956 * src/abg-leaf-reporter.cc: Update copyright for 2019 6957 * src/abg-libxml-utils.cc: Update copyright for 2019 6958 * src/abg-libzip-utils.cc: Update copyright for 2019 6959 * src/abg-reader.cc: Update copyright for 2019 6960 * src/abg-reporter-priv.cc: Update copyright for 2019 6961 * src/abg-reporter-priv.h: Update copyright for 2019 6962 * src/abg-sptr-utils.cc: Update copyright for 2019 6963 * src/abg-suppression-priv.h: Update copyright for 2019 6964 * src/abg-suppression.cc: Update copyright for 2019 6965 * src/abg-tools-utils.cc: Update copyright for 2019 6966 * src/abg-traverse.cc: Update copyright for 2019 6967 * src/abg-viz-common.cc: Update copyright for 2019 6968 * src/abg-viz-dot.cc: Update copyright for 2019 6969 * src/abg-viz-svg.cc: Update copyright for 2019 6970 * src/abg-workers.cc: Update copyright for 2019 6971 * src/abg-writer.cc: Update copyright for 2019 6972 * tests/print-diff-tree.cc: Update copyright for 2019 6973 * tests/test-abicompat.cc: Update copyright for 2019 6974 * tests/test-abidiff-exit.cc: Update copyright for 2019 6975 * tests/test-abidiff.cc: Update copyright for 2019 6976 * tests/test-alt-dwarf-file.cc: Update copyright for 2019 6977 * tests/test-core-diff.cc: Update copyright for 2019 6978 * tests/test-diff-dwarf-abixml.cc: Update copyright for 2019 6979 * tests/test-diff-dwarf.cc: Update copyright for 2019 6980 * tests/test-diff-filter.cc: Update copyright for 2019 6981 * tests/test-diff-pkg.cc: Update copyright for 2019 6982 * tests/test-diff-suppr.cc: Update copyright for 2019 6983 * tests/test-diff2.cc: Update copyright for 2019 6984 * tests/test-ini.cc: Update copyright for 2019 6985 * tests/test-ir-walker.cc: Update copyright for 2019 6986 * tests/test-lookup-syms.cc: Update copyright for 2019 6987 * tests/test-read-dwarf.cc: Update copyright for 2019 6988 * tests/test-read-write.cc: Update copyright for 2019 6989 * tests/test-types-stability.cc: Update copyright for 2019 6990 * tests/test-utils.cc: Update copyright for 2019 6991 * tests/test-utils.h: Update copyright for 2019 6992 * tests/test-write-read-archive.cc: Update copyright for 2019 6993 * tools/abiar.cc: Update copyright for 2019 6994 * tools/abicompat.cc: Update copyright for 2019 6995 * tools/abidiff.cc: Update copyright for 2019 6996 * tools/abidw.cc: Update copyright for 2019 6997 * tools/abilint.cc: Update copyright for 2019 6998 * tools/abipkgdiff.cc: Update copyright for 2019 6999 * tools/abisym.cc: Update copyright for 2019 7000 * tools/binilint.cc: Update copyright for 2019 7001 * tools/kmidiff.cc: Update copyright for 2019 7002 * update-copyright.sh: Update new year to 2019 7003 70042018-12-06 Xiao Jia via libabigail <libabigail@sourceware.org> 7005 7006 Some documentation fixes 7007 * COMPILING: Add the pkg-config dependency. 7008 * doc/manuals/kmidiff.rst: Replace the redundant --full-impact 7009 documentation with the proper --impacted-interfaces one. 7010 70112018-11-29 Dodji Seketeli <dodji@redhat.com> 7012 7013 Add basic support for Fortran binaries 7014 * src/abg-dwarf-reader.cc (die_pretty_print_type): Support 7015 DW_TAG_string_type DIEs. They all have the same representation 7016 for now. 7017 70182018-11-08 Dodji Seketeli <dodji@redhat.com> 7019 7020 Some light style change in abidiff.cc 7021 * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Take a 7022 reference to diff_context rather than a pointer. 7023 (main): Adjust. 7024 70252018-11-08 Dodji Seketeli <dodji@redhat.com> 7026 7027 Add a --fail-no-debug-info to abidiff 7028 * doc/manuals/abidiff.rst: Document the new --fail-no-debug-info 7029 option. 7030 * tools/abidiff.cc (options::fail_no_debug_info): Define new data 7031 member. 7032 (display_usage): Provide a help string for the new 7033 --fail-no-debug-info option. 7034 (parse_command_line): Parse the new option. 7035 (main): If --fail-no-debug-info and no debug info was found, or 7036 not alternate debuginfo file was found, bail out. 7037 70382018-11-08 Dodji Seketeli <dodji@redhat.com> 7039 7040 Support having several debuginfo search dirs for a binary 7041 * doc/manuals/abidiff.rst: Adjust doc for the 7042 --debug-info-dir{1,2} that can now be provided several times. 7043 * include/abg-dwarf-reader.h ({create, reset}_read_context) 7044 (read_corpus_from_elf): Take a vector of debug info root dirs. 7045 * include/abg-tools-utils.h (trim_leading_string) 7046 (find_file_under_dir, make_path_absolute_to_be_freed) 7047 (convert_char_stars_to_char_star_stars): Declare new functions. 7048 * src/abg-dwarf-reader.cc (find_alt_debug_info_link): Renamed 7049 find_alt_debug_info_location into this. 7050 (find_alt_debug_info_path): Define new static function. 7051 (find_alt_debug_info): Take a vector of debug info root dirs. Use 7052 the new find_alt_debug_info_path to look into the debug info root 7053 dirs for the alt debug info. 7054 (read_context::debug_info_root_paths_): Define new data member. 7055 (read_context::read_context): Take a vector of debug info root 7056 dirs and initialize the new read_context::debug_info_root_paths_. 7057 (read_context::{initialize, create_default_dwfl}): Take a vector 7058 of debug info root dirs and adjust. 7059 (read_context::{add_debug_info_root_paths, 7060 add_debug_info_root_path, find_alt_debug_info}): Define new member 7061 functions. 7062 (read_context::load_debug_info): Look into the debug info roots 7063 for split debug info files. 7064 (create_read_context, read_corpus_from_elf): Take a vector of 7065 debug info root dirs and adjust. 7066 (has_alt_debug_info): Adjust. 7067 * src/abg-tools-utils.cc (trim_leading_string) 7068 (make_path_absolute_to_be_freed, find_file_under_dir) 7069 (convert_char_stars_to_char_star_stars): Define new functions. 7070 (entry_of_file_with_name): Define new static function. 7071 (build_corpus_group_from_kernel_dist_under): Adjust. 7072 * tests/print-diff-tree.cc (main): Adjust. 7073 * tests/test-diff-dwarf.cc (main): Adjust. 7074 * tests/test-ir-walker.cc (main): Adjust. 7075 * tests/test-read-dwarf.cc (main): Adjust. 7076 * tools/abicompat.cc (main): Adjust. 7077 * tools/abidiff.cc (options::di_root_paths{1,2}): Changed 7078 di_root_path{1,2} into this, change their types into vectors of 7079 allocated char*. 7080 (options::prepared_di_root_paths{1,2}): Define new data members. 7081 (options::~options): Define new destructor. 7082 (parse_command_line): Adjust. 7083 (prepare_di_root_paths): Define new static function. 7084 (handle_error): Remove arguments input_file_name, 7085 debug_info_dir{1,2}. Now just take an instance of options 7086 instead. Adjust. 7087 (main): Adjust. 7088 * tools/abidw.cc (options::dir_root_paths): Renamed dir_root_path 7089 into this and make it be a vector of allocated char*. 7090 (options::prepared_di_root_paths): Define new data member. 7091 (options::~options): Free the allocated char* in 7092 options::dir_root_paths. 7093 (parse_command_line): Support several --debug-info-dir. 7094 (load_corpus_and_write_abixml): Adjust. 7095 (prepare_di_root_paths): Define static function. 7096 (main): Adjust. 7097 * tools/abilint.cc (main): Adjust. 7098 * tools/abipkgdiff.cc (compare): Adjust. 7099 71002018-10-26 Dodji Seketeli <dodji@redhat.com> 7101 7102 Update website for 1.5 7103 * doc/website/mainpage.txt: Update website for 1.5 7104 71052018-10-26 Dodji Seketeli <dodji@redhat.com> 7106 7107 Bump version number to 1.6 7108 * configure.ac: Bump version number to 1.6 7109 71102018-10-25 Dodji Seketeli <dodji@redhat.com> 7111 7112 Update ChangeLog for 1.5 7113 * ChangeLog: Update automatically by calling make 7114 update-changelog. 7115 71162018-10-25 Dodji Seketeli <dodji@redhat.com> 7117 7118 Update NEWS file for 1.5 7119 * NEWS: Update for 1.5 7120 71212018-10-18 Dodji Seketeli <dodji@redhat.com> 7122 7123 Bug rhbz1638554 - assertion failed in is_mostly_distinct_diff 7124 * src/abg-comp-filter.cc (is_mostly_distinct_diff): Handle the 7125 case of the type diff of the function parameter diff being a 7126 distinct diff. 7127 71282018-10-17 Dodji Seketeli <dodji@redhat.com> 7129 7130 Define UINT64_MAX when it's not defined 7131 * src/abg-dwarf-reader.cc: Define UINT64_MAX when it's not defined. 7132 71332018-10-16 Dodji Seketeli <dodji@redhat.com> 7134 7135 Better support array with unknown upper bound 7136 * include/abg-comparison.h 7137 (BENIGN_INFINITE_ARRAY_CHANGE_CATEGORY): A new enumerator in the 7138 diff_category enum. 7139 (EVERYTHING_CATEGORY): Adjust. 7140 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 7141 Adjust. 7142 (operator<<(ostream& o, diff_category)): Likewise. 7143 * include/abg-ir.h (array_type_def::subrange_type::is_infinite): 7144 Declare new member function. 7145 * src/abg-ir.cc (array_type_def::subrange_type::priv::infinite_): 7146 New data member. 7147 (array_type_def::subrange_type::priv::priv): Initialize it. 7148 (array_type_def::subrange_type::get_length): Better support 7149 unknown sized subrange. 7150 (array_type_def::subrange_type::is_infinite): Define new member 7151 function. 7152 * src/abg-comp-filter.cc (has_benign_infinite_array_change): 7153 Define new static function. 7154 (categorize_harmless_diff_node): Use the new 7155 has_benign_infinite_array_change above. 7156 * src/abg-dwarf-reader.cc (build_subrange_type): Better recognize a 7157 subrange type with unknown upper bound. Represent that with the 7158 new array_type_def::subrange_type::is_infinite member property. 7159 * src/abg-reader.cc (build_subrange_type): Likewise. 7160 * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Adjust. 7161 * tests/data/test-annotate/libtest23.so.abi: Likewise. 7162 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 7163 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 7164 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 7165 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 7166 Likewise. 7167 * tests/data/test-annotate/test7.so.abi: Likewise. 7168 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 7169 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. 7170 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 7171 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 7172 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 7173 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 7174 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 7175 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 7176 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 7177 71782018-10-11 Dodji Seketeli <dodji@redhat.com> 7179 7180 Add default suppression specification for the libvirt project 7181 * default.abignore: Suppress changes on functions with symbol 7182 version LIBVIRT_PRIVATE in libvirt.so.* shared objects. 7183 71842018-10-11 Dodji Seketeli <dodji@redhat.com> 7185 7186 Add default suppression specification for the krb5 project 7187 * default.abignore: Ignore changes about functions starting with 7188 krb5int_.*. 7189 71902018-10-03 Dodji Seketeli <dodji@redhat.com> 7191 7192 Misc comment fix 7193 * src/abg-suppression.cc (type_suppression::suppresses_diff): Fix 7194 comment. 7195 71962018-10-03 Dodji Seketeli <dodji@redhat.com> 7197 7198 Bug 23708 - categorize void* to pointer change as harmless 7199 * include/abg-comparison.h (VOID_PTR_TO_PTR_CHANGE_CATEGORY): New 7200 enumerator in the diff_category enum. Also, adjust the 7201 EVERYTHING_CATEGORY enumerator. 7202 * include/abg-fwd.h (is_void_pointer_type): Declare new function. 7203 * src/abg-comp-filter.cc (has_void_ptr_to_ptr_change): Define new 7204 static function and ... 7205 (categorize_harmless_diff_node): ... use it here. 7206 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 7207 Add the new abigail::comparison::VOID_PTR_TO_PTR_CHANGE_CATEGORY 7208 category in here. 7209 (operator<<(ostream& o, diff_category c)): Add support for the new 7210 VOID_PTR_TO_PTR_CHANGE_CATEGORY. 7211 * src/abg-ir.cc (is_void_pointer_type): Define new function. 7212 * tests/data/Makefile.am: Add the new test material below to source distribution. 7213 * tests/data/test-diff-filter/test47-filter-void-ptr-change-report-0.txt: 7214 New test reference output. 7215 * tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.c: 7216 Source code of the new binary test input below. 7217 * tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.o: 7218 New binary test input. 7219 * tests/test-diff-filter.cc: Add the test input/output above to 7220 test harness. 7221 72222018-10-02 Dodji Seketeli <dodji@redhat.com> 7223 7224 Categorize CV qualifier changes on fn return types as harmless 7225 * include/abg-comparison.h (FN_RETURN_TYPE_CV_CHANGE_CATEGORY): 7226 New enumerator for diff_category. 7227 (EVERYTHING_CATEGORY): Update. 7228 * src/abg-comp-filter.cc (type_diff_has_cv_qual_change_only): 7229 Factorize this function out of ... 7230 (has_fn_parm_type_cv_qual_change): ... this one. 7231 (has_fn_return_type_cv_qual_change): Define new static function. 7232 (categorize_harmless_diff_node): Use the new 7233 has_fn_return_type_cv_qual_change. 7234 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 7235 Adjust to add the new FN_RETURN_TYPE_CV_CHANGE_CATEGORY category. 7236 (operator<<(ostream& o, diff_category c)): Support the new 7237 FN_RETURN_TYPE_CV_CHANGE_CATEGORY. 7238 * tests/data/Makefile.am: Add the new test material below to 7239 source distribution. 7240 * tests/data/test-diff-filter/test46-fn-return-qual-change-report-0.txt: 7241 New reference output for the new input test. 7242 * tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.c: 7243 New source code for the new binary test input. 7244 * tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.o: 7245 New binary test input files. 7246 * tests/test-diff-filter.cc: Add the new test input above to test 7247 harness. 7248 72492018-10-01 Dodji Seketeli <dodji@redhat.com> 7250 7251 Fix propagation of private type suppression category 7252 * include/abg-comp-filter.h (has_harmful_name_change): Declare new 7253 function overloads. 7254 * include/abg-comparison.h (PRIVATE_TYPE_CATEGORY): New enumerator 7255 for diff_category; 7256 (EVERYTHING_CATEGORY): Adjust this enumerator in diff_category; 7257 (is_suppressed): Take an output parameter to say if the 7258 suppression is a private type suppression. 7259 * include/abg-suppression.h (is_private_type_suppr_spec): Take a 7260 const reference parameter and add an overload for a shared 7261 pointer. 7262 * src/abg-comp-filter.cc (has_harmful_name_change): Define new 7263 function. 7264 * src/abg-comparison-priv.h (diff::priv::is_filtered_out): Diffs 7265 of category PRIVATE_TYPE_CATEGORY are also considered filtered 7266 out. 7267 * src/abg-comparison.cc (diff::is_filtered_out): Adjust to account 7268 for canonical diffs of category PRIVATE_TYPE_CATEGORY. 7269 (diff::is_suppressed): Add an overload that takes a 7270 is_private_type output parameter. Re-write the old overload in 7271 terms of the new one. 7272 (operator<<(ostream& o, diff_category c)): Handle 7273 PRIVATE_TYPE_CATEGORY. 7274 (category_propagation_visitor::visit_end): Do not propagate 7275 PRIVATE_TYPE_CATEGORY here. Do not propagate 7276 HARMLESS_DECL_NAME_CHANGE_CATEGORY either, when the class does 7277 have a harmful decl name change. 7278 (suppression_categorization_visitor::visit_begin): Set the new 7279 PRIVATE_TYPE_CATEGORY category but do not propagate it. 7280 (suppression_categorization_visitor::visit_end): Add some 7281 comments. 7282 * src/abg-default-reporter.cc (default_reporter::report): Avoid 7283 reporting typedef underlying types that are in the 7284 PRIVATE_TYPE_CATEGORY category. 7285 * src/abg-suppression.cc (type_suppression::suppresses_diff): Do 7286 not peel typedefs if we are a private type suppression. 7287 (is_private_type_suppr_spec): Take a const reference. 7288 * tests/data/Makefile.am: Add the new test material below to 7289 source distribution. 7290 * tests/test-diff-suppr.cc: Use new test binary input. 7291 * tests/data/test-diff-filter/test7-report.txt: Adjust. 7292 * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: New 7293 test reference output. 7294 * tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.c: Source 7295 code of new test binary input. 7296 * tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.o: New test 7297 binary input. 7298 * tests/data/test-diff-suppr/test39-public-headers-dir/test39-header-v{0,1}.h: 7299 Source code of new test binary input. 7300 73012018-09-25 Dodji Seketeli <dodji@redhat.com> 7302 7303 PR23641 - confusion when a type definition DIE is matched by a supprspec and its decl DIEs aren't 7304 * src/abg-dwarf-reader.cc (get_opaque_version_of_type): If no 7305 pre-existing opaque version was found, a new one is created and 7306 returned. Take a needed "where_offset" parameter. 7307 (build_ir_node_from_die): Adjust the call to 7308 get_opaque_version_of_type. 7309 73102018-09-21 Dodji Seketeli <dodji@redhat.com> 7311 7312 PR23641 - Type definition DIE matched by a supprspec but not its decl 7313 *definition* of T, they will be dropped too. 7314 We'll end up with those two libraries that are identical (modulo the 7315 order in which libabigail sees type declarations and their 7316 definitions) and are considered different when a suppression 7317 specification makes us drop T: the second library appears to 7318 libabigail as if T was removed from it. 7319 This is the problem addressed by this patch. 7320 When the definition of a type T is suppressed because it's considered 7321 private then we look if there was a forward declaration for it 7322 elsewhere, that is not matched by the private type suppression 7323 specification. If we encountered such a type declaration then it 7324 means that declaration is in effect an "opaque" version of T. So 7325 rather than just dropping T altogether, we keep (and build an IR) for 7326 its opaque version only. And we drop the definition of T. 7327 This seems to fix the issue. 7328 I can't seem to reproduce the slight re-ordering of DIEs descriptions that 7329 uncover the issue so I'll rely on integration tests to catch future 7330 regressions on this issue, rather than on unit tests. Sigh. 7331 * include/abg-tools-utils.h (PRIVATE_TYPES_SUPPR_SPEC_NAME): 7332 Remove this extern constant definition. 7333 * src/abg-dwarf-reader.cc (type_is_suppressed): Add an overload 7334 that takes an additional type_is_private output parameter. 7335 (get_opaque_version_of_type): New static function. 7336 (build_ir_node_from_die): For class types, get the opaque version 7337 for suppressed private types rather than dropping them altogether. 7338 * src/abg-reader.cc (type_is_suppressed): Adjust. 7339 * src/abg-suppression-priv.h (type_is_suppressed): Add an overload 7340 that takes a type_is_private output parameter. 7341 * include/abg-suppression.h (get_private_types_suppr_spec_label) 7342 (is_private_type_suppr_spec): Declare new functions. 7343 * src/abg-suppression.cc 7344 (get_private_types_suppr_spec_label, is_private_type_suppr_spec): 7345 Define new functions. 7346 (suppression_matches_type_name_or_location): Use the new 7347 get_private_types_suppr_spec_label rather than a global extern 7348 variable. 7349 * src/abg-tools-utils.cc (handle_fts_entry): Adjust to use the new 7350 get_private_types_suppr_spec_label. 7351 (gen_suppr_spec_from_headers): Handle the case or an empty headers 7352 root dir. 7353 73542018-09-03 Dodji Seketeli <dodji@redhat.com> 7355 7356 Add option to avoid walking abigail::ir nodes twice 7357 * include/abg-ir.h (struct ir_node_visitor): Make this be a class. 7358 Add a private data member to it, following the 'pimpl' idiom. 7359 (ir_node_visitor::{allow_visiting_already_visited_type_node, 7360 mark_type_node_as_visited, forget_visited_type_nodes, 7361 type_node_has_been_visited}): Declare new member functions. 7362 * src/abg-ir.cc ({type_base, type_decl, scope_type_decl, 7363 qualified_type_decl, pointer_type_def, reference_type_def, 7364 array_type_def, enum_type_decl, typedef_decl, class_or_union, 7365 class_decl, union_decl}::traverse): Avoid re-visiting the type 7366 node if the visitor was configured as such. 7367 (struct ir_node_visitor::priv): Define new struct. 7368 (ir_node_visitor::{allow_visiting_already_visited_type_node, 7369 mark_type_node_as_visited, forget_visited_type_nodes, 7370 type_node_has_been_visited}): Define new member functions. 7371 * tests/test-ir-walker.cc 7372 (name_printing_visitor::name_printing_visitor): Avoid visiting a 7373 type node twice. 7374 73752018-08-31 Dodji Seketeli <dodji@redhat.com> 7376 7377 Fix apidoc of dwarf_reader::get_soname_of_elf_file 7378 * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Document the 7379 first parameter. Remove bogus documentation of the previous 'elf' 7380 parameter. 7381 73822018-08-30 Dodji Seketeli <dodji@redhat.com> 7383 7384 Bug 23533 - Accept '=' in ini property values 7385 * src/abg-ini.cc (char_is_delimiter): Take a new include_equal 7386 flag to control is the equal character should be considered as a 7387 delimiter or not. 7388 (char_is_property_value_char): Accept the equal character as a 7389 valid property value character. 7390 * tests/Makefile.am: Build a new runtestini test from the new 7391 tests/test-ini.cc source file. 7392 * tests/data/Makefile.am: Add the two new test inputs below to 7393 source distribution. 7394 * tests/data/test-ini/test01-equal-in-property-string.{abignore, 7395 abignore.expected}: New test inputs. 7396 * tests/test-ini.cc: New test harness. 7397 73982018-08-06 Dodji Seketeli <dodji@redhat.com> 7399 7400 Make test-ir-walker work on ELF binaries directly 7401 * test-ir-walker.cc (main): Load an ABI corpus from an elf file 7402 and walk its translation units. 7403 74042018-07-17 Dodji Seketeli <dodji@redhat.com> 7405 7406 Allow use of python even when fedabipkgdiff is disabled 7407 * configure.ac: Detect the presence and version of python even 7408 when fedabipkgdiff is disabled. 7409 74102018-07-16 Dodji Seketeli <dodji@redhat.com> 7411 7412 Bump version number to 1.5 7413 * configure.ac: Bump version number to 1.5 7414 74152018-07-13 Dodji Seketeli <dodji@redhat.com> 7416 7417 Update ChangeLog for 1.4 release 7418 * ChangeLog: Update this using make update-changelog 7419 74202018-07-13 Dodji Seketeli <dodji@redhat.com> 7421 7422 Update NEWS file for 1.4 release 7423 * NEWS: Added 1.4 entries 7424 74252018-07-13 Dodji Seketeli <dodji@redhat.com> 7426 7427 Properly add test materials for test-diff-suppr/test38-char-class-in-ini* 7428 * tests/data/Makefile.am: Add proper path for 7429 test-diff-suppr/test38-char-class-in-ini*. 7430 74312018-07-12 Dodji Seketeli <dodji@redhat.com> 7432 7433 Allow square brackets in ini property values 7434 * src/abg-ini.cc (char_is_delimiter): Possibly disallow square 7435 bracket characters into the set of delimiters. 7436 * tests/data/test-diff-suppr/test38-char-class-in-ini-report-0.txt: 7437 New reference output. 7438 * tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.c: 7439 Source code new test binaries. 7440 * tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.o: 7441 New test binaries. 7442 * tests/data/test-diff-suppr/test38-char-class-in-ini.abignore: 7443 New test abi suppression file. 7444 * tests/data/Makefile.am: Add the new test materials above to 7445 source distribution. 7446 * tests/test-diff-suppr.cc: Add the test materials above to the 7447 set of tests to run. 7448 74492018-07-10 Dodji Seketeli <dodji@redhat.com> 7450 7451 Fix race between runtestdefaultsupprs{py3.sh,.py} 7452 * tests/Makefile.am: Run runtestdefaultsupprspy3.sh if we are in 7453 python3 mode otherwise run runtestdefaultsupprs.py. 7454 74552018-06-29 Dodji Seketeli <dodji@redhat.com> 7456 7457 Ensure die_function_type_is_method_type returns a class type die 7458 * src/abg-dwarf-reader.cc (die_peel_typedef): Define new static 7459 function. 7460 (die_function_type_is_method_type): Use the function above to peel 7461 the class die from potential typedefs wrapping it. 7462 74632018-06-28 Dodji Seketeli <dodji@redhat.com> 7464 7465 Misc style adjustements 7466 * include/abg-suppression.h 7467 (function_suppression::ADDED_FUNCTION_CHANGE_KIND): Fix the 7468 comment of this enumerator. 7469 (suppresses_variable): Cleanup parameter name. 7470 * src/abg-comparison.cc: Remove useless horizontal space. 7471 * src/abg-suppression.cc 7472 (variable_suppression::suppresses_variable): Fix typo. 7473 74742018-06-28 Dodji Seketeli <dodji@redhat.com> 7475 7476 Initial basic support of union type in suppression specifications 7477 * src/abg-suppression.cc (suppression_matches_type_no_name): 7478 Support union types. 7479 74802018-06-28 Dodji Seketeli <dodji@redhat.com> 7481 7482 Filter out changes like type to const type 7483 * include/abg-comparison.h (FN_PARM_TYPE_CV_CHANGE_CATEGORY): Add 7484 this new enumerator to the diff_category enum. Also, OR this to 7485 the value of the EVERYTHING_CATEGORY enumerator. 7486 * src/abg-comp-filter.cc (has_fn_parm_type_top_cv_qual_change): 7487 Rename has_fn_parm_type_cv_qual_change into this. 7488 (has_fn_parm_type_cv_qual_change): New function. 7489 (categorize_harmless_diff_node): Categorize cv qual changes as 7490 being of category FN_PARM_TYPE_CV_CHANGE_CATEGORY. 7491 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 7492 Add FN_PARM_TYPE_CV_CHANGE_CATEGORY to the default harmless 7493 categories. 7494 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Adjust. 7495 74962018-06-28 Dodji Seketeli <dodji@redhat.com> 7497 7498 Fix redundancy detection through fn ptr and typedef paths 7499 * include/abg-comparison.h 7500 (is_function_type_diff_with_local_changes) 7501 (is_reference_or_pointer_diff_to_non_basic_distinct_types) 7502 (peel_typedef_diff): Declare new functions. 7503 * src/abg-comparison.cc 7504 (is_function_type_diff_with_local_changes) 7505 (is_reference_or_ptr_diff_to_non_basic_nor_distinct_types) 7506 (peel_typedef_diff): Define new functions. 7507 (is_reference_or_pointer_diff): Peel typedefs before operating. 7508 (redundancy_marking_visitor::visit_begin): Only sibbling parameter 7509 diff node that carry basic type changes (or distinct type changes) 7510 are *not* marked as redundant. All other kinds of sibbling 7511 parameter diff nodes are markes redundant. Also, rather than 7512 never marking function type diffs as redundant by fear of missing 7513 local changes on these, just avoid marking function type diff 7514 nodes with local changes. It's possible to be that precise now 7515 that we can detect that a diff node carries local changes. 7516 * tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.o: New 7517 binary tests input. 7518 * tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.c: Source 7519 code of the binary tests input above. 7520 * tests/data/test-diff-suppr/test37-opaque-type-header-dir/test37-opaque-type-header-v{0,1}.h: 7521 Headers of the binary tests input above. 7522 * tests/data/test-diff-suppr/test37-opaque-type-report-0.txt: 7523 Reference output for this new test. 7524 * tests/data/Makefile.am: Add the new test material above to 7525 source distribution. 7526 * tests/test-diff-suppr.cc (in_out_specs): Add the new test input 7527 above to the test harness. 7528 75292018-06-08 Dodji Seketeli <dodji@redhat.com> 7530 7531 Fix indentation of help string in abipkgdiff 7532 * tools/abipkgdiff.cc (display_usage): Fix indentation of help 7533 string. 7534 75352018-06-08 Dodji Seketeli <dodji@redhat.com> 7536 7537 Identify a function using its symbol name and version 7538 * src/abg-default-reporter.cc (default_reporter::report): In C, 7539 tell the user about the underlying function symbol name only if 7540 said symbol name is different from the name of the function. 7541 * src/abg-ir.cc (function_decl::get_id): If the function has an 7542 underlying symbol, use the symbol name and version as the function 7543 ID. But if the function symbol has an alias then use the linkage 7544 name as the ID. 7545 * tests/data/test-diff-pkg/elfutils-debuginfo-0.170-4.el7.x86_64.rpm: 7546 New binary test input. 7547 * tests/data/test-diff-pkg/elfutils-debuginfo-0.171-1.el7.x86_64.rpm: Likewise. 7548 * tests/data/test-diff-pkg/elfutils-devel-0.170-4.el7.x86_64.rpm: Likewise. 7549 * tests/data/test-diff-pkg/elfutils-devel-0.171-1.el7.x86_64.rpm: Likewise. 7550 * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64.rpm: Likewise. 7551 * tests/data/test-diff-pkg/elfutils-libs-0.171-1.el7.x86_64.rpm: Likewise. 7552 * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: 7553 New reference test output. 7554 * tests/data/Makefile.am: Add the new test material above to 7555 source distribution. 7556 * tests/test-diff-pkg.cc (in_out_specs): Integrate the new test 7557 inputs above into the harness. 7558 75592018-06-06 Dodji Seketeli <dodji@redhat.com> 7560 7561 Bump version to 1.4 7562 * configure.ac: Bump version to 1.4 7563 75642018-06-06 Dodji Seketeli <dodji@redhat.com> 7565 7566 Explicitely detect anonymous data member changes 7567 * include/abg-comp-filter.h (has_anonymous_data_member_change): 7568 Add new function declaration. 7569 * include/abg-fwd.h (is_data_member, is_anonymous_data_member): 7570 declare new overloads. 7571 * src/abg-comp-filter.cc (has_anonymous_data_member_change): 7572 Define new overloads. 7573 * src/abg-ir.cc (is_data_member, is_anonymous_data_member): Define 7574 new overloads. 7575 * src/abg-reporter-priv.cc (represent): In the var_diff overload, 7576 detect when we have anonymous data member changes and emit 7577 explicit error messages then. 7578 * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: 7579 New test material. 7580 * tests/data/test-diff-dwarf/test45-anon-dm-change-v0.cc: Likewise. 7581 * tests/data/test-diff-dwarf/test45-anon-dm-change-v0.o: Likewise. 7582 * tests/data/test-diff-dwarf/test45-anon-dm-change-v1.cc: Likewise. 7583 * tests/data/test-diff-dwarf/test45-anon-dm-change-v1.o: Likewise. 7584 * tests/data/Makefile.am: Add the new test material above to source 7585 distribution. 7586 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test 7587 material above to the test harness. 7588 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 7589 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 7590 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. 7591 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 7592 75932018-06-05 Dodji Seketeli <dodji@redhat.com> 7594 7595 Add test44-anon-struct-union-v{0,1}.o to source distribution 7596 * tests/data/Makefile.am: Add 7597 test-diff-dwarf/test44-anon-struct-union-v{0,1}.o files to source 7598 distribution. 7599 76002018-06-04 Dodji Seketeli <dodji@redhat.com> 7601 7602 Use the flat representation for anonymous struct/unions 7603 * src/abg-ir.cc (get_class_or_union_flat_representation): Take a 7604 const class_or_union* (like what the declaration in the header 7605 file says), rather than just a class_or_union*. 7606 ({class,union}_decl::get_pretty_representation): For anonymous 7607 classes and unions, use the flat representation. 7608 * tests/data/test-annotate/libtest23.so.abi: Adjust. 7609 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 7610 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 7611 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 7612 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 7613 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 7614 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 7615 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 7616 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 7617 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 7618 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 7619 * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. 7620 * tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt: 7621 New test reference output. 7622 * tests/data/test-diff-dwarf/test44-anon-struct-union-v{0,1}.cc: 7623 Source code of new test binary outputs. 7624 * tests/data/test-diff-dwarf/test44-anon-struct-union-v{0,1}.o: 7625 New test binary outputs. 7626 * tests/data/Makefile.am: Add the new test materials above to 7627 source districution. 7628 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test 7629 material above to the test harness here. 7630 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 7631 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 7632 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. 7633 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 7634 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. 7635 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 7636 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 7637 76382018-06-01 Dodji Seketeli <dodji@redhat.com> 7639 7640 Better detect when pointer and qualified types carry local changes 7641 * src/abg-comparison.cc 7642 (leaf_diff_node_marker_visitor::visit_begin): Do not mark 7643 qualified types as leaf diff nodes. 7644 (redundancy_marking_visitor::visit_end): Changes to qualified type 7645 are never considered local. This is just as for pointer and 7646 reference types. 7647 * src/abg-default-reporter.cc 7648 (default_reporter::report_local_reference_type_changes): Display 7649 structural changes of the pointed-to type. 7650 (default_reporter::report): In the overload for reference_diff, 7651 better detect and handle when we have local changes, or not. 7652 * src/abg-ir.cc (equals): In the overload for qualified_type_def 7653 and reference_type_de, report local type changes of the underlying 7654 type as local changes. Add comments in the overload for pointer 7655 type, and make it look like the the overload for reference_type. 7656 * src/abg-leaf-reporter.cc (leaf_reporter::report): In the 7657 overload for pointer_diff, remove end of line. 7658 * tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt: Adjust. 7659 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 7660 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 7661 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. 7662 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 7663 76642018-05-23 Dodji Seketeli <dodji@redhat.com> 7665 7666 Better detect when diff nodes only carry local type changes 7667 * include/abg-comparison.h ({diff, type_diff_base, decl_diff_base, 7668 distinct_diff, var_diff, pointer_diff, reference_diff, array_diff, 7669 qualified_type, enum_diff, class_or_union_diff, class_diff, 7670 base_diff, scope_diff, fn_parm_diff, function_type_diff, 7671 function_decl_diff, typedef_diff, 7672 translation_unit_diff}::has_local_changes): Return an enum 7673 change_kind, rather than just a bool. 7674 (is_diff_of_basic_type): Declare an overload that takes a boolean 7675 flag. 7676 (is_qualified_type_diff, peel_pointer_diff, peel_reference_diff) 7677 (peel_qualified_type, peel_pointer_or_qualified_type): Declare new 7678 functions 7679 * include/abg-fwd.h (peel_qualified_type): 7680 * include/abg-ir.h (enum change_kind::{LOCAL_TYPE_CHANGE_KIND, 7681 LOCAL_NON_TYPE_CHANGE_KIND, ALL_LOCAL_CHANGES_MASK}): Add these 7682 three new enumerators. 7683 * src/abg-comparison.cc ({distinct_diff, var_diff, pointer_diff, 7684 array_diff, reference_diff, qualified_type_diff, enum_diff, 7685 class_or_union_diff, class_diff, base_diff, scope_diff, 7686 fn_parm_diff, function_type_diff, function_decl_diff, 7687 type_decl_diff, typedef_diff, 7688 translation_unit_diff}::has_local_changes): Adjust to return an 7689 enum change_kind, rather than just a bool. 7690 (has_local_type_change_only): Define new functions. 7691 (has_basic_type_change_only): Use the new 7692 has_local_type_change_only function and the new overload for 7693 is_diff_of_basic_type. 7694 (is_diff_of_basic_type): Define an overload that takes a boolean 7695 flag. 7696 (is_qualified_type_diff, peel_pointer_diff, peel_reference_diff) 7697 (peel_qualified_type, peel_pointer_or_qualified_type): Define new 7698 functions. 7699 * src/abg-ir.cc (equals): In the overloads for decl_base, 7700 scope_decl, type_base, qualified_type_diff, pointer_type_def, 7701 reference_type_def, array_type_def, enum_type_decl, typedef_decl, 7702 var_decl, function_type, function_decl, function_decl::parameter, 7703 class_or_union, class_decl::base_spec and class_decl, properly set 7704 the new abigail::ir::{LOCAL_CHANGE_KIND, 7705 LOCAL_NON_TYPE_CHANGE_KIND, LOCAL_TYPE_CHANGE_KIND} bits. 7706 (types_have_similar_structure): Peel qualified types and typedefs 7707 off, first thing. 7708 (peel_qualified_or_typedef_type): Define new function. 7709 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 7710 Adjust. 7711 * tests/data/test-diff-filter/libtest45-basic-type-change-report-{0,1}.txt: 7712 New reference test reports. 7713 * tests/data/test-diff-filter/libtest45-basic-type-change-v{0,1}.so: 7714 New input test binaries. 7715 * tests/data/test-diff-filter/test45-basic-type-change-v{0,1}.cc: 7716 Source code of the input test binaries above. 7717 * tests/data/Makefile.am: Add the new test file above to source 7718 distribution. 7719 * tests/test-diff-filter.cc: Add the test input above to the test 7720 harness. 7721 77222018-05-18 Dodji Seketeli <dodji@redhat.com> 7723 7724 Improve detection of local *type* changes 7725 * include/abg-fwd.h (is_type_decl): Declare new overload for 7726 type_base*. 7727 (types_have_similar_structure): Declare new function. 7728 * src/abg-comparison.cc 7729 (class_or_union_diff::priv::count_filtered_changed_dm): Even when 7730 looking at local changes only, do not forget to count nodes that 7731 were filtered out. 7732 * src/abg-ir.cc (types_have_similar_structure): Define new 7733 function. 7734 (is_type_decl): Define new overload for 7735 type_base*. 7736 (is_enum_type): 7737 (equals): In the overload for var_decl, use the new 7738 types_have_similar_structure function to detect local (type) 7739 changes. 7740 * src/abg-reporter-priv.cc (represent): In the overload for 7741 var_decl, use the diff::has_local_changes function to detect local 7742 changes, now that we can better detect local changes. 7743 * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: 7744 Adjust. 7745 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 7746 77472018-05-16 Dodji Seketeli <dodji@redhat.com> 7748 7749 Remove references, arrays and fn parms from leaf diff nodes 7750 * src/abg-comparison.cc 7751 (leaf_diff_node_marker_visitor::visit_begin): Do not mark 7752 references, array and fn parms diff nodes as leaf nodes. 7753 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 7754 Adjust. 7755 77562018-05-23 Dodji Seketeli <dodji@redhat.com> 7757 7758 Fix typo in tests/runtestdefaultsupprs.py 7759 * tests/runtestdefaultsupprs.py.in: Fix typo. 7760 77612018-05-17 Dodji Seketeli <dodji@redhat.com> 7762 7763 Update ChangeLog 7764 * ChangeLog: Update this file automatically by running the "make 7765 update-changelog" command. 7766 77672018-05-17 Dodji Seketeli <dodji@redhat.com> 7768 7769 Update NEWS file for 1.3 release 7770 * NEWS: Update for 1.3. 7771 77722018-05-16 Dodji Seketeli <dodji@redhat.com> 7773 7774 Don't bail because "rpm" issued an error 7775 * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Do not fail 7776 when the rpm command issues an error. Rather rely on the presence 7777 of a valid output or not. Also, make sure to filter out error 7778 outputs so that they don't appear in the general output of tools 7779 using this function. 7780 77812018-05-16 Dodji Seketeli <dodji@redhat.com> 7782 7783 Handle cases where no python2 interpreter is found 7784 * configure.ac: When no python2 is found and only python3 is 7785 found, then use python3. 7786 77872018-05-16 Dodji Seketeli <dodji@redhat.com> 7788 7789 Use the correct python interpreter in runtestdefaultsupprs.py 7790 * configure.ac: Make the PYTHON environemnt variable usable in 7791 auto-generated files. 7792 * tests/runtestdefaultsupprs.py.in: Use the python interpreter 7793 detected by configure. 7794 77952018-05-16 Dodji Seketeli <dodji@redhat.com> 7796 7797 Use the dynamically selected python for Koji configure tests 7798 * configure.ac: Use the python interpreter that was selected by 7799 the configure script for the Koji version test. 7800 78012018-05-14 Dodji Seketeli <dodji@redhat.com> 7802 7803 Sort the output of the leaf reporter 7804 * include/abg-comparison.h (diff_ptrs_type): Define new typedef. 7805 * src/abg-comparison-priv.h (sort_string_diff_ptr_map): Declare 7806 new function. 7807 * src/abg-comparison.cc (sort_string_diff_sptr_map): Update 7808 comment. 7809 (sort_string_diff_ptr_map): Define new function. 7810 * src/abg-leaf-reporter.cc (report_diffs): Sort the diff nodes 7811 before reporting about them. 7812 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Adjust. 7813 78142018-05-14 Dodji Seketeli <dodji@redhat.com> 7815 7816 Show data member offsets in bytes too 7817 * src/abg-reporter-priv.cc (represent): In the overload for 7818 var_diff_sptr, use the function show_offset_or_size, rather than 7819 emit_num_value. 7820 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. 7821 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. 7822 * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: Adjust. 7823 * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: Adjust. 7824 78252018-05-09 Dodji Seketeli <dodji@redhat.com> 7826 7827 Initial support of anonymous data members 7828 * include/abg-comparison.h (is_class_or_union_diff) 7829 (is_anonymous_class_or_union_diff): Declare new functions. 7830 * include/abg-fwd.h (is_class_type): Declare new overload for 7831 type_or_decl_base&. 7832 (is_data_member): Declare new overload for decl_base*. 7833 (is_anonymous_data_member) 7834 (anonymous_data_member_to_class_or_union) 7835 (get_class_or_union_flat_representation) 7836 (data_member_has_anonymous_type): Declare new functions. 7837 (is_at_class_scope): Return the class or union scope. 7838 * include/abg-ir.h (var_decl::get_qualified_name): New virtual 7839 data member which overloads decl_base::get_qualified_name. 7840 * src/abg-comparison.cc (is_class_or_union_diff) 7841 (is_anonymous_class_or_union_diff): Define new functions 7842 (leaf_diff_node_marker_visitor::visit_begin): Don't mark anonymous 7843 class or union diff nodes as diff nodes. 7844 * src/abg-ir.cc (is_data_member): Define new overload for 7845 decl_base*. 7846 (is_class_type, is_union_type): Define new overload for type_or_decl_base&. 7847 (is_anonymous_data_member) 7848 (anonymous_data_member_to_class_or_union) 7849 (get_class_or_union_flat_representation) 7850 (data_member_has_anonymous_type): Define new function overloads. 7851 (var_decl::get_qualified_name): Define new virtual member 7852 function. 7853 (is_at_class_scope): Return the class or union scope. 7854 (var_decl::get_pretty_representation): Support anonymous data 7855 members. 7856 (equals): In the overload for class_or_union_diff, mark data 7857 member textual representation changes as local changes. 7858 * src/abg-reporter-priv.cc (represent): In the overload for 7859 var_diff, support changes to anonymous data members. 7860 * src/abg-leaf-reporter.cc (leaf_reporter::report): Report sorted 7861 -- by offset -- data member changes before the ones that are 7862 sorted by other things. 7863 * tests/data/test-diff-filter/libtest44-anonymous-data-member-v{0,1}.so: 7864 New binary test input 7865 * tests/data/test-diff-filter/test44-anonymous-data-member-report-{0,1}.txt: 7866 New reference test outputs. 7867 * tests/data/test-diff-filter/test44-anonymous-data-member-v{0,1}.c: 7868 Source code of the new binary test output above. 7869 * tests/data/Makefile.am: Add the new test files above to the 7870 source distribution. 7871 * tests/data/test-annotate/libtest23.so.abi: Adjust test reference 7872 output. 7873 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 7874 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 7875 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 7876 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 7877 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 7878 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 7879 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 7880 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 7881 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 7882 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 7883 * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. 7884 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 7885 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 7886 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. 7887 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. 7888 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. 7889 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 7890 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. 7891 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 7892 78932018-04-20 Dodji Seketeli <dodji@redhat.com> 7894 7895 Represent sizes and offsets in bytes and hexadecimal values 7896 * doc/manuals/abidiff.rst: Add documentation for the new 7897 --show-bits, --show-bytes, --show-hex and --show-dec options. 7898 * doc/manuals/abipkgdiff.rst: Likewise. 7899 * doc/manuals/kmidiff.rst: Likewise. 7900 * include/abg-comparison.h (diff_context::{show_hex_values, 7901 show_offsets_sizes_in_bits}): Declare new member functions. 7902 * src/abg-comparison-priv.h (diff_context::priv::{hex_values_, 7903 show_offsets_sizes_in_bits_}): Declare new data members. 7904 (diff_context::priv::priv): Initialize them. 7905 * src/abg-comparison.cc (diff_context::{show_hex_values, 7906 show_offsets_sizes_in_bits}): Define new member functions. 7907 * src/abg-default-reporter.cc (default_reporter::report): Adjust 7908 the call to maybe_report_diff_for_symbol. 7909 * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. 7910 * src/abg-reporter-priv.h (convert_bits_to_bytes) 7911 (maybe_convert_bits_to_bytes, emit_num_value, show_offset_or_size) 7912 (show_numerical_change): Declare new functions. 7913 (maybe_report_diff_for_symbol): Take a diff_context in parameter. 7914 * src/abg-reporter-priv.cc (convert_bits_to_bytes, emit_num_value) 7915 (maybe_convert_bits_to_bytes, show_numerical_change) 7916 (show_offset_or_size): Define new functions. 7917 (represent): In the overload for method_decl, var_decl, use the 7918 new emit_num_value function. 7919 (represent_data_member): Use the new show_offset_or_size function. 7920 (maybe_show_relative_offset_change): Use the new 7921 convert_bits_to_bytes, diff_context::show_offsets_sizes_in_bits, 7922 emit_num_value functions. 7923 (maybe_show_relative_offset_change): Likewise. 7924 (report_size_and_alignment_changes): Use the new emit_num_value 7925 and show_numerical_change functions. 7926 (maybe_report_diff_for_symbol): Tak a diff_context in argument. 7927 Use the new show_numerical_change function. 7928 * tests/test-diff-filter.cc (in_out_spec): Add a new entry to test 7929 hexa and bytes output. 7930 * tools/abidiff.cc (options::{show_hexadecimal_values, 7931 show_offsets_sizes_in_bits}): New data members. 7932 (options::options): Initialize them. 7933 (display_usage): New help strings for the new 7934 --show{bytes,bits,hex,dec} options. 7935 (parse_command_line): Parse the new --show{bytes,bits,hex,dec} options. 7936 (set_diff_context_from_opts) Set the diff context wrt hex and 7937 bytes values. 7938 * tools/abipkgdiff.cc (options::{show_hexadecimal_values, 7939 show_offsets_sizes_in_bits}): New data members. 7940 (options::options): Initialize them. 7941 (display_usage): New help strings for the new 7942 --show{bytes,bits,hex,dec} options. 7943 (set_diff_context_from_opts): Set the diff context wrt hex and 7944 bytes values. 7945 (parse_command_line): Parse the new --show{bytes,bits,hex,dec} 7946 options. 7947 * tools/kmidiff.cc (options::{show_hexadecimal_values, 7948 show_offsets_sizes_in_bits}): New data members. 7949 (options::options): Initialize them. 7950 (display_usage):New help strings for the new 7951 --show{bytes,bits,hex,dec} options. 7952 (parse_command_line): Parse the new --show{bytes,bits,hex,dec} 7953 options. 7954 (set_diff_context): Set the diff context wrt hex and bytes values. 7955 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: 7956 New reference test output. 7957 * tests/data/Makefile.am: Add the new reference test output above 7958 to source distribution. 7959 * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust. 7960 * tests/data/test-abicompat/test0-fn-changed-report-2.txt: Likewise. 7961 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Likewise. 7962 * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. 7963 * tests/data/test-abicompat/test6-var-changed-report-0.txt: Likewise. 7964 * tests/data/test-abicompat/test6-var-changed-report-1.txt: Likewise. 7965 * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Likewise. 7966 * tests/data/test-abicompat/test7-fn-changed-report-1.txt: Likewise. 7967 * tests/data/test-abicompat/test7-fn-changed-report-2.txt: Likewise. 7968 * tests/data/test-abicompat/test8-fn-changed-report-0.txt: Likewise. 7969 * tests/data/test-abicompat/test9-fn-changed-report-0.txt: Likewise. 7970 * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. 7971 * tests/data/test-abidiff/test-qual-type0-report.txt: Likewise. 7972 * tests/data/test-abidiff/test-struct0-report.txt: Likewise. 7973 * tests/data/test-abidiff/test-struct1-report.txt: Likewise. 7974 * tests/data/test-abidiff/test-var0-report.txt: Likewise. 7975 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 7976 * tests/data/test-diff-dwarf/test1-report.txt: Likewise. 7977 * tests/data/test-diff-dwarf/test10-report.txt: Likewise. 7978 * tests/data/test-diff-dwarf/test11-report.txt: Likewise. 7979 * tests/data/test-diff-dwarf/test13-report.txt: Likewise. 7980 * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: Likewise. 7981 * tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt: Likewise. 7982 * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt: Likewise. 7983 * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: Likewise. 7984 * tests/data/test-diff-dwarf/test3-report.txt: Likewise. 7985 * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: Likewise. 7986 * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: Likewise. 7987 * tests/data/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt: Likewise. 7988 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt: Likewise. 7989 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt: Likewise. 7990 * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: Likewise. 7991 * tests/data/test-diff-dwarf/test37-union-report-0.txt: Likewise. 7992 * tests/data/test-diff-dwarf/test39-union-report-0.txt: Likewise. 7993 * tests/data/test-diff-dwarf/test40-report-0.txt: Likewise. 7994 * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. 7995 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 7996 * tests/data/test-diff-dwarf/test9-report.txt: Likewise. 7997 * tests/data/test-diff-filter/test0-report.txt: Likewise. 7998 * tests/data/test-diff-filter/test01-report.txt: Likewise. 7999 * tests/data/test-diff-filter/test1-report.txt: Likewise. 8000 * tests/data/test-diff-filter/test10-report.txt: Likewise. 8001 * tests/data/test-diff-filter/test11-report.txt: Likewise. 8002 * tests/data/test-diff-filter/test13-report.txt: Likewise. 8003 * tests/data/test-diff-filter/test14-0-report.txt: Likewise. 8004 * tests/data/test-diff-filter/test14-1-report.txt: Likewise. 8005 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 8006 * tests/data/test-diff-filter/test15-1-report.txt: Likewise. 8007 * tests/data/test-diff-filter/test16-report-2.txt: Likewise. 8008 * tests/data/test-diff-filter/test16-report.txt: Likewise. 8009 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 8010 * tests/data/test-diff-filter/test17-1-report.txt: Likewise. 8011 * tests/data/test-diff-filter/test2-report.txt: Likewise. 8012 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 8013 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Likewise. 8014 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Likewise. 8015 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 8016 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Likewise. 8017 * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: Likewise. 8018 * tests/data/test-diff-filter/test3-report.txt: Likewise. 8019 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 8020 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 8021 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. 8022 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. 8023 * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: Likewise. 8024 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 8025 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. 8026 * tests/data/test-diff-filter/test37-report-0.txt: Likewise. 8027 * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. 8028 * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Likewise. 8029 * tests/data/test-diff-filter/test6-report.txt: Likewise. 8030 * tests/data/test-diff-filter/test9-report.txt: Likewise. 8031 * tests/data/test-diff-pkg/dirpkg-1-report-1.txt: Likewise. 8032 * tests/data/test-diff-pkg/dirpkg-3-report-1.txt: Likewise. 8033 * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. 8034 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Likewise. 8035 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. 8036 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 8037 * tests/data/test-diff-pkg/symlink-dir-test1-report0.txt: Likewise. 8038 * tests/data/test-diff-pkg/tarpkg-0-report-0.txt: Likewise. 8039 * tests/data/test-diff-pkg/tarpkg-1-report-0.txt: Likewise. 8040 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. 8041 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. 8042 * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Likewise. 8043 * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Likewise. 8044 * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Likewise. 8045 * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Likewise. 8046 * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. 8047 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. 8048 * tests/data/test-diff-suppr/test11-add-data-member-report-0.txt: Likewise. 8049 * tests/data/test-diff-suppr/test12-add-data-member-report-0.txt: Likewise. 8050 * tests/data/test-diff-suppr/test12-add-data-member-report-2.txt: Likewise. 8051 * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt: Likewise. 8052 * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt: Likewise. 8053 * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: Likewise. 8054 * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt: Likewise. 8055 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt: Likewise. 8056 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise. 8057 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt: Likewise. 8058 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt: Likewise. 8059 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise. 8060 * tests/data/test-diff-suppr/test17-suppr-added-var-report-0.txt: Likewise. 8061 * tests/data/test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise. 8062 * tests/data/test-diff-suppr/test17-suppr-added-var-report-5.txt: Likewise. 8063 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-0.txt: Likewise. 8064 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-2.txt: Likewise. 8065 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-5.txt: Likewise. 8066 * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. 8067 * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. 8068 * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. 8069 * tests/data/test-diff-suppr/test24-soname-report-1.txt: Likewise. 8070 * tests/data/test-diff-suppr/test24-soname-report-10.txt: Likewise. 8071 * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. 8072 * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. 8073 * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. 8074 * tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise. 8075 * tests/data/test-diff-suppr/test25-typedef-report-0.txt: Likewise. 8076 * tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt: Likewise. 8077 * tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt: Likewise. 8078 * tests/data/test-diff-suppr/test29-soname-report-3.txt: Likewise. 8079 * tests/data/test-diff-suppr/test29-soname-report-6.txt: Likewise. 8080 * tests/data/test-diff-suppr/test29-soname-report-8.txt: Likewise. 8081 * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. 8082 * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. 8083 * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. 8084 * tests/data/test-diff-suppr/test30-report-0.txt: Likewise. 8085 * tests/data/test-diff-suppr/test31-report-1.txt: Likewise. 8086 * tests/data/test-diff-suppr/test32-report-0.txt: Likewise. 8087 * tests/data/test-diff-suppr/test32-report-1.txt: Likewise. 8088 * tests/data/test-diff-suppr/test33-report-0.txt: Likewise. 8089 * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. 8090 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 8091 * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Likewise. 8092 * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Likewise. 8093 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Likewise. 8094 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. 8095 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. 8096 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. 8097 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. 8098 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. 8099 * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. 8100 * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Likewise. 8101 * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Likewise. 8102 * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Likewise. 8103 * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Likewise. 8104 * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. 8105 * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. 8106 * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. 8107 * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. 8108 * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. 8109 * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. 8110 * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Likewise. 8111 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Likewise. 8112 * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: Likewise. 8113 * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: Likewise. 8114 * tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt: Likewise. 8115 81162018-04-18 Dodji Seketeli <dodji@redhat.com> 8117 8118 Use absolute builddir paths in automake test files 8119 * tests/runtestdefaultsupprs.py.in: Use abs_top_builddir rather 8120 than top_builddir. 8121 81222018-04-10 Jonathan Wakely <jwakely@redhat.com> 8123 8124 Use std::string::substr instead of appending single chars 8125 * src/abg-ini.cc (trim_white_space): Use std::string::substr 8126 instead of appending single chars. 8127 81282018-04-10 Jonathan Wakely <jwakely@redhat.com> 8129 8130 Rename misleading remove_trailing_white_spaces functions 8131 * include/abg-tools-utils.h (trim_white_space): Renamed 8132 remove_trailing_white_spaces into this. 8133 * src/abg-ini.cc (trim_white_space): Likewise. 8134 * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Adjust. 8135 81362018-04-10 Jonathan Wakely <jwakely@redhat.com> 8137 8138 Remove unused local set<string> variables 8139 * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Remove unsed 8140 set<string> variable. 8141 * tools/abipkgdiff.cc (maybe_create_public_dso_sonames_set): 8142 Likewise. 8143 81442018-04-10 Jonathan Wakely <jwakely@redhat.com> 8145 8146 Remove assertion with side-effects 8147 * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Fix 8148 std::string::sbustr and remove assert with side effect. 8149 81502018-04-13 Dodji Seketeli <dodji@redhat.com> 8151 8152 Misc style changes 8153 * src/abg-comparison.cc (category_propagation_visitor): Adjust comment. 8154 * src/abg-default-reporter.cc 8155 (default_reporter::report_local_function_type_changes): Remove 8156 useless new line. 8157 81582018-04-13 Dodji Seketeli <dodji@redhat.com> 8159 8160 Update tests for the "better leaf mode redundancy management" patchset 8161 * tests/data/test-abidiff-exit/test1-voffset-change-report1.txt: Adjust. 8162 * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. 8163 * tests/data/test-abidiff/test-enum0-report.txt: Likewise. 8164 * tests/data/test-abidiff/test-enum1-report.txt: Likewise. 8165 * tests/data/test-diff-filter/test1-report.txt: Likewise. 8166 * tests/data/test-diff-filter/test14-0-report.txt: Likewise. 8167 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 8168 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 8169 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 8170 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 8171 * tests/data/test-diff-filter/test3-report.txt: Likewise. 8172 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 8173 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 8174 * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: Likewise. 8175 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 8176 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. 8177 * tests/data/test-diff-filter/test4-report.txt: Likewise. 8178 * tests/data/test-diff-filter/test41-report-0.txt: Likewise. 8179 * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Likewise. 8180 * tests/data/test-diff-pkg/dirpkg-3-report-1.txt: Likewise. 8181 * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. 8182 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Likewise. 8183 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. 8184 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Likewise. 8185 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. 8186 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 8187 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. 8188 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. 8189 * tests/data/test-diff-suppr/test1-typedef-suppr-report-1.txt: Likewise. 8190 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. 8191 * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt: Likewise. 8192 * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: Likewise. 8193 * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt: Likewise. 8194 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise. 8195 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-2.txt: Likewise. 8196 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-3.txt: Likewise. 8197 * tests/data/test-diff-suppr/test15-suppr-added-fn-report-4.txt: Likewise. 8198 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-1.txt: Likewise. 8199 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise. 8200 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-3.txt: Likewise. 8201 * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-4.txt: Likewise. 8202 * tests/data/test-diff-suppr/test17-suppr-added-var-report-1.txt: Likewise. 8203 * tests/data/test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise. 8204 * tests/data/test-diff-suppr/test17-suppr-added-var-report-3.txt: Likewise. 8205 * tests/data/test-diff-suppr/test17-suppr-added-var-report-4.txt: Likewise. 8206 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-1.txt: Likewise. 8207 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-3.txt: Likewise. 8208 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-4.txt: Likewise. 8209 * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. 8210 * tests/data/test-diff-suppr/test2-struct-suppr-report-1.txt: Likewise. 8211 * tests/data/test-diff-suppr/test25-typedef-report-1.txt: Likewise. 8212 * tests/data/test-diff-suppr/test27-add-aliased-function-report-1.txt: Likewise. 8213 * tests/data/test-diff-suppr/test27-add-aliased-function-report-2.txt: Likewise. 8214 * tests/data/test-diff-suppr/test27-add-aliased-function-report-5.txt: Likewise. 8215 * tests/data/test-diff-suppr/test28-add-aliased-function-report-3.txt: Likewise. 8216 * tests/data/test-diff-suppr/test28-add-aliased-function-report-6.txt: Likewise. 8217 * tests/data/test-diff-suppr/test30-report-1.txt: Likewise. 8218 * tests/data/test-diff-suppr/test34-report-0.txt: Likewise. 8219 * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. 8220 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 8221 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. 8222 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. 8223 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. 8224 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. 8225 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. 8226 * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. 8227 * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. 8228 * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. 8229 * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. 8230 * tests/data/test-diff-suppr/test7-var-suppr-report-5.txt: Likewise. 8231 * tests/data/test-diff-suppr/test7-var-suppr-report-6.txt: Likewise. 8232 * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. 8233 * tests/data/test-diff-suppr/test7-var-suppr-report-9.txt: Likewise. 8234 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Likewise. 8235 82362018-04-13 Dodji Seketeli <dodji@redhat.com> 8237 8238 [abipkgdiff]: in leaf mode we always show redundant changes 8239 * tools/abipkgdiff.cc (set_diff_context_from_opts): 8240 diff_context::show_leaf_changes_only automatically makes us show 8241 redundant changes. So do not try to show redundant changes in 8242 that case. 8243 82442018-04-13 Dodji Seketeli <dodji@redhat.com> 8245 8246 When we say an a change was reported earlier give its source location 8247 * src/abg-reporter-priv.h 8248 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER2) 8249 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER3): Report the 8250 location of the artifact. 8251 82522018-04-13 Dodji Seketeli <dodji@redhat.com> 8253 8254 Avoid reporting an enum change if it has already been reported 8255 * src/abg-default-reporter.cc (default_reporter::report): In the 8256 enum_diff overload, do not report a node if it's always been 8257 reported; rather, say that it has been reported earlier. 8258 82592018-04-13 Dodji Seketeli <dodji@redhat.com> 8260 8261 Always show redundant changes in leaf mode 8262 * src/abg-comparison.cc (diff_context::show_leaf_changes_only): 8263 Show redundant changes when in leaf mode. 8264 82652018-04-12 Dodji Seketeli <dodji@redhat.com> 8266 8267 Fix leaf report of class data member changes 8268 * src/abg-leaf-reporter.cc (leaf_reporter::report): In the 8269 class_or_uion_diff overload, do not emit the data member changes 8270 header twice. 8271 * src/abg-reporter-priv.cc (represent): In the var_diff_sptr 8272 overload, show data member changes when its textual representation 8273 changed. 8274 82752018-04-12 Dodji Seketeli <dodji@redhat.com> 8276 8277 Only show leaf type changes in the leaf type changes section 8278 * src/abg-leaf-reporter.cc (report_type_changes_from_diff_maps): 8279 Split this out from leaf_reporter::report_changes_from_diff_maps 8280 and make it report only about leaf *type* changes. 8281 (leaf_reporter::report_changes_from_diff_maps): Use the new 8282 report_type_changes_from_diff_maps function. 8283 (leaf_reporter::report): In the overload for corpus_diff, use the 8284 new report_type_changes_from_diff_maps function, instead of the 8285 report_changes_from_diff_maps function. 8286 82872018-04-12 Dodji Seketeli <dodji@redhat.com> 8288 8289 Don't filter out typedef changes with redundant underlying type changes 8290 * src/abg-default-reporter.cc (default_reporter::report): In the 8291 overload for typedef, report underlying type changes een when they 8292 are redundant, if the whole typedef change needs to be repoted. 8293 82942018-04-12 Dodji Seketeli <dodji@redhat.com> 8295 8296 Improve function changes reporting in leaf and default mode 8297 * src/abg-default-reporter.cc (default_reporter::report): In the 8298 overload for fn_parm_diff, consider that parameter type changes are 8299 never redundant. 8300 * src/abg-ir.cc (equals): In the overload for function_type, 8301 consider that if the textual representation of the function return 8302 type or a function parameter changed, then that's a local change 8303 for the current instance of function_type. Likewise, in the 8304 overload for function_decl, consider that a change in the textual 8305 representation of the function_decl is a local change. Likewise, 8306 in the overload of function_decl::parameter, consider that a 8307 change in the textual representation of the parameter type is a 8308 local change. 8309 * src/abg-leaf-reporter.cc (leaf_reporter::report): Report leaf 8310 changes to functions. 8311 83122018-04-12 Dodji Seketeli <dodji@redhat.com> 8313 8314 Better handle category propagation of pointer changes 8315 * src/abg-comparison.cc 8316 (leaf_diff_node_marker_visitor::visit_begin): Do not consider 8317 local pointer changes as being leaf changes. 8318 (suppression_categorization_visitor::visit_end): 8319 Allow propagation of the SUPPRESSED_CATEGORY category to pointer 8320 diff nodes. 8321 (redundancy_marking_visitor::visit_end): Allow propagation of the 8322 REDUNDANT_CATEGORY category to pointer diff nodes. 8323 * src/abg-ir.cc (equals): In the pointer_type_def overload, 8324 consider changes where the textual representation of the 8325 pointed-to changed as being local to the pointer type. 8326 * src/abg-leaf-reporter.cc (leaf_reporter::report): In the 8327 pointer_diff overload, report the change in the textual 8328 representation of the pointer. 8329 83302018-04-11 Dodji Seketeli <dodji@redhat.com> 8331 8332 Fix meaning of "harmless name change" to avoid overfiltering 8333 * include/abg-ir.h (enum_has_non_name_change): Declare new 8334 * function. Make it a friend of class enum_type_decl. 8335 * src/abg-comp-filter.cc (has_harmless_name_change): A typedef 8336 name change cannot be harmless if the textual representation of 8337 the underlying type changes too. Also, use the new 8338 enum_has_non_name_change to tighten the harmless name change 8339 definition for an enum. 8340 * src/abg-default-reporter.cc 8341 (default_reporter::report_local_typedef_changes): If the name of 8342 the typedef changed, report it no matter what. 8343 * src/abg-ir.cc (enum_has_non_name_change): Define new function. 8344 83452018-04-11 Dodji Seketeli <dodji@redhat.com> 8346 8347 Do not mark "distinct" diff nodes as being redundant 8348 * include/abg-comp-filter.h (is_mostly_distinct_diff): Declare new 8349 function. 8350 * include/abg-fwd.h (peel_typedef_pointer_or_reference_type): Take 8351 a boolean to decide to peel qualified types or not. 8352 * src/abg-comp-filter.cc (is_mostly_distinct_diff): Define this function. 8353 * src/abg-comparison.cc (redundancy_marking_visitor::visit_begin): 8354 Do not mark distinct_diff nodes as being redundant. 8355 * src/abg-ir.cc (peel_typedef_pointer_or_reference_type): 8356 Implement taking a boolean to decide to peel qualified types or 8357 not. 8358 83592018-04-11 Dodji Seketeli <dodji@redhat.com> 8360 8361 Overhaul of the report diff stats summary 8362 * include/abg-comparison.h 8363 (corpus_diff::diff_stats::{num_leaf_type_changes, 8364 num_leaf_type_changes_filtered_out, net_num_leaf_type_changes, 8365 num_leaf_func_changes, num_leaf_func_changes_filtered_out, 8366 net_num_leaf_func_changes, num_leaf_var_changes, 8367 num_leaf_var_changes_filtered_out, net_num_leaf_var_changes}): 8368 Declare new member functions. 8369 * src/abg-comparison-priv.h 8370 (corpus_diff::priv::count_leaf_type_changes): Declare new member 8371 function. 8372 * src/abg-comparison.cc 8373 (corpus_diff::diff_stats::net_num_leaf_changes): Fix comment. 8374 (corpus_diff::diff_stats::{num_leaf_type_changes, 8375 num_leaf_type_changes_filtered_out, net_num_leaf_type_changes, 8376 num_leaf_func_changes, num_leaf_func_changes_filtered_out, 8377 net_num_leaf_func_changes, num_leaf_var_changes, 8378 num_leaf_var_changes_filtered_out, net_num_leaf_var_changes}): 8379 Define these member functions. 8380 (do_count_diff_map_changes): Move this macro out of ... 8381 (corpus_diff::priv::count_leaf_changes): ... this. Also, use 8382 the new function corpus_diff::priv::count_leaf_type_changes. 8383 (corpus_diff::priv::count_leaf_type_changes): Splitted this out of 8384 the previous corpus_diff::priv::count_leaf_changes function. 8385 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Account 8386 for (filtered) types, functions and variables, in a leaf change 8387 manner. 8388 (corpus_diff::priv::emit_diff_stats): Emit a better stat summary 8389 that takes into account leaf-changed types, functions and 8390 variables. 8391 83922018-04-10 Dodji Seketeli <dodji@redhat.com> 8393 8394 Do not show decl-only-to-def changes in the leaf reporter 8395 * include/abg-comp-filter.h (has_class_decl_only_def_change): 8396 Declare this function. 8397 * src/abg-comp-filter.cc (has_class_decl_only_def_change): Make 8398 this function be non-static. 8399 * src/abg-comparison.cc 8400 (leaf_diff_node_marker_visitor::visit_begin): Use it to avoid 8401 marking class-decl-only-def changes as being leaf changes. 8402 * libtest43-decl-only-def-change-leaf-report-v0.so: New test input file. 8403 * libtest43-decl-only-def-change-leaf-report-v1.so: Likewise. 8404 * test43-decl-only-def-change-leaf-report-0.txt: Likewise. 8405 * test43-decl-only-def-change-leaf-report-v0.cc: Likewise. 8406 * test43-decl-only-def-change-leaf-report-v1.cc: Likewise. 8407 * tests/test-diff-filter.cc (in_out_specs): Run the test over the 8408 new test input. 8409 * tests/data/Makefile.am: Add the new test materials to source 8410 distribution. 8411 84122018-03-30 Dodji Seketeli <dodji@redhat.com> 8413 8414 Don't possibly forget type definition when reading a CorpusGroup 8415 * src/abg-dwarf-reader.cc (add_or_update_class_type): Look for 8416 declaration-only-ness to determine if we've already seen the same 8417 type from the main corpus of the group. 8418 84192018-03-30 Dodji Seketeli <dodji@redhat.com> 8420 8421 Don't crash when invoking kmidiff with no debug info root dir 8422 * tools/kmidiff.cc (main): Do not crash on empty debug info root 8423 dir. 8424 84252018-03-30 Dodji Seketeli <dodji@redhat.com> 8426 8427 Do not enable fedabipkgdiff tests if fedabipkgdiff itself is disabled 8428 * tests/Makefile.am: Run runtestfedabipkgdiff{py3?}.py only if 8429 fedabipkgdiff itself is enabled. 8430 84312018-03-25 Chenxiong Qi <cqi@redhat.com> 8432 8433 Bug 22722 - Make fedabipkgdiff and its tests support both python 3 and 2 8434 * configure.ac: Add new option --enable-python3. Add new 8435 test runner file tests/runtestdefaultsupprs-py3 and 8436 tests/runtestfedabipkgdiffpy3.sh. Add required six Python module. 8437 * tests/Makefile.am: Add new test files 8438 tests/runtestdefaultsupprspy3.sh and 8439 tests/runtestfedabipkgdiffpy3.sh accordingly. 8440 * tests/mockfedabipkgdiff.in: Convert print statement to 8441 six.print_. Replace call to function filter with list 8442 comprehension. Replace basestring with six.string_types. 8443 * tests/runtestdefaultsupprspy3.sh.in: New shell script to run 8444 test runtestdefaultsupprs with Python 3. 8445 * tests/runtestdefaultsupprs.py.in: Repalce a few tabs with 8446 proper number of spaces which is detected by Python 3 8447 interpreter. 8448 * tests/runtestfedabipkgdiffpy3.sh.in: New shell script to run 8449 test runtestfedabipkgdiff with Python 3. 8450 * tests/runtestfedabipkgdiff.py.in: Use python from env in 8451 shebang instead of a fixed path to a Python interpreter. 8452 * tools/fedabipkgdiff: Globally replace print statement with a 8453 function call to print which is available by importing 8454 print_function from __future__ module. Use six.print_ to output 8455 string to stderr instead. Convert function call to map to 8456 for-loop. (cmp_nvr): Change argument to handle a Koji build 8457 mapping instead of only the nvr. (Brew.listBuilds): use the new 8458 cmp_nvr to sort builds. 8459 84602018-03-29 Dodji Seketeli <dodji@redhat.com> 8461 8462 Detect the presence of 'rpm' as it's now needed by abipkgdiff 8463 * configure.ac: Detect that the 'rpm' is present. Otherwise, 8464 disable rpm support. 8465 84662018-03-28 Dodji Seketeli <dodji@redhat.com> 8467 8468 Make abipkgdiff avoid comparing private DSOs from RPMs 8469 * doc/manuals/abipkgdiff.rst: Add documentation for the new 8470 --private-dso option. 8471 * include/abg-tools-utils.h (execute_command_and_get_output) 8472 (execute_command_and_get_output, remove_trailing_white_spaces): 8473 Declare new functions. 8474 * src/abg-tools-utils.cc (execute_command_and_get_output) 8475 (get_dsos_provided_by_rpm, remove_trailing_white_spaces): Define 8476 new functions. 8477 * tests/test-diff-pkg.cc (in_out_specs): Add the new --private-dso 8478 option where it makes sense. 8479 * tools/abipkgdiff.cc (options::compare_private_dsos): Add new 8480 data member. 8481 (options::options): Initialize it. 8482 (package::public_dso_sonames_): Add new data member. 8483 (package::public_dso_sonames): Add new accessors pair. 8484 (display_usage): Add a help string for the new --private-dso 8485 option. 8486 (maybe_create_public_dso_sonames_set) 8487 (must_compare_public_dso_only): Define new static functions. 8488 (create_maps_of_package_content): Call the new 8489 maybe_create_public_dso_sonames_set. Skip packages which SONAME 8490 is not in the set of public SONAMES. 8491 (parse_command_line): Parse the new --private-dso option. 8492 84932018-03-16 Dodji Seketeli <dodji@redhat.com> 8494 8495 Skip changes to function *types* in the leaf reporter 8496 * src/abg-leaf-reporter.cc 8497 (leaf_reporter::report_changes_from_diff_maps): Don't report 8498 function type changes. 8499 85002018-03-16 Dodji Seketeli <dodji@redhat.com> 8501 8502 Report change locations in leaf reports 8503 * src/abg-leaf-reporter.cc (report_diffs): Report the source 8504 location of the diff. 8505 * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: 8506 Update test reference output. 8507 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 8508 Likewise. 8509 * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. 8510 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 8511 85122018-03-06 Dodji Seketeli <dodji@redhat.com> 8513 8514 Make the "upload-release" target be usable in parallel 8515 * Makefile.am: Re-arrange the upload-release target to make it 8516 usable with 'make upload-release -jN'. 8517 85182018-03-06 Dodji Seketeli <dodji@redhat.com> 8519 8520 Bump version number to 1.3 8521 * configure.ac: Now that 1.2 is out of the door, bump version 8522 number to 1.3 8523 85242018-03-06 Dodji Seketeli <dodji@redhat.com> 8525 8526 Update website for 1.2 8527 * doc/website/mainpage.txt: Update link to download the tarball, 8528 for 1.2. 8529 85302018-03-06 Dodji Seketeli <dodji@redhat.com> 8531 8532 Update ChangeLog for 1.2 8533 * ChangeLog: Updated automatically by running make update-changelog. 8534 85352018-03-06 Dodji Seketeli <dodji@redhat.com> 8536 8537 Update NEWS file for 1.2 8538 * NEWS: Update for 1.2 8539 85402018-01-31 Dodji Seketeli <dodji@redhat.com> 8541 8542 Fix typo in abipkgdiff documenation 8543 * doc/manuals/abipkgdiff.rst: Fix a typo 8544 85452018-01-31 Dodji Seketeli <dodji@redhat.com> 8546 8547 Update abipkgdiff documentation wrt suppression specifications 8548 * doc/manuals/abipkgdiff.rst: Mention the .abignore file that is 8549 read by the tool and considered as a suppression specification 8550 file. 8551 85522018-03-06 Dodji Seketeli <dodji@redhat.com> 8553 8554 Fix indentation in the DWARF reader 8555 * src/abg-dwarf-reader.cc (build_subrange_type): Fix indentation. 8556 85572018-03-02 Dodji Seketeli <dodji@redhat.com> 8558 8559 Fix the output indentation of abidiff --help 8560 * tools/abidiff.cc (display_usage): Fix indentation of the help 8561 string for the --drop-private-types option. 8562 85632018-03-02 Dodji Seketeli <dodji@redhat.com> 8564 8565 Bug 22913 - Correctly de-duplicate pointers to anonymous structs inside a given 8566 * src/abg-dwarf-reader.cc 8567 (pointer_or_qual_die_of_anonymous_class_type) 8568 (die_is_qualified_type): Define new functions. 8569 (compare_dies): If pointers, reference or qualified type have an 8570 anonymous struct as their underlying type, then we need to 8571 structurally compare the underlying anonymous struct. 8572 * tests/data/test-diff-dwarf/libtest43-PR22913-v{0,1}.so: New 8573 binary test input files. 8574 * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: New 8575 reference output of the comparison of the two binaries above. 8576 * tests/data/test-diff-dwarf/test43-PR22913-v{0,1}.c: Source code 8577 of the binaries above. 8578 * tests/test-diff-dwarf.cc (in_out_specs): Make the test harness 8579 compare the two binaries above. 8580 * tests/data/Makefile.am: Add the new test files above to the 8581 source distribution. 8582 85832018-02-27 Dodji Seketeli <dodji@redhat.com> 8584 8585 Initial support for Ada ranges 8586 * include/abg-ir.h (type_maps::subrange_types): Declare new 8587 accessors. 8588 (is_ada_language, is_subrange_type): Declare new functions. 8589 (class array_type_def::subrange_type): Make this extend type_base 8590 and decl_base. 8591 (array_type_def::subrange_type::{get_language, operator==, 8592 get_pretty_representation, traverse}): Declare new member 8593 functions. 8594 (ir_node_visitor::visit_begin): Add new overloads for 8595 array_type::def::subrange_type. 8596 * src/abg-dwarf-reader.cc (build_subrange_type): Define new static 8597 function. 8598 (build_subranges_from_array_type_die): Cleanup the parameters of 8599 this function. 8600 (build_array_type): Adjust. 8601 (build_ir_node_from_die): Support free-form DW_TAG_subrange_type. 8602 (read_context::odr_is_relevant): Handle Ada. 8603 (die_qualified_type_name): Support DW_TAG_subrange_type. 8604 (die_pretty_print_type): Likewise. Make the handling of 8605 DW_TAG_subrange_type use die_qualified_type_name. Adjust the use 8606 of build_subranges_from_array_type_die. 8607 (get_scope_die): a DW_TAG_array_type cannot be a scope. Rather, 8608 it's its scope that can be a scope. 8609 * src/abg-ir.cc (type_maps::priv::subrange_types_): New data 8610 member. 8611 (type_maps::empty): Adjust. 8612 (type_maps::subrange_types): Define new accessors. 8613 (is_ada_language, is_subrange_type): Define new functions. 8614 (odr_is_relevant): Support Ada. 8615 (maybe_update_types_lookup_map): Add an overload for 8616 array_type_def::subrange_type. In the decl_base_sptr overload, 8617 add support for the array_type_def::subrange_type type. 8618 (struct array_type_def::subrange_type::priv::location_): Remove 8619 this as it's now carried by the parent decl_base type. 8620 (array_type_def::subrange_type::subrange_type): Adjust. Take an 8621 environement pointer, a name, an underlying type and a language. 8622 (array_type_def::subrange_type::{g,s}et_underlying_type): Define 8623 new accessors. 8624 (array_type_def::subrange_type::{get_language, 8625 get_pretty_representation, traverse}): Define new member 8626 functions. 8627 (array_type_def::subrange_type::as_string): Add a representation 8628 for Ada. 8629 (equals): Define new overload for array_type_def::subrange_type. 8630 (array_type_def::subrange_type::operator==): Define three new 8631 overloads for decl_base, type_base and subrange_type. 8632 (array_type_def::subrange_type::operator!=): Define new operator. 8633 (get_type_representation): In the overload for array_type_def, 8634 support Ada. 8635 (array_type_def::get_language): Define new member function. 8636 (ir_node_visitor::visit_{begin,end}): Define new overloads for 8637 array_type_def::subrange_type. 8638 * src/abg-reader.cc (build_subrange_type): Adjust documentation. 8639 Support the new 'id', 'name', and 'type-id' properties. 8640 * src/abg-writer.cc (write_array_subrange_type): Define new static 8641 function. 8642 (write_array_type_def): Use the new write_array_subrange_type 8643 function. 8644 * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Adjust. 8645 * tests/data/test-annotate/libtest23.so.abi: Likewise. 8646 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 8647 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 8648 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 8649 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 8650 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 8651 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 8652 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 8653 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 8654 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 8655 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 8656 * tests/data/test-annotate/test7.so.abi: Likewise. 8657 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. 8658 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 8659 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 8660 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. 8661 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 8662 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 8663 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 8664 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 8665 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 8666 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 8667 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 8668 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 8669 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 8670 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 8671 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 8672 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 8673 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 8674 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 8675 * tests/data/test-read-dwarf/test7.so.abi: Likewise. 8676 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 8677 * tests/data/test-read-write/test25.xml: Likewise. 8678 86792018-02-06 Dodji Seketeli <dodji@redhat.com> 8680 8681 Add newline at end of version string display 8682 * tools/abidiff.cc (main): Add a newline at the end of the version 8683 string line. 8684 * tools/abidw.cc (main): Likewise. 8685 * tools/abipkgdiff.cc (main): Likewise. 8686 * tools/kmidiff.cc (main): Likewise. 8687 86882018-01-31 Dodji Seketeli <dodji@redhat.com> 8689 8690 Bump version number to 1.2 8691 * configure.ac: Bump version number to 1.2 8692 86932018-01-25 Dodji Seketeli <dodji@redhat.com> 8694 8695 Update website for 1.1 8696 * doc/website/mainpage.txt: Update for 1.1. 8697 86982018-01-25 Dodji Seketeli <dodji@redhat.com> 8699 8700 Update ChangeLog for 1.1 8701 * ChangeLog: Automatically update using 'make update-changelog'. 8702 87032018-01-25 Dodji Seketeli <dodji@redhat.com> 8704 8705 Update NEWS file for 1.1 8706 * NEWS: Update for 1.1 8707 87082018-01-29 Dodji Seketeli <dodji@redhat.com> 8709 8710 Correctly link with pthread 8711 * src/Makefile.am: use -lpthread, not -pthread. 8712 87132018-01-18 Dodji Seketeli <dodji@redhat.com> 8714 8715 Skip class types with changed names in leaf reports 8716 * include/abg-comp-filter.h (has_class_or_union_type_name_change) 8717 (has_basic_or_class_type_name_change): Declare new functions. 8718 * include/abg-comparison.h (is_diff_of_class_or_union_type): 8719 Likewise. 8720 * src/abg-comp-filter.cc (has_class_or_union_type_name_change) 8721 (has_basic_or_class_type_name_change): 8722 * src/abg-comparison.cc 8723 (leaf_diff_node_marker_visitor::visit_begin): Use the new 8724 filtering::has_basic_or_class_type_name_change to test if a basic 8725 or class/union diff type carries a name change. Update comment. 8726 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 8727 Adjust. 8728 87292018-01-16 Dodji Seketeli <dodji@redhat.com> 8730 8731 Only consider local changes when filtering subtype changes 8732 * src/abg-comparison-priv.h 8733 (class_or_union_diff::priv::{count_filtered_subtype_changed_dm, 8734 count_filtered_changed_dm}): Take an additional flag. 8735 * src/abg-comparison.cc 8736 (class_or_union_diff::priv::{count_filtered_subtype_changed_dm, 8737 count_filtered_changed_dm}): Likewise. When asked, only consider 8738 local changes. 8739 * src/abg-leaf-reporter.cc (leaf_reporter::report): Consider 8740 reporting only the *net local* data member changes. 8741 87422018-01-16 Dodji Seketeli <dodji@redhat.com> 8743 8744 Make kmidiff show the wrong option when it complains about it 8745 * tools/kmidiff.cc (parse_command_line): Don't forget to record 8746 the wrong option in options::wrong_option. 8747 87482018-01-12 Dodji Seketeli <dodji@redhat.com> 8749 8750 Fix typo in abipkgdiff.cc 8751 * tools/abipkgdiff.cc (compare_task::perform): Fix a typo in a 8752 comment. 8753 87542018-01-12 Dodji Seketeli <dodji@redhat.com> 8755 8756 Suppress duplicates when listing package content 8757 * tools/abipkgdiff.cc (maybe_update_package_content): Rename 8758 maybe_update_vector_of_package_content into this. Take a set of 8759 strings, rather than a vector of strings. 8760 (get_interesting_files_under_dir): Adjust. 8761 87622018-01-12 Dodji Seketeli <dodji@redhat.com> 8763 8764 Fix symlinks paths handling in abipkgdiff 8765 * include/abg-tools-utils.h (real_path): Declare new function. 8766 * src/abg-tools-utils.cc (real_path): Define it. 8767 * tools/abipkgdiff.cc (package::convert_path_to_relative): Use the 8768 new real_path function to consider real path (where symlinks are 8769 resolved) of the extraction directory of the package. 8770 (get_interesting_files_under_dir): Similarly, use the new 8771 real_path function to consider the real path of the directory we 8772 are exploring. 8773 87742018-01-12 Dodji Seketeli <dodji@redhat.com> 8775 8776 Fix logic in common_prefix 8777 * src/abg-tools-utils.cc (common_prefix): Fix logic error. 8778 87792018-01-12 Dodji Seketeli <dodji@redhat.com> 8780 8781 abipkgdiff --verbose shouldn't trigger --fail-no-dbg 8782 * tools/abipkgdiff.cc (compare): In the overload for elf_files, 8783 separate the effect of --verbose from the one of --fail-no-dbg. 8784 87852018-01-10 Dodji Seketeli <dodji@redhat.com> 8786 8787 Bug 22692 - Consider Java as a language that supports the ODR 8788 * include/abg-ir.h (is_java_language): Declare new function. 8789 * src/abg-dwarf-reader.cc (odr_is_relevant): Adjust to consider 8790 that Java also respects the ODR. 8791 * src/abg-ir.cc (is_java_language): Define new function. 8792 (odr_is_relevant): Adjust to consider that Java also respects the 8793 ODR. 8794 87952018-01-09 Dodji Seketeli <dodji@redhat.com> 8796 8797 Fix version revision number printing in tools --help option 8798 * configure.ac: Properly set the VERSION_REVISION macro. 8799 * include/abg-tools-utils.h (get_library_version_string): Declare 8800 new function. 8801 * src/abg-tools-utils.cc (get_library_version_string): Define the 8802 new function. 8803 (gen_suppr_spec_from_kernel_abi_whitelist): Dis-ambiguate the use 8804 of the 'config' type. 8805 * tools/abicompat.cc (main): Use the new 8806 abigail::tools_utils::get_library_version_string function. 8807 * tools/abidiff.cc (main): Likewise. 8808 * tools/abidw.cc (main): Likewise. 8809 * tools/abilint.cc (main): Likewise. 8810 * tools/abipkgdiff.cc (main): Likewise. 8811 * tools/abisym.cc (main): Likewise. 8812 * tools/kmidiff.cc (main): Likewise. 8813 88142018-01-09 Dodji Seketeli <dodji@redhat.com> 8815 8816 Bug 22684 - Add --d{1,2} options to kmidiff 8817 * doc/manuals/kmidiff.rst: Add documentation for the new options. 8818 * tools/kmidiff.cc (options::{di_root_path{1,2}): New data 8819 members. 8820 (display_usage): Add help strings for the new options. 8821 (parse_command_line): Parse the new options. 8822 (main): Pass the debug info root directory to 8823 build_corpus_group_from_kernel_dist_under. 8824 88252018-01-08 Dodji Seketeli <dodji@redhat.com> 8826 8827 Update copyright notice for all source files 8828 * update-copyright.sh: New sed-based script to update the year 8829 in the copyright notice. 8830 * include/abg-comp-filter.h: Updated the year in the copyright 8831 notice. 8832 * include/abg-comparison.h: Likewise. 8833 * include/abg-config.h: Likewise. 8834 * include/abg-corpus.h: Likewise. 8835 * include/abg-diff-utils.h: Likewise. 8836 * include/abg-dwarf-reader.h: Likewise. 8837 * include/abg-fwd.h: Likewise. 8838 * include/abg-hash.h: Likewise. 8839 * include/abg-ini.h: Likewise. 8840 * include/abg-interned-str.h: Likewise. 8841 * include/abg-ir.h: Likewise. 8842 * include/abg-libxml-utils.h: Likewise. 8843 * include/abg-libzip-utils.h: Likewise. 8844 * include/abg-reader.h: Likewise. 8845 * include/abg-reporter.h: Likewise. 8846 * include/abg-sptr-utils.h: Likewise. 8847 * include/abg-suppression.h: Likewise. 8848 * include/abg-tools-utils.h: Likewise. 8849 * include/abg-traverse.h: Likewise. 8850 * include/abg-viz-common.h: Likewise. 8851 * include/abg-viz-dot.h: Likewise. 8852 * include/abg-viz-svg.h: Likewise. 8853 * include/abg-workers.h: Likewise. 8854 * include/abg-writer.h: Likewise. 8855 * src/abg-comp-filter.cc: Likewise. 8856 * src/abg-comparison-priv.h: Likewise. 8857 * src/abg-comparison.cc: Likewise. 8858 * src/abg-config.cc: Likewise. 8859 * src/abg-corpus-priv.h: Likewise. 8860 * src/abg-corpus.cc: Likewise. 8861 * src/abg-default-reporter.cc: Likewise. 8862 * src/abg-diff-utils.cc: Likewise. 8863 * src/abg-dwarf-reader.cc: Likewise. 8864 * src/abg-hash.cc: Likewise. 8865 * src/abg-ini.cc: Likewise. 8866 * src/abg-internal.h: Likewise. 8867 * src/abg-ir-priv.h: Likewise. 8868 * src/abg-ir.cc: Likewise. 8869 * src/abg-leaf-reporter.cc: Likewise. 8870 * src/abg-libxml-utils.cc: Likewise. 8871 * src/abg-libzip-utils.cc: Likewise. 8872 * src/abg-reader.cc: Likewise. 8873 * src/abg-reporter-priv.cc: Likewise. 8874 * src/abg-reporter-priv.h: Likewise. 8875 * src/abg-sptr-utils.cc: Likewise. 8876 * src/abg-suppression-priv.h: Likewise. 8877 * src/abg-suppression.cc: Likewise. 8878 * src/abg-tools-utils.cc: Likewise. 8879 * src/abg-traverse.cc: Likewise. 8880 * src/abg-viz-common.cc: Likewise. 8881 * src/abg-viz-dot.cc: Likewise. 8882 * src/abg-viz-svg.cc: Likewise. 8883 * src/abg-workers.cc: Likewise. 8884 * src/abg-writer.cc: Likewise. 8885 * tests/print-diff-tree.cc: Likewise. 8886 * tests/test-abicompat.cc: Likewise. 8887 * tests/test-abidiff-exit.cc: Likewise. 8888 * tests/test-abidiff.cc: Likewise. 8889 * tests/test-alt-dwarf-file.cc: Likewise. 8890 * tests/test-core-diff.cc: Likewise. 8891 * tests/test-diff-dwarf-abixml.cc: Likewise. 8892 * tests/test-diff-dwarf.cc: Likewise. 8893 * tests/test-diff-filter.cc: Likewise. 8894 * tests/test-diff-pkg.cc: Likewise. 8895 * tests/test-diff-suppr.cc: Likewise. 8896 * tests/test-diff2.cc: Likewise. 8897 * tests/test-ir-walker.cc: Likewise. 8898 * tests/test-lookup-syms.cc: Likewise. 8899 * tests/test-read-dwarf.cc: Likewise. 8900 * tests/test-read-write.cc: Likewise. 8901 * tests/test-types-stability.cc: Likewise. 8902 * tests/test-utils.cc: Likewise. 8903 * tests/test-utils.h: Likewise. 8904 * tests/test-write-read-archive.cc: Likewise. 8905 * tools/abiar.cc: Likewise. 8906 * tools/abicompat.cc: Likewise. 8907 * tools/abidiff.cc: Likewise. 8908 * tools/abidw.cc: Likewise. 8909 * tools/abilint.cc: Likewise. 8910 * tools/abipkgdiff.cc: Likewise. 8911 * tools/abisym.cc: Likewise. 8912 * tools/binilint.cc: Likewise. 8913 * tools/kmidiff.cc: Likewise. 8914 89152017-12-15 Dodji Seketeli <dodji@redhat.com> 8916 8917 Bug 22437 - Make fedabipkgdiff use all debug info RPMs of a sub-RPM 8918 * tools/fedabipkgdiff (RPM::get_all_debuginfo_rpms): Define new 8919 member function. 8920 (RPM::generate_comparison_halves): The ancillary debuginfo RPM of 8921 a given RPM now has a list type; there can be more than one 8922 debuginfo RPM associated to a given RPM, especially if the RPM is 8923 a devel one. 8924 (format_debug_info_pkg_options): Define new function. 8925 (abipkgdiff): Use the new function above. 8926 89272017-12-15 Dodji Seketeli <dodji@redhat.com> 8928 8929 Improve comments wording in fedabipkgdiff 8930 * tools/fedabipkgdiff (class RPM): Fix wording. 8931 (RPM::__init__): Likewise. 8932 89332017-12-11 Dodji Seketeli <dodji@redhat.com> 8934 8935 Update & cleanup the tools manuals summary 8936 * doc/manuals/abidw.rst: Use the same header structure as or the 8937 other tools manual. 8938 * doc/manuals/kmidiff.rst: Likewise. 8939 * doc/manuals/libabigail-tools.rst: Add the new kmidiff tool to 8940 the summary. 8941 89422017-12-01 Dodji Seketeli <dodji@redhat.com> 8943 8944 Bug 22488 - Make abipkgdiff handle different binaries with same basename 8945 * include/abg-tools-utils.h (string_suffix) 8946 (sorted_strings_common_prefix): Declare new functions. 8947 (dir_name): Take a new keep_separator_at_end parameter at the end. 8948 * src/abg-tools-utils.cc (dir_name): Take a new 8949 keep_separator_at_end parameter at the end. Add a comment for it 8950 and update. 8951 (string_suffix, sorted_strings_common_prefix): Define new 8952 functions. 8953 (common_prefix): Define new static function. 8954 * tools/abipkgdiff.cc (get_interesting_files_under_dir): Forward 8955 declare this pre-existing static function. 8956 (package::{common_paths_prefix_, elf_file_paths_}): New data 8957 members. 8958 (package::{common_paths_prefix, elf_file_paths, 8959 convert_path_to_relative, convert_path_to_unique_suffix, 8960 load_elf_file_paths}): New member functions. 8961 (create_maps_of_package_content): Use the new 8962 package::{load_elf_file_paths, convert_path_to_unique_suffix} 8963 functions. 8964 (compare_prepared_userspace_packages): Show relative paths of 8965 package elements in reported. 8966 * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: 8967 Update test ouptut. 8968 * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt: 8969 Likewise. 8970 89712017-12-01 Dodji Seketeli <dodji@redhat.com> 8972 8973 Fully report diagnostic about alternate debug info file not found 8974 * src/abg-dwarf-reader.cc (status_to_diagnostic_string): Report 8975 textual diagnostic for the STATUS_ALT_DEBUG_INFO_NOT_FOUND case 8976 too. 8977 89782017-11-27 Dodji Seketeli <dodji@redhat.com> 8979 8980 Bug 22436 - make abipkgdiff accept several debuginfo packages 8981 * doc/manuals/abipkgdiff.rst: Document the fact that --d{1,2} can 8982 be provided several times on the command line. 8983 * tools/abipkgdiff.cc (options::debug_packages{1,2}): Rename the 8984 debug_package{1,2} data members into this, and make them be vector 8985 of strings, rather than just strings. 8986 (package::debug_info_packages_): Renamed 8987 package::debug_info_package_ into this and make it be a vector of 8988 package_sptr, rather than just a package_sptr. 8989 (package::debug_info_packages): Renamed the method 8990 package::debug_info_package into this and -- for the getter 8991 overload -- make it return a vector of package_sptr, rather than 8992 just a package_sptr. Likewise for the setter overload. Add a 8993 non-const getter overload. 8994 (package::erase_extraction_directories) 8995 (extract_package_and_map_its_content): Adjust. 8996 (extract_rpm, extract_deb): Do not erase the content of the 8997 extraction directory (if it was pre-existing) prior to extracting 8998 the RPM/deb into it. 8999 (pkg_extraction::pkgs): Renamed pkg_extraction::pkg into this and 9000 make it be a vector of packages, rather than just a package. 9001 (pkg_extraction::pkg_extraction): Adjust to take a package_sptr 9002 rather than just a package. Add an overload to take a vector of 9003 packages_sptr. 9004 (pkg_extraction::perform): Extract the vector of package that the 9005 task is not responsible for, not just one random package. 9006 (extract_package_and_map_its_content): Adjust. 9007 (prepare_packages): Take smart pointers to package rather than 9008 just packages. Adjust accordingly. 9009 (compare_prepared_package): Make the overload that takes two 9010 packages to take two smart pointers of packages. 9011 (compare): Make the overload that takes two package take two 9012 package_sptr. 9013 (parse_command_line): Parse having --d{1,2} several times for a 9014 given input package. 9015 (main): Take several debug info packages for one input file. 9016 * include/abg-tools-utils.h (split_string): Declare ... 9017 * src/abg-tools-utils.cc (split_string): ... new function. 9018 * tests/data/test-diff-pkg/libxfce4ui-debuginfo-4.12.1-8.fc27.ppc64.rpm: 9019 Add a new RPM test input file. 9020 * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-ok-0.txt: 9021 new reference output file. 9022 * tests/data/Makefile.am: Add the new test input files above to source 9023 distribution. 9024 * tests/test-diff-pkg.cc (in_out_spec): Add new test entry to 9025 specify two debug info packages for one input package. 9026 (test_task::perform): Support having several debug info package 9027 paths in the IntOutSpec::{first,second}_in_debug_package_path data 9028 member. The debug info packages paths are separated by either a 9029 white space or commas. 9030 90312017-11-22 Dodji Seketeli <dodji@redhat.com> 9032 9033 Update version number to 1.1 9034 * configure.ac: Update version number to 1.1 9035 90362017-11-22 Dodji Seketeli <dodji@redhat.com> 9037 9038 Bug 22076 - Disable fedabipkgdiff for old koji clients 9039 * configure.ac: Try to invoke the koji.read_config method. If it 9040 fails then disable the fedabipkgdiff feature. 9041 90422017-11-22 Dodji Seketeli <dodji@redhat.com> 9043 9044 Update the release text template after 1.0 9045 * release-text-template.txt: Update some wording. 9046 90472017-11-22 Dodji Seketeli <dodji@redhat.com> 9048 9049 Update website for 1.0 9050 * doc/website/mainpage.txt: Update after 1.0 release. 9051 90522017-11-21 Dodji Seketeli <dodji@redhat.com> 9053 9054 Update NEWS file for 1.0 9055 * NEWS: Update for 1.0 9056 90572017-11-21 Dodji Seketeli <dodji@redhat.com> 9058 9059 Automatically Update ChangeLog for 1.0 9060 * ChangeLog: Automatically update for 1.0 9061 90622017-11-21 Dodji Seketeli <dodji@redhat.com> 9063 9064 Bug 22438 - Emit a clear message when debug info is not found 9065 * include/abg-dwarf-reader.h (enum abigail::dwarf_reader::status): 9066 Add a new STATUS_ALT_DEBUG_INFO_NOT_FOUND enumerator there. 9067 (refers_to_alt_debug_info): Declare new function. 9068 * src/abg-dwarf-reader.cc (read_corpus_from_elf): Detect when the 9069 referred-to alternate debug info file is not found and flip the 9070 STATUS_ALT_DEBUG_INFO_NOT_FOUND bit of the status accordingly. If 9071 the debug info was found but not the alternate debug info, then do 9072 not try to read the debug info at all. 9073 (refers_to_alt_debug_info): Define new function. 9074 * tools/abidiff.cc (handle_error): Define new static function. 9075 (main): Use it, rather than handling errors preventing libabigail 9076 from reading the corpus on a case by case basis. 9077 tools/abipkgdiff.cc (compare): Handle the case where no alternate 9078 debug info was found. 9079 * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt: 9080 New test output reference. 9081 * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm: 9082 New test input RPM. 9083 * tests/data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm: 9084 Likewise. 9085 * tests/data/Makefile.am: Add the new test files above to source 9086 distribution. 9087 * tests/test-diff-pkg.cc (in_out_specs): Add a new test case from 9088 the new input files above. 9089 90902017-11-13 Dodji Seketeli <dodji@redhat.com> 9091 9092 Support systems where fts.h can't be used with _FILE_OFFSET_BITS set 9093 * configure.ac: Detect if we are on a system where fts.h cannot be 9094 included with _FILE_OFFSET_BITS defined. If that is the case, 9095 then define the BAD_FTS macro. 9096 * src/abg-tools-utils.cc: If BAD_FTS is defined then include fts.h 9097 with _FILE_OFFSET_BITS not defined (that is, before config.h) but 9098 then make sure that open and fopen are 64 bits aware. 9099 * tools/abipkgdiff.cc: Likewise. 9100 91012017-11-08 Dodji Seketeli <dodji@redhat.com> 9102 9103 Edit the NEWS file a tiny little bit for 1.0 9104 * NEWS: Cleanup. 9105 91062017-11-06 Dodji Seketeli <dodji@redhat.com> 9107 9108 Automatically Update ChangeLog for 1.0 9109 * ChangeLog: Update this file by running "make update-changelog". 9110 91112017-11-06 Dodji Seketeli <dodji@redhat.com> 9112 9113 Update NEWS file for 1.0 changes 9114 * NEWS: Update for 1.0 changes 9115 91162017-11-06 Dodji Seketeli <dodji@redhat.com> 9117 9118 Bump version number to 1.0 9119 * configure.ac: Bump version number to 1.0 9120 91212017-11-08 Dodji Seketeli <dodji@redhat.com> 9122 9123 Don't make system headers depend on config.h 9124 * tools/abipkgdiff.cc: Include config.h after system headers and 9125 before libabigail's headers. 9126 91272017-11-02 Dodji Seketeli <dodji@redhat.com> 9128 9129 Wire the --no-show-locs option to abidw 9130 * doc/manuals/abidw.rst: Update the documentation. 9131 * tests/test-annotate.cc: Now that --no-show-locs has an effect on 9132 the ABIXML output, let's not use it here, because it changes the 9133 output and we don't want that. 9134 * tools/abidw.cc (display_usage): Fix a typo in the help string. 9135 (load_corpus_and_write_abixml): Set the "show-locs" option to the 9136 write_context object that we use. 9137 91382017-11-02 Dodji Seketeli <dodji@redhat.com> 9139 9140 Allow setting options to instances of xml_writer::write_context 9141 * include/abg-writer.h (create_write_context, set_show_locs) 9142 (set_annotate): Declare new functions. 9143 (write_corpus, write_corpus_group): Remove the output stream and 9144 the annotate parameters as these can be retrieved from the 9145 context. 9146 * src/abg-writer.cc (write_context::m_show_locs): New data member. 9147 (write_context::write_context): Initialize it. 9148 (write_context::{get_show_locs, set_show_locs}): Add new member 9149 functions. 9150 (write_location): Take a write_context, rather than an output 9151 stream. From the context, we detect if the user did set the "show 9152 loc" option and act accordingly. Write the second overload in 9153 terms of the first one. 9154 (create_write_context, set_show_locs, set_annotate): Define new 9155 functions. 9156 (write_type_decl, write_qualified_type_def) 9157 (write_pointer_type_def, write_reference_type_def) 9158 (write_array_type_def, write_enum_type_decl, write_typedef_decl) 9159 (write_var_decl, write_function_decl) 9160 (write_class_decl_opening_tag, write_union_decl_opening_tag) 9161 (write_type_tparameter, write_non_type_tparameter) 9162 (write_function_tdecl, write_class_tdecl): Adjust the invocation 9163 of write_location. 9164 (write_corpus, write_corpus_group): Remove the output stream and 9165 the annotate parameters as these can be retrieved from the 9166 context. Adjust. 9167 * tools/abidw.c: (load_corpus_and_write_abixml): Create a 9168 write_context object, set the 'annotate' option to it and use that 9169 object to actually write out the corpus. 9170 91712017-11-02 Dodji Seketeli <dodji@redhat.com> 9172 9173 Remove useless vertical space from src/abg-writer.cc 9174 * src/abg-writer.cc (class write_context): Remove useless vertical 9175 space near the end of the class definition. 9176 91772017-10-16 Dodji Seketeli <dodji@redhat.com> 9178 9179 Add a --suppressions option to fedabipkgdiff 9180 * tools/fedabipkgdiff (abipkgdiff): If a suppression file was 9181 provided, pass it to the underlying abipkgdiff tool. 9182 (build_commandline_args_parser): Parse the new --suppressions 9183 option. 9184 * docs/manuals/fedabipkgdiff.rst: Add documentation for the new 9185 --suppressions option. 9186 91872017-10-16 Dodji Seketeli <dodji@redhat.com> 9188 9189 Handle exceptions when global_config is not yet set in fedabipkgdiff 9190 * tools/fedabipkgdiff: When handling an exception, if the 9191 global_config object is not yet set then just let the exception 9192 through. 9193 91942017-10-11 Dodji Seketeli <dodji@redhat.com> 9195 9196 Fix a indentation warning from GCC 7.2.1 9197 * tools/abipkgdiff.cc (compare): In the overload of elf_file, fix 9198 a mis-indentation pointed out by a GCC 7.2.1 warning. 9199 92002017-10-11 Dodji Seketeli <dodji@redhat.com> 9201 9202 Cleanup a switch-case logic to avoid a GCC 7.2.1 warning 9203 * src/abg-dwarf-reader.cc (die_qualified_type_name): Cleanup a 9204 switch case to make the form support more what we meant, and shut 9205 down a GCC 7.2.1 warning. 9206 92072017-10-09 Mark Wielaard <mark@klomp.org> 9208 9209 Fix -Wmisleading-indentation warning in abg-leaf-reporter.cc. 9210 * src/abg-leaf-reporter.cc (leaf_reporter::report): Fix misleading 9211 indentation. 9212 92132017-10-06 Dodji Seketeli <dodji@redhat.com> 9214 9215 Add --impacted-changes option to kmidiff 9216 * doc/manuals/kmidiff.rst: Document the new --impacted-changes 9217 option. 9218 * tools/kmidif.cc (options::show_impacted_interfaces): Add new 9219 data member. 9220 (options::options): Initialize the new data member to false. 9221 (display_usage): Add a description string for the new 9222 --impacted-changes option. 9223 (parse_command_line): Parse the new --impacted-changes option. 9224 (set_diff_context): Update the 'show-impacted-interface' property 9225 accordingly. 9226 92272017-10-04 Dodji Seketeli <dodji@redhat.com> 9228 9229 Add --full-impact option to kmidiff 9230 * doc/manuals/kmidiff.rst: Add documentation for the new 9231 --full-impact|-f option. 9232 * tools/kmidiff.cc (options::leaf_changes_only): Add new data 9233 member. 9234 (option::option): Initialize the new data member. 9235 (display_usage): Add a documentation string for the new 9236 --full-impact|-f option. 9237 (parse_command_line): Parse the new --full-impact|-f option. 9238 (set_diff_context): Set the diff context appropriately. 9239 92402017-09-18 Dodji Seketeli <dodji@redhat.com> 9241 9242 Add a --leaf-changes-only option to abipkgdiff 9243 * doc/manuals/abipkgdiff.rst: Add documentation for the new 9244 --leaf-change-only, --impacted-interfaces and --full-impact 9245 options. 9246 * tools/abipkgdiff.cc (options::{leaf_changes_only, 9247 show_impacted_interfaces, show_full_impact_report): Add new data 9248 members. 9249 (options::options): Initialize them. 9250 (display_usage): Add help strings for the new --leaf-change-only, 9251 --impacted-interfaces and --full-impact|-f options. 9252 (set_diff_context_from_opts): Set the diff context for the 9253 'leaf-changes-only' and 'show-impacted-interfaces' flags. 9254 (parse_command_line): Parse the --leaf-change-only, 9255 --impacted-interfaces and --full-impact options. Handle the case 9256 where the --linux-kernel-abi-whitelist|-w option is given a 9257 whitelist *package*. 9258 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: 9259 New test output reference. 9260 * tests/test-diff-pkg.cc (in_out_spec): Compare 9261 data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm and 9262 data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm with the 9263 new --leaf-changes-only and --impacted-interfaces options, using 9264 the new output reference above. 9265 * tests/data/Makefile.am: Add the new test material to source 9266 distribution. 9267 92682017-08-02 Dodji Seketeli <dodji@redhat.com> 9269 9270 Initial implementation of a --leaf-changes-only option to abidiff 9271 * doc/manuals/abidiff.rst: Add documentation the new 9272 --leaf-changes-only and --impacted-interfaces options. 9273 * src/abg-leaf-reporter.cc: New file. 9274 * src/Makefile.am: Add the new src/abg-leaf-reporter.cc file to 9275 source distribution. 9276 * include/abg-fwd.h (get_var_size_in_bits) 9277 (function_decl_is_less_than): Declare new functions. 9278 (get_name): Add new overload for type_or_decl_base*. 9279 * include/abg-ir.h (struct type_or_decl_hash, type_or_decl_equal) 9280 (type_or_decl_base_comp): Define new types. 9281 (artifact_sptr_set_type, artifact_ptr_set_type): Define new 9282 typedefs. 9283 * include/abg-comp-filter.h: Update copyright year. 9284 (has_basic_type_name_change): Add new function declaration. 9285 * src/abg-comp-filter.cc (decl_name_changed): Take a 9286 type_or_decl_base rather than just a decl. Add an overload for 9287 diff*. 9288 (has_basic_type_name_change): Define new function. 9289 * include/abg-comparison.h: Update copyright year. 9290 (string_diff_ptr_map): Define this new typedef. 9291 (class diff_maps): Define this new class. 9292 (diff_context::{set_corpora}): Remove this member function. 9293 (diff_context::{set_corpus_diff, get_corpus_diff, 9294 show_leaf_changes_only, show_impacted_interfaces, 9295 forbid_visiting_a_node_twice_per_interface}): Declare these new 9296 member functions. 9297 (diff_node_visitor::priv_): Add a new pimpl data member. 9298 (diff_node_visitor::{diff_node_visitor, get_visiting_kind, 9299 set_visiting_kind}): Turn these into out-of-line member functions. 9300 (diff_node_visitor::{set,get}_current_topmost_iface_diff): Add new 9301 member functions. 9302 (class {scope_diff, function_type_diff, corpus_diff}): Add class 9303 leaf_reporter as a friend. 9304 (corpus_diff::mark_leaf_diff_nodes, get_leaf_diffs): Declare new 9305 member functions. 9306 (diff::{visiting_a_node_twice_is_forbidden_per_interface, 9307 parent_interface_node}): Define new member functions. 9308 (is_diff_of_basic_type): Return a type_decl_diff* rather than just 9309 a bool. 9310 (is_enum_diff, is_array_diff, is_function_type, is_typedef_diff) 9311 (is_corpus_diff): Declare new functions. 9312 (corpus_diff::diff_stats::{num_leaf_changes, 9313 num_leaf_changes_filtered_out, net_num_leaf_changes}): Add new 9314 member functions. 9315 (is_distinct_diff): Declare new function. 9316 * include/abg-reporter.h: Forward-declare "class diff_maps". 9317 (reporter_base::diff_to_be_reported): Declare a new virtual member 9318 function. 9319 (reporter_base::{report_local_typedef_changes, 9320 report_local_reference_type_changes, 9321 report_local_function_type_changes}): Declare new member 9322 functions. 9323 (class leaf_reporter): Define new type. 9324 * src/abg-comparison-priv.h (struct diff_hash, diff_equal): Define 9325 new types. 9326 (diff_artifact_set_map_type): Define new typedef. 9327 (diff_context::priv::{first_corpus_, second_corpus_}): Remove 9328 these data members. 9329 (diff_context::priv::{corpus_diff_, leaf_changes_only_, 9330 reset_visited_diffs_for_each_interface_, 9331 show_impacted_interfaces_}): Add new data members. 9332 (diff_context::priv::priv): Adjust. 9333 (corpus_diff::priv::{leaf_diffs_, parent_interface_}): Add new 9334 data member. 9335 (corpus_diff::diff_stats::priv::{num_leaf_changes, 9336 num_leaf_changes_filtered_out}): Add new data members. 9337 (corpus_diff::priv::count_leaf_changes): Define new member 9338 function. 9339 (sort_artifacts_set, get_fn_decl_or_var_decl_diff_ancestor) 9340 (is_diff_of_global_decls): Declare new functions. 9341 (function_comp::operator()): Factorize this out into the new 9342 function abigail::ir::function_decl_is_less_than. 9343 * src/abg-ir.cc (get_var_size_in_bits) 9344 (function_decl_is_less_than): Define new functions. 9345 (get_name): Define new overload for type_or_decl_base*. 9346 * src/abg-comparison.cc (is_enum_diff, is_typedef_diff) 9347 (is_array_diff, is_function_type_diff, is_corpus_diff) 9348 (is_distinct_diff, sort_artifacts_set, is_diff_of_global_decls): 9349 Define new functions. 9350 (is_union_diff): Fix comment. 9351 (diff_context::forbid_visiting_a_node_twice_per_interface): Define 9352 new member functions. 9353 (diff_context::set_corpus_diff, get_corpus_diff) 9354 (diff_context::show_leaf_changes_only) 9355 (diff_context::visiting_a_node_twice_is_forbidden_per_interface) 9356 (diff_context::show_impacted_interfaces): Define new member 9357 functions. 9358 (diff_context::get_reporter): Create the reporter that matches 9359 what diff_context::show_leaf_changes_only says. 9360 (diff_node_visitor::priv): Define a new type. 9361 (diff_node_visitor::{diff_node_visitor, get_visiting_kind, 9362 set_visiting_kind, or_visiting_kind, 9363 set_current_topmost_iface_diff, get_current_topmost_iface_diff}): 9364 Define new out-of-line member functions. 9365 (struct diff_maps::priv): Define new type. 9366 (diff_maps::{diff_maps, get_type_decl_diff_map, 9367 get_type_decl_diff_map, get_enum_diff_map, get_class_diff_map, 9368 get_union_diff_map, get_typedef_diff_map, get_array_diff_map, 9369 get_function_type_diff_map, get_function_decl_diff_map, 9370 get_var_decl_diff_map, get_reference_diff_map, 9371 get_fn_parm_diff_map, get_distinct_diff_map, insert_diff_node, 9372 lookup_impacted_interfaces}): Define member functions. 9373 (corpus_diff::{mark_leaf_diff_nodes, get_leaf_diffs}): Define new 9374 member functions. 9375 (struct leaf_diff_node_marker_visitor): Define new type. 9376 (corpus_diff::apply_filters_and_suppressions_before_reporting): 9377 Mark diff nodes in here. 9378 (corpus_diff::traverse): Appropriately set the current topmost 9379 interface into the visitor before visiting a diff node. 9380 (compute_diff): In the overload for corpus_sptr, adjust to reflect 9381 that we are now storing the corpus_diff in the diff context. 9382 (is_diff_of_basic_type): Return a type_decl_diff*, not just a 9383 bool. 9384 (corpus_diff::priv::count_leaf_changes): Define a new member 9385 function. 9386 (corpus_diff::diff_stats::{num_leaf_changes, 9387 num_leaf_changes_filtered_out, net_num_leaf_changes}): Define new 9388 member functions. 9389 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Use the 9390 new corpus_diff::priv::count_leaf_changes to compute the number of 9391 leaf changes. 9392 (corpus_diff::priv::emit_diff_stats): Emit the report about leaf 9393 type changes when necessary. 9394 * src/abg-reporter-priv.h (report_mem_header): Declare new 9395 overload. 9396 (maybe_show_relative_offset_change,): Pass the var_diff_sptr 9397 parameter by const reference. 9398 (represent): Pass the var_diff_sptr parameter by const reference 9399 and take a new "local-only" flag. 9400 (maybe_show_relative_size_change) 9401 (maybe_report_interfaces_impacted_by_diff): Declare new functions. 9402 * src/abg-default-reporter.cc: Adjust copyright year. 9403 (default_reporter::{report_local_typedef_changes, 9404 report_local_qualified_type_changes, 9405 report_local_reference_type_changes, 9406 report_local_function_type_changes}): Define new member functions. 9407 (default_reporter::report): Adjust. Add an overload for 9408 function_type_diff&. In the overload for qualified_type_diff, if 9409 the name of the underlying type changed, do not detail the changes 9410 any further. In the overload for function_decl_diff, Adjust to 9411 use the new diff_context::get_{first, second}_corpus member 9412 function. In the overload for enum_diff, call the new 9413 maybe_report_interfaces_impacted_by_diff that is advertised below. 9414 * src/abg-reporter-priv.cc (represent): Adjust the overload for 9415 var_diff_sptr. 9416 (report_mem_header): Define new overload. 9417 (maybe_show_relative_size_change) 9418 (maybe_report_interfaces_impacted_by_diff): Define new functions. 9419 (reporter_base::diff_to_be_reported): Define new member function. 9420 (maybe_show_relative_offset_change): Pass the var_diff_sptr 9421 parameter by const reference. 9422 (represent): In the overload for var_diff_sptr, pass the 9423 var_diff_sptr parameter by reference. Take a 'local_only' flag. 9424 Iisplay type changes only if we are not displaying "local changes 9425 only". Display size changes of data members too, when in 9426 "local-only" mode. 9427 * src/abg-suppression.cc (sonames_of_binaries_match) 9428 (names_of_binaries_match): Adjust. 9429 * tools/abidiff.cc (options::{leaf_changes_only, 9430 show_impacted_interfaces}): Add new data members. 9431 (display_usage): Emit usage string for the new --leaf-changes-only 9432 and --impacted-interfaces options. 9433 (parse_command_line): Parse the new --leaf-changes-only and the 9434 --impacted-interfaces options. 9435 (set_diff_context_from_opts): Set the 'show-leaf-changes' and the 9436 'show-impacted-interfaces' flags. 9437 * tests/data/test-diff-filter/libtest42-leaf-report-v{0,1}.so: New 9438 test input. 9439 * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: New 9440 test reference output. 9441 * tests/data/test-diff-filter/test42-leaf-report-v{0,1}.cc: Source 9442 code of the new test inputs. 9443 * tests/test-diff-filter.cc (in_out_specs): Use the new test 9444 inputs above in this harness. 9445 * tests/data/test-diff-suppr/libtest35-leaf-v0.so: New test input. 9446 * tests/data/test-diff-suppr/test35-leaf-report-0.txt: New test 9447 reference output. 9448 * tests/data/test-diff-suppr/test35-leaf-v{0,1}.cc: Source code of 9449 the new test inputs. 9450 * tests/data/test-diff-suppr/test35-leaf.suppr: Suppression 9451 specification to use for the test35 test. 9452 * tests/data/test-diff-suppr/libtest36-leaf-v0.so: New test input. 9453 * tests/data/test-diff-suppr/libtest36-leaf-v1.so: Likewise. 9454 * tests/data/test-diff-suppr/test36-leaf-report-0.txt: New 9455 reference test output. 9456 * tests/data/test-diff-suppr/test36-leaf-v0.cc: Source code of 9457 test input above. 9458 * tests/data/test-diff-suppr/test36-leaf-v1.cc: Likewise. 9459 * tests/test-diff-suppr.cc (in_out_specs): Use the new test inputs 9460 above in this harness. 9461 * tests/data/Makefile.am: Add the new test inputs above to source 9462 distribution. 9463 94642017-07-17 Dodji Seketeli <dodji@redhat.com> 9465 9466 Allow several kinds of reports to be emitted 9467 * include/Makefile.am: Add the new abg-reporter.h header file to 9468 source distribution. 9469 * include/abg-comparison.h: Include the new abg-reporter.h header 9470 file. 9471 (diff_context::{g,s}et_reporter): Declare new accessors. 9472 ({type_diff_base, decl_diff_base, corpus_diff}::priv): Make this 9473 be a struct rather than a class. 9474 ({decl_diff_base, class_diff, scope_diff, function_type_diff, 9475 corpus_diff}): Declare default_reporter a friend class of these. 9476 * include/abg-reporter.h: New file. 9477 * src/Makefile.am: Add abg-comparison-priv.h, 9478 abg-reporter-priv.{h,cc} and abg-default-reporter.cc files to 9479 source distribution. 9480 * src/abg-comparison-priv.h: New file. 9481 * src/abg-comparison.cc (sort_enumerators) 9482 (sort_changed_enumerators, sort_data_members) 9483 (sort_string_function_ptr_map) 9484 (sort_string_function_decl_diff_sptr_map) 9485 (sort_string_var_diff_sptr_map, sort_string_elf_symbol_map) 9486 (sort_string_var_ptr_map, sort_string_data_member_diff_sptr_map) 9487 (sort_unsigned_data_member_diff_sptr_map) 9488 (sort_string_diff_sptr_map, sort_string_base_diff_sptr_map) 9489 (sort_string_base_sptr_map, sort_string_fn_parm_diff_sptr_map) 9490 (sort_string_parm_map, get_leaf_type, sort_enumerators) 9491 (sort_changed_enumerators): Make these functions non-static and 9492 move them at the beginning of the file. These functions are now 9493 declared in abg-compared-priv.h so they can be shared privately 9494 with other files in src/. 9495 (diff_context::{g,s}et_reporter): Define new accessors. 9496 ({diff_context, diff, type_diff_base, decl_diff_base, 9497 distinct_diff, pointer_diff, array_diff, reference_diff, 9498 qualified_type_diff, enum_diff, class_or_union_diff, class_diff, 9499 base_diff, scope_diff, fn_parm_diff, function_type_diff, 9500 function_decl_diff, type_decl_diff, typedef_diff, 9501 translation_unit_diff, corpus_diff::diff_stats, 9502 corpus_diff}::priv) 9503 (diff_less_than_functor, enumerator_value_comp) 9504 (changed_enumerator_comp, base_spec_comp, base_diff_comp) 9505 (data_member_diff_comp, diff_comp, fn_parm_diff_comp, parm_comp) 9506 (elf_symbol_comp, function_comp, function_decl_diff_comp) 9507 (var_diff_sptr_comp): Move these type definitions to 9508 abg-comparison-priv.h 9509 (report_size_and_alignment_changes, report_loc_info) 9510 (maybe_report_diff_for_member, maybe_report_diff_for_symbol) 9511 (represent, represent_data_member) 9512 (maybe_show_relative_offset_change, represent) 9513 (report_size_and_alignment_changes, report_loc_info) 9514 (report_name_size_and_alignment_changes, report_mem_header) 9515 (maybe_report_diff_for_member, maybe_report_diff_for_symbol) 9516 (show_linkage_name_and_aliases): Move these definitions to 9517 abg-reporter-priv.cc. 9518 ({distinct_diff, var_diff, pointer_diff, array_diff, 9519 reference_diff, qualified_type_diff, enum_diff, 9520 class_or_union_diff, class_diff, base_diff, union_diff, 9521 scope_diff, fn_parm_diff, function_type_diff, type_decl_diff, 9522 typedef_diff, corpus_diff}::report): Use the reporter object to 9523 report about the changes carried by the the current diff node. 9524 * src/abg-default-reporter.cc: New file. 9525 * src/abg-reporter-priv.h: Likewise. 9526 95272017-10-04 Dodji Seketeli <dodji@redhat.com> 9528 9529 Update copyright year to tools/abidiff.cc 9530 * tools/abidiff.cc: Update copyright year. 9531 95322017-10-04 Dodji Seketeli <dodji@redhat.com> 9533 9534 Add missing comment to type declaration 9535 * include/abg-comparison.h (struct diff_sptr_hasher): Add missing 9536 comment. 9537 95382017-10-04 Dodji Seketeli <dodji@redhat.com> 9539 9540 Misc style fixes in abg-writer.cc 9541 * src/abg-writer.cc (type_hasher): Add comment. 9542 (write_context::record_decl_as_emitted): Remove useless newline. 9543 95442017-10-04 Dodji Seketeli <dodji@redhat.com> 9545 9546 Initialize naked canonical type 9547 * src/abg-ir.cc (type_base::priv::priv): Initialize the naked 9548 canonical type data member. 9549 95502017-10-04 Dodji Seketeli <dodji@redhat.com> 9551 9552 [abixml writer] Use an unordered set when appropriate 9553 * src/abg-writer.cc (write_context::m_emitted_decl_only_set): 9554 Renamed m_emitted_decl_only_map into this and make the type be a 9555 set, rather than a map. 9556 (write_context::{record_decl_only_type_as_emitted, 9557 decl_only_type_is_emitted}): Adjust. 9558 95592017-09-29 Dodji Seketeli <dodji@redhat.com> 9560 9561 [abixml writer] Store pointers to emitted types rather than type-ids 9562 * src/abg-writer.cc (type_ptr_set_type): Declare new typedef. 9563 (writer_context::m_emitted_type_id_map): Remove this data member. 9564 (writer_context::m_emitted_type_set): Add a new data member. 9565 (writer_context::{record_type_id_as_emitted, type_id_is_emitted, 9566 clear_emitted_types_map}): Remove these member functions. 9567 (writer_context::{record_type_as_emitted, type_is_emitted}): Use 9568 the new m_emitted_type_set data member above. 9569 95702017-09-27 Dodji Seketeli <dodji@redhat.com> 9571 9572 Use an unordered map for canonical DIE offsets 9573 * src/abg-dwarf-reader.cc 9574 (read_context::canonical_type_die_offsets_): Renamed the 9575 canonical_type_die_vecs_ data member into this. 9576 (read_context::canonical_decl_die_offsets_): Renamed the 9577 canonical_decl_die_vecs_ data member into this. 9578 (read_context::{initialize, compute_canonical_die_offset, 9579 compute_canonical_die, get_canonical_die, 9580 get_or_compute_canonical_die, set_canonical_die_offset, 9581 get_canonical_die_offset}): Adjust. 9582 95832017-09-27 Dodji Seketeli <dodji@redhat.com> 9584 9585 Bug 22190 - crash in read_context::get_or_compute_canonical_die 9586 * src/abg-dwarf-reader.cc: 9587 95882017-09-27 Dodji Seketeli <dodji@redhat.com> 9589 9590 Remove redundant (useless) typedef declaration 9591 * src/abg-dwarf-reader.cc (dwarf_offsets_type): There are two 9592 instances of this typedef declaration, remove one. 9593 95942017-09-27 Dodji Seketeli <dodji@redhat.com> 9595 9596 Renamed offset_offset_map type name into offset_offset_map_type 9597 * src/abg-dwarf-reader.cc (offset_offset_map_type): Renamed 9598 offset_offset_map into this. 9599 (read_context::{primary_die_parent_map_, 9600 alternate_die_parent_map_, type_section_die_parent_map_}): Adjust 9601 the type of these data members. 9602 (read_context::{die_parent_map, type_section_die_parent_map}): 9603 Adjust the type of these member functions. 9604 (read_context::{build_die_parent_relations_under, 9605 get_parent_die}): Adjust for the type name in these functions. 9606 96072017-09-27 Dodji Seketeli <dodji@redhat.com> 9608 9609 Add missing newlines to kmidiff's usage strings 9610 * tools/kmidiff.cc (display_usage): Add newlines after the lines 9611 for --vmlinux1 and --vmlinux2. 9612 96132017-09-21 Dodji Seketeli <dodji@redhat.com> 9614 9615 22160 - Annotate state flag unitialized in abidw 9616 * tools/abidw.cc (options::options): Initialize the annotate data 9617 member. 9618 96192017-09-18 Dodji Seketeli <dodji@redhat.com> 9620 9621 Don't crash on classes that differ in their virtual member fn count 9622 * src/abg-ir.cc (equals): In the overload for class_decl, when we 9623 detect that the virtual member function counts are different, get 9624 out, even when we are being asked about the kind of the change. 9625 96262017-09-18 Dodji Seketeli <dodji@redhat.com> 9627 9628 Avoid adding the same data member twice in the DWARF reader 9629 * src/abg-dwarf-reader.cc (add_or_update_class_type): After a we 9630 try to create a data member type, look *again* if the data member 9631 wasn't added recursively by the creation of the data member type. 9632 96332017-09-11 Mark Wielaard <mark@klomp.org> 9634 9635 Bug 22075 - data_member_diff_comp forgets data members names 9636 * src/abg-comparison.cc (data_member_diff_comp): Make the 9637 comparison take the qualified name of the data member into 9638 account. Also, if the initial offset and qualified names of the 9639 data members of the diff nodes are equal, consider the offset and 9640 qualified names of the new data members. 9641 96422017-09-11 Dodji Seketeli <dodji@redhat.com> 9643 9644 Bug 22122 - Fail to represent 'const array' 9645 * src/abg-dwarf-reader.cc (die_is_array_type): Define new static 9646 function. 9647 (die_is_pointer_or_reference_type): Also test that the DIE can be 9648 an array. 9649 * tests/data/test-read-dwarf/PR22122-libftdc.so: New binary test input. 9650 * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: New reference output. 9651 * tests/data/Makefile.am: Add the two new test files above to 9652 source distribution. 9653 * tests/test-read-dwarf.cc (in_out_specs): Run this test harness 9654 over the new test input. 9655 96562017-09-08 Dodji Seketeli <dodji@redhat.com> 9657 9658 Finer detection of local changes of var_decl type 9659 * src/abg-ir.cc (equals): In the var_decl overload detect size 9660 changes of type as being a local change. 9661 96622017-09-08 Dodji Seketeli <dodji@redhat.com> 9663 9664 Misc style fixes 9665 * include/abg-fwd.h (get_pretty_representation): Add missing white 9666 space. 9667 * src/abg-ir.cc (get_name): Fix typo in comment. 9668 96692017-09-02 Mark Wielaard <mark@klomp.org> 9670 9671 readdir_r() is deprecated, use readdir(). 9672 * src/abg-tools-utils.cc (dir_is_empty): Use readdir() instead 9673 of readdir_r(). 9674 96752017-09-02 Mark Wielaard <mark@klomp.org> 9676 9677 Declare eval_last_constant_dwarf_sub_expr with [u]int64_t not [s]size_t. 9678 * src/abg-dwarf-reader.cc (eval_last_constant_dwarf_sub_expr): 9679 Declare expr_len as uint64_t and value as int64_t. 9680 96812017-08-28 Dodji Seketeli <dodji@redhat.com> 9682 9683 Bug 22015 - Failing to return global scope of a DIE in certain cases 9684 * src/abg-dwarf-reader.cc (get_scope_for_die): If the translation 9685 unit of the parent die hasn't yet been constructed, then return 9686 the global scope of the current translation unit. 9687 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so: New 9688 binary test input. 9689 * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: 9690 New reference test output. 9691 * tests/data/Makefile.am: Add the new test materials above to 9692 source distribution. 9693 * tests/test-read-dwarf.cc (in_out_specs): Add the new test input 9694 to the test suite. 9695 96962017-07-17 Dodji Seketeli <dodji@redhat.com> 9697 9698 Fix some make distcheck failures 9699 * tests/data/Makefile.am: Add 9700 test-diff-dwarf/test42-PR21296-libgcc.so, 9701 test-diff-dwarf/test42-PR21296-libclang.so, 9702 test-diff-dwarf/test42-PR21296-clanggcc-report0.txt to the source 9703 distribution. Also look for test-diff-filter/test39* tests inputs 9704 in the test-diff-filter/test39/ directory. 9705 97062017-07-17 Dodji Seketeli <dodji@redhat.com> 9707 9708 Avoid crashing when the elf file could not be read 9709 * src/abg-dwarf-reader.cc 9710 (read_context::elf_architecture_is_ppc64): Do not crash if the elf 9711 handle is nil. 9712 97132017-07-10 Dodji Seketeli <dodji@redhat.com> 9714 9715 Bug 21730 - Make abipkgdiff compare Linux Kernel packages as expected 9716 * include/abg-tools-utils.h (get_vmlinux_path_from_kernel_dist): 9717 Declare new function. 9718 (get_binary_paths_from_kernel_dist): Re-organize order of 9719 parameters. 9720 (file_is_kernel_package, file_is_kernel_debuginfo_package): Make 9721 the file_path parameter be const. 9722 (build_corpus_group_from_kernel_dist_under): Take an additional 9723 debug_info_root parameter. 9724 * src/abg-tools-utils.cc (file_is_kernel_package) 9725 (file_is_kernel_debuginfo_package): Const-ify the file_name 9726 parameter. 9727 (find_vmlinux_path): Define new static function. 9728 (get_binary_paths_from_kernel_dist): Re-organize the order of 9729 parameters. The debug_info_root_path parameter is now an input 9730 parameter. 9731 (get_vmlinux_path_from_kernel_dist): Define new function. 9732 (get_binary_paths_from_kernel_dist): Adjust invocation of 9733 get_binary_paths_from_kernel_dist. 9734 (build_corpus_group_from_kernel_dist_under): Take an additional 9735 debug_info_root parameter. 9736 * tools/abidw.cc (load_kernel_corpus_group_and_write_abixml): 9737 Adjust invocation to build_corpus_group_from_kernel_dist_under. 9738 * tools/abipkgdiff.cc (create_maps_of_package_content): Don't map 9739 the content of a Linux Kernel package. 9740 (compare_prepared_userspace_packages) 9741 (compare_prepared_linux_kernel_packages, compare_prepared): Define 9742 new functions. 9743 (compare): Use the new functions above here. 9744 * tools/kmidiff.cc (print_kernel_dist_binary_paths_under): Adjust 9745 the invocation of get_binary_paths_from_kernel_dist. 9746 (main): Adjust the invocation of 9747 build_corpus_group_from_kernel_dist_under. Make sure that a 9748 kernel package is accompanied by a debug info package. 9749 97502017-07-11 Dodji Seketeli <dodji@redhat.com> 9751 9752 Support up to two --wp options for abipkgdiff 9753 * doc/manuals/abipkgdiff.rst: Update the documentation to say that 9754 --wp can be provided twice, but not more than that. 9755 * tools/abipkgdiff.cc (options::kabi_whitelist_packages): Rename 9756 kabi_whitelist_package to this, and make be of vector<string> 9757 type. 9758 (package::erase_extraction_directories): Erase the white list 9759 package extracted data. 9760 (maybe_handle_kabi_whitelist_pkg, parse_command_line): Adjust. 9761 (main): Make sure there is no more than 2 --wp on the command 9762 line. Associate a white list package to each kernel package on 9763 the command line. 9764 97652017-07-11 Dodji Seketeli <dodji@redhat.com> 9766 9767 Fix support of the --wp option of abipkgdiff 9768 * tools/abipkgdiff.cc (parse_command_line): Consider the absolute 9769 path of the package given in argument to --wp. 9770 97712017-07-11 Dodji Seketeli <dodji@redhat.com> 9772 9773 Use shorter lines in abipkgdiff.cc 9774 * tools/abipkgdiff.cc (parse_command_line): Use shorter lines 9775 here. 9776 97772017-07-11 Dodji Seketeli <dodji@redhat.com> 9778 9779 Add missing space in abipkgdiff error message 9780 * tools/abipkgdiff.cc (extract_package): Add missing space here. 9781 97822017-07-11 Dodji Seketeli <dodji@redhat.com> 9783 9784 Replace --lkaw with -w and --lkaw-pkg with --wp 9785 * doc/manuals/abipkgdiff.rst: Adjust the documentation. 9786 * tools/abipkgdiff.cc (display_usage): Adjust the usage string. 9787 (parse_command_line): Parse -w instead of --lkaw and --wp 9788 insteadof --lkaw-pkg. 9789 97902017-07-11 Dodji Seketeli <dodji@redhat.com> 9791 9792 speed up class type lookup in a corpus 9793 * src/abg-ir.cc (lookup_class_type): In the overload that looks 9794 for a class name denoted by an interned_string in the corpus, do 9795 not look for the class in the translation units when the type 9796 wasn't found in the type map of the corpus. 9797 (maybe_update_types_lookup_map): Remove the 9798 erase_if_exists_already parameter and the code that uses it. 9799 (lookup_class_type_through_translation_units): Remove this 9800 function that is now useless. 9801 98022017-07-06 Dodji Seketeli <dodji@redhat.com> 9803 9804 Bug 21644 - abipkgdiff does not emit diagnostics about comparison errors 9805 * include/abg-dwarf-reader.h (status_to_diagnostic_string): 9806 Declare new function. 9807 * src/abg-dwarf-reader.cc (status_to_diagnostic_string): Define 9808 new function. 9809 * tools/abipkgdiff.cc (compare): Take a new detailed_error_status 9810 parameter. 9811 (compare_task::perform): Get the details of the error, in case the 9812 status of the comparison is ABIDIFF_ERROR. 9813 98142017-07-05 Dodji Seketeli <dodji@redhat.com> 9815 9816 Bug 21153 - abipkgdiff reports undetermined interface subtype changes 9817 * src/abg-ir.cc (get_name_of_qualified_type): A noop-qualified 9818 type has an empty string as reprsentation for its qualifier. 9819 * src/abg-dwarf-reader.cc (die_qualified_type_name): Adjust to 9820 comply with what is done in get_name_of_qualified_type. Adjust 9821 comment too. 9822 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 9823 Adjust. 9824 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: 9825 New reference test output. 9826 * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64.rpm: New 9827 test binary input. 9828 * tests/data/test-diff-pkg/libcdio-0.94-2.fc26.x86_64.rpm: Likewise. 9829 * tests/data/test-diff-pkg/libcdio-debuginfo-0.94-1.fc26.x86_64.rpm: Likewise. 9830 * tests/data/test-diff-pkg/libcdio-debuginfo-0.94-2.fc26.x86_64.rpm Likewise. 9831 * tests/data/Makefile.am: Add the new test inputs to source distribution. 9832 * tests/test-diff-pkg.cc (in_out_specs): Make this test harness run on 9833 the new test inputs above. 9834 98352017-07-03 Dodji Seketeli <dodji@redhat.com> 9836 9837 Fix typo in comments 9838 * src/abg-ir.cc (type_base::get_canonical_type_for): Fix a typo in 9839 a command. 9840 98412017-07-03 Dodji Seketeli <dodji@redhat.com> 9842 9843 Fix a typo when reporting size change wrt a decl-only class 9844 * src/abg-comparison.cc (report_size_and_alignment_changes): Fix 9845 typo. 9846 98472017-07-03 Dodji Seketeli <dodji@redhat.com> 9848 9849 Better handle decl-only classes being different from their definition 9850 * src/abg-comparison.cc (function_decl_diff::report): Don't report 9851 possible vtable changes between a decl-only class and its 9852 definition. 9853 * src/abg-ir.cc (type_base::get_canonical_type_for): Consider that 9854 a decl-only class is different from its definition when comparing 9855 types for the purpose of type canonicalization. 9856 (equals): In the class_or_union overload, only consider the global 9857 decl_only_class_equals_definition() property to know when to 9858 consider that a decl-only class is different from its definition 9859 when comparing two classes. 9860 * src/abg-reader.cc (build_class_decl): Read the size property of 9861 a class, even if it's a decl-only class. 9862 * src/abg-writer.cc (write_class_decl_opening_tag): Write size 9863 property of types even if the types are decl-only classes. 9864 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 9865 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 9866 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 9867 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 9868 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 9869 Likewise. 9870 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 9871 Likewise. 9872 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 9873 Likewise. 9874 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 9875 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 9876 Likewise. 9877 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 9878 Likewise. 9879 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 9880 Likewise. 9881 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 9882 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 9883 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 9884 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 9885 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 9886 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 9887 Likewise. 9888 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 9889 Likewise. 9890 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 9891 Likewise. 9892 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 9893 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 9894 Likewise. 9895 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 9896 98972017-06-28 Dodji Seketeli <dodji@redhat.com> 9898 9899 Don't add empty translation unit to corpus 9900 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 9901 A translation unit DIE that has no child DIE shall not be added to 9902 the current ABI corpus. 9903 99042017-06-27 Dodji Seketeli <dodji@redhat.com> 9905 9906 Bug 21631 - Forgot a "break" statement in stv_to_elf_symbol_visibility 9907 * src/abg-dwarf-reader.cc (stv_to_elf_symbol_visibility): Add a 9908 missing break statement. 9909 99102017-06-26 Dodji Seketeli <dodji@redhat.com> 9911 9912 Bug 21630 - A this pointer DIE can be const 9913 * src/abg-dwarf-reader.cc (die_this_pointer_is_const): If the DIE 9914 is not a DW_TAG_pointer_type then don't crash. 9915 99162017-06-23 Dodji Seketeli <dodji@redhat.com> 9917 9918 Bug 21629 - equivalent DIEs must be of the same DIE source 9919 * src/abg-dwarf-reader.cc (compare_dies): Don't propagate 9920 a canonical DIE to a DIE that comes from a different source. 9921 99222017-06-22 Dodji Seketeli <dodji@redhat.com> 9923 9924 Bug 21627 - Libabigail doesn't consider translation unit compile dir 9925 *if* that translation unit has already been seen in the current 9926 binary, instead of creating a new one altogether. 9927 This patch doesn't carry a regression test as the problem was found 9928 while running the 9929 https://pagure.io/libabigail-selfcheck/blob/master/f/selfcheck.py 9930 script over the Fedora 25 critpath packages. 9931 The patch does however update existing reference outputs of existings 9932 tests where appropriate. 9933 * include/abg-ir.h (translation_unit::{get_compilation_dir_path, 9934 set_compilation_dir_path, get_absolute_path}): 9935 * src/abg-corpus.cc (corpus::add): Use the new 9936 translation_unit::get_absolute_path() as the key for the tu path 9937 -> tu map. 9938 * src/abg-dwarf-reader.cc 9939 (read_context::resolve_declaration_only_classes): Use the new 9940 translation_unit::get_absolute_path(). 9941 (build_translation_unit_and_add_to_ir): Set the compilation 9942 directory of the translation unit. 9943 * src/abg-ir-priv.h (translation_unit::priv::{comp_dir_path_, 9944 abs_path_}): 9945 * src/abg-ir.cc (translation_unit::set_path): Update comment. 9946 (translation_unit::{get_compilation_dir_path, 9947 set_compilation_dir_path, get_absolute_path}): Define new member 9948 functions. 9949 * src/abg-reader.cc (read_translation_unit): Take the new 9950 'comp-dir-path' attribute into account. 9951 * src/abg-writer.cc (write_translation_unit): Emit the new 9952 'comp-dir-path' attribute. 9953 * tests/data/test-annotate/libtest23.so.abi: Adjust. 9954 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. 9955 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Adjust. 9956 * tests/data/test-annotate/test0.abi: Adjust. 9957 * tests/data/test-annotate/test1.abi: Adjust. 9958 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 9959 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 9960 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 9961 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 9962 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 9963 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 9964 * tests/data/test-annotate/test2.so.abi: Adjust. 9965 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 9966 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 9967 * tests/data/test-annotate/test3.so.abi: Adjust. 9968 * tests/data/test-annotate/test4.so.abi: Adjust. 9969 * tests/data/test-annotate/test5.o.abi: Adjust. 9970 * tests/data/test-annotate/test6.so.abi: Adjust. 9971 * tests/data/test-annotate/test7.so.abi: Adjust. 9972 * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Adjust. 9973 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 9974 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. 9975 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 9976 * tests/data/test-read-dwarf/test0.abi: Adjust. 9977 * tests/data/test-read-dwarf/test1.abi: Adjust. 9978 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 9979 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 9980 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 9981 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 9982 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 9983 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 9984 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 9985 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 9986 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 9987 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 9988 * tests/data/test-read-dwarf/test2.so.abi: Adjust. 9989 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 9990 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 9991 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 9992 * tests/data/test-read-dwarf/test3.so.abi: Adjust. 9993 * tests/data/test-read-dwarf/test4.so.abi: Adjust. 9994 * tests/data/test-read-dwarf/test5.o.abi: Adjust. 9995 * tests/data/test-read-dwarf/test6.so.abi: Adjust. 9996 * tests/data/test-read-dwarf/test7.so.abi: Adjust. 9997 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Adjust. 9998 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 9999 100002017-05-04 Dodji Seketeli <dodji@redhat.com> 10001 10002 Misc style fixes 10003 * src/abg-dwarf-reader.cc (read_context::{die_wip_classes_map, 10004 die_wip_function_types_map, types_to_canonicalize, 10005 tu_die_imported_unit_points_map, die_parent_map, 10006 load_kernel_symbol_table}): Add missing space to statement. 10007 (get_parent_die): Likewise. 10008 (build_enum_type): Fix typo in comment. 10009 (e_machine_to_string, get_version_definition_for_versym) 10010 (lookup_public_function_symbol_from_elf) 10011 (lookup_public_variable_symbol_from_elf) 10012 (lookup_data_tag_from_dynamic_segment, die_is_declaration_only) 10013 (die_is_reference_type, die_function_type_is_method_type): Fix 10014 indentation. 10015 (read_context::{resolve_declaration_only_classes, 10016 fixup_functions_with_no_symbols, 10017 load_symbol_maps_from_symtab_section, load_dt_soname_and_needed, 10018 load_elf_architecture, load_elf_properties, 10019 maybe_adjust_address_for_exec_or_dyn, maybe_adjust_fn_sym_address, 10020 address_is_in_opd_section, load_elf_architecture, 10021 build_die_parent_maps}): Likewise. 10022 (op_pushes_constant_value, op_manipulates_stack): Use the 10023 dwarf_expr_eval_context::push method. 10024 (op_is_control_flow, die_return_and_parm_names_from_fn_type_die) 10025 (die_function_signature, die_pretty_print_type) 10026 (get_default_array_lower_bound) 10027 (build_translation_unit_and_add_to_ir, build_enum_type) 10028 (add_or_update_class_type, build_function_type) 10029 (build_function_decl, build_ir_node_from_die) 10030 (lookup_public_function_symbol_from_elf): Fix indentation. 10031 * src/abg-ir.cc (maybe_update_types_lookup_map): Remove useless space. 10032 100332017-05-31 Dodji Seketeli <dodji@redhat.com> 10034 10035 Fix doc glitch in abidiff.rst 10036 * doc/manuals/abidiff.rst: Fix glitch. 10037 100382017-06-12 Dodji Seketeli <dodji@redhat.com> 10039 10040 Symbols with the same zero value are not aliases 10041 * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): 10042 Do not consider symbols with zero value as being aliases. 10043 * tests/data/test-diff-filter/test20-inline-report-0.txt: Adjust. 10044 * tests/data/test-diff-filter/test20-inline-report-1.txt: 10045 Likewise. 10046 * test-diff-filter/test41-PR21486-abg-writer.gcc.o: New test 10047 binary input. 10048 * tests/data/test-diff-filter/test41-PR21486-abg-writer.llvm.o: 10049 Likewise. 10050 * tests/data/Makefile.am: Add the new test material to source 10051 distribution. 10052 * tests/test-diff-filter.cc (in_out_specs): Run the test harness 10053 on the new test input above. 10054 * tests/data/test-diff-dwarf/test5-report.txt: Adjust. 10055 * tests/data/test-diff-filter/test9-report.txt: Adjust. 10056 * tests/data/test-diff-filter/test20-inline-report-0.txt: Adjust. 10057 * tests/data/test-diff-filter/test20-inline-report-1.txt: Adjust. 10058 100592017-06-12 Dodji Seketeli <dodji@redhat.com> 10060 10061 Support ELF symbol visibility property 10062 * include/abg-ir.h (enum elf_symbol::visibility): Define new enum. 10063 (elf_symbol::{elf_symbol, create}): Take a visibility parameter. 10064 (elf_symbol::{set, get}_visibility): Declare new accessors. 10065 (string_to_elf_symbol_binding): Declare new function. 10066 * src/abg-ir.cc (elf_symbol::priv::visibility_): New data member. 10067 (elf_symbol::priv::priv): Adjust. 10068 (elf_symbol::elf_symbol): Take a visibility parameter. 10069 (elf_symbol::create): Likewise 10070 (elf_symbol::{s,g}et_visibility): Define new accessors. 10071 (elf_symbol::is_public): Adjust. 10072 (operator<<(std::ostream&, elf_symbol::visibility)): Define new 10073 operator. 10074 (string_to_elf_symbol_visibility): Define new function. 10075 * src/abg-dwarf-reader.cc (stv_to_elf_symbol_visibility): Define 10076 new static function. 10077 (lookup_symbol_from_sysv_hash_tab) 10078 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) 10079 (create_default_var_sym, create_default_fn_sym): Adjust. 10080 * src/abg-reader.cc (read_elf_symbol_binding): Define new 10081 function. 10082 (build_elf_symbol): Adjust. 10083 * src/abg-writer.cc (write_elf_symbol_visibility): Define new 10084 function. 10085 * tests/data/test-annotate/libtest23.so.abi: Adjust. 10086 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. 10087 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Adjust. 10088 * tests/data/test-annotate/test0.abi: Adjust. 10089 * tests/data/test-annotate/test1.abi: Adjust. 10090 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 10091 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10092 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10093 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 10094 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10095 Adjust. 10096 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10097 Adjust. 10098 * tests/data/test-annotate/test2.so.abi: Adjust. 10099 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10100 Adjust. 10101 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 10102 * tests/data/test-annotate/test3.so.abi: Adjust. 10103 * tests/data/test-annotate/test4.so.abi: Adjust. 10104 * tests/data/test-annotate/test5.o.abi: Adjust. 10105 * tests/data/test-annotate/test6.so.abi: Adjust. 10106 * tests/data/test-annotate/test7.so.abi: Adjust. 10107 * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: 10108 Adjust. 10109 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 10110 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. 10111 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 10112 * tests/data/test-read-dwarf/test0.abi: Adjust. 10113 * tests/data/test-read-dwarf/test1.abi: Adjust. 10114 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 10115 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 10116 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 10117 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 10118 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10119 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10120 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 10121 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 10122 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10123 Adjust. 10124 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10125 Adjust. 10126 * tests/data/test-read-dwarf/test2.so.abi: Adjust. 10127 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10128 Adjust. 10129 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 10130 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 10131 Adjust. 10132 * tests/data/test-read-dwarf/test3.so.abi: Adjust. 10133 * tests/data/test-read-dwarf/test4.so.abi: Adjust. 10134 * tests/data/test-read-dwarf/test5.o.abi: Adjust. 10135 * tests/data/test-read-dwarf/test6.so.abi: Adjust. 10136 * tests/data/test-read-dwarf/test7.so.abi: Adjust. 10137 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: 10138 Adjust. 10139 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 10140 * tests/data/test-read-write/test26.xml: Adjust. 10141 * tests/data/test-read-write/test27.xml: Adjust. 10142 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 10143 Adjust. 10144 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 10145 Adjust. 10146 101472017-06-09 Dodji Seketeli <dodji@redhat.com> 10148 10149 Filter top cv qualifier changes on function parameter types 10150 * include/abg-comparison.h (enum diff_category): Add a new 10151 FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY enumerator. "Or" the 10152 enumerator to the EVERYTHING_CATEGORY enumerator. 10153 * src/abg-comp-filter.cc (has_fn_parm_type_cv_qual_change): Define 10154 new static function. 10155 (categorize_harmless_diff_node): Categorize changes to top cv 10156 qualifiers on function parameter types into the new 10157 FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY. 10158 * src/abg-comparison.cc (get_default_harmless_categories_bitmap): 10159 Add the new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY category to the 10160 set of harmless categories. 10161 (operator<<(ostream&, diff_category)): Adjust to serialize 10162 the new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY. 10163 * tests/data/test-diff-filter/libtest40-v0.so: New test input binary. 10164 * tests/data/test-diff-filter/libtest40-v1.so: Likewise. 10165 * tests/data/test-diff-filter/test40-report-0.txt: New test 10166 reference output. 10167 * tests/data/test-diff-filter/test40-v0.cc: Source code of the 10168 test binary above. 10169 * tests/data/test-diff-filter/test40-v1.cc: Likewise. 10170 * tests/data/Makefile.am: Add the new test material above to 10171 source distribution. 10172 * tests/test-diff-filter.cc (in_out_specs): Add new binaries to 10173 compare. 10174 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 10175 Adjust. 10176 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 10177 Likewise. 10178 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 10179 Likewise. 10180 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: 10181 Likewise. 10182 101832017-05-28 Dodji Seketeli <dodji@redhat.com> 10184 10185 Do not report about voffset when it's not set in debug info 10186 * include/abg-ir.h (mem_fn_context_rel::mem_fn_context_rel): 10187 Initialize the virtual offset to -1. 10188 * src/abg-comparison.cc (represent): In the overload to represent 10189 a method_decl, do not represent the vofffset if it's not set. 10190 * src/abg-writer.cc (write_voffset): The virtual offset is signed 10191 because if it's -1, it means no offset is set. 10192 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10193 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10194 Adjust. 10195 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10196 Adjust. 10197 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10198 Adjust. 10199 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 10200 Adjust. 10201 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. 10202 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 10203 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 10204 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10205 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10206 Adjust. 10207 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10208 Adjust. 10209 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10210 Adjust. 10211 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 10212 Adjust. 10213 102142017-05-17 Dodji Seketeli <dodji@redhat.com> 10215 10216 Allow selective resolution of class declaration 10217 * include/abg-fwd.h (type_base_wptrs_type) 10218 (istring_type_base_wptrs_map_type): Define new typedefs. 10219 (lookup_class_types): Declare new functions. 10220 * include/abg-ir.h 10221 (environment::decl_only_class_equals_definition): Declare new 10222 accessor. 10223 (type_maps::{*_types}): Make these accessors return 10224 istring_type_base_wptrs_map_type& instead of 10225 istring_type_base_wptr_map_type&. 10226 * src/abg-dwarf-reader.cc 10227 (read_context::resolve_declaration_only_classes): Implement the 10228 new selective declaration resolution scheme. 10229 * src/abg-ir.cc (type_maps::priv::{*_types_}): Change the type of 10230 these data members from istring_type_base_wptr_map_type to 10231 istring_type_base_wptrs_map_type. 10232 (type_maps::{*_types}): Make these accessors definitions return 10233 istring_type_base_wptrs_map_type& instead of 10234 istring_type_base_wptr_map_type&. 10235 (translation_unit::bind_function_type_life_time): Adjust. 10236 (environment::priv::decl_only_class_equals_definition_): New data 10237 member. 10238 (environment::priv::priv): Initialize it. By default, a decl-only 10239 class is now considered different from its definition. 10240 (environment::decl_only_class_equals_definition): Define new 10241 accessor. 10242 (lookup_types_in_map, lookup_class_types): Define new functions. 10243 (lookup_type_in_map, lookup_union_type_per_location) 10244 (lookup_basic_type, lookup_basic_type_per_location) 10245 (lookup_class_type, lookup_class_type_per_location) 10246 (lookup_union_type, lookup_enum_type) 10247 (lookup_enum_type_per_location, lookup_typedef_type) 10248 (lookup_typedef_type_per_location, lookup_qualified_type) 10249 (lookup_pointer_type, lookup_reference_type, lookup_array_type) 10250 (lookup_function_type, maybe_update_types_lookup_map) 10251 (maybe_update_types_lookup_map<class_decl>) 10252 (maybe_update_types_lookup_map<function_type>): Adjust. 10253 (type_base::get_canonical_type_for): When doing type comparison 10254 here, we can now consider that an unresolved class declaration 10255 compares different to an incompatible class definition of the same 10256 name. So no need to look through decl-only classes in that case. 10257 (equals): In the overload for class_or_union, if 10258 environment::decl_only_class_equals_definition() is false, then an 10259 unresolved class declaration of name "N" compares different to a 10260 class definition named "N". 10261 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10262 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust 10263 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 10264 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10265 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: 10266 Adjust. 10267 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 10268 Adjust. 10269 * tests/data/test-diff-filter/test38/Makefile: New test material. 10270 * tests/data/test-diff-filter/test38/test38-a.c: Likewise. 10271 * tests/data/test-diff-filter/test38/test38-b.c: Likewise. 10272 * tests/data/test-diff-filter/test38/test38-c.c: Likewise. 10273 * tests/data/test-diff-filter/test38/test38-report-0.txt: Likewise. 10274 * tests/data/test-diff-filter/test38/test38-v0: Likewise. 10275 * tests/data/test-diff-filter/test38/test38-v1: Likewise. 10276 * tests/data/test-diff-filter/test38/test38.h: Likewise. 10277 * tests/data/test-diff-filter/test39/Makefile: Likewise. 10278 * tests/data/test-diff-filter/test39/test39-a-v0.c: Likewise. 10279 * tests/data/test-diff-filter/test39/test39-a-v1.c: Likewise. 10280 * tests/data/test-diff-filter/test39/test39-b-v0.c: Likewise. 10281 * tests/data/test-diff-filter/test39/test39-b-v1.c: Likewise. 10282 * tests/data/test-diff-filter/test39/test39-c-v0.c: Likewise. 10283 * tests/data/test-diff-filter/test39/test39-c-v1.c: Likewise. 10284 * tests/data/test-diff-filter/test39/test39-main.c: Likewise. 10285 * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. 10286 * tests/data/test-diff-filter/test39/test39-v0: Likewise. 10287 * tests/data/test-diff-filter/test39/test39-v1: Likewise. 10288 * tests/data/test-diff-filter/test39/test39.h: Likewise. 10289 * tests/data/Makefile.am: Add the new test material above to the 10290 source distribution. 10291 * tests/test-diff-filter.cc (in_out_specs): Add the new test 10292 inputs above to the test harness. 10293 102942017-05-31 Dodji Seketeli <dodji@redhat.com> 10295 10296 Add documentation for the kmidiff tool 10297 * doc/manuals/kmidiff.rst: New doc file. 10298 * doc/manuals/Makefile.am: Add the above file to source 10299 distribution. 10300 103012017-05-31 Dodji Seketeli <dodji@redhat.com> 10302 10303 Allow re-using the ELF/DWARF read_context when loading a corpus group 10304 * include/abg-dwarf-reader.h (reset_read_context): Declare new 10305 function. 10306 * src/abg-dwarf-reader.cc (read_context::elf_paths_): Make this to 10307 be non const. 10308 (read_context::initialize): New function to initialize all data 10309 members. 10310 (read_context::read_context): Use the new read_context::initialize 10311 function, rather than initializing data members 'inline' here. 10312 (reset_read_context): Define a new function to reset a 10313 read_context so that it can be re-used to load a new corpus. 10314 103152017-05-31 Dodji Seketeli <dodji@redhat.com> 10316 10317 Add --vmlinux{1,2} option to abidw and kmidiff 10318 * include/abg-tools-utils.h 10319 (build_corpus_group_from_kernel_dist_under): Add a new 10320 vmlinux_path parameter. 10321 * src/abg-tools-utils.cc (find_vmlinux_and_module_paths): Do not 10322 try to find a vmlinux binary if we already have the path to one. 10323 (build_corpus_group_from_kernel_dist_under): Add a new 10324 vmlinux_path parameter. 10325 * tools/abidw.cc (options::vmlinux): New data member. 10326 (display_usage): Add a usage string for --vmlinux 10327 (parse_command_line): Parse the new --vmlinux option. 10328 (load_kernel_corpus_group_and_write_abixml): Fix some return code 10329 when the function fails. Verify the presence of the vmlinux 10330 binary that was given. Adjust. 10331 * tools/kmidiff.cc (options::{vmlinux1, vmlinux2}): New data 10332 members. 10333 (display_usage): Add a usage string for --vmlinux1 and --vmlinux2. 10334 (parse_command_line): Parse the --vmlinux1 and --vmlinux2 10335 options. 10336 (main): Adjust. 10337 103382017-05-18 Dodji Seketeli <dodji@redhat.com> 10339 10340 Cache function type name computation results 10341 * src/abg-ir.cc (get_type_name): Cache function type names. 10342 103432017-05-29 Dodji Seketeli <dodji@redhat.com> 10344 10345 Fix innacurate test condition when reading an enum type from abixml 10346 * src/abg-reader.cc (build_enum_type_decl): Do not check for 10347 errno which might have been set earlier by something else. 10348 Rather, check the returned value for overflow or underflow. 10349 103502017-05-28 Dodji Seketeli <dodji@redhat.com> 10351 10352 Do not report about voffset when it's not set in debug info 10353 * include/abg-ir.h (mem_fn_context_rel::mem_fn_context_rel): 10354 Initialize the virtual offset to -1. 10355 * src/abg-comparison.cc (represent): In the overload to represent 10356 a method_decl, do not represent the vofffset if it's not set. 10357 * src/abg-writer.cc (write_voffset): The virtual offset is signed 10358 because if it's -1, it means no offset is set. 10359 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10360 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10361 Adjust. 10362 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10363 Adjust. 10364 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10365 Adjust. 10366 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 10367 Adjust. 10368 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. 10369 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 10370 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 10371 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10372 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 10373 Adjust. 10374 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10375 Adjust. 10376 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 10377 Adjust. 10378 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 10379 Adjust. 10380 103812017-05-18 Dodji Seketeli <dodji@redhat.com> 10382 10383 Speedup DIE representation computing esp function signature in C 10384 * src/abg-dwarf-reader.cc (die_function_signature): For C DIEs, 10385 just return the (linkage) name of the function. 10386 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10387 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 10388 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10389 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 10390 103912017-05-17 Dodji Seketeli <dodji@redhat.com> 10392 10393 Allow selective resolution of class declaration 10394 * include/abg-fwd.h (type_base_wptrs_type) 10395 (istring_type_base_wptrs_map_type): Define new typedefs. 10396 (lookup_class_types): Declare new functions. 10397 * include/abg-ir.h 10398 (environment::decl_only_class_equals_definition): Declare new 10399 accessor. 10400 (type_maps::{*_types}): Make these accessors return 10401 istring_type_base_wptrs_map_type& instead of 10402 istring_type_base_wptr_map_type&. 10403 * src/abg-dwarf-reader.cc 10404 (read_context::resolve_declaration_only_classes): Implement the 10405 new selective declaration resolution scheme. 10406 * src/abg-ir.cc (type_maps::priv::{*_types_}): Change the type of 10407 these data members from istring_type_base_wptr_map_type to 10408 istring_type_base_wptrs_map_type. 10409 (type_maps::{*_types}): Make these accessors definitions return 10410 istring_type_base_wptrs_map_type& instead of 10411 istring_type_base_wptr_map_type&. 10412 (translation_unit::bind_function_type_life_time): Adjust. 10413 (environment::priv::decl_only_class_equals_definition_): New data 10414 member. 10415 (environment::priv::priv): Initialize it. By default, a decl-only 10416 class is now considered different from its definition. 10417 (environment::decl_only_class_equals_definition): Define new 10418 accessor. 10419 (lookup_types_in_map, lookup_class_types): Define new functions. 10420 (lookup_type_in_map, lookup_union_type_per_location) 10421 (lookup_basic_type, lookup_basic_type_per_location) 10422 (lookup_class_type, lookup_class_type_per_location) 10423 (lookup_union_type, lookup_enum_type) 10424 (lookup_enum_type_per_location, lookup_typedef_type) 10425 (lookup_typedef_type_per_location, lookup_qualified_type) 10426 (lookup_pointer_type, lookup_reference_type, lookup_array_type) 10427 (lookup_function_type, maybe_update_types_lookup_map) 10428 (maybe_update_types_lookup_map<class_decl>) 10429 (maybe_update_types_lookup_map<function_type>): Adjust. 10430 (type_base::get_canonical_type_for): When doing type comparison 10431 here, we can now consider that an unresolved class declaration 10432 compares different to an incompatible class definition of the same 10433 name. So no need to look through decl-only classes in that case. 10434 (equals): In the overload for class_or_union, if 10435 environment::decl_only_class_equals_definition() is false, then an 10436 unresolved class declaration of name "N" compares different to a 10437 class definition named "N". 10438 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10439 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust 10440 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 10441 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10442 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: 10443 Adjust. 10444 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 10445 Adjust. 10446 * tests/data/test-diff-filter/test38/Makefile: New test material. 10447 * tests/data/test-diff-filter/test38/test38-a.c: Likewise. 10448 * tests/data/test-diff-filter/test38/test38-b.c: Likewise. 10449 * tests/data/test-diff-filter/test38/test38-c.c: Likewise. 10450 * tests/data/test-diff-filter/test38/test38-report-0.txt: Likewise. 10451 * tests/data/test-diff-filter/test38/test38-v0: Likewise. 10452 * tests/data/test-diff-filter/test38/test38-v1: Likewise. 10453 * tests/data/test-diff-filter/test38/test38.h: Likewise. 10454 * tests/data/test-diff-filter/test39/Makefile: Likewise. 10455 * tests/data/test-diff-filter/test39/test39-a-v0.c: Likewise. 10456 * tests/data/test-diff-filter/test39/test39-a-v1.c: Likewise. 10457 * tests/data/test-diff-filter/test39/test39-b-v0.c: Likewise. 10458 * tests/data/test-diff-filter/test39/test39-b-v1.c: Likewise. 10459 * tests/data/test-diff-filter/test39/test39-c-v0.c: Likewise. 10460 * tests/data/test-diff-filter/test39/test39-c-v1.c: Likewise. 10461 * tests/data/test-diff-filter/test39/test39-main.c: Likewise. 10462 * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. 10463 * tests/data/test-diff-filter/test39/test39-v0: Likewise. 10464 * tests/data/test-diff-filter/test39/test39-v1: Likewise. 10465 * tests/data/test-diff-filter/test39/test39.h: Likewise. 10466 * tests/data/Makefile.am: Add the new test material above to the 10467 source distribution. 10468 * tests/test-diff-filter.cc (in_out_specs): Add the new test 10469 inputs above to the test harness. 10470 104712017-05-04 Dodji Seketeli <dodji@redhat.com> 10472 10473 Avoid de-duplicating different C types that have identical name 10474 * src/abg-dwarf-reader.cc (die_decl_map_type, die_type_map_type): 10475 Remove these typedefs. 10476 (die_artefact_map_type, istring_dwarf_offsets_map_type): New 10477 typedefs. 10478 (die_is_at_class_scope, die_qualified_type_name) 10479 (die_qualified_decl_name, die_qualified_type_name_empty) 10480 (die_return_and_parm_names_from_fn_type_die) 10481 (die_function_type_is_method_type): 10482 Const-ify the read_context& parameter. 10483 (read_context::die_source_dependant_container_set::get_container): 10484 Likewise. 10485 (read_context::{name_artefacts_map_, per_tu_name_artefacts_map_, 10486 die_decl_map_, alternate_die_decl_map_, type_unit_die_decl_map_, 10487 die_type_map_, alternate_die_type_map_, type_unit_die_type_map_}): 10488 Remove data members. 10489 (read_context::{die_decl_map, alternate_die_decl_map, 10490 associate_die_to_decl_primary, associate_die_to_decl_alternate, 10491 associate_die_to_decl_from_type_unit, 10492 lookup_decl_from_die_offset_primary, 10493 lookup_decl_from_die_offset_alternate, 10494 lookup_decl_from_type_unit_die_offset, 10495 lookup_type_artifact_from_die_per_tu, 10496 lookup_artifact_from_per_tu_die_representation, 10497 associate_die_to_artifact_by_repr, 10498 associate_die_to_artifact_by_repr_internal, clear_die_type_maps}): 10499 Remove member functions. 10500 (read_context::{decl_die_repr_die_offsets_maps_, 10501 type_die_repr_die_offsets_maps_, decl_die_artefact_maps_, 10502 type_die_artefact_maps_, dwarf_expr_eval_context_}): Add new data 10503 members. 10504 (read_context::clear_per_translation_unit_data): Don't clear 10505 read_context::per_tu_name_artefacts_map_ data member as it's 10506 removed. 10507 (read_context::clear_per_corpus_data): Don't clear 10508 read_context::name_artefacts_map_ and all the other relevant data 10509 members that got removed. 10510 (read_context::{dwarf_per_die_source, 10511 decl_die_repr_die_offsets_maps, type_die_repr_die_offsets_maps, 10512 get_canonical_die, get_die_from_offset, decl_die_artefact_maps, 10513 type_die_artefact_maps, dwarf_expr_eval_ctxt}): Add new member 10514 functions. 10515 (compare_dies, compare_as_decl_dies) 10516 (compare_as_type_dies, maybe_finish_function_decl_reading) 10517 (die_is_anonymous): Define new functions. 10518 (read_context::associate_die_to_decl): Remove the 10519 do_associate_by_repr_per_tu parameter. Use the new 10520 read_context::{decl_die_artefact_maps_, get_canonical_die} member 10521 functions. 10522 (read_context::lookup_decl_from_die_offset): Use Dwarf_Off rather 10523 than size_t for the type of the die_offset parameter. Use the 10524 lookup_artifact_from_die_offset member function. 10525 (read_context::lookup_type_artifact_from_die): Const-ify. In one 10526 overload, take a new 'die_as_type' parameter. Use the new 10527 get_canonical_die, type_die_artefact_maps and 10528 decl_die_artefact_maps member functions. In the second overload, 10529 use the first overload. 10530 (read_context::odr_is_relevant): Add an overload that takes a DIE. 10531 (read_context::associate_die_to_type): Remove the 10532 do_associate_by_repr and do_associate_per_tu parameters. Use the 10533 new get_canonical_die and type_die_artefact_maps member functions. 10534 (read_context::lookup_type_from_die): Use the new 10535 lookup_artifact_from_die member function. 10536 (read_context::lookup_type_from_die_offset): Use the new 10537 type_die_artefact_maps member function. When the found artifact 10538 is a function_decl, return its type. 10539 (read_context::schedule_type_for_late_canonicalization): Use the 10540 new get_canonical_die and type_die_artefact_maps member functions. 10541 (die_function_signature): Const-ify. Get the scope name right 10542 even for scopes that are not types. 10543 (die_member_offset): Make eval_last_constant_dwarf_sub_expr use 10544 the new cached DWARF expression evalution context. 10545 (get_parent_die): Support where_offset equals to zero. This means 10546 we are looking at a C binary, basically. 10547 (build_enum_type) : Use the new overload of 10548 read_context::odr_is_relevant that takes a DIE. Adjust. 10549 (add_or_update_union_type, add_or_update_class_type): Don't lookup 10550 classes/unions per location anymore. Now that we can compare DIEs 10551 in a fined grain manner, the approximation of the location is not 10552 useful anymore. 10553 (build_pointer_type) 10554 (build_function_type): Associate DIE to type if we reuse an 10555 existing type. 10556 (build_or_get_fn_decl_if_not_suppressed): When re-using a 10557 function decl internal representation from an equivalent DIE that 10558 we've seen before, it can happen that we want to augment that 10559 function decl internal representation with new properties coming 10560 from the DIE we are currently looking at; do that here. 10561 (is_function_for_die_a_member_of_class): Remove the "where_offset" 10562 parameter. 10563 (add_or_update_member_function): Adjust. 10564 * tests/data/test-annotate/libtest23.so.abi: Adjust. 10565 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 10566 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10567 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10568 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 10569 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 10570 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 10571 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 10572 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 10573 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Adjust. 10574 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. 10575 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Adjust. 10576 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. 10577 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 10578 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 10579 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 10580 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 10581 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 10582 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10583 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10584 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 10585 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 10586 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 10587 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 10588 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 10589 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 10590 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 10591 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 10592 105932017-04-14 Dodji Seketeli <dodji@redhat.com> 10594 10595 Speedup access to unreferenced symbols when loading corpus_group 10596 * src/abg-corpus.cc (corpus_group::unrefed_{fun, var}_symbol_map): 10597 New data members. 10598 (corpus_group::priv::priv): Adjust. 10599 (corpus_group::priv::add_unref_{fun,var}_symbols): Define new 10600 member functions. 10601 (corpus_group::add_corpus): Update the map of unreferenced 10602 symbols. 10603 (corpus_group::get_unreferenced_{function,variable}_symbols) 10604 Adjust logic. 10605 106062017-04-07 Dodji Seketeli <dodji@redhat.com> 10607 10608 Initial support of de-serializing the KMI of a Linux Kernel Tree 10609 * include/abg-libxml-utils.h (advance_to_next_sibling_element): 10610 Declare new function. 10611 * src/abg-libxml-utils.cc (go_to_next_sibling_element_or_stay) 10612 (advance_to_next_sibling_element): Define new functions. 10613 * include/abg-reader.h (read_corpus_group_from_input) 10614 (read_corpus_group_from_native_xml) 10615 (read_corpus_group_from_native_xml_file): Declare new functions. 10616 * src/abg-reader.cc (read_context::m_corpus_group): New data 10617 member. 10618 (read_context::{get_corpus_group, set_corpus_group}): Define new 10619 member functions. 10620 (read_translation_unit_from_input): Cleanup logic. 10621 (read_corpus_from_input): Don't assume that the document is 10622 starting with an 'abi-corpus' element. Support the mode where a 10623 caller called the xmlTextReaderExpand function (and so we are 10624 given an expanded xmlNodePtr) and the mode where we need to use 10625 the xmlTextReader API to walk through the 'abi-corpus' element. 10626 Also, if we are building a corpus group, do not clear what used to 10627 be 'per-corpus' data. That data must be shared by all the corpora 10628 of a given abi-corpus-group. 10629 (read_corpus_group_from_input, read_corpus_group_from_native_xml) 10630 (read_corpus_group_from_native_xml_file): Define new functions. 10631 * include/abg-tools-utils.h (FILE_TYPE_XML_CORPUS_GROUP): New 10632 enumerator of the file_type enum. 10633 * src/abg-tools-utils.cc (operator<<): In the overload for 10634 file_type, add a case for the new FILE_TYPE_XML_CORPUS_GROUP. 10635 (guess_file_type): Dectect abi-corpus-group xml element. 10636 * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Define new 10637 static function. 10638 (main): Adjust to handle the new FILE_TYPE_XML_CORPUS_GROUP. That 10639 is, compare two FILE_TYPE_XML_CORPUS_GROUP if they are present. 10640 * tools/abilint.cc (main): Likewise. 10641 * tools/kmidiff.cc (main): Detect that one of two .kmi files are 10642 passed. In that case, load the .kmi file(s), build a corpus_group 10643 of it and use it in the comparison. 10644 106452017-04-06 Dodji Seketeli <dodji@redhat.com> 10646 10647 Initial support of the serialization of the KMI of a Linux Kernel Tree 10648 * include/abg-tools-utils.h (check_dir) 10649 (get_binary_paths_from_kernel_dist) 10650 (build_corpus_group_from_kernel_dist_under): Declare new 10651 functions. The last two functions are being moved from 10652 tools/kmidiff.cc so that they can be re-used. 10653 * include/abg-writer.h (write_corpus): Declare one overload that 10654 takes a write_context parameter. 10655 (write_corpus_group): Declare three overloads of this new function. 10656 * src/abg-tools-utils.cc (check_dir): Define new function. 10657 (load_generate_apply_suppressions, is_vmlinux, is_kernel_module) 10658 (find_vmlinux_and_module_paths) 10659 (get_binary_paths_from_kernel_dist) 10660 (build_corpus_group_from_kernel_dist_under): Define new functions. 10661 * src/abg-writer.cc (write_context::set_annotate): Define new 10662 member function. 10663 (write_corpus): Add an overload that takes a write_context. Adapt 10664 the existing overload to make it use this new one. 10665 (write_corpus_group): Define this new function and two additional 10666 overloads for it. 10667 * tools/kmidiff.cc (set_suppressions, is_vmlinux) 10668 (is_kernel_module, find_vmlinux_and_module_paths) 10669 (get_binary_paths_from_kernel_dist) 10670 (build_corpus_group_from_kernel_dist_under): Remove. 10671 (main): Adjust the call to 10672 build_corpus_group_from_kernel_dist_under as its arguments are now 10673 adapted since it's been factorized out into abg-tools-utils.h. 10674 * tools/abidw.cc (options::corpus_group_for_linux): Define new 10675 data member. 10676 (options::options): Adjust. 10677 (display_usage): Add help strings for the new --linux-tree option. 10678 (load_corpus_and_write_abixml): Factorize this function out of the 10679 main function. 10680 (load_kernel_corpus_group_and_write_abixml): Define new function. 10681 (main): Use the factorized load_corpus_and_write_abixml and the 10682 new load_corpus_and_write_abixml functions. 10683 * tests/test-read-write.cc: Adjust. 10684 * doc/manuals/abidw.rst: Add documentation for the new 10685 --linux-tree option. 10686 106872017-04-06 Dodji Seketeli <dodji@redhat.com> 10688 10689 Adjust test reference outputs after changes in abg-writer.cc 10690 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 10691 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10692 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10693 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 10694 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 10695 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 10696 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10697 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10698 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 10699 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 10700 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 10701 Adjust. 10702 107032017-04-06 Dodji Seketeli <dodji@redhat.com> 10704 10705 Fix indentation glitch before the </abi-corpus> tag in abixml 10706 * src/abg-writer.cc (write_corpus): Indent before emitting the 10707 closing </abi-corpus> tag. 10708 107092017-04-06 Dodji Seketeli <dodji@redhat.com> 10710 10711 Avoid emitting some empty translation units to abixml 10712 * src/abg-writer.cc (write_corpus): Do not emit a translation 10713 unit that appears empty beforehand. 10714 107152017-04-06 Dodji Seketeli <dodji@redhat.com> 10716 10717 Avoid emitting duplicated decls in abixml 10718 * src/abg-writer.cc (write_context::m_emitted_decls_map): New data 10719 member. 10720 (write_context::{decl_name_is_emitted, record_decl_as_emitted}): 10721 Define new memeber functions. 10722 (write_translation_unit): Do not emit a decl that has already been 10723 emitted. 10724 (write_var_decl, write_function): Record the decl as emitted. 10725 107262017-04-04 Dodji Seketeli <dodji@redhat.com> 10727 10728 Rename write_corpus_to_native_xml into write_corpus 10729 * include/abg-writer.h (write_corpus): Rename 10730 write_corpus_to_native_xml to this. 10731 * src/abg-writer.cc (write_corpus): Rename 10732 write_corpus_to_native_xml to this. 10733 * tests/test-read-dwarf.cc (test_task::perform): Adjust. 10734 * tests/test-read-write.cc: Remove a useless "using 10735 abigail::xml_writer::write_corpus_to_native_xml". 10736 * tools/abidw.cc (main): Adjust. 10737 * tools/abilint.cc (main): Adjust. 10738 107392017-04-04 Dodji Seketeli <dodji@redhat.com> 10740 10741 Update the reference output of regression tests after kabidiff work 10742 * tests/data/test-annotate/test0.abi: Adjust. 10743 * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. 10744 * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. 10745 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. 10746 * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. 10747 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 10748 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 10749 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 10750 * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. 10751 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. 10752 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. 10753 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Adjust. 10754 * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. 10755 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 10756 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. 10757 * tests/data/test-read-dwarf/test0.abi: Adjust. 10758 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 10759 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 10760 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 10761 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 10762 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 10763 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 10764 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 10765 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 10766 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 10767 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 10768 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 10769 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 10770 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 10771 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 10772 107732017-06-12 Dodji Seketeli <dodji@redhat.com> 10774 10775 Introduce the --kmi-whitelist option to abidiff 10776 * doc/manuals/abidiff.rst: Add documentation for the 10777 --kmi-whitelist option. 10778 * tools/abidiff.cc (display_usage): Emit help string for the 10779 --kmi-whitelist option 10780 (parse_command_line): Parse the new --kmi-whitelist option, of the 10781 -w shortcut. 10782 107832017-04-04 Dodji Seketeli <dodji@redhat.com> 10784 10785 Make abidw support the --kmi-whitelist option 10786 * tools/abidw.cc (options::{kabi_whitelist_paths, 10787 kabi_whitelist_supprs}): New data members. 10788 (display_usage): Add a help string for the new --kmi-whitelist 10789 option. 10790 (parse_command_line): Parse the new --kmi-whitelist option. 10791 (maybe_check_suppression_files): Check the presence of the linux 10792 kernel abi white list passed by the option --kmi-whitelist. 10793 (main): Ignore loading the symbol table if the kernel abi white 10794 list is provided. 10795 * doc/manuals/abidw.rst: Add documentation for the new option. 10796 107972017-04-03 Dodji Seketeli <dodji@redhat.com> 10798 10799 Make abipkgdiff compare two kernel packages 10800 * include/abg-suppression.h 10801 (variable_suppression::variable_suppression): Add default arguments 10802 to the parameters. 10803 * include/abg-tools-utils.h (dir_exists, dir_is_empty) 10804 (string_begins_with, get_rpm_name, get_rpm_arch, get_deb_name) 10805 (file_is_kernel_package, file_is_kernel_debuginfo_package): 10806 Declare new functions. 10807 * src/abg-tools-utils.cc (dir_exists, dir_is_empty) 10808 (string_begins_with, get_deb_name, get_rpm_name, get_rpm_arch) 10809 (file_is_kernel_package, file_is_kernel_debuginfo_package): Define 10810 new functions. 10811 (gen_suppr_spec_from_kernel_abi_whitelist): The kernel ABI 10812 whitelist is made of ELF symbols names that ought to match 10813 functions *and* variables that have ELF symbols with those names. 10814 So generate variable suppression specifications as well. Not just 10815 function suppression specifications. 10816 * tools/abipkgdiff.cc (options::{kabi_whitelist_package, 10817 show_symbols_not_referenced_by_debug_info, kabi_whitelist_paths, 10818 kabi_suppressions}): New data members. 10819 (options::options): Adjust. 10820 (package::KIND_KABI_WHITELISTS): New enumerator in the 10821 package::kind enum. 10822 (package::kabi_whitelist_package_): New data member. 10823 (package::{base_name, kabi_whitelist_package, }): New member 10824 functions. 10825 (display_usage): Add a help string to the new 10826 --linux-kernel-abi-whitelist and --no-unreferenced-symbols 10827 options. 10828 (parse_command_line): Parse the new --no-unreferenced-symbols, 10829 --linux-kernel-abi-whitelist and --lkaw-pkg options. 10830 (maybe_check_suppression_files): Check the presence of kabi 10831 whitelist files. 10832 (set_diff_context_from_opts): Consider (not) showing symbols not 10833 referenced by debug info. 10834 (compare): If we are looking at linux kernel packages, take the 10835 kernel abi whitelist into account, apply the suppressions 10836 resulting from the kabi whitelists to the ELF read context. 10837 (maybe_collect_kabi_whitelists) 10838 (get_kabi_whitelists_from_arch_under_dir) 10839 (maybe_handle_kabi_whitelist_pkg, maybe_collect_kabi_whitelists) 10840 (get_interesting_files_under_dir): Define new functions. 10841 (maybe_update_vector_of_package_content): Take a new 10842 file_name_to_look_for parameter. 10843 (create_maps_of_package_content) 10844 (extract_package_and_map_its_content): Consider the case of the 10845 package being a linux kernel package. 10846 (main): Take the potential --lkaw-pkg into account. 10847 * doc/manuals/abipkgdiff.rst: Add documentation for options 10848 --linux-kernel-abi-whitelist, --lkaw-pkg and 10849 --no-unreferenced-symbols. 10850 108512017-04-03 Dodji Seketeli <dodji@redhat.com> 10852 10853 Avoid loading a translation unit twice from abixml 10854 * src/abg-reader.cc (read_translation_unit): Take (in parameter) a 10855 reference as the resulting translation unit. 10856 (get_or_read_and_add_translation_unit): Define new static 10857 function. 10858 (read_context::get_scope_for_node) 10859 (read_translation_unit_from_input): Use the new 10860 get_or_read_and_add_translation_unit. 10861 108622017-04-03 Dodji Seketeli <dodji@redhat.com> 10863 10864 Support loading and comparing two kernel trees 10865 * include/abg-dwarf-reader.h (set_read_context_corpus_group) 10866 (read_and_add_corpus_to_group_from_elf, set_ignore_symbol_table) 10867 (get_ignore_symbol_table): Declare new functions. 10868 * abg-dwarf-reader.cc (read_context::options_type): Define new 10869 type. 10870 (die_dependant_container_set::clear): Define new member function. 10871 (read_context::{bss, tesxt, rodata, data, data1}_section_): Add 10872 new data members. 10873 (read_context::{symbol_versionning_sections_loaded_, 10874 symbol_versionning_sections_found_}): Likewise. 10875 (read_context::corpus_group_): Likewise. 10876 (read_context::{load_in_linux_kernel_mode, load_all_types, 10877 show_stats, do_log_}): Replace these options by .. 10878 (read_context::options_): ... this instance of the new 10879 read_context:options_type. 10880 (read_context::read_context): Adjust. 10881 (read_context::{clear_alt_debug_info_data, clear_per_corpus_data, 10882 env, get_data_section_for_variable_address, load_all_types, 10883 load_in_linux_kernel_mode, show_stats, do_log}): Adjust. 10884 (create_read_context): Adjust. 10885 (read_context::~read_context): Define destructor. 10886 (read_context::{options, bss_section, text_section, 10887 rodata_section, data_section, data1_section, current_corpus_group, 10888 has_corpus_group, main_corpus_from_current_group, 10889 main_corpus_from_current_group, 10890 current_corpus_is_main_corpus_from_current_group, 10891 should_reuse_type_from_corpus_group}): Define new member 10892 functions. 10893 (read_context::get_die_qualified_type_name): Handle the name of 10894 the current translation unit. 10895 (read_context::load_symbol_maps): Really don't load (linux kernel 10896 specific) symbol maps if we were told to ignore the ELF symbol 10897 table. 10898 (set_ignore_symbol_table, get_ignore_symbol_table) 10899 (create_default_var_sym, create_default_fn_sym, add_symbol_to_map) 10900 (set_read_context_corpus_group) 10901 (read_and_add_corpus_to_group_from_elf): Define new functions. 10902 (build_type_decl, build_typedef_type, build_enum_type) 10903 (add_or_update_class_type) 10904 (add_or_update_union_type): Reuse the type being built, from the 10905 main corpus of the corpus group. 10906 (build_qualified_type): Cleanup logic. 10907 (build_var_decl, build_function_decl): Create a default symbol for 10908 the variable or function if we are supposed to ignore the symbol 10909 table of the current binary. Add that symbol to the symbol table 10910 that is created in the read context. 10911 (read_debug_info_into_corpus): Don't load the ELF symbol table 10912 information if we are asked to ignore the symbol table. But set 10913 the symbol table that we built artificially while loading 10914 functions and variables, into the ABI corpus being built. 10915 (read_context::maybe_adjust_var_sym_address): Adjust. 10916 (build_ir_node_from_die): Add ir node to its logical scope. For 10917 the C language, the scope of a type is the global scope. 10918 (read_corpus_from_elf): Don't load ELF properties if we were asked 10919 to avoid the ELF symbol table. 10920 * include/abg-comparison.h (compute_diff): Declare ... 10921 * src/abg-comparison.cc (compute_diff): ... an overload to compare 10922 corpus_group. 10923 * tools/kmidiff.cc: New tool. 10924 109252017-03-31 Dodji Seketeli <dodji@redhat.com> 10926 10927 Initial support to lookup types per location 10928 * include/abg-fwd.h (get_name_of_qualified_type) 10929 (get_name_of_reference_to_type, lookup_basic_type_per_location) 10930 (lookup_class_type_per_location, lookup_union_type_per_location) 10931 (lookup_enum_type_per_location, lookup_typedef_type) 10932 (lookup_typedef_type_per_location, lookup_pointer_type) 10933 (lookup_reference_type, lookup_type_per_location) 10934 (lookup_type_through_translation_units) 10935 (lookup_type_from_translation_unit, odr_is_relevant): Declare new 10936 functions or new function overloads. 10937 * include/abg-ir.h (location::expand): Declare new member 10938 function. 10939 (type_maps::empty): Likewise. 10940 (operator|=): Declare an overload for qualified_type_def::CV. 10941 (get_string_representation_of_cv_quals) 10942 (get_name_of_qualified_type, lookup_qualified_type): Declare new functions. 10943 * src/abg-ir.cc (location::expand): Define new member function. 10944 (type_maps::empty): Likewise. 10945 (odr_is_relevant): Likewise. 10946 (get_string_representation_of_cv_quals) 10947 (get_name_of_reference_to_type, get_name_of_qualified_type) 10948 (lookup_union_type_per_location): Define new functions or overloads. 10949 (lookup_basic_type, lookup_enum_type, lookup_typedef_type) 10950 (lookup_qualified_type, lookup_pointer_type) 10951 (lookup_reference_type, lookup_type_from_translation_unit) 10952 (lookup_basic_type_per_location, lookup_basic_type_per_location) 10953 (lookup_class_type_per_location, lookup_class_type_per_location) 10954 (lookup_enum_type_per_location, lookup_enum_type_per_location) 10955 (lookup_typedef_type_per_location) 10956 (lookup_typedef_type_per_location, lookup_type_per_location): 10957 Define new overloads. 10958 (maybe_update_types_lookup_map) 10959 (maybe_update_types_lookup_map<class_decl>) 10960 (maybe_update_types_lookup_map<function_type>): Add a new 10961 use_type_name_as_key parameter. If it's false, then associates 10962 the type to its location rather than to its name. 10963 (maybe_update_types_lookup_map): In the overloads for type_decl, 10964 class_decl, union_decl, enum_type, typedef_decl, array_type_def, 10965 record the type in the lookup map per location, in addition to the 10966 per-name recording. 10967 (qualified_type_def::build_name): Use the new 10968 get_name_of_qualified_type. 10969 (qualified_type_def::get_cv_quals_string_prefix): Use the new 10970 get_string_representation_of_cv_quals. 10971 (operator|=): Define a new overload for qualified_type_def::CV. 10972 (pointer_type_def::get_qualified_name): Use the new 10973 get_name_of_pointer_to_type. 10974 (reference_type_def::get_qualified_name): Use the new 10975 get_name_of_reference_to_type. 10976 109772017-03-30 Dodji Seketeli <dodji@redhat.com> 10978 10979 Create a Corpus Group API extension 10980 * include/abg-corpus.h (corpus::{find_translation_unit, 10981 get_type_per_loc_map}): Declare new member functions. 10982 (corpus::{get_architecture_name, is_empty}): Make these member functions 10983 const. 10984 (corpus::{get_sorted_fun_symbols, get_functions, get_variables, 10985 get_unreferenced_function_symbols, 10986 get_unreferenced_variable_symbols}): Make these member functions 10987 virtual. 10988 (class corpus_group): Declare a new type. 10989 * include/abg-fwd.h (corpus_sptr, corpus_group_sptr) 10990 (string_tu_map_type, istring_var_decl_ptr_map_type) 10991 (istring_function_decl_ptr_map_type): Define new typedefs. 10992 * src/abg-corpus-priv.h (corpus_priv::{path_tu_map, 10993 type_per_loc_map_}): Add new data members. 10994 * src/abg-corpus.cc (corpus_add): Complete the function comment. 10995 Assert that at most one translation unit of a given path can be 10996 added to the corpus. 10997 (corpus::{find_translation_unit, get_type_per_loc_map}): Define 10998 new member functions. 10999 (corpus::{get_architecture_name}): Make this member function 11000 const. 11001 (struct corpus_group::priv): Define new type. 11002 (corpus_group::{corpus_group, ~corpus_group, add_corpus, 11003 get_corpora, is_empty, get_functions, get_variables, 11004 get_var_symbol_map, get_fun_symbol_map, get_sorted_fun_symbols, 11005 get_sorted_var_symbols, get_unreferenced_function_symbols, 11006 get_unreferenced_variable_symbols}): Define member functions of 11007 the new corpus_group type. 11008 110092017-07-03 Dodji Seketeli <dodji@redhat.com> 11010 11011 Fix some typos in abidiff.cc 11012 * tools/abidiff.cc (main): Fix typos. 11013 110142017-07-03 Dodji Seketeli <dodji@redhat.com> 11015 11016 Avoid comparing kernel.img file from the grub2 package 11017 * default.abignore: Do not compare kernel.img files. 11018 110192017-06-14 Dodji Seketeli <dodji@redhat.com> 11020 11021 Bug 21567 - Fedabipkgdiff matches build distro names too tightly 11022 * tools/fedabipkgdiff (get_distro_from_string): Define new function. 11023 (Brew.get_package_latest_build): Also consider builds which distro 11024 property is less than the expected distro string that we were 11025 given. 11026 110272017-06-14 Sinny Kumari <sinny@redhat.com> 11028 11029 Check if return_codes list is empty in fedabipkgdiff 11030 * tools/fedabipkgdiff (run_abipkgdiff()): Check if 11031 return_codes list is empty 11032 110332017-06-13 Dodji Seketeli <dodji@redhat.com> 11034 11035 Do not forget to erase temporary directories in abipkgdiff 11036 * tools/abipkgdiff.cc (maybe_erase_temp_dirs): Define new static 11037 function. 11038 (compare): Call the new maybe_erase_temp_dirs on all return 11039 points. 11040 110412017-05-11 Ben Woodard <woodard@redhat.com> 11042 11043 Fix more clang build warnings 11044 * include/abg-ini.h (config::section::priv): Make this be a class, 11045 not a struct. 11046 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir) 11047 (build_ir_node_from_die): Add parenthesis around assignment 11048 expressions inside conditional expression. 11049 * src/abg-suppression.cc (read_function_suppression): Likewise. 11050 110512017-05-11 Ben Woodard <woodard@redhat.com> 11052 11053 Fix some clang compile problems 11054 * include/abg-comp-filter.h (class filter_base): Declare this as a 11055 struct. 11056 * include/abg-comparison.h (class filtering::filter_base): 11057 Likewise. 11058 (struct diff_traversable_base): Declare this as a class. 11059 * include/abg-ir.h (function_decl::parameter): Declare this before 11060 using it. 11061 * src/abg-corpus.cc 11062 (corpus::priv::build_unreferenced_symbols_tables): Add missing 11063 parenthesis around assignment expressions inside conditional 11064 expressions. 11065 110662017-05-21 Sinny Kumari <sinny@redhat.com> 11067 11068 Add --self-compare option in fedabipkgdiff 11069 * bash-completion/fedabipkgdiff: Add new option --self-compare 11070 * tests/data/Makefile.am: Add new test file 11071 * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: 11072 New reference output for testing ABI comparison on same package 11073 * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): 11074 Add test case for --self-compare 11075 * tools/fedabipkgdiff (build_commandline_args_parser()): Add 11076 new option --self-compare 11077 (generate_comparison_halves()): Find second comparision half in same 11078 package list while doing self-compare 11079 (self_compare_rpms_from_distro()): New function to perform ABI 11080 comparision on same pacakge 11081 (main()): Add if condition when --self-compare option is enabled 11082 110832017-03-31 Dodji Seketeli <dodji@redhat.com> 11084 11085 Avoid building DIE -> parent DIE map when analyzing a C binary 11086 * include/abg-ir.h (global_scope_sptr): Make this be a share_ptr 11087 of scope_decl, not of global_scope. 11088 (translation_unit::get_global_scope): Return a reference to 11089 scope_decl_sptr. 11090 * src/abg-ir.cc (translation_unit::get_global_scope): Return a 11091 scope_decl not a global_scope. 11092 * src/abg-dwarf-reader.cc (read_context::nil_scope_): Add new data 11093 member. 11094 (read_context::{global_scope, nil_scope}): Define new member functions. 11095 (read_context::build_die_parent_maps): Do not build the map if we 11096 are looking at a C (or asm) translation unit. 11097 (get_scope_die, get_scope_for_die): If we are looking at a C 11098 translation unit then do return the global scope. 11099 111002017-04-06 Dodji Seketeli <dodji@redhat.com> 11101 11102 Speed up access to the definition of a class declaration-only type 11103 * include/abg-ir.h 11104 (class_or_union::get_naked_definition_of_declaration): Declare a 11105 new member function. 11106 (class_decl::get_naked_definition_of_declaration): Likewise. 11107 * src/abg-ir.cc ({type_decl, qualified_type_def, 11108 array_type_def, enum_type_decl}::operator==): Use the 11109 get_naked_canonical_type and get_naked. 11110 (class_or_union::priv::naked_definition_of_declaration_): Define 11111 new data member. 11112 (class_or_union::priv::priv): Adjust to initialize the new data 11113 member. 11114 (class_or_union::get_naked_definition_of_declaration): Define new 11115 member function. 11116 ({class_or_union, class_decl}::operator==): Use the new 11117 get_naked_definition_of_declaration instead of 11118 get_definition_of_declaration. 11119 (equals): In the overload for class_or_union, do the same. 11120 (class_decl::get_naked_definition_of_declaration): Define new 11121 member function. 11122 (hash_type_or_decl): Likewise. 11123 111242017-04-06 Dodji Seketeli <dodji@redhat.com> 11125 11126 Speedup comparison of decl-only classes 11127 * src/abg-ir.cc (equals): In the overload for class_decl, if we 11128 are looking at a decl-only class, then directly call the equals 11129 function for class_or_union. That one knows how to perform the 11130 comparison without calling the 11131 class_or_union::priv_->comparison_started function, in that case. 11132 111332017-04-04 Dodji Seketeli <dodji@redhat.com> 11134 11135 Update the description of what abipkgdiff does 11136 * tools/abipkgdiff.cc: Update the description of the sequence of 11137 actions performed. 11138 111392017-04-06 Dodji Seketeli <dodji@redhat.com> 11140 11141 Misc cleanups in abg-writer.cc 11142 * src/abg-writer.cc (class write_context): Fix indentation. 11143 (write_location, write_visibility, write_binding) 11144 (write_array_size_and_alignment, write_size_and_alignment): Fix 11145 these declarations to use the *_sptr typedefs rather than the 11146 explicit shared_ptr<*> types. 11147 (write_translation_unit): Fix comment. 11148 111492017-05-10 Dodji Seketeli <dodji@redhat.com> 11150 11151 Don't consider changes to basic types as being redundant 11152 * include/abg-comparison.h (is_diff_of_basic_type) 11153 (has_basic_type_change_only): Declare these functions ... 11154 * src/abg-comparison.cc (is_diff_of_basic_type) 11155 (has_basic_type_change_only): ... and define them. 11156 (redundancy_marking_visitor::visit_begin): Use the new 11157 has_basic_type_change_only. 11158 * tests/data/test-diff-filter/libtest37-v0.so: New binary test input. 11159 * tests/data/test-diff-filter/libtest37-v1.so: Likewise. 11160 * tests/data/test-diff-filter/test37-report-0.txt: New test 11161 reference output. 11162 * tests/data/test-diff-filter/test37-v0.cc: Source code of the new 11163 binary test input. 11164 * tests/data/test-diff-filter/test37-v1.cc: Likewise. 11165 * tests/data/Makefile.am: Update to add the new test material to 11166 the source distribution. 11167 * tests/test-diff-filter.cc (in_out_spec): Add the new test input 11168 to this test harness. 11169 111702017-05-10 Dodji Seketeli <dodji@redhat.com> 11171 11172 Rename fn_parm_diff::get_type_diff into fn_parm_diff::type_diff 11173 * include/abg-comparison.h (fn_parm_diff::type_diff): Renamed 11174 fn_parm_diff::get_type_diff intot his. 11175 * src/abg-comparison.cc (fn_parm_diff::type_diff): Likewise. 11176 (fn_parm_diff::report): Adjust. 11177 (redundancy_marking_visitor::visit_begin): Likewise. 11178 (is_diff_of_variadic_parameter): Likewise. 11179 111802017-05-03 Dodji Seketeli <dodji@redhat.com> 11181 11182 Invalidate function and variable ID cache when invoking ::set_symbol 11183 * src/abg-ir.cc ({function, var}_decl::set_symbol): Invalidate the 11184 ID cache. 11185 111862017-05-03 Dodji Seketeli <dodji@redhat.com> 11187 11188 Remove useless overloads of is_type 11189 * include/abg-fwd.h (is_type): Remove the overloads that take 11190 decl_base and type_base types. 11191 * src/abg-ir.cc (is_type): Likewise. 11192 111932017-05-04 Dodji Seketeli <dodji@redhat.com> 11194 11195 Ensure build_qualified_type can return non-qualified types 11196 * src/abg-dwarf-reader.cc (build_qualified_type): Return a 11197 type_base_sptr. 11198 (build_ir_node_from_die): Adjust the call to build_qualified_type. 11199 112002017-05-04 Dodji Seketeli <dodji@redhat.com> 11201 11202 Fix array subranges (wrongly) having the same lower bound 11203 * src/abg-dwarf-reader.cc (build_subranges_from_array_type_die): 11204 Consider the 'lower_bound' parameter as the default lower bound 11205 for each sub-ranges. 11206 112072017-03-31 Dodji Seketeli <dodji@redhat.com> 11208 11209 Fix buffer overrun in 'equals' function for arrays 11210 * src/abg-ir.cc (equals): In the overload for arrays, check for 11211 the end of the subranges of the two arrays, not just for the first 11212 one. 11213 112142017-04-18 Dodji Seketeli <dodji@redhat.com> 11215 11216 Fix a race condition in queue::priv::do_bring_workers_down 11217 * src/abg-workers.cc (queue::priv::tasks_todo_mutex): Make this 11218 data member mutable. 11219 (more_tasks_to_execute): 11220 (queue::priv::do_bring_workers_down): Update the 11221 queue::priv::bring_workers_down only in the critical section 11222 defined by queue::priv::queue_cond_mutex. 11223 (worker::wait_to_execute_a_task): Testing for 11224 queue::priv::bring_workers_down is done in the critical section 11225 defined by queue::priv::queue_cond_mutex. The loop over waiting 11226 ont the condition is also in the critical section, as it ought to 11227 be. 11228 * tests/test-read-write.cc (struct test_task): New type. 11229 (main): Express in terms of the new test_task type. 11230 112312017-04-12 Ondrej Oprala <ondrej.oprala@gmail.com> 11232 11233 cppcheck: mitigate performance warnings 11234 * include/abg-diff-utils.h (print_snake): pass argument of type 11235 snake by const reference. 11236 * include/abg-ir.h (location::operator{==,<}): Likewise. 11237 * include/abg-viz-dot.h (node_base::{node_base,parent_node,child_node}): 11238 Likewise. 11239 * include/abg-viz-svg.h (svg::svg) Likewise. 11240 * src/abg-config.cc (config::config): Member initialization in ctor body. 11241 * src/abg-dwarf-reader.cc (class_decl_sptr::add_or_update_class_type): 11242 Initial value never used. 11243 * src/abg-ir.cc: (decl_base::priv::priv) Member initialization in ctor body, 11244 pass argument of type location by const reference. 11245 (equals): Variable initial value never used. 11246 * src/abg-reader.cc (read_corpus_from_input): Initial variable 11247 value never used. 11248 (build_elf_symbol_db): Use pre-increment. 11249 * src/abg-suppression-priv.h 11250 (suppression_matches_type_location): Pass argument of type 11251 location by const reference. 11252 * src/abg-suppression.cc: Likewise. 11253 112542017-04-11 Ondrej Oprala <ondrej.oprala@gmail.com> 11255 11256 Fix cppcheck error: "Same iterator is used with different containers" 11257 * src/abg-dwarf-reader.cc 11258 (type_or_decl_base_sptr::lookup_artifact_from_per_tu_die_representation): 11259 Fix an error found by cppcheck. 11260 112612017-04-11 Ondrej Oprala <ondrej.oprala@gmail.com> 11262 11263 Clean up scripts/* 11264 * scripts/dot_to_png.sh: Clean up the script according to 11265 shellcheck warnings and remarks. 11266 * scripts/dot_to_svg.sh: Likewise. 11267 * scripts/svg_to_plain_svg.sh: Likewise. 11268 * scripts/svg_to_png_and_pdf.sh: Likewise. 11269 112702017-04-12 Ondrej Oprala <ondrej.oprala@gmail.com> 11271 11272 Fix comparison used instead of an assignment 11273 * src/abg-ir.cc (parse_integral_type): An attempt at clang 11274 compilation has discovered there to be a comparison with 11275 unused result, that apparently should be an assignment. 11276 112772017-04-12 Dodji Seketeli <dodji@redhat.com> 11278 11279 Fix some random deadlock while running fedabipkgidiff in tests 11280 * tools/fedabipkgdiff (abipkgidff): Do not use Popen.communicate() 11281 as it might hang if the data is large. Rather, busy wait for the 11282 abipkgdiff process to finish and then get its output. 11283 112842017-03-22 Slava Barinov <v.barinov@samsung.com> 11285 11286 Fix types in header to meet sources 11287 * include/abg-fwd.h: Include stdint.h for uint64_t. 11288 (ir::set_data_member_offset): Take uint64_t rather than size_t. 11289 (ir::get_data_member_offset): Return uint64_t rather than size_t. 11290 112912017-03-24 Dodji Seketeli <dodji@redhat.com> 11292 11293 Launch fedabipkgdiff tests first 11294 * tests/Makefile.am: Run the fedabipkgdiff test first. 11295 112962017-03-24 Dodji Seketeli <dodji@redhat.com> 11297 11298 Bug 21296 - Reporting diff of const ref against non-const ref aborts 11299 * include/abg-fwd.h (look_through_no_op_qualified_type): Declare 11300 new function. 11301 * src/abg-ir.cc (look_through_no_op_qualified_type): Define it. 11302 (compute_diff_for_types): Use the new 11303 look_through_no_op_qualified_type here rather than open-coding it. 11304 (equals): In the overload for function_decl::parameter, use the 11305 new look_through_no_op_qualified_type function. 11306 * tests/data/test-diff-dwarf/test40-PR21296-clanggcc.cc: Source 11307 code of the new test inputs. 11308 * tests/data/test-diff-dwarf/test40-PR21296-clanggcc-report0.txt: 11309 New test input. 11310 * tests/data/test-diff-dwarf/test40-PR21296-libgcc.so: New binary 11311 test input. 11312 * tests/data/test-diff-dwarf/test40-PR21296-libclang.so: Likewise. 11313 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs to 11314 the test harness. 11315 113162017-03-05 Chenxiong Qi <cqi@redhat.com> 11317 11318 Bug 20087 - Clean cache before or after ABI comparison 11319 * configure.ac: Require shutil module. 11320 * doc/manuals/fedabipkgdiff.rst: Add document for new option 11321 clean-cache, clean-cache-before, and clean-cache-after. 11322 * tools/fedabipkgdiff (build_commandline_args_parser): Add new 11323 option --clean-cache, --clean-cache-before and 11324 --clean-cache-after. 11325 (diff_local_rpm_with_latest_rpm_from_koji): Delete download 11326 cache directory before or after downloading RPMs. 11327 (diff_latest_rpms_based_on_distros): Likewise. 11328 (diff_two_nvras_from_koji): Likewise. 11329 (diff_from_two_rpm_files): Likewise. 11330 * bash-completion/fedabipkgdiff: Add new options. 11331 * tests/mockfedabipkgdiff.in (get_download_dir): Rewrite to 11332 behave just like the original get_download_dir. 11333 (mock_get_download_dir): Removed. 11334 (DOWNLOAD_CACHE_DIR): New global variable pointing directory 11335 holding packages during tests. 11336 (run_fedabipkgdiff): Mock original get_download_dir with the 11337 rewrite get_download_dir. 11338 * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): 11339 Add --clean-cache to run tests to ensure no regression. 11340 113412017-03-17 Dodji Seketeli <dodji@redhat.com> 11342 11343 Shut down a helgrind false positive in the "system" libc call 11344 * tests/test-valgrind-suppressions.supp: Add a suppression that 11345 occurs during an internal libc signal handling occasion. 11346 113472017-03-15 Dodji Seketeli <dodji@redhat.com> 11348 11349 Fix data race on worker::queue::priv::bring_workers_down 11350 * src/abg-workers.cc (worker::wait_to_execute_a_task): Protect the 11351 read of the queue::priv::bring_workers_down down variable with the 11352 queue::priv::tasks_todo_mutex. 11353 113542017-03-07 Dodji Seketeli <dodji@redhat.com> 11355 11356 Bug 21228 - Handle cloning union member functions 11357 * include/abg-ir.h (class_or_union::add_member_function): Move the 11358 class_decl::add_member_function overload declaration into the 11359 class class_or_union class. 11360 (class class_decl): Make the class class_or_union be a friend of 11361 class_decl. 11362 * src/abg-ir.cc (class_decl::add_member_function): Transform the 11363 definition of this overload into ... 11364 (class_or_union::add_member_function): ... this one. Make sure 11365 that when setting the virtual-ness attributes of the member 11366 function, we are effectively looking at the a function that is a 11367 member of a class. 11368 (function_decl::clone): Do not assert that a member function is 11369 necessarily a member of a class_decl. It can also a member of a 11370 union_decl!. So, rather, assert that the scope of the member 11371 function is of type class_or_union. 11372 * tests/data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64.rpm: 11373 New test input RPM. 11374 * tests/data/test-diff-pkg/tbb-2017-9.20170118.fc27.x86_64.rpm: 11375 * tests/data/test-diff-pkg/tbb-debuginfo-2017-8.20161128.fc26.x86_64.rpm: 11376 Likewise. 11377 * tests/data/test-diff-pkg/tbb-debuginfo-2017-9.20170118.fc27.x86_64.rpm: 11378 Likewise. 11379 * tests/data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64--tbb-2017-9.20170118.fc27.x86_64.txt: 11380 New reference test output. 11381 * tests/data/Makefile.am: Add the new test input RPMs to the 11382 source distribution. 11383 * tests/test-diff-pkg.cc (in_out_specs): Take the new input tests 11384 above into account. 11385 113862017-03-03 Dodji Seketeli <dodji@redhat.com> 11387 11388 Consider file path when sorting virtual member functions 11389 * src/abg-ir.cc (virtual_member_function_less_than::operator()): 11390 Take the file path into account in the sorting. 11391 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 11392 Adjust. 11393 113942017-03-03 Dodji Seketeli <dodji@redhat.com> 11395 11396 Fix virtual members sorting to unbreak the build on EL6 11397 * src/abg-ir.cc (virtual_member_function_less_than::operator()): 11398 Update comment. When two virtual functions have the same virtual 11399 index and one of them has no ELF symbol, then that function is 11400 less than the one with an ELF symbol. 11401 * tests/data/Makefile.am: Remove 11402 test-annotate/{test9-pr18818-clang.so.abi, test11-pr18828.so.abi, 11403 test12-pr18844.so.abi, test16-pr18904.so.abi, 11404 test22-pr19097-libstdc++.so.6.0.17.so.abi}. 11405 * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Remove. 11406 * tests/data/test-annotate/test11-pr18828.so.abi: Likewise. 11407 * tests/data/test-annotate/test12-pr18844.so.abi: Likewise. 11408 * tests/data/test-annotate/test16-pr18904.so.abi: Likewise. 11409 * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: 11410 Likewise. 11411 * tests/test-annotate.cc (in_out_specs): Remove those tests above 11412 which input files have been removed. 11413 114142017-03-02 Dodji Seketeli <dodji@redhat.com> 11415 11416 Make Helgrind suppressions less specific to libgcc_s version 11417 * tests/test-valgrind-suppressions.supp: Make Helgrind 11418 suppressions less specific to libgcc_s version. 11419 114202017-03-02 Dodji Seketeli <dodji@redhat.com> 11421 11422 More Helgrind suppressions 11423 * tests/test-valgrind-suppressions.supp: More specific suppressions. 11424 114252017-03-02 Dodji Seketeli <dodji@redhat.com> 11426 11427 Silence Helgrind reports about exception stack unwinding 11428 * tests/test-valgrind-suppressions.supp: Silence Helgrind reports 11429 about exception stack unwinding. 11430 114312017-03-01 Dodji Seketeli <dodji@redhat.com> 11432 11433 Make the helgrind suppressions less specific 11434 * tests/test-valgrind-suppressions.supp: Make the ostream writting 11435 suppressions be less specific so that they can apply to all the 11436 related false positives. 11437 114382017-03-01 Dodji Seketeli <dodji@redhat.com> 11439 11440 Move test-read-dwarf.cc to abigail::workers 11441 * tests/test-read-dwarf.cc (iospec, spec_lock, write_lock) 11442 (out_abi_base, in_elf_base, in_abi_base): Remove these global 11443 variables. 11444 (handle_in_out_spec): Remove this. 11445 (struct test_task): Write this task that does what 11446 handle_in_out_spec was doing. 11447 (test_task_sptr): Define new typedef. 11448 (main): Remove the pthreads artifacts. Use the new test_task type 11449 along with the abigail::workers interface. 11450 * tests/test-valgrind-suppressions.supp: Add more helgrind 11451 suppressions for ostream writting false positives. 11452 114532017-02-28 Dodji Seketeli <dodji@redhat.com> 11454 11455 Display the command that failed the runtestfedabipkgdiff.py test 11456 * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): When 11457 A test fails, display the fedabipkgdiff command that triggered the failure. 11458 114592017-02-24 Dodji Seketeli <dodji@redhat.com> 11460 11461 Make abipkgdiff.cc use the abigail::workers interface 11462 * tools/abipkgdiff.cc: Remove ftw.h, pthread.h, unistd.h, add 11463 fts.h and abg-workers.h. 11464 (verbose, elf_file_paths_tls_key, reports_map, env_map, map_lock) 11465 (arg_lock, prog_options): Remove all these global variables. 11466 (struct package_descriptor): Remove this type. 11467 (pthread_routine_extract_package) 11468 (first_package_tree_walker_callback_fn) 11469 (second_package_tree_walker_callback_fn, pthread_routine_compare) 11470 (pthread_join, pthread_routine_extract_pkg_and_map_its_content): 11471 Remove these functions. 11472 (options::{num_workers, verbose}): Define new data members. 11473 (options::options): Initialize the new verbose and num_workers data members. 11474 (package::erase_extraction_directory) 11475 (erase_created_temporary_directories_parent): Take the program 11476 options in parameter. Don't use the global verbose variable 11477 anymore. 11478 (package::erase_extraction_directories) 11479 (erase_created_temporary_directories, extract_package): Take the 11480 program options in parameter. 11481 (extract_rpm, extract_deb, extract_tar): Likewise. And don't use 11482 the global verbose variable anymore. 11483 (compare): Don't use the global verbose variable anymore. Use the 11484 new compare_task type along with the abigail::workers::queue type. 11485 (pkg_extraction_task, pkg_prepare_task, compare_task) 11486 (comparison_done_notify): Define new classes. 11487 (maybe_update_vector_of_package_content): Define new static 11488 function. 11489 (create_maps_of_package_content): Don't take the ftw_cp_type 11490 anymore. Don't use the global verbose variable anymore. Use the 11491 fts_{open,read,close} functions, rather than the ftw one. 11492 (extract_package_and_map_its_content): Don't use pthreads anymore. 11493 Use the new pkg_extraction_task type created along with the 11494 abigail::workers::queue type. 11495 (prepare_packages): Don't use pthreads anymore. Use the new 11496 pkg_prepare_task type along with the abigail::workers::queue type. 11497 (elf_size_is_greater): Adjust to use 11498 abigail::workers::queue::tasks, rather than the previous 11499 compaer_args_sptr type. 11500 (parse_command_line): Adjust to stop using the global verbose 11501 variable. 11502 (main): Remove use of global variables prog_options and also the 11503 packages variable. 11504 * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: 11505 Adjust. 11506 * tests/data/test-diff-pkg/dirpkg-0-report-0.txt: Likewise. 11507 * tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt: 11508 Likewise. 11509 * tests/data/test-diff-pkg/test-rpm-report-0.txt: Likewise. 11510 * tests/data/test-diff-pkg/test-rpm-report-1.txt: Likewise. 11511 * tests/data/test-diff-pkg/test-rpm-report-2.txt: Likewise. 11512 * tests/data/test-diff-pkg/test-rpm-report-3.txt: Likewise. 11513 * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: 11514 Likewise. 11515 * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: 11516 Likewise. 11517 * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: 11518 Likewise. 11519 * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: 11520 Likewise. 11521 * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: 11522 Likewise. 11523 115242017-02-24 Dodji Seketeli <dodji@redhat.com> 11525 11526 Do not ignore valgrind checks returning an error 11527 * autoconf-archive/ax_valgrind_check.m4 (check-valgrind): Don't 11528 ignore errors. 11529 115302017-02-24 Dodji Seketeli <dodji@redhat.com> 11531 11532 Add a "make check-valgrind-helgrind-recursive" target 11533 * tests/Makefile.am (check-valgrind-helgrind-recursive): New 11534 target to run the tests recursively under the control of 11535 Valgrind's Helgrind tool. 11536 * tests/test-valgrind-suppressions.supp: Update this suppression 11537 file with suppressions for Helgrind. 11538 115392017-02-24 Dodji Seketeli <dodji@redhat.com> 11540 11541 Several fixes and enhancements to abigail::workers 11542 * Don't try to schedule a task if the pointer to the task is nil 11543 * Fix a data race when bringing workers (of a queue) down 11544 * Always try to wake up all waiting threads when bringing down queue 11545 workers. 11546 * Fix a data race when accessing the queue condition variable 11547 * Fix a data race when notifying listeners about the end of the job 11548 performed by the task. 11549 Enhancements 11550 ============ 11551 * Pass the "task done" notifier by reference, to the worker queue. 11552 Without this, the worker queue needs to copy the "task done" notifier 11553 by value. This implies that user code needs to provide task done 11554 notifier instances that come with potentially complicated copy 11555 constructors. By passing it by reference and by just re-using the 11556 notifier from the user code, we do away with the need for copying 11557 altogether. This also fixes some latent copying bugs. 11558 * Add a workers::queue::schedule_tasks() method 11559 This allows user code to schedule a vector of tasks at once. 11560 * make workers::queue::get_completed_tasks() return a non-const vector 11561 This enables user code to sort the completed tasks as they wish. 11562 * include/abg-workers.h (queue::tasks_type): New typedef. 11563 (queue::queue): Pass task_done_notify by reference. 11564 (queue::schedule_tasks): Declare new member function. 11565 (queue::get_completed_tasks): Return non-const vector. 11566 * src/abg-workers.cc (queue::priv::default_notify): New data 11567 member. 11568 (queue::priv::notify): Make this data member be a reference. 11569 (queue::priv::priv): Initialize the notify data member to either 11570 the new default_notify (if no notifier is provided by the 11571 constructor) or to the notifier provided by the constructor. 11572 (queue::priv::schedule_task): Do not schedule a nil task. Update 11573 comment. 11574 (queue::priv::schedule_tasks): Add a new member function. 11575 (queue::priv::do_bring_workers_down): Update comment. Protect 11576 access to "bring_workers_down" with tasks_todo_mutex to prevent a 11577 data race. Call pthread_cond_broadcast on the queue_cond 11578 unconditionaly to prevent some worker threads to keep waiting for 11579 ever. Also, protect the access to the queue_cond by the 11580 queue_cond_mutex to precent a data race. 11581 (queue::queue): Pass the notifier by reference. Update comment. 11582 (queue::schedule_task): Update comment. 11583 (queue::schedule_tasks): Define new member function. 11584 (queue::wait_for_workers_to_complete): Update comment. 11585 (queue::get_completed_tasks): Return a non-const vector. Update 11586 comment. 11587 (worker::wait_to_execute_a_task): Update several comments. Make 11588 the execution of the notification code to be synchronized (on the 11589 tasks_done_mutex). 11590 115912017-02-14 Dodji Seketeli <dodji@redhat.com> 11592 11593 Fix typo in help string of abipkgdiff 11594 * tools/abipkgdiff.cc (display_usage): Remove erroneous end line. 11595 115962017-01-23 Dodji Seketeli <dodji@redhat.com> 11597 11598 fedabipkgdiff refuses to compare packages with the same release number 11599 * tools/fedabipkgdiff (RPM.is_peer): Update comment. Fix logic. 11600 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-0.39.1-1.fc22.x86_64.rpm: 11601 New test input file. 11602 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-debuginfo-0.39.1-1.fc22.x86_64.rpm: Likewise. 11603 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-devel-0.39.1-1.fc22.x86_64.rpm: Likewise. 11604 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-0.39.90-1.fc22.x86_64.rpm: Likewise. 11605 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-debuginfo-0.39.90-1.fc22.x86_64.rpm: Likewise. 11606 * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-devel-0.39.90-1.fc22.x86_64.rpm: 11607 Likewise. 11608 * tests/data/test-fedabipkgdiff/vte291-0.39.1-1.fc22.x86_64--vte291-0.39.90-1.fc22.x86_64-report-0.txt: Likewise. 11609 * tests/data/Makefile.am: Add the new test input data to source 11610 distribution. 11611 * tests/mockfedabipkgdiff.in: Update the package and build 11612 information to add the new vte291-0.39.1-1.fc22.x86_64.rpm and 11613 vte291-0.39.90-1.fc22.x86_64.rpm packages (as well as their devel 11614 and debuginfo packages) into the "mock" Koji build database. 11615 * tests/runtestfedabipkgdiff.py.in: Make this test harness run 11616 over the two aforementioned packages. 11617 116182017-01-24 Dodji Seketeli <dodji@redhat.com> 11619 11620 Add missing tests input files to distribution files 11621 * tests/data/Makefile.am: Add three missing test input files to 11622 the source distribution tarball. Renamed 11623 test-fedabipkgdiff/test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt 11624 into 11625 test-fedabipkgdiff/test6-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt. 11626 * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): 11627 Renamed 11628 test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt 11629 into 11630 test6-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt. 11631 116322017-01-24 Dodji Seketeli <dodji@redhat.com> 11633 11634 Add missing new line to an error message of runtestfedabipkgdiff.py 11635 * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): Add 11636 missing new line to an error message. 11637 116382017-01-24 Dodji Seketeli <dodji@redhat.com> 11639 11640 Fix silent failure of tests/runtestfedabipkgdiff.py 11641 * tests/mockfedabipkgdiff.in (run_fedabipkgdiff): Patch 11642 fedabipkgdiff.DEFAULT_KOJI_TOPURL instead of 11643 fedabipkgdiff.DEFAULT_KOJI_TOPDIR. 11644 * tests/runtestfedabipkgdiff.py.in (main): Properly return 0 upon 11645 success, 1 otherwise. 11646 116472017-01-14 Dodji Seketeli <dodji@redhat.com> 11648 11649 Misc style fixes 11650 * include/abg-ir.h (class_or_union): Fix indentation. 11651 * src/abg-dwarf-reader.cc (get_die_pretty_representation): Add new 11652 line. 11653 * src/abg-ir.cc (struct class_decl::priv): Fix indentation. 11654 (virtual_member_function_less_than::operator()): Fix a typo in a 11655 comment. 11656 116572017-01-13 Dodji Seketeli <dodji@redhat.com> 11658 11659 Bug 20476 - Compare virtual member functions when comparing classes 11660 * include/abg-ir.h (class_decl::get_biggest_vtable_offset): 11661 Declare new member function. 11662 * src/abg-ir.cc (virtual_member_function_less_than::operator()): 11663 Either compare the symbol id strings if the functions have 11664 symbols or just compare their pretty representations. 11665 (class_decl::get_biggest_vtable_offset): Define new member 11666 function. 11667 (methods_equal_modulo_elf_symbol) 11668 (method_matches_at_least_one_in_vector): New static methods. 11669 (equals): In the overload for classes, compare the virtual member 11670 functions while comparing classes. 11671 * src/abg-comparison.cc (represent): In the overload for 11672 method_decl_sptr, fix the way we compute the highest vtable offset 11673 number for a give class_decl. 11674 (class_decl::ensure_lookup_tables_populated): Don't forget added 11675 and removed virtual member functions in the report for changed 11676 classes. 11677 * tests/data/test-diff-dwarf/libtest41-PR20476-hidden-old.so: New 11678 test binary input file. 11679 * tests/data/test-diff-dwarf/libtest41-PR20476-hidden-new.so: Likewise. 11680 * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: 11681 New reference output. 11682 * tests/data/Makefile.am: Add the new test material above to the 11683 source distribution. 11684 * tests/test-diff-dwarf.cc (in_out_spec): Add the new tests 11685 here. 11686 * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Adjust. 11687 * tests/data/test-annotate/test11-pr18828.so.abi: Adjust. 11688 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 11689 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 11690 * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 11691 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 11692 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 11693 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 11694 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 11695 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 11696 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 11697 Adjust. 11698 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 11699 Adjust. 11700 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 11701 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 11702 Adjust. 11703 117042017-02-14 Dodji Seketeli <dodji@redhat.com> 11705 11706 Fix indentation in src/abg-writer.cc 11707 * src/abg-writer.cc (annotate): Fix indentation. 11708 117092017-02-13 Dodji Seketeli <dodji@redhat.com> 11710 11711 Adjust reference output of test-annotate 11712 * tests/data/test-annotate/test15-pr18892.so.abi: Adjust this 11713 reference output. 11714 117152017-02-13 Dodji Seketeli <dodji@redhat.com> 11716 11717 Fix help string for --header-dirs 11718 * tools/abidw.cc (display_usage): Fix patch -> path typo. 11719 117202017-02-13 Dodji Seketeli <dodji@redhat.com> 11721 11722 Make abidw --headers-dir work with the --out-file option 11723 * tools/abidw.cc (parse_command_line): Don't require an empty 11724 output file when parsing the --headers-dir option. This was a 11725 thinko. 11726 117272017-01-17 Ondrej Oprala <ondrej.oprala@gmail.com> 11728 11729 Bug 20970 - Add a --annotate option to abidw 11730 * doc/manuals/abidiff.rst: Document the '--no-corpus-path' 11731 option. 11732 * doc/manuals/abidw.rst: Document the '--no-corpus-path' 11733 and '--annotate' options. 11734 * include/abg-libxml-utils.h ({un,}escape_xml_comment): Add 11735 new function declarations. 11736 * include/abg-writer.h: Add new annotate functions 11737 (write_{translation_unit,corpus_to_{archive,native_xml_file}}): 11738 Add an optional "annotate" parameter defaulting to "false". 11739 * src/abg-libxml-utils.cc ({un,}escape_xml_comment): Add 11740 new function definitions. 11741 * src/abg-writer.cc (annotate): Define new templatized function 11742 and specialize it for necessary cases. 11743 * tests/Makefile.am: Add runtestannotate as a new test. 11744 * tests/data/Makefile.am: Add paths to below reference test 11745 outputs. 11746 * tests/data/test-annotate/libtest23.so.abi: New reference test 11747 output. 11748 * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. 11749 * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. 11750 * tests/data/test-annotate/test0.abi: Likewise. 11751 * tests/data/test-annotate/test1.abi: Likewise. 11752 * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Likewise. 11753 * tests/data/test-annotate/test11-pr18828.so.abi: Likewise. 11754 * tests/data/test-annotate/test12-pr18844.so.abi: Likewise. 11755 * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. 11756 * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. 11757 * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. 11758 * tests/data/test-annotate/test16-pr18904.so.abi: Likewise. 11759 * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. 11760 * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 11761 * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 11762 * tests/data/test-annotate/test2.so.abi: Likewise. 11763 * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 11764 * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 11765 * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 11766 * tests/data/test-annotate/test3.so.abi: Likewise. 11767 * tests/data/test-annotate/test4.so.abi: Likewise. 11768 * tests/data/test-annotate/test5.o.abi: Likewise. 11769 * tests/data/test-annotate/test6.so.abi: Likewise. 11770 * tests/data/test-annotate/test7.so.abi: Likewise. 11771 * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. 11772 * tests/data/test-annotate/test9-pr18818-clang.so.abi: Likewise. 11773 * tests/test-annotate.cc: New test for ABIXML annotations. 11774 * tools/abidiff.cc: Add the new option '--no-corpus-path'. 11775 * tools/abidw.cc: Likewise. Also add the '--annotate' option. 11776 reviews round 1 11777 117782017-01-20 Dodji Seketeli <dodji@redhat.com> 11779 11780 Fix test-diff-pkg after commit 2dcc606 11781 * tests/test-diff-pkg.cc (in_out_specs): Fix paths to spice-server 11782 packages. 11783 117842017-01-20 Dodji Seketeli <dodji@redhat.com> 11785 11786 Add --harmless option to abipkgdiff 11787 * doc/manuals/abidiff.rst: Fix a typo. 11788 * doc/manuals/abipkgdiff.rst: Document the --harmless option. 11789 * tools/abipkgdiff.cc: Update copyright year. 11790 (options::show_harmless_changes): Add new data member. 11791 (options::options): Initialize the new data member. 11792 (display_usage): Add a help string for the new --harmless option. 11793 (parse_command_line): Parse the new --harmless option. 11794 (set_diff_context_from_opts): Configure the diff context 11795 accordingly, if the user provided the --harmless option. 11796 117972017-01-20 Dodji Seketeli <dodji@redhat.com> 11798 11799 Fix suppression category propagation in diff node graph 11800 * include/abg-comparison.h (diff::get_class_of_equiv_category): 11801 Declare new member function. 11802 * src/abg-comparison.cc: Update copyright year. 11803 (diff::get_class_of_equiv_category): Define new member function. 11804 (suppression_categorization_visitor::visit_end): When considering 11805 children nodes category for propagation, consider the category of 11806 the class of equivalence of children nodes. 11807 * spice-debuginfo-0.12.4-19.el7.x86_64.rpm: New input test package. 11808 * spice-debuginfo-0.12.8-1.el7.x86_64.rpm: Likewise. 11809 * spice-server-0.12.4-19.el7.x86_64.rpm: Likewise. 11810 * spice-server-0.12.8-1.el7.x86_64.rpm: Likewise. 11811 * spice-server-devel-0.12.4-19.el7.x86_64.rpm: Likewise. 11812 * spice-server-devel-0.12.8-1.el7.x86_64.rpm: Likewise. 11813 * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: 11814 New reference test output. 11815 * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. 11816 * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 11817 * tests/data/Makefile.am: Add the new test material above to 11818 source distribution. 11819 * tests/test-diff-pkg.cc (in_out_specs): Add the new test inputs 11820 to the list of packages to test. 11821 118222017-01-18 Dodji Seketeli <dodji@redhat.com> 11823 11824 Bug 21058 - abipkgdiff wrongly drops non-public types 11825 * doc/manuals/abidiff.rst (--dont-drop-private-types): Remove documentation. 11826 (--drop-private-types): Document this new option. 11827 * src/abg-tools-utils.cc: Update copyright notice 11828 (handle_fts_entry): On the generated suppression specification, do 11829 not set the flag to drop matched types. Also, don't match types 11830 defined in files which patch start with "/usr/include/". 11831 * tools/abidiff.cc (options::options): Initialize the 11832 drop_private_types data member to false. 11833 (display_usage): Remove usage string for 11834 --dont-drop-private-types. Add a new one for 11835 --drop-private-types. 11836 (parse_command_line): Don't part --dont-drop-private-types, 11837 rather, parse --drop-private-types. 11838 (set_suppressions): When the suppression for private types is 11839 generated, if --drop-private-types was provided, then instruct the 11840 suppression to drop matched types. 11841 * tools/abipkgdiff.cc (options::drop_private_types): New option. 11842 (options::options): Initialize the new drop_private_types data 11843 member to false. 11844 (display_usage): Add a usage string for --drop-private-types. 11845 (parse_command_line): Parse the new --drop-private-types option. 11846 (maybe_create_private_types_suppressions): Don't take just a 11847 package, but a package_descriptor because the latter carries the 11848 options. So when the user used the --drop-private-types option, 11849 make the generated private types suppression to drop matched 11850 types. 11851 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: 11852 Adjust. 11853 * tests/test-diff-suppr.cc (in_out_specs): Likewise. 11854 118552017-01-18 Dodji Seketeli <dodji@redhat.com> 11856 11857 Fix some include logic in abg-suppression.cc 11858 * src/abg-suppression.cc: Update copyright notice. Fix include 11859 files logic. 11860 118612017-01-16 Dodji Seketeli <dodji@redhat.com> 11862 11863 Support virtual member functions with vtable offset not yet set 11864 * include/abg-fwd.h (member_function_has_vtable_offset): Declare 11865 new function. 11866 (get_member_function_vtable_offset): Return a ssize_t, not a 11867 size_t. 11868 (set_member_function_vtable_offset): Take a ssize_t, not a size_t. 11869 * include/abg-ir.h (class_decl::virtual_mem_fn_map_type): Adjust 11870 the map typedef to make it take ssize_t as the type of the key. 11871 (mem_fn_context_rel::vtable_offset_in_bits_): Make this data 11872 member be of ssize_t type, not size_t. 11873 (mem_fn_context_rel::mem_fn_context_rel): Initialize the 11874 vtable_offset_in_bits_ data member to -1. 11875 * src/abg-ir.cc (member_function_has_vtable_offset): Define new 11876 function. 11877 (get_member_function_vtable_offset): Return a ssize_t, not a 11878 size_t. 11879 (set_member_function_vtable_offset): Take a ssize_t, not a size_t. 11880 * src/abg-dwarf-reader.cc (die_virtual_function_index): Take an 11881 int64_t& rather than a uint64_t&. 11882 (finish_member_function_reading): Don't set the vtable offset if 11883 it's -1. 11884 * src/abg-reader.cc (build_class_decl): Likewise. 11885 118862017-01-14 Dodji Seketeli <dodji@redhat.com> 11887 11888 [comparison engine] Don't crash when the context is null 11889 * src/abg-comparison.cc 11890 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER): Guard against 11891 null context. 11892 (diff::is_filtered_out): Likewise. 11893 118942017-01-14 Dodji Seketeli <dodji@redhat.com> 11895 11896 [dwarf reader] Don't abort when trying to canonicalize a non-type 11897 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Don't abort 11898 when trying to canonicalize a decl. 11899 119002017-01-14 Dodji Seketeli <dodji@redhat.com> 11901 11902 [dwarf reader] properly separate function decls and types in lookup 11903 * src/abg-dwarf-reader.cc 11904 (read_context::associate_die_to_artifact_by_repr_internal): 11905 Choose the right type of representation depending on if we are 11906 associating a type or a decl. 11907 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. 11908 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. 11909 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 11910 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 11911 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 11912 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 11913 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 11914 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 11915 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 11916 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 11917 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 11918 Adjust. 11919 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 11920 Adjust. 11921 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 11922 Adjust. 11923 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 11924 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 11925 Adjust. 11926 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 11927 119282017-01-14 Dodji Seketeli <dodji@redhat.com> 11929 11930 [dwarf reader] Allow updating and de-duplicating member functions 11931 * src/abg-dwarf-reader.cc (add_or_update_class_type): Register 11932 member functions for lookup by member function DIE representation. 11933 119342017-01-14 Dodji Seketeli <dodji@redhat.com> 11935 11936 [dwarf reader] Do not over de-duplicate function *definitions* 11937 * src/abg-dwarf-reader.cc 11938 (build_or_get_fn_decl_if_not_suppressed): Do try to de-duplicate a 11939 function if it's to be completed. 11940 119412017-01-13 Dodji Seketeli <dodji@redhat.com> 11942 11943 [dwarf reader] Fix pretty printing static methods from DWARF 11944 * src/abg-dwarf-reader.cc 11945 (die_return_and_parm_names_from_fn_type_die): Take a new 11946 'is_static' parameter. 11947 (die_qualified_type_name, die_pretty_print_type): Adjust calling 11948 die_return_and_parm_names_from_fn_type_die. 11949 (die_function_signature): Likewise. Also, do not forget to print 11950 the first parameter for a static method. 11951 119522017-01-13 Dodji Seketeli <dodji@redhat.com> 11953 11954 Handle several virtual member functions having the same vtable offset 11955 * include/abg-ir.h (class_or_union::virtual_mem_fn_map_type): 11956 Define new typedef. 11957 (class_decl::get_virtual_mem_fns_map): Declare new accessor. 11958 * src/abg-ir.cc (class_decl::priv::virtual_mem_fns_map_): New data 11959 member. 11960 (class_decl::get_virtual_mem_fns_map): Define new accessor. 11961 (fixup_virtual_member_function): Populate the new virtual member 11962 functions map. 11963 (class_decl::on_canonical_type_set): Sort the virtual member 11964 function vectors stored in the new virtual member functions map. 11965 (class_decl::add_member_function): Call 11966 set_member_function_is_virtual *after* calling 11967 set_member_function_vtable_offset because the former updates the 11968 virtual function map, so it needs the vtable offset. 11969 * src/abg-dwarf-reader.cc (finish_member_function_reading): 11970 Likewise. 11971 * src/abg-reader.cc (build_class_decl): Likewise. 11972 119732017-01-13 Dodji Seketeli <dodji@redhat.com> 11974 11975 Speed up pretty representing (function) types 11976 * include/abg-ir.h (type_base::get_cached_pretty_representation): 11977 Declare new function. 11978 (function_type::get_cached_name): Likewise. 11979 * src/abg-ir.cc (get_method_type_name): Use the new 11980 type_base::get_cached_pretty_representation function. 11981 (type_base::priv::{internal_cached_repr_, cached_repr_}): Add new 11982 data members. 11983 (function_type::priv::{internal_cached_name_, cached_name_}): 11984 Likewise. 11985 (type_base::get_cached_pretty_representation): Define new 11986 function. 11987 (function_type::get_cached_name): Likewise. 11988 (type_base::get_canonical_type_for): Call 11989 type_base::get_cached_pretty_representation here, so the internal 11990 representation is cached right before canonicalization. 11991 (function_type::{mark_as_being_compared, unmark_as_being_compared, 11992 comparison_started}): Uset he new type_base::get_cached_name to 11993 speed up function type name retrieval. 11994 119952017-01-13 Dodji Seketeli <dodji@redhat.com> 11996 11997 Add missing deep comparison operators for {function, method}_decl_sptr 11998 * include/abg-ir.h (operator==): Declare two new overloads for 11999 function_decl_sptr an method_decl_sptr. 12000 * src/abg-ir.cc (operator==): Define two new overloads for 12001 function_decl_sptr an method_decl_sptr. 12002 120032017-01-16 Dodji Seketeli <dodji@redhat.com> 12004 12005 Fix performance regression while analyzing libjvm.so 12006 * include/abg-ir.h ({type_base, 12007 class_decl}::on_canonical_type_set): Declare new virtual member 12008 function. 12009 * src/abg-ir.cc (type_base::on_canonical_type_set): Define new 12010 virtual member function that does nothing. 12011 (class_decl::on_canonical_type_set): Define new virtual member 12012 function that sorts the virtual member functions of class_decl. 12013 (canonicalize): Invoke type_base::on_canonical_type_set when the 12014 canonical type is set. 12015 (fixup_virtual_member_function): Don't sort virtual member 12016 functions here. 12017 * src/abg-dwarf-reader.cc (finish_member_function_reading): Do not 12018 sort virtual member functions here. 12019 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 12020 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 12021 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 12022 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 12023 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 12024 120252017-01-14 Dodji Seketeli <dodji@redhat.com> 12026 12027 Update copyright notice for abg-fwd.h, abg-ir.h and test-abidiff.cc 12028 * include/abg-fwd.h: Adjust copyright. 12029 * include/abg-ir.h: Likewise. 12030 * tests/test-abidiff.cc: Likewise. 12031 120322017-01-16 Dodji Seketeli <dodji@redhat.com> 12033 12034 Remove unused functions from abg-ir.cc 12035 * src/abg-ir.cc (convert_node_to_decl): Remove specializations for 12036 class_decl_sptr, type_base_sptr and var_decl_sptr. 12037 120382016-11-10 Dodji Seketeli <dodji@redhat.com> 12039 12040 Support Linux Kernel ABI whitelist files 12041 * include/abg-suppression.h 12042 (function_suppression::function_suppression): Make the declaration 12043 of the default constructor public. 12044 * src/abg-suppression-priv.h (function_suppression::priv::priv): 12045 Declare a default constructor. 12046 * src/abg-suppression.cc 12047 (function_suppression::function_suppression): Define default 12048 constructor. 12049 * include/abg-tools-utils.h 12050 (gen_suppr_spec_from_kernel_abi_whitelist): Declare new function. 12051 * src/abg-tools-utils.cc 12052 (gen_suppr_spec_from_kernel_abi_whitelist): Define new function. 12053 * tools/abidiff.cc (options::kernel_abi_whitelist_paths): 12054 (display_usage): Display a help string for the new 12055 --linux-kernel-abi-whitelist option. 12056 (parse_command_line): Parse the --linux-kernel-abi-whitelist from 12057 the command line. 12058 (maybe_check_suppression_files): Check the presence of the kernel 12059 abi whitelist files. 12060 (set_suppressions): Generate suppression specifications from the 12061 whitelist files. 12062 120632016-10-10 Dodji Seketeli <dodji@redhat.com> 12064 12065 Support Linux Kernel binaries 12066 * include/abg-dwarf-reader.h (create_read_context): Take a new 12067 flag to say if the context is to read an ELF binary in linux 12068 kernel mode. 12069 * src/abg-dwarf-reader.cc (typedef address_set_type) 12070 (address_set_sptr): New typedefs. 12071 (get_binary_load_address): The load address of the binary is 12072 the load address specified by the program header that is at the 12073 smallest offset; not by the program header that is at offset zero. 12074 (read_context::{ksymtab_section_, ksymtab_gpl_section_, 12075 linux_exported_fn_syms_, linux_exported_var_syms_, 12076 linux_exported_gpl_fn_syms_, linux_exported_gpl_var_syms_, 12077 load_in_linux_kernel_mode_}): New data members. 12078 (read_context::read_context): Initialize ksymtab_section_, 12079 ksymtab_gpl_section_ and load_in_linux_kernel_mode_. 12080 (read_context::{find_symbol_table_section, find_opd_section, 12081 lookup_elf_fn_symbol_from_address, 12082 lookup_elf_var_symbol_from_address, get_function_address, 12083 get_variable_address}): Make these const. 12084 (read_context::{find_ksymtab_section, find_ksymtab_gpl_section, 12085 lookup_elf_symbol_from_address, function_symbol_is_exported, 12086 variable_symbol_is_exported, linux_exported_fn_syms, 12087 create_or_get_linux_exported_fn_syms, linux_exported_var_syms, 12088 create_or_get_linux_exported_var_syms, linux_exported_gpl_fn_syms, 12089 linux_exported_gpl_var_syms, 12090 create_or_get_linux_exported_gpl_fn_syms, 12091 linux_exported_gpl_var_syms, 12092 create_or_get_linux_exported_gpl_var_syms, architecture_word_size, 12093 load_kernel_symbol_table, load_ksymtab_symbols, 12094 load_ksymtab_gpl_symbols, 12095 load_linux_specific_exported_symbol_maps, 12096 load_in_linux_kernel_mode}): New member functions. 12097 (read_context::read_int_from_array_of_bytes): Factorize this 12098 new member function out of ... 12099 (read_context::{lookup_ppc64_elf_fn_entry_point_address}): 12100 ... this. Make this function const too. 12101 (read_context::read_uint64_from_array_of_bytes): New function. 12102 Uses read_int_from_array_of_bytes above. 12103 (read_context::{fun_entry_addr_sym_map_sptr}): Try to load symbol 12104 maps only when it's necessary. 12105 (read_context::elf_architecture_is_big_endian): Fix logic. 12106 (read_context::{var_addr_sym_map}): Express the const variant in 12107 terms of the non-const one. In the non-const one, load the map 12108 only when necessary. 12109 (read_context::load_symbol_maps_from_symtab_section): Renamed 12110 load_symbol_maps into this. 12111 (read_context::is_linux_kernel_binary): Define new member 12112 function. 12113 (read_context::{function, variable}_symbol_is_exported): If we are 12114 not prevented from considering loading in linux kernel mode, then 12115 just looking at a linux kernel binary makes us consider the 12116 special kernel sections. 12117 (read_debug_info_into_corpus): Likewise. 12118 (build_ir_node_from_die): Take a new flag that says if the ir node 12119 is a declaration required by another concrete IR node. 12120 (enum read_context::kernel_symbol_table_kind): New enum. 12121 (read_context::load_symbol_maps): Support loading linux kernel 12122 specific sections too. 12123 (build_var_decl): Use the new 12124 read_context::variable_symbol_is_exported. 12125 (function_is_suppressed): Suppress non-member functions or 12126 variables that are not declarations and that have no symbol. 12127 (variable_is_suppressed, build_var_decl_if_not_suppressed): Take a 12128 new flag that says if the variable is a declaration required by a 12129 concrete variable. If non member variable that is a declaration 12130 is not the specification of another concrete variable, then it's 12131 suppressed. 12132 (add_fn_symbols_to_map, add_var_symbols_to_map): New function 12133 definitions. 12134 (read_debug_info_into_corpus): If we are reading linux kernel or 12135 linux kernel modules, only set explicitely exported symbols (in 12136 the linux kernel binary sense) as exported function or variable 12137 symbols. 12138 (create_read_context): Take a new flag to say if the context is to 12139 read an ELF binary in linux kernel mode. 12140 * tools/abidiff.cc (options::options): Initialize 12141 options::linux_kernel_mode to true. 12142 (display_usage): Display usage of the --no-linux-kernel-mode option. 12143 (parse_command_line): Parse the --no-linux-kernel-mode option. 12144 * tools/abidw.cc (options::options): Initialize 12145 options::linux_kernel_mode to true. 12146 (display_usage): Display usage of --no-linux-kernel-mode option. 12147 (parse_command_line): Parse the --no-linux-kernel-mode option. 12148 * doc/manuals/abidiff.rst: Document the new --no-linux-kernel-mode 12149 options. 12150 * doc/manuals/abidw.rst: Likewise. 12151 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 12152 Adjust. 12153 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 12154 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 12155 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 12156 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 12157 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 12158 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 12159 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 12160 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 12161 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 12162 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 12163 Likewise. 12164 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 12165 Likewise. 12166 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 12167 Likewise. 12168 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 12169 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 12170 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 12171 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. 12172 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 12173 121742017-01-06 Dodji Seketeli <dodji@redhat.com> 12175 12176 Add debug routines to dump locations to a stream 12177 * src/abg-writer.cc (dump_location): Define new function and one 12178 overload. 12179 (dump_decl_location): Re-write in terms of the new dump_location. 12180 121812017-01-06 Dodji Seketeli <dodji@redhat.com> 12182 12183 Better de-duplicate classes, unions, enums in non-odr contexts 12184 * src/abg-dwarf-reader.cc (build_enum_type) 12185 (add_or_update_class_type, add_or_update_union_type): When the ODR 12186 is not relevant, use the location of the type to detect if two 12187 enum, class or union types of the same name actually represent the 12188 same type. 12189 121902017-01-06 Dodji Seketeli <dodji@redhat.com> 12191 12192 Adjust some reference outputs of the test-read-dwarf test harness 12193 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 12194 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 12195 121962017-01-04 Ondrej Oprala <ondrej.oprala@gmail.com> 12197 12198 Bug 18754 - Add the "--no-added-syms" option to abidiff 12199 * doc/manuals/abidiff.rst: Document the new --no-added-syms 12200 option. 12201 * tools/abidiff.cc (struct options): Add show_added_syms and 12202 set it to true by default. 12203 (display_usage): Document the new options --no-added-syms. If 12204 this is the only suppression option specified, it is equivalent 12205 to specifying --show_{changed,deleted}_{fns,vars} as arguments 12206 to abidiff. If any of those options are specified before 12207 --no-added-syms, then it has no effect. 12208 (parse_command_line): Parse the new option and set 12209 show_added_{fns,vars,syms} and show_all_{fns,vars} to false if 12210 --no-added-syms is specified. 12211 * tests/test-diff-filter.cc: Add a test for the new option. 12212 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: 12213 Reference results for the new test. 12214 * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: 12215 Likewise. 12216 * tests/data/Makefile.am: Add the above test files to the list of 12217 test data. 12218 122192017-01-05 Dodji Seketeli <dodji@redhat.com> 12220 12221 Update copyright year on a bunch of files 12222 * include/abg-corpus.h: Update copyright year to 2017. 12223 * src/abg-dwarf-reader.cc: Likewise. 12224 * src/abg-ir.cc: Likewise. 12225 * src/abg-reader.cc: Likewise. 12226 * src/abg-writer.cc: Likewise. 12227 * tools/abicompat.cc: Likewise. 12228 * tools/abidw.cc: Likewise. 12229 122302017-01-05 Dodji Seketeli <dodji@redhat.com> 12231 12232 [apidoc] Allow brief description at the top of class description pages 12233 * doc/api/libabigail.doxy: Don't disable "brief member desc". 12234 122352017-01-05 Dodji Seketeli <dodji@redhat.com> 12236 12237 Misc style fixes 12238 * include/abg-corpus.h: Remove corpus_sptr typedef. It's in 12239 abg-fwd.h now. 12240 * src/abg-ir.cc: Remove some unnecessary vertical space. 12241 * src/abg-reader.cc (build_function_decl): Cleanup some asserts. 12242 * src/abg-writer.cc (write_function_type): Each the inspection of 12243 the type id from within the debugger. 12244 122452017-01-05 Dodji Seketeli <dodji@redhat.com> 12246 12247 Misc comments and apidoc fixes 12248 * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): Fix 12249 typo in comment. 12250 * tools/abicompat.cc (perform_compat_check_in_weak_mode): Better 12251 comments. 12252 * tools/abidw.cc (dislay_usage): Fix white spaces. 12253 Conflicts: 12254 tools/abidw.cc 12255 122562017-01-05 Dodji Seketeli <dodji@redhat.com> 12257 12258 Speedup set_member_is_static 12259 * src/abg-ir.cc (set_member_is_static): When comparing data 12260 members, consider only their names. 12261 122622017-01-05 Dodji Seketeli <dodji@redhat.com> 12263 12264 Avoid unnecessary updates to type lookup maps 12265 * src/abg-ir.cc (class_or_union::get_is_declaration_only): Try 12266 to update the type maps only when a declaration-only class 12267 type is now defined. 12268 122692017-01-05 Dodji Seketeli <dodji@redhat.com> 12270 12271 Update tests/data/test-read-dwarf/*.abi files 12272 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 12273 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 12274 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 12275 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 12276 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 12277 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 12278 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 12279 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 12280 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 12281 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 12282 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 12283 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 12284 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 12285 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 12286 122872017-01-05 Dodji Seketeli <dodji@redhat.com> 12288 12289 Update tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi 12290 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 12291 Update. 12292 122932017-01-05 Dodji Seketeli <dodji@redhat.com> 12294 12295 [abixml writer] Make sure all function types are emitted 12296 * src/abg-writer.cc (write_translation_unit): Fix logic to avoid 12297 forgetting referenced function types. 12298 122992017-01-05 Dodji Seketeli <dodji@redhat.com> 12300 12301 [abixml writer] Fix comparison of pointer to types 12302 * src/abg-writer.cc (type_ptr_comp::operator()): Do not add an 12303 empty type id string to the type -> type id map when the entry for 12304 a given type is empty. 12305 123062017-01-05 Dodji Seketeli <dodji@redhat.com> 12307 12308 [dwarf-reader] Don't early canonicalize function types 12309 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): 12310 Late-canonicalize function types. 12311 signed-off-by: Dodji Seketeli <dodji@redhat.com> 12312 123132017-01-05 Dodji Seketeli <dodji@redhat.com> 12314 12315 Fix qualified name caching for some types 12316 * src/abg-ir.cc ({qualified, pointer, 12317 array}_type_def::get_qualified_name): Don't cache internal and 12318 non-internal qualified name when the type is not canonicalized. 12319 123202017-01-04 Dodji Seketeli <dodji@redhat.com> 12321 12322 Cleanup ODR-based type canonicalization optimization gating logic 12323 * src/abg-ir.cc (type_base::get_canonical_type_for): Make it clear 12324 that the ODR-based optimization is allowed only on C++ ABI 12325 corpora. 12326 123272017-01-04 Dodji Seketeli <dodji@redhat.com> 12328 12329 Fix a typo in method name computation 12330 * src/abg-ir.cc (get_method_type_name): Really return the method 12331 name. 12332 123332017-01-05 Dodji Seketeli <dodji@redhat.com> 12334 12335 Update tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt 12336 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Adjust. 12337 123382017-01-05 Dodji Seketeli <dodji@redhat.com> 12339 12340 Update tests/data/test-read-write/test27.xml 12341 * tests/data/test-read-write/test27.xml: Adjust. 12342 123432017-01-04 Dodji Seketeli <dodji@redhat.com> 12344 12345 [dwarf-reader] Handle per translation-unit type de-duplication 12346 * src/abg-dwarf-reader.cc 12347 (read_context::per_tu_name_artefacts_map_): New data member. 12348 (read_context::clear_per_translation_unit_data): Clear the new 12349 read_context::per_tu_name_artefacts_map_. 12350 (read_context::associate_die_to_decl): Take a flag to say if we 12351 should associate a DIE to its representation and another one to 12352 say if the association should be done per-tu or per-corpus. 12353 (read_context::lookup_{type_artifact, artifact}_from_die): Update 12354 apidoc. 12355 (read_context::lookup_artifact_from_die_representation): Likewise. 12356 (read_context::{associate_die_to_artifact_by_repr, 12357 associate_die_to_artifact_by_repr_internal, 12358 associate_die_to_type}): Take a flag to say if the associating 12359 should be done on a per-tu basis. 12360 (read_context::lookup_{type_artifact, artifact}_from_die_per_tu): 12361 New member functions. 12362 (read_context::{lookup_artifact_from_per_tu_die_representation, 12363 odr_is_relevant}): Likewise. 12364 (build_enum_type, add_or_update_class_type) 12365 (add_or_update_union_type): If ODR is not relevant, do not perform 12366 per-corpus de-duplication. 12367 (build_pointer_type_def, build_typedef_type): Do not associate the 12368 type to its representation as these kinds of typs are not 12369 de-duplicated. 12370 (build_function_type): If ODR is not relevant, perform per-tu 12371 de-duplication. When ODR is relevant, per-corpus de-duplication 12372 is performed. 12373 (build_or_get_fn_decl_if_not_suppressed): Function decls are 12374 always de-duplicated per-corpus. 12375 (build_ir_node_from_die): For data members, do not update the die 12376 representation map as data members are not de-duplicated. Do not 12377 do it for function decls either. 12378 [1]: https://en.wikipedia.org/wiki/One_Definition_Rule 12379 123802017-01-02 Dodji Seketeli <dodji@redhat.com> 12381 12382 Handle per translation unit and per corpus types maps 12383 * include/abg-fwd.h (lookup_type_in_corpus): Remove. This is to 12384 be replaced by the new lookup_type below. 12385 (lookup_{basic, class, union, enum, typedef, qualified, pointer, 12386 reference, array, function, class_or_typedef, 12387 class_typedef_or_enum}_type): 12388 (lookup_class_type_through_scopes, lookup_type) 12389 (lookup_type_through_scopes, lookup_or_synthesize_fn_type) 12390 * src/abg-ir-priv.h (struct translation_unit::priv): Move this 12391 private type here, from abg-ir.h. 12392 (synthesize_type_from_translation_unit): Declare new functions. 12393 * include/abg-ir.h (class type_maps): Define new type. 12394 (translation_unit::get_function_types): Remove. 12395 (translation_unit::get_types): Now return a type_maps. 12396 (translation_unit::get_live_fn_types): Declare new type. 12397 (class decl_base): Make canonicalize be a friend of this class. 12398 * src/abg-ir.cc (struct translation_unit::priv): Move this to 12399 abg-ir-priv.h 12400 (struct type_maps::priv): Define new type. 12401 (type_maps::{basic, class, union, enum, typedef, qualified, 12402 pointer, reference, array, function}_types): Define new accessors. 12403 (translation_unit::bind_function_type_life_time): Adjust. 12404 (translation_unit::get_function_types): Remove accessor. 12405 (translation_unit::get_types, get_live_fn_types): Define new 12406 accessors. 12407 (lookup_type_in_translation_unit) 12408 (lookup_class_type_in_translation_unit) 12409 (lookup_function_type_in_translation_unit) 12410 (synthesize_type_from_translation_unit) 12411 (synthesize_function_type_from_translation_unit) 12412 (lookup_class_type_in_translation_unit) Remove function 12413 definitions. 12414 (lookup_type_in_map): Define function template. 12415 (lookup_{basic, class, union, typedef, class_or_typedef, 12416 class_typedef_or_enum, qualified, pointer, reference, array, 12417 function}_type): Define functions. 12418 (lookup_function_type, lookup_type_through_scopes) 12419 (lookup_class_type_through_scopes) 12420 (lookup_basic_type_through_translation_units) 12421 (lookup_union_type_through_translation_units) 12422 (lookup_enum_type_through_translation_units) 12423 (lookup_class_type_through_translation_units) 12424 (lookup_typedef_type_through_translation_units) 12425 (lookup_qualified_type_through_translation_units) 12426 (lookup_pointer_type_through_translation_units) 12427 (lookup_reference_type_through_translation_units) 12428 (lookup_array_type_through_translation_units) 12429 (lookup_function_type_through_translation_units) 12430 (lookup_type_through_translation_units) 12431 (lookup_or_synthesize_fn_type, lookup_type): Likewise. 12432 (maybe_update_types_lookup_map) 12433 (maybe_update_types_lookup_map<class_decl>) 12434 (maybe_update_types_lookup_map<function_type>): Define function 12435 template, specilizations and functions. 12436 (synthesize_type_from_translation_unit) 12437 (synthesize_function_type_from_translation_unit): Define 12438 functions. 12439 * include/abg-corpus.h (corpus::get_types): Declare new accessor. 12440 * src/abg-corpus.cc (corpus::priv::get_types): Define new 12441 accessor. 12442 (corpus::get_types): Likewise. 12443 (lookup_type_in_corpus, lookup_class_type_in_corpus) 12444 (lookup_type_in_corpus, lookup_function_type_in_corpus) 12445 (maybe_update_types_lookup_map) 12446 (maybe_update_types_lookup_map<class_decl>) 12447 (maybe_update_types_lookup_map<function_type>): Remove. 12448 (lookup_{basic, class, union, enum, typedef, qualified, pointer, 12449 reference, array, function, class_or_typedef, 12450 class_typedef_or_enum}_type): Likewise. 12451 * src/abg-corpus-priv.h (corpus::priv::{basic, class, union, 12452 typedef, qualified, pointer, reference, array, function}_types): 12453 Remove these data members. 12454 (corpus::priv::get_scopes): Remove member function. 12455 (corpus::priv::get_{basic, class, union, enum, typedef, qualified, 12456 pointer, reference, array, function}_types): Remove member 12457 function declarations. 12458 (corpus::priv::types_): New data member. 12459 (corpus::priv::get_types): Declare new member function. 12460 (lookup_{basic, class, enum, typedef, class_or_typedef, qualified, 12461 pointer, reference, array, function}_type): Declare new functions. 12462 * src/abg-dwarf-reader.cc 12463 (read_context::resolve_declaration_only_classes) 12464 (build_translation_unit_and_add_to_ir): Adjust use of 12465 lookup_class_type. 12466 * src/abg-reader.cc (read_context::type_is_from_translation_unit): 12467 Adjust to the use of lookup_function_type_in_translation_unit that 12468 got renamed into lookup_function_type. 12469 * src/abg-writer.cc (type_ptr_cmp::operator()): New operator 12470 implementation. 12471 (read_context::sort_type): Add new overloads. 12472 (write_translation_unit): Adjust to get the function types from 12473 the new translation_unit::get_live_fn_types and sort them. 12474 * tools/abicompat.cc (perform_compat_check_in_weak_mode): Adjust 12475 to use the new lookup_or_synthesize_fn_type, in lieu of 12476 lookup_function_type_in_corpus. Adjust to use lookup_type in lieu 12477 of lookup_type_in_corpus. 12478 124792016-12-21 Dodji Seketeli <dodji@redhat.com> 12480 12481 Make abg-fwd.h use *_sptr typedefs 12482 * include/abg-ir.h: Move convience typedef declarations and some 12483 necessary forward declarations to ... 12484 * include/abg-fwd.h: ... here. 12485 (is_enum_type, is_var_decl): Take a pointer to type_or_decl_base. 12486 (lookup_type_in_scope): Return a type_base_sptr. 12487 (lookup_type_through_scopes): Introduce this to later replace the 12488 overload of lookup_type_in_translation_unit that takes a list of 12489 strings. 12490 (lookup_type_in_scope): Return a type_base_sptr, not a 12491 decl_base_sptr. 12492 * src/abg-ir.cc (lookup_type_in_scope, lookup_node_in_scope) 12493 (lookup_var_decl_in_scope): Adjust. 12494 (is_enum_type, is_var_decl): Take a pointer to type_or_decl_base. 12495 (lookup_node_in_scope): Return a type_or_decl_base_sptr. 12496 (lookup_type_in_scope): Return a type_base_sptr. 12497 (lookup_node_in_translation_unit): Return a 12498 type_or_decl_base_sptr. 12499 (lookup_type_through_scopes): Replace 12500 lookup_type_in_translation_unit. 12501 125022016-12-18 Chenxiong Qi <cqi@redhat.com> 12503 12504 Fix wrong variable name 12505 * tools/fedabipkgdiff: (diff_latest_rpms_based_on_distros): Fix 12506 wrong variable name distro. 12507 125082016-12-18 Chenxiong Qi <cqi@redhat.com> 12509 12510 Warn properly when cannot find peer RPM 12511 * tools/fedabipkgdiff: (RPMCollection.get_peer_rpm): Return None 12512 when cannot find peer RPM due to nonexistent arch. 12513 125142016-12-19 Chenxiong Qi <cqi@redhat.com> 12515 12516 Read Koji config via Koji API 12517 * tools/fedabipkgdiff: Read DEFAULT_KOJI_TOPURL and 12518 DEFAULT_KOJI_SERVER from Koji config via Koji API read_config. 12519 (build_commandline_args_parser): --topdir is renamed to 12520 --topurl. 12521 * doc/manuals/fedabipkgdiff.rst: Rename --topdir to --topurl. 12522 125232016-12-19 Chenxiong Qi <cqi@redhat.com> 12524 12525 Follow moved packages when download 12526 * tools/fedabipkgdiff: (download_rpm) Add --location to curl 12527 CLI. 12528 125292016-12-13 Chenxiong Qi <cqi@redhat.com> 12530 12531 More document for local RPMs comparison 12532 * doc/manuals/fedabipkgdiff.rst: Add more document for local RPMs 12533 comparison. Also fixed a typo. 12534 125352016-12-15 Ondrej Oprala <ondrej.oprala@gmail.com> 12536 12537 Properly report missing files for abipkgdiff 12538 * tools/abipkgdiff.cc: (class options): Add the "nonexistent_file" flag 12539 (parse_command_line): Check if the files given exist. 12540 (main): Check the nonexistent_file flag. If any of the input 12541 files don't exist, report it and exit. Also, for present and future test 12542 uniformity, only show the base names of the packages when using their 12543 names in error output. 12544 * tests/test-diff-pkg.cc: Add a new regression test. 12545 * tests/data/test-diff-pkg/test-nonexistent-report-0.txt: The 12546 expected output of the above regression test. 12547 * tests/data/Makefile.am: Add the above file to the list. 12548 125492016-12-15 Dodji Seketeli <dodji@redhat.com> 12550 12551 Misc style cleanup 12552 * src/abg-dwarf-reader.cc (build_function_type): Remove 12553 unnecessary new line. 12554 125552016-12-15 Dodji Seketeli <dodji@redhat.com> 12556 12557 make is_anonymous_type work for unions and classes 12558 * src/abg-ir.cc (is_anonymous_type): Make this work for class or 12559 union types, no only classes. 12560 125612016-12-15 Dodji Seketeli <dodji@redhat.com> 12562 12563 Naming typedefs of classes are not read properly from abixml 12564 * src/abg-reader.cc (build_class_decl): Use 12565 read_context::build_or_get_type_decl rather than 12566 read_context::get_type_decl to build the naming typedef referred 12567 to by the class being built. Move the handling of naming typedefs 12568 after the class is marked as WIP and keyed. 12569 125702016-12-15 Dodji Seketeli <dodji@redhat.com> 12571 12572 Don't early-canonicalize function types when reading abixml 12573 * src/abg-reader.cc (read_context::maybe_canonicalize_type): 12574 late-canonicalize function types too. 12575 125762016-12-12 Ondrej Oprala <ondrej.oprala@gmail.com> 12577 12578 Check --enable-rpm dependencies more rigorously 12579 * configure.ac: Check if both rpm2cpio and cpio 12580 exist on the system. If not, disable the option and fail the 12581 configuration if --enable-rpm was specified explicitly. 12582 125832016-12-12 Ondrej Oprala <ondrej.oprala@gmail.com> 12584 12585 abipkgdiff doesn't mention --no-default-suppression in help 12586 * tools/abipkgdiff.cc (display_usage): Mention 12587 --no-default-suppression as one of the options. 12588 125892016-12-12 Ondrej Oprala <ondrej.oprala@gmail.com> 12590 12591 Fix a few remarks made by cppcheck 12592 * src/abg-comparison.cc (types_or_decls_equal::operator()): Pass 12593 arguments by reference. 12594 (class_diff::ensure_lookup_tables_populated): Expression 12595 !A || (A && B) can be reduced to !A || B. 12596 * src/abg-suppression.cc (suppression_matches_type_no_name): 12597 Likewise. 12598 125992016-12-09 Ondrej Oprala <ondrej.oprala@gmail.com> 12600 12601 Bug 19272 - abipkgdiff doesn't report arch change 12602 * src/abg-comparison.cc (corpus_diff::has_incompatible_changes): 12603 The architecture change into account. 12604 (corpus_diff::has_net_changes): Take architecture and soname 12605 changes into account. 12606 * tools/abicompat.cc (perform_compat_check_in_normal_mode): Use 12607 corpus_diff::{has_net_changes, has_incompatible_changes}. 12608 * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.armv7hl.rpm: New 12609 test input. 12610 * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: 12611 New test reference output. 12612 * tests/data/Makefile.am: Add the new test material above to 12613 source distribution. 12614 * tests/test-diff-pkg.cc (in_out_spec): Compare the new package 12615 above against an x86_64 one. 12616 126172016-08-11 Chenxiong Qi <cqi@redhat.com> 12618 12619 Bug 20380 - Compare two local RPMs 12620 * configure.ac: add dependent mimetype module. 12621 * doc/manuals/fedabipkgdiff.rst: Update to add document for the 12622 new use case of comparing two local RPMs. 12623 * tests/data/Makefile.am: Include new RPMs for tests. 12624 * tests/data/test-fedabipkgdiff/dbus-glib/dbus-glib-0.100.2-2.fc20.x86_64.rpm: 12625 New RPM for running test. 12626 * tests/data/test-fedabipkgdiff/dbus-glib/dbus-glib-0.106-1.fc23.x86_64.rpm: 12627 Likewise. 12628 * tests/data/test-fedabipkgdiff/nss-util/nss-util-3.12.6-1.fc14.x86_64.rpm: 12629 Likewise. 12630 * tests/data/test-fedabipkgdiff/nss-util/nss-util-3.24.0-2.0.fc25.x86_64.rpm: 12631 Likewise. 12632 * tests/data/test-fedabipkgdiff/nss-util/nss-util-devel-3.24.0-2.0.fc25.x86_64.rpm: 12633 Likewise. 12634 * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: 12635 Rename filename by adding .rpm extension. 12636 * tests/data/test-fedabipkgdiff/test5-same-dir-dbus-glib-0.100.2-2.fc20.x86_64--dbus-glib-0.106-1.fc23.x86_64-report-0.txt: 12637 New reference output for testing comparing local RPMs. 12638 * tests/data/test-fedabipkgdiff/test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt: 12639 New reference output for testing comparison without non-existent 12640 debuginfo or development package. 12641 * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): 12642 Rename filename for test4. Add two new test cases. 12643 (run_fedabipkgdiff_tests): Remove semicolon and trailing 12644 whitespaces. 12645 (main): Likewise. 12646 (ensure_output_dir_created): Likewise. 12647 * tools/fedabipkgdiff: Require some new modules. 12648 Fix of return code. 12649 (PkgInfo): Renamed to ComparisonHalf. 12650 (match_nvr): New method to determine if a string matches format 12651 of N-V-R. 12652 (match_nvra): New method to determine if a string matches format 12653 of N-V-R.A. 12654 (is_rpm_file): New method to guess if a file is a RPM file. 12655 (RPM.is_peer): New method to determine if current RPM is a peer 12656 of another. 12657 (RPM.filename): Use Koji module API to construct the filename. 12658 (RPM.nvra): Get nvra from filename instead of constructing 12659 manually that is duplicated with Koji module API. 12660 (RPMCollection): New class to represent a set of RPMs. 12661 (generate_pkg_info_pair_for_abipkgdiff): New method working as a 12662 generator to yeild comparison halves for running abipkgdiff. 12663 (Brew.getRPM): Fix string format with incorrect argument. 12664 (Brew.select_rpms_from_a_build): Return instance of 12665 RPMCollection. 12666 (abipkgdiff): If there is no debuginfo or development package, 12667 just ignore it and leave a warning. If --error-on-warning is 12668 specified, raise an exception instead. Arguments are modified 12669 to represent the new name ComparisonHalf, and relative docstring 12670 is also updated. 12671 (magic_construct): Removed. 12672 (run_abipkgdiff): Rewrite. 12673 (make_rpms_usable_for_abipkgdiff): Removed. 12674 (diff_local_rpm_with_latest_rpm_from_koji): Rewrite by using 12675 RPMCollection. 12676 (diff_latest_rpms_based_on_distros): Likewise. 12677 (diff_two_nvras_from_koji): Likewise. 12678 (diff_from_two_rpm_files): New method to compare two local RPMs. 12679 (build_commandline_args_parser): Add new option 12680 --error-on-warning. 12681 (main): Add support to compare local RPMs. 12682 126832016-12-12 Dodji Seketeli <dodji@redhat.com> 12684 12685 Fix template_decl::hash::operator() 12686 * src/abg-hash.cc (template_decl::hash::operator()): Combine the 12687 contribution of the qualified name to the contribution of the type 12688 name to the hash. 12689 126902016-12-09 Dodji Seketeli <dodji@redhat.com> 12691 12692 Fix aborting when reading .foo symbols from a ppc64 binary 12693 * abg-dwarf-reader.cc (read_context::find_opd_section): Fix 12694 comment. 12695 (read_context::load_symbol_maps): If for a given function entry 12696 point (that we got by looking at the ".opd" section for a given 12697 function pointer value) we already had an entry in the 12698 function_entry_address -> symbol, maybe it means that the previous 12699 entry that we had was from an entry in the symbol table which 12700 value was directly the entry point address of a function. In that 12701 case, if the name of the symbol is "foo", the name of the symbol 12702 which value is directly the entry point address is ".foo". What 12703 we do in this case is that we just keep the reference to the "foo" 12704 symbol in the function_entry_address -> symbol map. 12705 (read_context::address_is_in_opd_section): Define new member 12706 function. 12707 * tests/data/test-diff-pkg/gmp-4.3.1-10.el6.ppc64.rpm: New test input. 12708 * tests/data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64.rpm: Likewise. 12709 * tests/data/test-diff-pkg/gmp-debuginfo-4.3.1-10.el6.ppc64.rpm: Likewise. 12710 * tests/data/test-diff-pkg/gmp-debuginfo-4.3.1-7.el6_2.2.ppc64.rpm: Likewise. 12711 * tests/data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64--gmp-4.3.1-10.el6.ppc64-report-0.txt: 12712 New test reference output. 12713 * tests/data/Makefile.am: Add the new test input and reference 12714 output to source distribution. 12715 * tests/test-diff-pkg.cc (in_out_specs): Add the new test inputs 12716 and reference output to the set of inputs that are compared. 12717 127182016-12-05 Dodji Seketeli <dodji@redhat.com> 12719 12720 Bug 20927 - Segfault when $HOME is not set 12721 * src/abg-tools-utils.cc 12722 (get_default_user_suppression_file_path): Handle the case where 12723 the HOME environment variable is not set. 12724 * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): 12725 Likewise. When $HOME is empty set then use $TMPDIR. If it's 12726 empty too then use "/tmp". 12727 127282016-12-02 Dodji Seketeli <dodji@redhat.com> 12729 12730 Bug 20887 - Show relative change of offsets 12731 * doc/manuals/abidiff.rst: Document the new 12732 --no-show-relative-offset-changes. 12733 * doc/manuals/abipkgdiff.rst: Likewise. 12734 * include/abg-comparison.h 12735 (diff_context::show_relative_offset_changes): New accessors. 12736 * include/abg-ir.h ({set,get}_data_member_offset): Return uint64_t 12737 instead of the less portable size_t. 12738 * src/abg-comparison.cc 12739 (diff_context::priv::show_relative_offset_changes_): New data 12740 member. 12741 (dif_context::show_relative_offset_changes): Define accessor. 12742 (maybe_show_relative_offset_change): Define new function. 12743 (represent): In the overload for var_diff, call the new 12744 maybe_show_relative_offset_change. 12745 (report_size_and_alignment_changes): If the size of the type 12746 didn't change then say it now. 12747 * src/abg-ir.cc (set_data_member_offset, get_data_member_offset): 12748 Take or return a uint64_t instead of a size_t. 12749 * tools/abidiff.cc (options::show_relative_offset_changes): New 12750 data member. 12751 (options::options): Initialize it. 12752 (display_usage): Display help string for the new 12753 --no-show-relative-offset-changes. 12754 (parse_command_line): Parse the new 12755 --no-show-relative-offset-changes options. 12756 (set_diff_context_from_opts): Set the 12757 "show-relative-offset-changes" flag according to the new option.n 12758 * tools/abipkgdiff.cc (options::show_relative_offset_changes): New 12759 data member. 12760 (options::options): Initialize it. 12761 (display_usage): Add help string for the new 12762 --no-show-relative-offset-changes option. 12763 (set_diff_context_from_opts): Set the 12764 "show-relative-offset-changes" flag according to the new option. 12765 (parse_command_line): Parse the new command line option. 12766 * tests/data/test-diff-dwarf/test40-report-0.txt: Add new 12767 reference output. 12768 * tests/data/test-diff-dwarf/test40-v0.c: Source code of the first 12769 test binary. 12770 * tests/data/test-diff-dwarf/test40-v1.c: Source code of the 12771 second test binay. 12772 * tests/data/test-diff-dwarf/libtest40-v0.so: New first test binary. 12773 * tests/data/test-diff-dwarf/libtest40-v1.so: New second test binary. 12774 * tests/test-diff-dwarf.cc (in_out_spec): Add the new test 12775 binaries above to the set of binaries that are compared. 12776 * tests/data/Makefile.am: Add the new test material to source 12777 distribution. 12778 * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Adjust. 12779 * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. 12780 * tests/data/test-abidiff/test-enum0-report.txt: Likewise. 12781 * tests/data/test-abidiff/test-enum1-report.txt: Likewise. 12782 * tests/data/test-abidiff/test-struct1-report.txt: Likewise. 12783 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 12784 * tests/data/test-diff-dwarf/test1-report.txt: Likewise. 12785 * tests/data/test-diff-dwarf/test10-report.txt: Likewise. 12786 * tests/data/test-diff-dwarf/test11-report.txt: Likewise. 12787 * tests/data/test-diff-dwarf/test13-report.txt: Likewise. 12788 * tests/data/test-diff-dwarf/test15-enum-report.txt: Likewise. 12789 * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: Likewise. 12790 * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: Likewise. 12791 * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: Likewise. 12792 * tests/data/test-diff-dwarf/test38-union-report-0.txt: Likewise. 12793 * tests/data/test-diff-dwarf/test4-report.txt: Likewise. 12794 * tests/data/test-diff-dwarf/test5-report.txt: Likewise. 12795 * tests/data/test-diff-dwarf/test6-report.txt: Likewise. 12796 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 12797 * tests/data/test-diff-filter/test0-report.txt: Likewise. 12798 * tests/data/test-diff-filter/test01-report.txt: Likewise. 12799 * tests/data/test-diff-filter/test1-report.txt: Likewise. 12800 * tests/data/test-diff-filter/test13-report.txt: Likewise. 12801 * tests/data/test-diff-filter/test16-report-2.txt: Likewise. 12802 * tests/data/test-diff-filter/test16-report.txt: Likewise. 12803 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 12804 * tests/data/test-diff-filter/test17-1-report.txt: Likewise. 12805 * tests/data/test-diff-filter/test18-report.txt: Likewise. 12806 * tests/data/test-diff-filter/test19-enum-report-1.txt: Likewise. 12807 * tests/data/test-diff-filter/test2-report.txt: Likewise. 12808 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt: 12809 Likewise. 12810 * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: 12811 Likewise. 12812 * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: 12813 Likewise. 12814 * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: 12815 Likewise. 12816 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.t: 12817 Likewise.xt 12818 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: 12819 Likewise. 12820 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: 12821 Likewise. 12822 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: 12823 Likewise. 12824 * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: 12825 Likewise. 12826 * tests/data/test-diff-filter/test3-report.txt: Likewise. 12827 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 12828 Likewise. 12829 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 12830 Likewise. 12831 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 12832 Likewise. 12833 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 12834 Likewise. 12835 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Likewise. 12836 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. 12837 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. 12838 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. 12839 * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Likewise. 12840 * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Likewise. 12841 * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Likewise. 12842 * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Likewise. 12843 * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. 12844 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. 12845 * tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt: Likewise. 12846 * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. 12847 * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. 12848 * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. 12849 * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. 12850 * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. 12851 * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. 12852 * tests/data/test-diff-suppr/test30-report-0.txt: Likewise. 12853 * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Likewise. 12854 * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Likewise. 12855 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Likewise. 12856 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. 12857 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. 12858 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. 12859 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. 12860 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. 12861 * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. 12862 * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Likewise. 12863 * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Likewise. 12864 * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Likewise. 12865 * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Likewise. 12866 * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. 12867 * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. 12868 * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. 12869 * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. 12870 * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. 12871 * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. 12872 * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Likewise. 12873 128742016-12-02 Dodji Seketeli <dodji@redhat.com> 12875 12876 Rename tests/update-test-read-dwarf-output.py 12877 * tests/update-test-output.py: renamed 12878 tests/update-test-read-dwarf-output.py into this. Update its 12879 comments. Make this script executable. 12880 128812016-11-30 Dodji Seketeli <dodji@redhat.com> 12882 12883 Add tests/data/test-diff-suppr/test33-report-0.txt to tarball 12884 * tests/data/Makefile.am: Add test-diff-suppr/test33-report-0.txt. 12885 128862016-11-30 Dodji Seketeli <dodji@redhat.com> 12887 12888 Bug 20670 - abipkgdiff aborts if $XDG_CACHE_HOME does not exist 12889 * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): 12890 Ensure that the cache directory is created, even when 12891 XDG_CACHE_HOME is set. Also, remove the now useless "using 12892 abigail::tools_utils::get_random_number_as_string" statement. 12893 128942016-11-09 Dodji Seketeli <dodji@redhat.com> 12895 12896 Very light speed improvements 12897 * include/abg-comp-filter.h (has_harmless_name_change): Pass smart 12898 pointers by reference. 12899 * src/abg-comp-filter.cc (access_changed) 12900 (function_name_changed_but_not_symbol) 12901 (non_static_data_member_type_size_changed) 12902 (static_data_member_type_size_changed, is_compatible_change) 12903 (decl_name_changed, has_harmless_name_change): Pass smart 12904 pointers by reference. 12905 * include/abg-ir.h (decl_base::set_context_rel): Take a bare 12906 pointer, not a smart pointer. 12907 * src/abg-ir.cc (decl_base::priv::context_): Make this data member 12908 be a naked pointer, not a smart pointer. 12909 (decl_base::priv::priv): Initialize it. 12910 (decl_base::priv::~priv): New constructor. 12911 (decl_base::{get_context_rel, set_scope}): Adjust. 12912 (class_decl::method_decl::{method_decl, set_scope}): Likewise. 12913 (equals): In the overload for var_decl, compare the type of the 12914 var first as that might be faster (to detect var_decls with 12915 different types) in the general case where types are 12916 canonicalized. 12917 129182016-11-08 Dodji Seketeli <dodji@redhat.com> 12919 12920 Introduce on-the-fly type canonicalization 12921 * include/abg-ir.h (environment::do_on_the_fly_canonicalization): 12922 Declare new member functions. 12923 ({type_base, function_type}::priv_): Make this public so that 12924 static non-member functions defined in abg-ir.cc can access it. 12925 * src/abg-ir.cc 12926 (environment::priv::do_on_the_fly_canonicalization_): New data 12927 member. 12928 (environment::priv::priv): Initialize it. 12929 (environment::do_on_the_fly_canonicalization): Define new member 12930 functions. 12931 (type_base::get_canonical_type_for): Trigger on-the-fly 12932 canonicalization during comparison of the type being canonicalized 12933 and an already canonicalized type. 12934 (types_are_being_compared, maybe_propagate_canonical_type): Define 12935 new static functions. 12936 (equals): In overloads for class_decl and function_type, call 12937 maybe_propagate_canonical_type when the two types compare equal. 12938 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 12939 Adjust. 12940 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 12941 129422016-11-06 Dodji Seketeli <dodji@redhat.com> 12943 12944 Fix pretty representation of array types 12945 * include/abg-ir.h (array_type_def::is_infinite): Fix indentation. 12946 * src/abg-ir.cc (qualified_type_def::build_name): An empty set of 12947 sub-ranges for a vector is represented by "[]". 12948 (array_type_def::is_infinite): If a vector has no sub-range, that 12949 means it has an infinite size. Adjust comment. 12950 * tests/data/test-diff-filter/test33-report-0.txt: Adjust. 12951 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 12952 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. 12953 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 12954 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 12955 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 12956 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 12957 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 12958 Adjust. 12959 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 12960 Adjust. 12961 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 12962 129632016-10-11 Dodji Seketeli <dodji@redhat.com> 12964 12965 Support naming typedef and use them to speed up type canonicalization 12966 * include/abg-ir.h (typedef_decl_wptr): New typedef. 12967 (class_decl::{g,s}et_naming_typedef): Declare new member 12968 functions. 12969 * src/abg-dwarf-reader.cc (build_typedef_type): When the 12970 underlying type of a typedef is an anonymous class, the class type 12971 is said to have a naming typedef. 12972 * src/abg-ir.cc (is_anonymous_type): An anonymous class that has 12973 a naming typedef is said to not be anonymous anymore. 12974 (class_decl::priv::naming_typedef): New data member. 12975 (class_decl::{g,s}et_naming_typedef): Define new member functions. 12976 (class_decl::get_pretty_representation): When called for internal 12977 purposes (e.g, for type canonicalization) compute the pretty 12978 representation of the class by using its typedef name, when class 12979 is anonymous and has a naming typedef. 12980 * src/abg-reader.cc (build_class_decl): Read the new 12981 "naming-typedef-id" attribute. 12982 * src/abg-writer.cc (write_naming_typedef): New function. 12983 (write_class_decl_opening_tag): Use the new write_naming_typedef 12984 function. 12985 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 12986 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 12987 Likewise. 12988 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 12989 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 12990 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 12991 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 12992 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 12993 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 12994 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 12995 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 12996 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 12997 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 12998 Likewise. 12999 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 13000 130012016-11-02 Dodji Seketeli <dodji@redhat.com> 13002 13003 Implement de-duplication for types and decls at DWARF loading time 13004 * include/abg-ir.h (method_type::priv_): Introduce new pimpl 13005 pointer here. 13006 (method_type::class_type_): Move this into the pimpl idiom. 13007 (method_type::method_type): Take a new is_const flag. 13008 (method_type::get_class_type): Make this method out-of-line. 13009 (method_type::{s,g}et_is_const): Declare new member functions. 13010 (get_method_type_name): Declare this function as a friend of 13011 the method_type type. 13012 * src/abg-dwarf-reader.cc: Include the new abg-ir-priv.h and 13013 abg-corpus-priv.h. 13014 (typedef die_tu_map_type): Fix comment. 13015 (typedef die_istring_map_type): New typedef. 13016 (class read_context::die_source_dependant_container_set): New 13017 class template. 13018 (read_context::{die_qualified_name_maps_, die_pretty_repr_maps_, 13019 die_pretty_type_repr_maps_}): Define new data members. 13020 (read_context::{get_die_qualified_name, get_die_qualified_name, 13021 get_die_qualified_type_name, get_die_pretty_type_representation, 13022 get_die_pretty_representation, lookup_type_artifact_from_die, 13023 lookup_artifact_from_die, lookup_artifact_from_die_representation, 13024 associate_die_to_artifact_by_repr, 13025 associate_die_to_artifact_by_repr_internal, 13026 lookup_type_from_die}): Define new member functions. 13027 (read_context::lookup_type_from_die_offset): Fix comment. 13028 (get_parent_die, get_scope_die, die_is_decl) 13029 (die_is_namespace, die_is_unspecified, die_is_void_type) 13030 (die_is_pointer_type, die_is_reference_type) 13031 (die_is_pointer_or_reference_type, die_is_class_type) 13032 (die_has_object_pointer, die_this_pointer_from_object_pointer) 13033 (die_this_pointer_is_const, is_decl_tag) 13034 (die_object_pointer_is_for_const_method, die_is_at_class_scope) 13035 (die_name, die_qualified_type_name, die_qualified_decl_name) 13036 (die_qualified_name, die_qualified_type_name_empty) 13037 (die_return_and_parm_names_from_fn_type_die) 13038 (die_function_signature, die_peel_qual_ptr) 13039 (die_function_type_is_method_type, die_pretty_print_type) 13040 (die_pretty_print_decl, die_pretty_print) 13041 (build_subranges_from_array_type_die) 13042 (build_or_get_fn_decl_if_not_suppressed) 13043 (lookup_class_or_typedef_type) 13044 (lookup_class_typedef_or_enum_type_from_corpus) 13045 (is_function_for_die_a_member_of_class) 13046 (add_or_update_member_function): Define new static functions. 13047 (read_context::associate_die_to_decl): Call 13048 associate_die_to_artifact_by_repr. 13049 (read_context::{associate_die_to_type, 13050 schedule_type_for_late_canonicalization}): Take just one "die" 13051 parameter rather than taking a die offset and a die source; adjust 13052 accordingly. 13053 (maybe_canonicalize_type): Likewise. 13054 (finish_member_function_reading): Take a const reference to 13055 function_decl_sptr. 13056 (die_loc_and_name): Use the new die_name function. 13057 (die_is_type): Rename is_type_die into this. 13058 (build_type_decl): Take a new "where_offset" parameter. Adjust. 13059 If a type of the same name as the one for the current DIE is is 13060 already present, do not create a new type; just return the 13061 already-existing one. 13062 (build_enum_type): Take a new "where_offset" parameter. Adjust. 13063 (finish_member_function_reading): Pass two smart pointers by const 13064 reference. Assert that the type of the member function is a 13065 method_type. Some light cleanups. 13066 (add_or_update_class_type): Rename build_class_type_and_add_to_ir. 13067 If a DIE defining the same class has already been seen, then 13068 return that class; don't construct any other internal 13069 representation for the same class. Better handle the updating of 13070 member data and functions. Do not duplicate member types. 13071 (build_qualified_type, build_pointer_type_def) 13072 (build_reference_type): Support de-duplication here. 13073 (build_function_type): Likewise. Support detection and building 13074 of method type. This also supports *const* method type building. 13075 (build_array_type): Use the new 13076 build_subranges_from_array_type_die. 13077 (build_type_decl): Cleanup logic. 13078 (build_or_get_var_decl_if_not_suppressed): Renamed 13079 build_var_decl_if_not_suppressed into this. Perform 13080 de-duplication for data members. 13081 (build_function_decl): Don't set an empty source location. If the 13082 function type cannot be constructed, do not construct the function 13083 decl either. Adjust. 13084 (build_ir_node_from_die): Adjust. When building a function for a 13085 DW_TAG_subroutine_type DIE, use the new 13086 build_or_get_fn_decl_if_not_suppressed. 13087 * src/abg-ir.cc (translation_unit::bind_function_type_life_time): 13088 Fix comment. 13089 (strip_typedef): Adjust. 13090 (qualified_type_def::build_name): Set the prefix name of a the 13091 name of a noop qualifier to "noop-qual", just like what is done in 13092 the new die_qualified_name function. 13093 (struct method_type::priv): New priv type for the method_type 13094 class. 13095 (method_type::method_type): Take a new 'is_const' parameter. 13096 Adjust as the method_type is now pimpl'ed. 13097 (method_type::{get_class_type, set_is_const, get_is_const}): 13098 Define new member functions. 13099 (function_decl::get_pretty_representation_of_declarator): Better 13100 detecter of const-ness. 13101 (class_decl::insert_member_decl): Better setting of the 13102 const-ness. 13103 (class_decl::method_decl::method_decl): Adjust. Deduce the 13104 const-ness of the method_decl from the const-ness of its 13105 method_type. 13106 (copy_member_function): Adjust. 13107 (set_member_is_static): Do not assume a non-nil scope anymore 13108 because member_decl can now be scope-less, at least for a little 13109 while. 13110 * src/abg-reader.cc (push_decl_to_current_scope): Adjust. 13111 (build_function_decl): Style adjustment. Adjust for method_type 13112 const-ness changes. 13113 (build_function_type): Likewise. Also, support the new 13114 "method-class-id" property that flags a function type as being a 13115 method type. 13116 * src/abg-writer.cc (write_function_decl): Style fixes. 13117 (write_function_type): Likewise. Emit a new "method-class-id" 13118 property for function type that is actually a method type. That 13119 property's value is the id of the class of the method type. 13120 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Adjust. 13121 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 13122 * tests/data/test-diff-filter/test0-report.txt: Adjust. 13123 * tests/data/test-diff-filter/test01-report.txt: Adjust. 13124 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 13125 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. 13126 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. 13127 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. 13128 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Adjust. 13129 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Adjust. 13130 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 13131 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. 13132 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 13133 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. 13134 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 13135 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 13136 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 13137 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 13138 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 13139 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 13140 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 13141 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 13142 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 13143 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 13144 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 13145 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 13146 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 13147 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 13148 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Adjust. 13149 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 13150 131512016-11-01 Dodji Seketeli <dodji@redhat.com> 13152 13153 Setup per-corpus type maps indexed by type names 13154 * include/abg-corpus.h (corpus::priv_): Make this public so that 13155 functions from outside of the class can access it. These 13156 functions are meant to be used only by code that is *inside* 13157 libabigail.so, though. 13158 * src/abg-corpus-priv.h: New file. 13159 * src/abg-corpus.cc: Include the new abg-corpus-priv.h file. 13160 (struct regex_t_deleter): Move this to abg-sptr-utils.h. 13161 (build_sptr<regex_t>): Move the declaration of this function 13162 template specialization to abg-sptr-utils.h and its definition to 13163 abg-sptr-utils.cc. 13164 (typedef regex_t_sptrs_type, typedef str_var_ptr_map_type) 13165 (struct corpus::exported_decls_builder::priv, struct 13166 corpus::priv): Move these declarations to the new 13167 abg-corpus-priv.h. 13168 (maybe_update_types_lookup_map): Define overloads of this (one per 13169 kind of type). 13170 (lookup_{basic, class, enum, typedef, class_or_typedef, 13171 class_typedef_or_enum, qualified, pointer, reference, array, 13172 function}_type): Define new functions. 13173 * include/abg-ir.h (typedef istring_type_base_wptr_map_type) 13174 (typedef istring_type_or_decl_base_sptr_map_type): Declare new 13175 typedefs. 13176 (class_decl::find_member_function_from_signature): Declare new 13177 member function. 13178 * src/abg-ir.cc: Include the new abg-corpus-priv.h file. 13179 (maybe_update_types_lookup_map): Remove this initial function. 13180 There are now new overloads in abg-corpus.cc for it. 13181 (scope_decl::{add_member_decl, insert_member_decl}): Adjust. 13182 (class_decl::{set_is_declaration_only, find_member_function, 13183 add_member_function}): Adjust. 13184 (class_decl::find_member_function_from_signature): Define new 13185 member function. 13186 * include/abg-sptr-utils.h (struct regex_t_deleter): Declare new 13187 type. 13188 (build_sptr<regex_t>): New build function template 13189 specializations. 13190 * src/abg-sptr-utils.cc: New file. 13191 * src/Makefile.am: Add src/abg-sptr-utils.cc and 13192 src/abg-corpus-priv.h to the build system. 13193 131942016-11-01 Dodji Seketeli <dodji@redhat.com> 13195 13196 Allow pretty printing function decls for internal purposes 13197 * include/abg-ir.h 13198 (function_decl::get_pretty_representation_of_declarator): Take an 13199 "internal" flag. 13200 * src/abg-ir.cc 13201 (function_decl::get_pretty_representation_of_declarator): Take an 13202 "internal" flag. 13203 (function_decl::get_pretty_representation): Pass the "internal" 13204 flag to the function 13205 function_decl::get_pretty_representation_of_declarator. 13206 (function_decl::parameter::get_type_name): Better handle variadic 13207 parameter type. 13208 (function_decl::parameter::get_type_pretty_representation): 13209 Likewise. 13210 132112016-11-26 Dodji Seketeli <dodji@redhat.com> 13212 13213 Make bash completion files non-executable 13214 * bash-completion/abicompat: Make this be non-executable. 13215 * bash-completion/abidiff: Likewise. 13216 * bash-completion/abidw: Likewise. 13217 * bash-completion/abilint: Likewise. 13218 * bash-completion/abinilint: Likewise. 13219 * bash-completion/abipkgdiff: Likewise. 13220 * bash-completion/abisym: Likewise. 13221 * bash-completion/fedabipkgdiff: Likewise. 13222 132232016-11-26 Dodji Seketeli <dodji@redhat.com> 13224 13225 A suppressed diff node implies suppressing all equivalent nodes too 13226 *class of equivalence* is visited once. This is not only a way to 13227 prevent infinite loops while visiting the graph, but also an 13228 optimization as it avoids walking two equivalent diff nodes. 13229 But then it can happen that we forget to categorize some diff nodes 13230 inside a given class of equivalence, even though we categorized some 13231 others. 13232 This patch makes it so that when a diff node inside a class of 13233 equivalence is categorized as SUPPRESSED, the canonical diff node of 13234 that class of equivalence is categorized as SUPPRESSED too. That way, 13235 to know if a diff node is suppressed, we just need to look at its 13236 canonical diff node. 13237 While doing this, I noticed that abidiff and abipkgdiff are not 13238 dropping private types from libabigail's internal representation, even 13239 though the Library now has that capability. The patch fixes that. 13240 But then the patch adds a --dont-drop-private-types option to abidiff 13241 to avoid dropping those private types from the IR, so that regression 13242 tests can make sure that a suppressed diff node implies suppression 13243 all equivalent nodes too. 13244 * doc/manuals/abidiff.rst b/doc/manuals/abidiff.rst: Document the 13245 new --dont-drop-private-types option. 13246 * src/abg-comparison.cc (diff::is_filtered_out): If the canonical 13247 type was suppressed then the current diff node is filtered out. 13248 (suppression_categorization_visitor::visit_{begin,end}): 13249 Categorized the canonical node as SUPPRESSED if the current node 13250 is suppressed. 13251 * tools/abidiff.cc (options::drop_private_types): New data member. 13252 (options::options): Initialize it. 13253 (display_usage): Add new help string for the new 13254 --dont-drop-private-types option. 13255 (parse_command_line): Parse the new --dont-drop-private-types 13256 option. 13257 (set_suppressions): Generate suppression specification from header 13258 directories given in parameter and stick them to the read context. 13259 * tools/abipkgdiff.cc (compare): Likewise. 13260 * tests/data/test-diff-suppr/libtest34-v0.so: New test input. 13261 * tests/data/test-diff-suppr/libtest34-v1.so: Likewise. 13262 * tests/data/test-diff-suppr/test34-report-0.txt: New reference 13263 report. 13264 * tests/data/test-diff-suppr/test34-v0.c: Source code for the new 13265 test input. 13266 * tests/data/test-diff-suppr/test34-v1.c: Likewise. 13267 * tests/data/test-diff-suppr/test34-priv-include-dir-v0/test34-priv-include-v0.h: 13268 Likewise. 13269 * tests/data/test-diff-suppr/test34-priv-include-dir-v1/test34-priv-include-v1.h: 13270 Likewise. 13271 * tests/data/test-diff-suppr/test34-pub-include-dir-v0/test34-pub-include-v0.h: 13272 Likewise. 13273 * tests/data/test-diff-suppr/test34-pub-include-dir-v1/test34-pub-include-v1.h: 13274 Likewise. 13275 * tests/data/Makefile.am: Add new test input material above to 13276 source distribution. 13277 * tests/test-diff-suppr.cc (in_out_spec): Compare the two new test 13278 library provided. Add --dont-drop-private-types to test30*. 13279 signed-off-by: Dodji Seketeli <dodji@redhat.com> 13280 132812016-11-26 Dodji Seketeli <dodji@redhat.com> 13282 13283 Forgot to consider libtest33-v{0,1}.so in test-diff-suppr.cc 13284 * tests/data/test-diff-suppr/test33-report-0.txt: New refernce report. 13285 * tests/test-diff-suppr.cc (in_out_specs): Compare libtest33-v0.so 13286 and libtest33-v1.so. 13287 132882016-11-24 Dodji Seketeli <dodji@redhat.com> 13289 13290 Bump version number to 1.0.rc7 13291 * configure.ac: 13292 132932016-11-24 Dodji Seketeli <dodji@redhat.com> 13294 13295 Update website for 1.0.rc6 13296 * doc/website/mainpage.txt: Update for 1.0.rc6 release 13297 132982016-11-23 Dodji Seketeli <dodji@redhat.com> 13299 13300 Update NEWS and ChangeLog for 1.0.rc6 13301 * ChangeLog: Update this automatically using "make 13302 update-changelog". 13303 * NEWS: update this by editing the output of 'git shortlog 13304 libabigail-1.0.rc5..HEAD'. 13305 133062016-11-24 Dodji Seketeli <dodji@redhat.com> 13307 13308 Avoid using size_t to get DWARF data 13309 * src/abg-dwarf-reader.cc (die_size_in_bits, die_location_expr): 13310 Take uint64_t rather than size_t and adjust. 13311 (expr_result::const_value_): Make this be int64_t rather than 13312 ssize_t. 13313 (expr_result::expr_result): Take int64_t rather than ssize_t. 13314 (expr_result::const_value): Return int64_t rather than ssize_t. 13315 (expr_result::{operator(), operator=, operator+=}): Make these 13316 operators return or take int64_t. 13317 too. 13318 (op_pushes_constant_value, op_manipulates_stack) 13319 (op_is_arith_logic, op_is_control_flow) 13320 (eval_last_constant_dwarf_sub_expr, die_member_offset) 13321 (die_virtual_function_index): Take 13322 uint64_t rather than size_t, or int64_t rather than ssize_t. 13323 (finish_member_function_reading, build_class_type_and_add_to_ir) 13324 (build_union_type_and_add_to_ir): Adjust. 13325 133262016-11-24 Dodji Seketeli <dodji@redhat.com> 13327 13328 Fix a compiler warning issued by GCC 6.2.1 13329 * src/abg-dwarf-reader.cc (find_import_unit_point_between_dies): 13330 Parameter 5 of find_import_unit_point_between_dies is not of type 13331 Dwarf_Off. 13332 133332016-11-24 Dodji Seketeli <dodji@redhat.com> 13334 13335 Fix offset type mismatch 13336 * src/abg-dwarf-reader.cc (die_member_offset): The last two 13337 parameters of die_unsigned_constant_attribute must be of type 13338 uint64_t. 13339 133402016-11-24 Dodji Seketeli <dodji@redhat.com> 13341 13342 Fix indentation in abg-writer.cc 13343 * src/abg-writer.cc (write_union_decl_opening_tag): Fix 13344 indentation. 13345 133462016-11-23 Dodji Seketeli <dodji@redhat.com> 13347 13348 Support reading data member offset from DW_AT_bit_offset 13349 * src/abg-dwarf-reader.cc (die_member_offset): Better comments. 13350 Support reading the bit offset also from the DW_AT_bit_offset 13351 attribute when it's present. Make sure this always returns a 13352 value in bits. 13353 (build_class_type_and_add_to_ir): No need to multiply (by 8) the 13354 value returned by die_member_offset anymore because it's now in 13355 bits directly. 13356 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 13357 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. 13358 * tests/data/test-read-dwarf/test1.abi: Adjust. 13359 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 13360 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 13361 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 13362 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 13363 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 13364 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 13365 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 13366 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 13367 Adjust. 13368 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 13369 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 13370 Adjust. 13371 133722016-11-23 Dodji Seketeli <dodji@redhat.com> 13373 13374 Lexicographically sort union data members in change reports 13375 * src/abg-comparison.cc (data_member_comp::operator()): Data 13376 members with the same offset are sorted lexicographically, by 13377 taking their name into account. 13378 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 13379 Adjust. 13380 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 13381 Likewise. 13382 133832016-11-23 Dodji Seketeli <dodji@redhat.com> 13384 13385 Better diagnostics when wget is missing 13386 * configure.ac: When wget is missing then make the disabling of 13387 the building of the fedabipkgdiff tool show up in the 13388 configuration summary and emit a notice. 13389 133902016-11-15 Dodji Seketeli <dodji@redhat.com> 13391 13392 Support union types 13393 * include/abg-fwd.h (class_or_union, union_decl): Forward-declare 13394 new types. 13395 (is_class_or_union_type, is_union_type): Declare new functions. 13396 * include/abg-ir.h (method_type::class_type_): Make this be of 13397 class_or_union_wptr type. 13398 (method_type::method_type): Make the class_type parameter be of 13399 class_or_union_wptr type. 13400 (method_type::{g,s}et_class_type): Take or return a 13401 class_or_union_sptr. 13402 (member_base, method_decl, member_function_template) 13403 (member_class_template, member_base::hash) 13404 (member_function_template::hash, member_class_template::hash): 13405 Take these class types out of the class_decl scope. 13406 (is_method_decl): Adjust. 13407 (operator==, opertor!=): Adjust overloads for 13408 member_function_template_sptr and member_class_template_sptr. 13409 (class class_or_union): Declare new type. 13410 (class class_decl): Make this class inherit class_or_union class. 13411 (class_decl::{add_member_decl, insert_member_decl, 13412 remove_member_decl, set_size_in_bits, get_size_in_bits, 13413 get_alignment_in_bits, set_alignment_in_bits, 13414 get_is_declaration_only, set_is_declaration_only, 13415 set_definition_of_declaration, get_definition_of_declaration, 13416 get_earlier_declaration, set_earlier_declaration, 13417 insert_member_type, add_member_type, remove_member_type, 13418 get_member_type, find_member_type, add_data_member, 13419 get_data_members, find_data_member, get_non_static_data_members, 13420 add_member_function, get_member_functions, find_member_function, 13421 add_member_function_template, get_member_function_templates, 13422 add_member_class_template, get_member_class_templates): Move these 13423 to the parent class class_or_union. 13424 (copy_member_function, equals): Add overloads for class_or_union. 13425 (struct class_or_union::hash): Declare new type. 13426 (class union_decl): Declare new type. 13427 (equals, copy_member_function): New overloads for class union_decl 13428 type. 13429 (ir_node_visitor::visit): Add new overloads for union_decl* and 13430 class_or_union*. 13431 * src/abg-ir.cc (get_member_function_is_ctor) 13432 (set_member_function_is_ctor, get_member_function_is_dtor) 13433 (set_member_function_is_dtor, get_member_function_is_const) 13434 (set_member_function_is_const, get_member_function_vtable_offset) 13435 (set_member_function_vtable_offset) 13436 (get_member_function_is_virtual, set_member_function_is_virtual) 13437 (maybe_update_types_lookup_map, get_location) 13438 (get_method_type_name, is_at_global_scope, is_at_class_scope): 13439 Adjust. 13440 (is_class_or_union_type, is_union_type): Define new functions. 13441 (type_base::get_canonical_type_for, maybe_adjust_canonical_type) 13442 (method_type::method_type, method_type::set_class_type) 13443 (function_decl::get_pretty_representation) 13444 (function_decl::get_first_non_implicit_parm) 13445 (function_decl::clone): Adjust. 13446 (equals): Adjust the overload for function_type. 13447 (struct class_or_union::priv): Define new type. 13448 (class::priv::{declaration_, definition_of_declaration_, 13449 member_types_, data_members_, non_static_data_members_, 13450 member_functions_, mem_fns_map_, member_function_templates_, 13451 member_class_templates_, is_declaration_only_}): Move these data 13452 member into class_or_union::priv. 13453 (class_priv::{mark_as_being_compared, unmark_as_being_compared, 13454 comparison_started}): Moved these member functions to 13455 class_or_union::priv. 13456 (class_or_union::{class_or_union, traverse, ~class_or_union, 13457 add_member_decl, remove_member_decl, insert_member_type, 13458 add_member_type, get_size_in_bits, remove_member_type, 13459 get_alignment_in_bits, set_alignment_in_bits, set_size_in_bits, 13460 get_is_declaration_only, set_is_declaration_only, 13461 set_definition_of_declaration, get_definition_of_declaration, 13462 get_earlier_declaration, set_earlier_declaration, 13463 get_member_types, find_member_type, add_data_member, 13464 get_data_member, find_data_member, add_member_function, 13465 get_member_functions, find_member_function, 13466 add_member_function_template, get_member_function_templates, 13467 add_member_class_template, get_member_class_templates, 13468 has_no_member, insert_member_decl, operator==}): Define new member 13469 functions. 13470 (class_decl::{add_member_decl, remove_member_decl, 13471 insert_member_type, add_member_type, get_size_in_bits, 13472 remove_member_type, get_alignment_in_bits, set_alignment_in_bits, 13473 set_size_in_bits, get_is_declaration_only, 13474 set_is_declaration_only, set_definition_of_declaration, 13475 get_earlier_declaration, set_earlier_declaration, 13476 get_member_types, find_member_type, add_data_member, 13477 get_data_member, find_data_member, add_member_function, 13478 get_member_functions, find_member_function, 13479 add_member_function_template, get_member_function_templates, 13480 add_member_class_template, get_member_class_templates): Move these 13481 member functions into class_or_union. 13482 (class_decl::{class_decl, get_definition_of_declaration, 13483 insert_member_decl, add_member_function, has_no_base_nor_member}): 13484 Adjust. 13485 (equals, copy_member_function): Define new overloads for 13486 class_or_union. 13487 (equals): Adjust the overload for class_decl. 13488 (method_decl::{method_decl, set_linkage_name, ~method_decl, 13489 get_type, set_scope}): Remove from the class_decl scope. 13490 (member_base::operator==, member_function_template::operator==): 13491 Likewise. 13492 (member_function_template::traverse) 13493 (member_class_template::operator==) 13494 (member_class_template::traverse): Likewise. 13495 (operator==, operator!=): Adjust the overlod for 13496 member_function_template_sptr. 13497 (is_method_decl, fixup_virtual_member_function) 13498 (set_member_is_static): Adjust. 13499 (virtual_member_function_less_than::operator()): Likewise. 13500 (union_decl::{union_decl, get_pretty_representation, operator==, 13501 traverse}): Define new member functions. 13502 (equals, copy_member_function): Define new overloads for 13503 union_decl. 13504 (hash_type_or_decl): Adjust. 13505 (ir_node_visitor::visit_{begin, end}): Adjust. Add new overloads 13506 for class_or_union* and union_decl*. 13507 * include/abg-comparison.h (changed_member_function_sptr) 13508 (string_member_function_sptr_map): Adjust these typedefs. 13509 (class class_or_union_diff): Declare new type. 13510 (class_diff): Adjust to make this inherit the new 13511 class_or_union_diff type. 13512 (class_diff::{get_priv, member_types_changes, 13513 data_members_changes, inserted_data_members, deleted_data_members, 13514 member_fn_tmpls_changes, member_fn_tmpls_changes, 13515 member_class_tmpls_changes}): These member functions got moved 13516 into -- and shared with -- class_or_union_diff class. 13517 (class union_diff): Declare new type. 13518 (typedef union_diff_sptr): New typedef. 13519 (compute_diff): New overload for union_diff 13520 (is_class_diff, is_union_diff): Declare new functions. 13521 * src/abg-comparison.cc (is_class_diff, is_union_diff): Define new 13522 functions. 13523 (compute_diff_for_types): Support union_decl. 13524 (represent): Adjust. 13525 (represent_data_member): Do not show offset information for data 13526 members of unions as all union data members are at offset 0. 13527 (struct class_or_union_diff::priv): New type. 13528 (class_or_union_diff::priv::{member_type_has_changed, 13529 subtype_changed_dm, member_class_tmpl_has_changed, 13530 get_deleted_non_static_data_members_number, 13531 get_inserted_non_static_data_members_number, 13532 count_filtered_subtype_changed_dm, count_filtered_changed_dm, 13533 count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns, 13534 count_filtered_deleted_mem_fns}): Define new member functions. 13535 (class_or_union_diff::{class_or_union_diff, finish_diff_type, 13536 lookup_tables_empty, lookup_tables_empty, 13537 ensure_lookup_tables_populated, allocate_priv_data, get_priv, 13538 ~class_or_union_diff, first_class_or_union, second_class_or_union, 13539 member_types_changes, member_types_changes, data_members_changes, 13540 inserted_data_members, deleted_data_members, member_fns_changes, 13541 changed_member_fns, member_fns_changes, inserted_member_fns, 13542 member_fn_tmpls_changes, member_fn_tmpls_changes, 13543 member_class_tmpls_changes, member_class_tmpls_changes, 13544 has_changes, has_local_changes, report, chain_into_hierarchy}): 13545 Define new member functions. 13546 (class_diff::priv::{member_types_changes_, data_members_changes, 13547 member_fn_tmpls_changes_, member_class_tmpls_changes_, 13548 deleted_member_types_, inserted_member_types_, 13549 changed_member_types_, sorted_changed_member_types_, 13550 deleted_data_members_, deleted_dm_by_offset_, 13551 inserted_data_members_, inserted_dm_by_offset_, 13552 subtype_changed_dm_, sorted_subtype_changed_dm_, changed_dm_, 13553 sorted_changed_dm_, deleted_member_functions_, 13554 inserted_member_functions_, changed_member_functions_, 13555 sorted_changed_member_functions_, deleted_member_class_tmpls_, 13556 inserted_member_class_tmpls_, changed_member_class_tmpls_, 13557 sorted_changed_member_class_tmpls_}): Move these data members into 13558 class_or_union_diff::priv. 13559 (class_diff::{clear_lookup_tables, lookup_tables_empty, 13560 ensure_lookup_tables_populate}): Adjust. 13561 (class_diff::allocate_priv_data): Define new function. 13562 (class_diff::priv::{count_filtered_changed_mem_fns, 13563 count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns, 13564 chain_into_hierarchy, class_diff}): Likewise. 13565 (class_diff::{member_types_changes, data_members_changes, 13566 inserted_data_members, deleted_data_members, 13567 member_fn_tmpls_changes, member_fn_tmpls_changes, 13568 member_class_tmpls_changes}): These are deleted as they got moved 13569 to class_or_union_diff. 13570 (class_diff::report): Adjust. 13571 (union_diff::{clear_lookup_tables, lookup_tables_empty, 13572 ensure_lookup_tables_populated, allocate_priv_data, union_diff, 13573 finish_diff_type, first_union_decl, second_union_decl, 13574 get_pretty_representation, report}): Define new functions. 13575 (compute_diff): Define an overload for union_decl_sptr. 13576 (function_decl_diff::report): Adjust. 13577 (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): 13578 Adjust. 13579 (corpus_diff::report): Adjust. 13580 * src/abg-hash.cc (member_base::hash::operator) 13581 (member_function_template::hash::operator) 13582 (member_class_template::hash::operator): Move these out of the 13583 class_decl scope. 13584 (class_or_union::hash::operator): Define new member function. 13585 (class_decl::hash::operator): Adjust. 13586 (type_base::dynamic_hash::operator): Support hashing of 13587 union_decl. Adjust. 13588 * src/abg-suppression.cc (type_suppression::suppresses_diff): 13589 Adjust. 13590 * src/abg-dwarf-reader.cc (typedef die_class_or_union_map_type): 13591 Define new typedef. 13592 (read_context::{die_wip_classes_map_, 13593 alternate_die_wip_classes_map_, type_unit_die_wip_classes_map_): 13594 Make these data member have type die_class_or_union_map_type. 13595 (read_context::{lookup_type_from_die_offset, die_wip_classes_map, 13596 is_wip_class_die_offset, resolve_declaration_only_classes}): 13597 Adjust. 13598 (finish_member_function_reading, build_class_type_and_add_to_ir) 13599 (build_function_type, build_function_decl, build_reference_type) 13600 (type_is_suppressed, build_function_decl) 13601 (maybe_canonicalize_type, maybe_set_member_type_access_specifier): 13602 Adjust. 13603 (build_union_type_and_add_to_ir): Define new static function. 13604 (build_ir_node_from_die): Support DW_TAG_union_type DIE tag. 13605 * src/abg-reader.cc (handle_element_node): Handle union_decl. 13606 (build_function_decl, build_function_decl_if_not_suppressed): 13607 Adjust. 13608 (build_union_decl_if_not_suppressed, build_union_decl) 13609 (handle_union_decl): Define new functions. 13610 (build_class_decl): Adjust. 13611 * src/abg-writer.cc (record_decl_only_type_as_emitted): Adjust. 13612 (write_decl): Adjust. Support writting union_decl type. 13613 p (write_class_decl_opening_tag, write_class_decl): Adjust. Call 13614 the new write_class_or_union_is_declaration_only. 13615 (write_union_decl_opening_tag, write_union_decl): Define new 13616 static functions. 13617 (write_member_tpe): Support writting union decl. 13618 * tests/test-diff-dwarf.cc (in_out_specs): Add new tests for this 13619 union type support. 13620 * tests/data/test-diff-dwarf/libtest37-union-v0.so: New test input. 13621 * tests/data/test-diff-dwarf/libtest37-union-v1.so: Likewise. 13622 * tests/data/test-diff-dwarf/libtest38-union-v0.so: Likewise. 13623 * tests/data/test-diff-dwarf/libtest38-union-v1.so: Likewise. 13624 * tests/data/test-diff-dwarf/libtest39-union-v0.so: Likewise. 13625 * tests/data/test-diff-dwarf/libtest39-union-v1.so: Likewise. 13626 * tests/data/test-diff-dwarf/test37-union-report-0.txt: Likewise. 13627 * tests/data/test-diff-dwarf/test38-union-report-0.txt: Likewise. 13628 * tests/data/test-diff-dwarf/test39-union-report-0.txt: Likewise. 13629 * tests/data/test-diff-dwarf/test37-union-v0.cc: Source code for 13630 new test input. 13631 * tests/data/test-diff-dwarf/test37-union-v1.cc: Likewise. 13632 * tests/data/test-diff-dwarf/test38-union-v0.cc: Likewise. 13633 * tests/data/test-diff-dwarf/test38-union-v1.cc: Likewise. 13634 * tests/data/test-diff-dwarf/test39-union-v0.cc: Likewise. 13635 * tests/data/test-diff-dwarf/test39-union-v1.cc: Likewise. 13636 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 13637 Update test reference. 13638 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 13639 Likewise. 13640 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 13641 Likewise. 13642 * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. 13643 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 13644 Likewise. 13645 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 13646 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 13647 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 13648 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 13649 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 13650 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 13651 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 13652 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 13653 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 13654 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 13655 Likewise. 13656 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 13657 Likewise. 13658 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 13659 Likewise. 13660 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 13661 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 13662 Likewise. 13663 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: 13664 Likewise. 13665 136662016-11-10 Dodji Seketeli <dodji@redhat.com> 13667 13668 Support empty properties in INI files 13669 * include/abg-ini.h (simple_property::simple_property): Add a new 13670 constructor for empty values. 13671 (simple_property::has_empty_value): Declare new member function. 13672 * src/abg-ini.cc (simple_property::{simple_property, 13673 has_empty_value}): Define new member functions. 13674 (read_context::read_property): Support reading a property with no 13675 value. 13676 (write_property_value, write_property): Support writting a 13677 property with empty value. 13678 136792016-11-10 Dodji Seketeli <dodji@redhat.com> 13680 13681 Rename config::property_vector into config::properties_type 13682 * include/abg-ini.h (config::properties_type): Rename the typedef 13683 config::property_vector into this. 13684 (config::section::{section, get_properties, set_properties}): 13685 Adjust. 13686 * src/abg-ini.cc (config::section::priv::properties_): Adjust the 13687 name of its type. 13688 (config::section::{section, get_properties, set_properties, 13689 find_property}): Adjust. 13690 (write_section): Adjust. 13691 * src/abg-suppression.cc (read_function_suppression): Adjust. 13692 136932016-11-09 Dodji Seketeli <dodji@redhat.com> 13694 13695 Apply harmless and harmful filters in one pass 13696 * include/abg-comp-filter.h (class harmless_harmful_filter): 13697 Decalre new class. 13698 (typedef harmless_harmful_filter_sptr): Declare new typedef. 13699 (class harmless_filter, class harmful_filter): Remove these class 13700 declarations. 13701 (typedef harmful_filter_sptr, harmless_filter_sptr): Remove these 13702 typedefs. 13703 * src/abg-comp-filter.cc (categorize_harmless_diff_node) 13704 (categorize_harmful_diff_node): Define new static functions. 13705 ({harmless, harmful}_filter::{visit, visit_end}): Remove these 13706 member functions. 13707 (harmless_harmful_filter::{visit, visit_end}): Define new member 13708 functions. 13709 * src/abg-comparison.cc (diff_context::diff_context): Register the 13710 new harmless_harmful_filter, and remove the premier 13711 harmless_filter and harmful_filter. 13712 # Please enter the commit message for your changes. Lines starting 13713 # with '#' will be ignored, and an empty message aborts the 13714 commit. # On branch kabidiff-dedup # Changes to be committed: # 13715 (use "git reset HEAD <file>..." to unstage) # # modified: 13716 include/abg-comp-filter.h # modified: src/abg-comp-filter.cc # 13717 modified: src/abg-comparison.cc # # Untracked files: # (use "git 13718 add <file>..." to include in what will be committed) # # diff.txt 13719 # prtests/ # tests/data/test-read-dwarf/libtest23.so.abi.conflict 13720 137212016-11-08 Dodji Seketeli <dodji@redhat.com> 13722 13723 Avoid stripping typedefs too much 13724 * src/abg-ir.cc (types_are_compatible) 13725 (is_compatible_with_class_type): Do not strip typedefs. Just get 13726 their leaf types. 13727 137282016-11-08 Dodji Seketeli <dodji@redhat.com> 13729 13730 Misc style cleanups in abg-ir.cc 13731 * src/abg-ir.cc (equals): In overloads for function_type and 13732 class_decl, avoid returning a constant when we can return a 13733 variable like in the rest of the code. 13734 137352016-11-01 Dodji Seketeli <dodji@redhat.com> 13736 13737 Factorize out string representation of array_type_def::subrange_type 13738 * src/abg-ir.cc (array_type_def::subrange_type::{as_string, 13739 vector_as_string}): Define methods. 13740 (array_type_def::get_subrange_representation): Use the new 13741 vector_as_string method. 13742 137432016-11-01 Dodji Seketeli <dodji@redhat.com> 13744 13745 Factorize out parsing of integral types 13746 * src/abg-ir-priv.h: New file. 13747 * src/Makefile.am: Add abg-ir-priv.h to the build system. 13748 * src/abg-ir.cc: Include the new abg-ir-priv.h header file. 13749 (class_integral_type): Move this type 13750 declaration to the new abg-ir-priv.h header. 13751 (integral_type::modifiers_type): Make this non-static. 13752 (parse_integral_type): This new overload is a factorized out of 13753 ... 13754 (integral_type::integral_type): ... here. 13755 137562016-10-31 Dodji Seketeli <dodji@redhat.com> 13757 13758 Misc style fixes in abg-ir.cc 13759 * src/abg-ir.cc (get_function_type_name, 13760 get_pretty_representation): Misc style fixes. 13761 137622016-10-31 Dodji Seketeli <dodji@redhat.com> 13763 13764 Consider a method_decl as always being a member decl 13765 * src/abg-ir.cc (is_member_decl): Consider a method decl as always 13766 being a member decl. 13767 (is_member_function): Use is_member_decl. 13768 137692016-10-31 Dodji Seketeli <dodji@redhat.com> 13770 13771 Cleanup void and variadic parameter type interfaces 13772 * include/abg-ir.h (environment::{get_void_type, 13773 get_variadic_parameter_type}): Renamed get_void_type_decl and 13774 get_variadic_parameter_type_decl to these. 13775 (environment::is_void_type): Remove the overload that takes a bare 13776 pointer. 13777 (environment::is_variadic_parameter_type): Declare new member 13778 function. 13779 * src/abg-ir.cc (environment::void_type_): Renamed the data member 13780 void_type_decl_ into this. 13781 (environment::variadic_marker_type_): Renamed the data member 13782 variadic_marker_type_decl_ into this. 13783 (environment::{get_void_type, get_variadic_parameter_type}): 13784 Renamed get_void_type_decl and get_variadic_parameter_type_decl to 13785 these. 13786 (environment::is_void_type): Take a smart pointer now. 13787 (environment::is_variadic_parameter_type): Define new member 13788 function. 13789 (synthesize_function_type_from_translation_unit): Adjust. 13790 (function_decl::parameter::get_pretty_representation): Likewise. 13791 * src/abg-comparison.cc (is_diff_of_variadic_parameter_type): 13792 Adjust. 13793 * src/abg-dwarf-reader.cc (build_function_type) 13794 (build_ir_node_for_void_type): Likewise. 13795 * src/abg-reader.cc (build_function_parameter) 13796 (build_function_decl, build_function_type): Likewise. 13797 137982016-10-31 Dodji Seketeli <dodji@redhat.com> 13799 13800 Cleanup some entry points in abg-fwd.h 13801 * include/abg-fwd.h (add_decl_to_scope): Pass the scope smart 13802 pointer by reference. 13803 (is_member_type): pass the type smart pointer by reference. 13804 (is_function_decl, is_pointer_type, is_reference_type) 13805 (is_qualified_type, is_function_type, is_method_type) 13806 (is_array_type): Take a type_or_decl base pointer, rather than 13807 either a decl_base or type_base pointer. 13808 * include/abg-ir.h (translation_unit::set_corpus): Take a pointer 13809 to non-const corpus. 13810 (translation_unit::get_corpus): Add a non-const overload. 13811 (type_or_decl_base::get_corpus): Likewise. 13812 (type_or_decl_base::set_translation_unit): Take a pointer to 13813 non-corpus translation_unit. 13814 (type_or_decl_base::get_translation_unit): Add a non-const 13815 overload. 13816 (scope_decl::{add_member_decl, insert_member_decl}): Pass the 13817 member smart pointer by reference. 13818 (scope_decl::remove_member_decl): Take a non-const smart pointer. 13819 (class_decl::add_member_decl): Pass the decl smart pointer by 13820 reference. 13821 (is_method_decl): Take pointer or reference to type_or_decl_base 13822 rather than function_decl. 13823 * src/abg-ir.cc (translation_unit::priv::corpus): Make this a 13824 pointer to non-const corpus. 13825 (translation_unit::set_corpus): Take a pointer to non-const 13826 corpus. 13827 (translation_unit::get_corpus): Add a non-const overload. 13828 (translation_unit::get_global_scope): Adjust. 13829 (translation_unit::bind_function_type_life_time): Adjust. 13830 (type_or_decl_base::translation_unit): Make this a pointer to 13831 non-const translation_unit. 13832 (type_or_decl_base::get_corpus): Likewise. 13833 (type_or_decl_base::set_translation_unit): Take a pointer to 13834 non-corpus translation_unit. 13835 (type_or_decl_base::get_translation_unit): Add a non-const 13836 overload. 13837 (is_member_type): pass the type smart pointer by reference. 13838 (scope_decl::{add_member_decl, insert_member_decl}): Take a 13839 reference to the member decl smart pointer. Adjust. 13840 (class_decl::add_member_decl): Likewise. 13841 (scope_decl::remove_member_decl): Take a non-const smart pointer. 13842 (add_decl_to_scope): Pass the scope smart pointer by reference. 13843 (is_decl, is_function_decl, is_pointer_type, is_reference_type) 13844 (is_qualified_type, is_function_type, is_method_type) 13845 (is_method_decl, is_array_type): Take a type_or_decl base pointer, 13846 rather than either a decl_base or type_base pointer. 13847 138482016-10-31 Dodji Seketeli <dodji@redhat.com> 13849 13850 Fix abigail::ir::get_type_scope() 13851 * src/abg-ir.cc (get_type_scope): Do not always return nil. 13852 138532016-10-27 Dodji Seketeli <dodji@redhat.com> 13854 13855 Bug 20740 Broken check for dwarf_getalt in configure.ac 13856 * configure.ac: Add missing spaces around the "=" of a conditional 13857 expression. 13858 138592016-10-11 Dodji Seketeli <dodji@redhat.com> 13860 13861 Canonicalize function types when reading from DWARF 13862 * src/abg-dwarf-reader.cc (build_function_decl): Canonicalize 13863 function types. 13864 138652016-10-11 Dodji Seketeli <dodji@redhat.com> 13866 13867 Misc cleanups here and there 13868 * src/abg-dwarf-reader.cc (canonicalize_types_scheduled): Fix 13869 identation. 13870 * src/abg-reader.cc (build_class_decl): Use class_decl_sptr rather 13871 than shared_ptr<class_decl>. 13872 * src/abg-writer.cc (write_class_is_declaration_only) 13873 (write_is_struct, write_decl, write_decl_in_scope) 13874 (write_type_decl, write_qualified_type_def) 13875 (write_pointer_type_def, write_reference_type_def) 13876 (write_array_type_def, write_enum_type_decl, write_typedef_decl) 13877 (write_elf_symbol, write_var_decl, write_function_decl) 13878 (write_member_type_opening_tag, write_member_type) 13879 (write_class_decl_opening_tag, write_class_decl): Cleanup 13880 parameters to use the right typedef, rather than the long 13881 shared_ptr<*> form. Pass the shared pointers by reference as 13882 well. 13883 138842016-10-10 Dodji Seketeli <dodji@redhat.com> 13885 13886 Cleanup namespace importing in abg-interned-str.h 13887 * include/abg-interned-str.h: Inject std::tr1::shared_ptr, 13888 std::string and std::ostream inside the abigail namespace. 13889 (interned_string::{interned_string, raw, operator==, operator!=, 13890 operator<): Adjust. 13891 (operator==, operator!=, operator<<, operator+): Adjust. 13892 138932016-10-07 Dodji Seketeli <dodji@redhat.com> 13894 13895 Cleanup functions to detect infinite comparison of class_decl 13896 * src/abg-ir.cc (class_decl::priv::unmark_as_being_compared): In 13897 the overload that takes a pointer to class_decl, re-use the 13898 overload that takes a reference. 13899 (class_decl::priv::comparison_started): Do not crash if the klass 13900 pointer is nil. 13901 (equals): In the overload for class_decl&, undef the RESULT macro 13902 when it's not used anymore. 13903 139042016-10-07 Dodji Seketeli <dodji@redhat.com> 13905 13906 Cleanup class_decl inifite comparison detection 13907 * src/abg-ir.cc (environment::priv::classes_being_compared_): Make 13908 this use the new interned_string_set_type type. 13909 (class_decl::priv::{mark_as_being_compared, comparison_started}): 13910 Adjust. 13911 139122016-10-10 Dodji Seketeli <dodji@redhat.com> 13913 13914 Apply ODR-based type comparison optimization to function types 13915 * src/abg-ir.cc (type_eligible_for_odr_based_comparison): 13916 Factorize this out of type_base::get_canonical_type_for. Also, 13917 add function types to the set of types to use the ODR-based 13918 comparison optimization on. 13919 (type_base::get_canonical_type_for): Use the new 13920 type_eligible_for_odr_based_comparison function. 13921 139222016-10-07 Dodji Seketeli <dodji@redhat.com> 13923 13924 Prevent infinite loops while comparing two function_type 13925 * include/abg-ir.h (class environment): Make class function_type 13926 be a friend of this class. 13927 (class function_type): Make the equality function for 13928 function_types be a friend of this class. 13929 * src/abg-ir.cc (environment::priv::fn_types_being_compared_): New 13930 data member. 13931 (function_type::priv::{mark_as_being_compared, 13932 unmark_as_being_compared, comparison_started}): Define new member 13933 functions. 13934 (equals): In the overload for function_types, if any of the the 13935 function_type being compared is already being compared, return 13936 early saying that the two function_types are equal. This avoids 13937 139382016-10-06 Dodji Seketeli <dodji@redhat.com> 13939 13940 Define a new interned_string_set_type typedef 13941 * include/abg-interned-str.h (interned_string_set_type): Define a new 13942 typedef for unordered_set<interned_string>. 13943 139442016-09-23 Dodji Seketeli <dodji@redhat.com> 13945 13946 Update reference output of runtestreaddwarf 13947 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 13948 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 13949 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 13950 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 13951 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 13952 139532016-09-21 Matthias Klose <doko@debian.org> 13954 13955 Fix typo in abipkgdiff 13956 * tools/abipkgdiff.cc (extract_deb): Fix typo. 13957 139582016-09-12 Dodji Seketeli <dodji@redhat.com> 13959 13960 Better handle fedabipkgdiff dependencies detection 13961 * configure.ac: It's only when --enable-fedabipkgdiff is provided 13962 that a missing dependency of the fedabipkgdiff program results in 13963 a fatal error. Otherwise, building fedabipkgdiff is just 13964 disabled. 13965 139662016-09-16 Dodji Seketeli <dodji@redhat.com> 13967 13968 Add default suppression specifications for C++ binaries 13969 * default.abignore: Add suppressions for non-libstdc++ and 13970 non-boost C++ libraries. 13971 139722016-09-20 Dodji Seketeli <dodji@redhat.com> 13973 13974 Add default suppression specification for webkitgtk 13975 * default.abignore: New suppression specifications for webkitgtk. 13976 139772016-09-19 Dodji Seketeli <dodji@redhat.com> 13978 13979 Drop suppressed ABI artifacts from the IR 13980 * doc/manuals/abidw.rst: Document the new --suppressions and 13981 --headers-dir options off the abidw tool. 13982 * doc/manuals/abilint.rst: Document the new --suppressions and 13983 --headers-dir options on the abilint tool. 13984 * doc/manuals/libabigail-concepts.rst: Document the new "drop" and 13985 "name_not_regexp" properties on suppression directives. 13986 * include/abg-corpus.h (corpus::corpus): Add a default argument to 13987 the path parameter. 13988 * src/abg-suppression-priv.h: New private header file. 13989 * src/Makefile.am: Add the new abg-suppression-priv.h file to 13990 source distribution. 13991 * include/abg-suppression.h ({suppression_base, type_suppression, 13992 function_suppression, variable_suppression}::priv): Make these 13993 public. 13994 (suppression_base::{g,s}et_drops_artifact_from_ir): Declare new 13995 member functions. 13996 (type_suppression::{suppressed_type}): Likewise. 13997 (suppression_base::{names,sonames}_of_binaries_match): Remove 13998 member functions. 13999 (function_suppression::{get_name, set_name, get_name_regex_str, 14000 set_name_regex_str}): Renamed get_function_name, 14001 set_function_name, get_function_name_regex_str, 14002 set_function_name_regex_str into these. 14003 ({variable,function}_suppression::{g,s}et_name_not_regex_str): 14004 Declare new member functions. 14005 * src/abg-suppression.cc: Include the new abg-suppression-priv.h 14006 private header. 14007 (class suppression_base::priv, class type_suppression::priv, class 14008 function_suppression::parameter_spec::priv, class 14009 function_suppression::priv, class variable_suppression::priv): 14010 Move these types to that new private header. 14011 (suppression_base::{g,s}et_drops_artifact_from_ir) 14012 (function_suppression::{g,s}et_name_not_regex_str) 14013 (variable_suppression::{g,s}et_name_not_regex_str): New member 14014 functions. 14015 (sonames_of_binaries_match): New static function, taken from 14016 suppression_base::sonames_of_binaries_match. 14017 (names_of_binaries_match): New static function, taken from 14018 suppression_base::names_of_binaries_match. 14019 (suppression_matches_type_no_name): New static function. 14020 (type_suppression::suppresses_type): Adjust 14021 (function_suppression::suppresses_function) 14022 (variable_suppression::suppresses_variable): Adjust. Evaluate the 14023 new "name_not_regexp" property. 14024 (suppression_matches_type_name) 14025 (suppression_matches_type_location) 14026 (suppression_matches_type_name_or_location) 14027 (suppression_matches_function_name) 14028 (suppression_matches_function_sym_name) 14029 (suppression_matches_variable_name) 14030 (suppression_matches_variable_sym_name, suppression_matches_type): 14031 New functions. 14032 (read_type_suppression): Support the new "drop_artifacts" and 14033 "drop" properties. 14034 (read_function_suppression, read_variable_suppression): Support 14035 the new "drop_artifacts", "drop", and "name_not_regexp" 14036 properties. 14037 (function_suppression::{g,s}et_name): Renamed 14038 {g,s}et_function_name into these. 14039 (function_suppression::set_name_not_regex_str): Renamed 14040 {g,s}et_name_regex_str into this. 14041 (function_suppression::suppresses_function_symbol): Adjust. 14042 * include/abg-dwarf-reader.h (add_read_context_suppressions): 14043 Declare new function. 14044 * src/abg-dwarf-reader.cc: Use the new private 14045 abg-suppression-priv.h header file. 14046 (read_context::supprs_): New data member. 14047 (read_context::get_suppressions): New member function. 14048 (read_context::get_die_source): Make this const. 14049 (read_context::tu_die_imported_unit_points_map): Add a const 14050 overload. 14051 (read_context::cur_transl_unit): Renamed current_translation_unit 14052 unit into this; 14053 (read_context::cur_tu): Remove or rename into cur_transl_unit. 14054 (get_scope_for_die, build_translation_unit_and_add_to_ir) 14055 (build_enum_type, build_pointer_type_def, build_reference_type) 14056 (build_function_type, build_array_type, build_function_decl): 14057 Adjust. 14058 (read_context::{suppression_can_match, 14059 suppression_matches_function_sym_name, 14060 suppression_matches_function_name, 14061 suppression_matches_variable_sym_name, 14062 suppression_matches_variable_name, 14063 suppression_matches_type_name_or_location, 14064 suppression_matches_type_name}): Add member functions. 14065 (die_signed_constant_attribute): Remove this as dead code. 14066 (die_location, die_loc_and_name) 14067 (find_import_unit_point_between_dies) 14068 (find_import_unit_point_before_die, get_parent_die): Make the 14069 read_context& parameter be const and adjust as required. 14070 (build_var_decl_if_not_suppressed, function_is_suppressed) 14071 (variable_is_suppressed, type_is_suppressed): Define new static 14072 functions. 14073 (add_read_context_suppressions): Define new function. 14074 (build_class_type_and_add_to_ir): Do not add suppressed static 14075 data members to the IR. 14076 (build_ir_node_from_die): Do not add suppressed enum types, class 14077 types, variables or functions to the IR. Adjust for the 14078 read_context::cur_tu -> read_context::cur_transl_unit rename. 14079 * include/abg-reader.h (read_context_sptr): Declare new type. 14080 (create_native_xml_read_context, read_corpus_from_input) 14081 (add_read_context_suppressions): Declare new functions. 14082 * src/abg-reader.cc: Include the new private 14083 abg-suppression-priv.h header file. 14084 (read_context::m_exported_decls_builder): Renamed 14085 m_exported_decls_builder_ into this. 14086 (read_context::get_exported_decls_builder): Adjust. 14087 (read_context::get_cur_scope): Make this const. 14088 (read_location): Take a const read_context and adjust. 14089 (read_corpus_from_input): Make this non-static. 14090 (build_namespace_decl): Don't abort if trying to add an artifact 14091 to the IR doesn't succeed. It might be suppressed now. 14092 (read_context::{m_path, m_supprs}): New data members. 14093 (read_context::{g,s}et_path): New member functions. 14094 (read_context::{get_suppressions, 14095 suppression_matches_function_name, suppression_can_match, 14096 suppression_matches_function_name, 14097 suppression_matches_function_sym_name, 14098 suppression_matches_variable_name, 14099 suppression_matches_variable_sym_name, 14100 suppression_matches_type_name_or_location}): Likewise. 14101 (add_read_context_suppressions, create_native_xml_read_context) 14102 (read_corpus_from_native_xml): New functions. 14103 (build_function_decl_if_not_suppressed, function_is_suppressed) 14104 (type_is_suppressed, build_var_decl_if_not_suppressed) 14105 (variable_is_suppressed, build_enum_type_decl_if_not_suppressed) 14106 (build_class_decl_if_not_suppressed): New static functions. 14107 (build_class_decl): Add member types that are being built early, 14108 so that their sub-types can be evaluated for suppression. Do not 14109 add suppressed static data members or suppressed member functions 14110 to the IR. 14111 (build_type): Do not add an enum type or a class type to the IR if 14112 they are suppressed. 14113 (handle_enum_type_decl): Do not add an enum type to the IR if its 14114 suppressed. 14115 (handle_var_decl): Likewise for a variable decl. 14116 (handle_function_decl): Likewise for a function decl. 14117 (handle_class_decl): Likewise for a class decl. 14118 * src/abg-tools-utils.cc (handle_fts_entry): Drop suppressed ABI 14119 from the IR. 14120 * tools/abidiff.cc (display_usage): Fix help strings for 14121 --headers-dirs{1,2}. 14122 (set_suppressions): New static function. 14123 (main): Adjust. Release the memory used by read_context early. 14124 * tools/abidw.cc (options::{headers_dir, suppression_paths}): 14125 (display_usage): New help strings for the new --header-dir and 14126 --suppressions options. 14127 (parse_command_line): Parse the new --header-dir and 14128 --suppressions options. 14129 (maybe_check_suppression_files, set_suppressions): New static 14130 functions. 14131 (main): Use the two new functions above. Free the memory used by 14132 the read context before working with the corpus. 14133 * tools/abilint.cc (options::suppression_paths): 14134 (display_usage): New help strings for the new --header-dir and 14135 --suppressions options. 14136 (parse_command_line): Parse the new --header-dir and 14137 --suppressions options. 14138 (maybe_check_suppression_files, set_suppressions): New static 14139 functions. 14140 (main): Use the two new functions above. Free the memory used by 14141 the read context before working with the corpus. 14142 * tests/data/test-diff-suppr/test24-soname-suppr-{2,3].txt: 14143 Adjust. 14144 * tests/data/test-diff-suppr/test29-suppr-6.txt: Likewise. 14145 * tests/data/test-diff-suppr/test29-suppr-8.txt: Likewise. 14146 * tests/data/test-diff-suppr/libtest31-v{0,1}.so: New test input. 14147 * tests/data/test-diff-suppr/libtest31.suppr: Likewise 14148 * tests/data/test-diff-suppr/libtest32-v{0,1}.so: Likewise. 14149 * tests/data/test-diff-suppr/libtest32-0.suppr: Likewise. 14150 * tests/data/test-diff-suppr/libtest33-v{0,1}.so: Likewise. 14151 * tests/data/test-diff-suppr/test31-report-{0,1}.txt: Likewise. 14152 * tests/data/test-diff-suppr/test31-v{0,1}.cc: Likewise. 14153 * tests/data/test-diff-suppr/test32-report-{0,1}.txt: Likewise. 14154 * tests/data/test-diff-suppr/test32-v{0,1}.c: Likewise. 14155 * tests/data/test-diff-suppr/test33-suppr-1.txt: Likewise. 14156 * tests/data/test-diff-suppr/test33-v{0,1}.cc: Likewise. 14157 * tests/data/test-diff-suppr/test33-v{0,1}.h: Likewise. 14158 * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: 14159 Likewise. 14160 * tests/data/test-read-dwarf/libtest24-drop-fns.so: Likewise. 14161 * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. 14162 * tests/data/test-read-dwarf/test24-drop-fns-0.suppr: Likewise. 14163 * tests/data/test-read-dwarf/test24-drop-fns.cc: Likewise. 14164 * tests/data/test-read-write/test28-drop-std-fns.abignore: 14165 Likewise. 14166 * tests/data/test-read-write/test28-drop-std-vars.abignore: 14167 Likewise. 14168 * tests/data/test-read-write/test28-without-std-fns-ref.xml: 14169 Likewise. 14170 * tests/data/test-read-write/test28-without-std-fns.xml: Likewise. 14171 * tests/data/test-read-write/test28-without-std-vars-ref.xml: 14172 Likewise. 14173 * tests/data/test-read-write/test28-without-std-vars.xml: 14174 Likewise. 14175 * tests/data/test-read-write/test28.xml: Likewise. 14176 * tests/data/Makefile.am: Add the new test artifacts to source 14177 distribution. 14178 * tests/test-diff-suppr.cc (in_out_spec): Take the new test inputs 14179 into account. 14180 * tests/test-read-dwarf.cc (Inoutspec::in_suppr_spec_path): New 14181 data member. 14182 (in_out_spec): Adjust. The new test inputs into account. 14183 (set_suppressions): New static function. 14184 (handle_in_out_spec): Adjust. 14185 * tests/test-read-write.cc (Inoutspec::{in_suppr_spec_path, 14186 ref_out_path}): New data members. 14187 (in_out_spec): Adjust. Take new test inputs into account. 14188 (main): Adjust. 14189 141902016-09-19 Dodji Seketeli <dodji@redhat.com> 14191 14192 Pimplify the abigail::ir::scope_decl type 14193 * include/abg-ir.h (scope_decl::{priv, priv_sptr}) Declare new types. 14194 (scope_decl::priv_): New pimpl data member. 14195 (scope_decl::{member_, member_scopes}): Move this as data member 14196 of the new scope_decl::priv type in the abg-ir.cc file. 14197 (scope_decl::{scope_decl, get_member_decls, get_member_scopes, 14198 is_empty}): Make these inline member functions be out-of-line. 14199 * src/abg-ir.cc (struct scope_decl::priv): Define new type. 14200 (scope_decl::{scope_decl, get_member_decls, get_member_scopes, 14201 is_empty}): Define these new member functions here. They were 14202 inline in the include/abg-ir.h header files before. 14203 (scope_decl::{add_member_decl, insert_member_decl, 14204 remove_member_decl}): Adjust. 14205 142062016-09-19 Dodji Seketeli <dodji@redhat.com> 14207 14208 Add new helper functions 14209 * include/abg-fwd.h (get_location, build_qualified_name): Declare 14210 new functions. 14211 * include/abg-ir.h (is_method_decl): Declare two new overloads of 14212 this function. 14213 * src/abg-ir.cc (get_location, build_qualified_name) 14214 (is_method_decl): Define these functions declared above. 14215 142162016-09-19 Dodji Seketeli <dodji@redhat.com> 14217 14218 Do not emit empty namespaces in abixml 14219 * include/abg-ir.h 14220 (namespace_decl::is_empty_or_has_empty_sub_namespaces): Declare 14221 new function ... 14222 * src/abg-ir.cc 14223 (namespace_decl::is_empty_or_has_empty_sub_namespaces): ... and 14224 define it. 14225 * src/abg-writer.cc (write_namespace_decl): Do not write empty 14226 namespaces or namespaces containing empty namespaces. 14227 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 14228 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 14229 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 14230 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 14231 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 14232 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 14233 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 14234 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 14235 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 14236 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 14237 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 14238 * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 14239 142402016-09-21 Dodji Seketeli <dodji@redhat.com> 14241 14242 Fix misleading indentation issues 14243 * tools/abipkgdiff.cc (compare): Likewise. 14244 * tools/abisym.cc (main): Fix misleading indentation. 14245 142462016-08-30 Dodji Seketeli <dodji@redhat.com> 14247 14248 Bug 20534 - abipkgdiff wrongly displays the name of added binary files 14249 * tools/abipkgdiff.cc (compare): Show the name of the added 14250 binary, rather than its address. 14251 142522016-08-24 Dodji Seketeli <dodji@redhat.com> 14253 14254 Bug 20420 - Wrong ODR-based type comparison optimization on qualified type 14255 * src/abg-ir.cc: 14256 142572016-08-23 Dodji Seketeli <dodji@redhat.com> 14258 14259 Don't walk diff trees indefinitely when applying suppressions 14260 * src/abg-comparison.cc: 14261 142622016-07-27 Dodji Seketeli <dodji@redhat.com> 14263 14264 Control symbols exported from libabigail.so 14265 * VISIBILITY: New documentation about this visiblity business. 14266 * CONTRIBUTING: Update the "contributing guide" to refer to symbol 14267 visibility issues. 14268 * configure.ac: Define a variable VISIBILITY_FLAGS that is set to 14269 the -fvisibility=hidden flag to pass to GCC, when its available. 14270 * src/Makefile.am: Add VISIBILITY to source distribution. Also 14271 add COMPILING and COMMIT-LOG-GUIDELINES that were missing. 14272 * src/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding 14273 the library. 14274 * tests/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding 14275 tests. 14276 * tools/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding 14277 tools. 14278 * src/abg-comp-filter.cc: Enclose inclusion of public headers in 14279 ABG_BEGIN_EXPORT_DECLARATIONS and ABG_END_EXPORT_DECLARATIONS to 14280 export the symbols of entities declared in there. 14281 * src/abg-comparison.cc: Likewise. 14282 * src/abg-config.cc: Likewise. 14283 * src/abg-corpus.cc: Likewise. 14284 * src/abg-diff-utils.cc: Likewise. 14285 * src/abg-dwarf-reader.cc: Likewise. 14286 * src/abg-hash.cc: Likewise. 14287 * src/abg-ini.cc: Likewise. 14288 * src/abg-ir.cc: Likewise. 14289 * src/abg-libxml-utils.cc: Likewise. 14290 * src/abg-libzip-utils.cc: Likewise. 14291 * src/abg-reader.cc: Likewise. 14292 * src/abg-suppression.cc: Likewise. 14293 * src/abg-tools-utils.cc: Likewise. 14294 * src/abg-traverse.cc: Likewise. 14295 * src/abg-viz-common.cc: Likewise. 14296 * src/abg-viz-dot.cc: Likewise. 14297 * src/abg-viz-svg.cc: Likewise. 14298 * src/abg-workers.cc: Likewise. 14299 * src/abg-writer.cc: Likewise. 14300 143012016-07-26 Dodji Seketeli <dodji@redhat.com> 14302 14303 Support DW_TAG_type_unit 14304 * src/abg-dwarf-reader.cc (TYPE_UNIT_DIE_SOURCE): New enumerator 14305 in enum die_source. 14306 (read_context::{type_unit_die_decl_map_, type_unit_die_type_map_, 14307 type_unit_die_wip_classes_map_, 14308 type_unit_die_wip_function_types_map_, 14309 type_unit_types_to_canonicalize_, 14310 type_units_tu_die_imported_unit_points_map_, 14311 type_section_die_parent_map_}): New data members. 14312 (read_context::{get_die_source, associate_die_to_decl, 14313 lookup_decl_from_die_offset, die_type_map, clear_die_type_maps, 14314 die_wip_classes_map, die_wip_function_types_map, 14315 types_to_canonicalize, clear_types_to_canonicalize, 14316 tu_die_imported_unit_points_map, die_parent_map}): Support 14317 TYPE_UNIT_DIE_SOURCE. 14318 (get_parent_die, get_scope_for_die): Likewise. 14319 (read_context::{lookup_decl_from_type_unit_die_offset, 14320 type_section_die_parent_map}): Define new member functions. 14321 (read_context::build_die_parent_maps): Build a DIE -> parent map 14322 for DIEs coming from the .debug_types section. 14323 * tests/data/test-read-dwarf/libtest23.so: New test input. 14324 * tests/data/test-read-dwarf/libtest23.so.abi: New reference output. 14325 * tests/data/test-read-dwarf/test23-first-tu.cc: Source code of 14326 the new binary above. 14327 * tests/data/test-read-dwarf/test23-second-tu.cc: Likewise. 14328 * tests/data/Makefile.am: Add the new test material above to 14329 source distribution. 14330 * tests/test-read-dwarf.cc (in_out_specs): Make this test harness 14331 execute over the new test input and reference output. 14332 143332016-07-26 Dodji Seketeli <dodji@redhat.com> 14334 14335 Misc code cleanup 14336 * src/abg-dwarf-reader.cc (build_function_decl): Use the more 14337 readable is_class_type rather than a dynamic_cast. 14338 143392016-07-26 Dodji Seketeli <dodji@redhat.com> 14340 14341 Generalize DIE source concept in DWARF reader 14342 * src/abg-dwarf-reader.cc (enum die_source): Define new enum. 14343 (operator++): Define new prefix increment operator for the 14344 die_source enum. 14345 (imported_unit_point::imported_unit_from_alt_di): Remove this 14346 data member. 14347 (imported_unit_point::imported_unit_die_source): 14348 New data member of type die_source. 14349 (read_context::primary_die_parent_map_): Renamed 14350 die_parent_map_ data member into this. 14351 (read_context::clear_per_corpus_data): Use the new 14352 clear_die_type_maps function, not die_type_map. Also use the 14353 new clear_types_to_canonicalize overload that takes no 14354 parameter. 14355 (read_context::{get_die_source, clear_die_type_maps, 14356 clear_types_to_canonicalize}): New member functions. 14357 (build_ir_node_from_die, die_die_attribute, get_parent_die) 14358 (get_scope_for_die, build_namespace_decl_and_add_to_ir) 14359 (build_type_decl, build_enum_type) 14360 (build_class_type_and_add_to_ir, build_qualified_type) 14361 (build_pointer_type_def, build_reference_type) 14362 (build_function_type, build_array_type, build_typedef_type) 14363 (build_var_decl, build_function_decl): Remove the boolean 14364 parameter that was designating the source of the DIE. If 14365 necessary, get the source of the DIE from inside the function 14366 using the new read_context::get_die_source. 14367 (read_debug_info_into_corpus): Adjust. 14368 (maybe_canonicalize_type, find_import_unit_point_between_dies) 14369 (maybe_canonicalize_type, read_context::{associate_die_to_decl, 14370 lookup_decl_from_die_offset, die_type_map, associate_die_to_type, 14371 lookup_type_from_die_offset, die_wip_classes_map, 14372 die_wip_function_types_map, is_wip_class_die_offset, 14373 is_wip_function_type_die_offset, types_to_canonicalize, 14374 schedule_type_for_late_canonicalization, 14375 canonicalize_types_scheduled, add_late_canonicalized_types_stats, 14376 perform_late_type_canonicalizing}): Take a die_source as the 14377 source of the DIE, not a boolean. Adjust the code of the function 14378 accordingly. 14379 (read_context::{tu_die_imported_unit_points_map}): Modified 14380 this to make it take a die_source and return the appropriate 14381 map depending on the source. 14382 (read_context::build_die_parent_relations_under): Turn the 14383 non-member static function build_die_parent_relations_under 14384 into a member function. 14385 (read_context::build_die_parent_maps): Turn the non-member 14386 static function build_die_parent_maps into a member function. 14387 Make this function build a DIE -> parent map also for type 14388 DIEs that are in the .type_units section. 14389 143902016-07-25 Dodji Seketeli <dodji@redhat.com> 14391 14392 Cleanup is_class and is_compatible_with_class_type 14393 * include/abg-fwd.h (is_class): Remove the overloads that take a 14394 decl_base or a type_base. Add one that takes a type_or_decl_base. 14395 (is_compatible_with_class_type): Make this take a reference to 14396 smart pointer, not just the smart pointer. 14397 * src/abg-ir.cc (is_class): Do the same as in the header file. 14398 (is_compatible_with_class_type): Likewise. 14399 144002016-07-22 Dodji Seketeli <dodji@redhat.com> 14401 14402 Add ABG_ASSERT_NOT_REACHED macro 14403 * include/abg-tools-utils.h (ABG_ASSERT_NOT_REACHED): New macro. 14404 * src/abg-dwarf-reader.cc (stt_to_elf_symbol_type) 14405 (stb_to_elf_symbol_binding, get_elf_class_size_in_bytes) 14406 (build_ir_node_from_die): Use the new ABG_ASSERT_NOT_REACHED macro 14407 in lieu of just calling abort(). 14408 144092016-07-22 Dodji Seketeli <dodji@redhat.com> 14410 14411 Prepare support for symbol visibility control 14412 * configure.ac: Detect compiler support for 14413 __attribute__((visibility("hidden")) and define the 14414 HAS_GCC_VISIBILITY_ATTRIBUTE macro accordingly. Update the 14415 configuration report. 14416 * src/abg-internal.h: New internal header file that defines macros 14417 to be used in the source code to control declaration visibility. 14418 * src/Makefile.am: Add abg-internal.h to source distribution. Add 14419 src/ to the include search path. 14420 144212016-07-06 Chenxiong Qi <cqi@redhat.com> 14422 14423 Make fedabipkgdiff consistent with Libabigail's other tests 14424 * configure.ac: Do not require Python dependencies itertools, 14425 unittest and StringIO anymore as they are not used anymore. 14426 Require new module tempfile now. Generate new executable script 14427 tests/mockfedabipkgdiff from tests/mockfedabipkgdiff.in. 14428 * doc/manuals/abipkgdiff.rst: Add doc for new option 14429 --show-identical-binaries to abipkgdiff 14430 * doc/manuals/fedabipkgdiff.rst: Add doc for new options 14431 --show-identical-binaries to fedabipkgdiff. 14432 * tools/abipkgdiff.cc (options::show_identical_binaries): New data 14433 member. 14434 (options::options): Initialize new data member. 14435 (display_usage): Add a new help string for the new 14436 --show-identical-binaries option. 14437 (parse_command_line): Parse the newq --show-identical-binaries 14438 command line switch. 14439 (pthread_routine_compare): When the comparison of two binaries is 14440 empty, if --show-identical-binaries was provided, then emit some 14441 output saying the comparison did yield the empty set. 14442 * tools/fedabipkgdiff (DEFAULT_ABIPKGDIFF): Store the default path 14443 to abipkgdiff in this new global variable. Naming this default 14444 path is useful because it can then be cleanly overloaded when 14445 using mock.patch. 14446 (build_path_to_abipkgdiff): Return the new DEFAULT_ABIPKGDIFF 14447 global variable. 14448 (cmd): Parse the new --show-identical-binaries command line 14449 switch. 14450 * tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt: 14451 New reference output. 14452 * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: 14453 Likewise. 14454 * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: 14455 Likewise. 14456 * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: 14457 Likewise. 14458 * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: 14459 Likewise. 14460 * tests/mockfedabipkgdiff.in: New uninstalled script template. 14461 * tests/runtestfedabipkgdiff.py.in (counter) 14462 (temp_file_or_dir_prefix, UtilsTest, RPMTest, LocalRPMTest) 14463 (RunAbipkgdiffTest, GetPackageLatestBuildTest, DownloadRPMTest) 14464 (BrewListRPMsTest, AssertionHelper, MockGlobalConfig) 14465 (BUILT_ABIPKGDIFF, CompareABIFromCommandLineTest): Remove these 14466 classes, global variables and functions. 14467 (FEDABIPKGDIFF, TEST_SRC_DIR, TEST_BUILD_DIR, INPUT_DIR) 14468 (OUTPUT_DIR, FEDABIPKGDIFF_TEST_SPECS): New global variables. 14469 (ensure_output_dir_created, run_fedabipkgdiff_tests, main): New 14470 functions. 14471 * tests/test-diff-pkg.cc (in_out_specs): Add 14472 tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt 14473 to the set of reference outputs to consider. 14474 * tests/Makefile.am: Add non-installed script mockfedabipkgdiff to 14475 source distribution. Also added 14476 tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt, 14477 tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt, 14478 tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt, 14479 tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt 14480 and 14481 tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt 14482 to source distribution. 14483 144842016-07-13 Dodji Seketeli <dodji@redhat.com> 14485 14486 Fix spurious type size change report for distinct_diff 14487 * src/abg-comparison.cc (report_size_and_alignment_changes): 14488 Report size change only when the sizes are different. 14489 * tests/data/test-diff-filter/test33-report-0.txt: Adjust. 14490 144912016-07-13 Dodji Seketeli <dodji@redhat.com> 14492 14493 Bug 20199 - Consider integral type synonyms as being equal 14494 * src/abg-ir.cc (class integral_type): New class declaration and 14495 definition. 14496 (operator|, operator&, operator&=): New non-member bitwise 14497 operators for integral_type. 14498 (parse_integral_type_modifier, parse_base_integral_type) 14499 (parse_integral_type_modifier): New static function definitions. 14500 (type_decl::type_decl): Use the parse_integral_type to parse an 14501 integral type out of the current type_decl being built and 14502 transform the current type name into a canonical form. 14503 * tests/data/test-abidiff/test-PR18791-v0.so.abi: Adjust. 14504 * tests/data/test-abidiff/test-PR18791-v1.so.abi: Likewise. 14505 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 14506 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 14507 * tests/data/test-diff-filter/test33-report-0.txt: Likewise. 14508 * tests/data/test-diff-filter/test34-report-0.txt: Likewise. 14509 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Likewise. 14510 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 14511 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 14512 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 14513 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 14514 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 14515 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 14516 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 14517 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 14518 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 14519 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 14520 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 14521 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 14522 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 14523 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 14524 145252016-07-08 Dodji Seketeli <dodji@redhat.com> 14526 14527 Bug 20332 - too many ...'s counted as parameters 14528 * src/abg-dwarf-reader.cc (build_function_type): Create a variadic 14529 parameter just for the first DW_TAG_unspecified_parameters seen. 14530 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 14531 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. 14532 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 14533 145342016-07-06 Dodji Seketeli <dodji@redhat.com> 14535 14536 Better recognize qualified void type 14537 * include/abg-ir.h (environment::is_void_type): Declare new member 14538 function. 14539 * src/abg-ir.cc (environment::is_void_type): Define new member 14540 function. 14541 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Strip const 14542 qualifier from const void. 14543 * tests/data/test-diff-filter/test34-libjemalloc.so.2-gcc-6.1.0: 14544 New test input. 14545 * tests/data/test-diff-filter/test34-libjemalloc.so.2-intel-16.0.3: Likewise. 14546 * tests/data/test-diff-filter/test34-report-0.txt: New reference output. 14547 * tests/data/Makefile.am: Add the new files above to the source 14548 distribution. 14549 * tests/test-diff-filter.cc (in_out_specs): Compare the two new 14550 binaries above. 14551 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 14552 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. 14553 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 14554 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. 14555 * tests/data/test-read-dwarf/test1.abi: Adjust. 14556 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 14557 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 14558 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 14559 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 14560 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 14561 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 14562 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 14563 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 14564 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 14565 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 14566 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 14567 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 14568 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 14569 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 14570 145712016-07-05 Dodji Seketeli <dodji@redhat.com> 14572 14573 Bug 20194 - Fail to recognize void type represented by DW_TAG_base_type 14574 * src/abg-dwarf-reader.cc (build_type_decl): Recognize a 14575 DW_TAG_base_type of size zero and of name "void" as a void 14576 type. 14577 * tests/data/test-diff-filter/test33-libelf.so.0.8.13-gcc: New 14578 binary test input. 14579 * tests/data/test-diff-filter/test33-libelf.so.0.8.13-intel16.0.3: Likewise. 14580 * tests/data/test-diff-filter/test33-report-0.txt: New reference output. 14581 * tests/data/Makefile.am: Add the new files above to source 14582 distribution. 14583 * tests/test-diff-filter.cc (in_out_specs): Make this test harness 14584 run over the new test inputs above. 14585 145862016-07-04 Dodji Seketeli <dodji@redhat.com> 14587 14588 Add a new overload for is_type_decl 14589 * include/abg-fwd.h (is_type_decl): Declare a new overload 14590 * src/abg-ir.cc (is_type_decl): Define a new overload. 14591 (function_decl::parameter::get_pretty_representation): Adjust. 14592 145932016-06-29 Chenxiong Qi <cqi@redhat.com> 14594 14595 Add --abipkgdiff option in manual and bash completion 14596 * doc/manuals/fedabipkgdiff.rst: Add description of --abipkgdiff 14597 option. Reformat paragraph. 14598 * bash-completion/fedabipkgdiff: Add --abipkgdiff 14599 146002016-06-29 Chenxiong Qi <cqi@redhat.com> 14601 14602 Add fedabipkgdiff bash completion to dist 14603 * bash-completion/Makefile.am: Add fedabipkgdiff 14604 * bash-completion/fedabipkgdiff: Change mode to 775 14605 146062016-06-29 Chenxiong Qi <cqi@redhat.com> 14607 14608 Update bash completion for fedabipkgdiff 14609 * bash-completion/fedabipkgdiff: New bash completion file. 14610 146112016-06-29 Dodji Seketeli <dodji@redhat.com> 14612 14613 Bump version number to 1.0.rc6 14614 * configure.ac: Bump version number to 1.0.rc6 14615 146162016-06-29 Dodji Seketeli <dodji@redhat.com> 14617 14618 Update web page for 1.0.rc5 14619 * doc/website/mainpage.txt: Update web page. 14620 146212016-06-27 Dodji Seketeli <dodji@redhat.com> 14622 14623 Update ChangeLog for 1.0.rc5 14624 * ChangeLog: Update by doing "make update-changelog" in the build 14625 directory. 14626 146272016-06-27 Dodji Seketeli <dodji@redhat.com> 14628 14629 Update NEWS file in preparation for 1.0.rc5 14630 * NEWS: update with the edited content of the command: 14631 git shortlog libabigail-1.0.rc4..HEAD 14632 146332016-06-27 Dodji Seketeli <dodji@redhat.com> 14634 14635 Fix python interpreter path for el6 14636 * tests/runtestdefaultsupprs.py.in: Use the python interpreter at 14637 /usr/bin/python, not the one at /bin/python. 14638 146392016-06-24 Dodji Seketeli <dodji@redhat.com> 14640 14641 Misc cleanup in abg-reader.cc 14642 * src/abg-reader.cc (read_context::push_decl_to_current_scope): 14643 Pass the decl smart pointer by value. 14644 146452016-06-22 Dodji Seketeli <dodji@redhat.com> 14646 14647 Use ODR-based optimization on C/C++ translation unit only 14648 * src/abg-ir.cc (strip_typedef): Set the translation unit of the 14649 new ABI artifact. 14650 (type_base::get_canonical_type_for): Perform the ODR-based 14651 optimization only for ABI artifact in C and C++ language 14652 translation units. 14653 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Assert that 14654 the new ABI artifact has its translation unit set. 14655 * src/abg-reader.cc (read_context::{push_decl_to_current_scope, 14656 push_and_key_type_decl}): Set the translation unit of the current 14657 decl, irrespective of if it was added to the current scope or not. 14658 Assert that the decl that was newly pushed to the current scope is 14659 added to the current translation unit. 14660 146612016-06-10 Dodji Seketeli <dodji@redhat.com> 14662 14663 Misc white space and comment cleanups 14664 * include/abg-ir.h (typedef type_or_decl_base): Cleanup comment. 14665 * src/abg-ir.cc (struct type_or_decl_base::priv): Fix comment. 14666 146672016-06-10 Dodji Seketeli <dodji@redhat.com> 14668 14669 Cleanup function_decl::parameter::get_pretty_representation 14670 * src/abg-ir.cc 14671 (function_decl::parameter::get_pretty_representation): Assert that 14672 the environment is always non-nil. Then no needs to check for it 14673 being non-nil anymore. Use is_type_decl instead of 14674 dynamic_pointer_cast. 14675 146762016-06-07 Chenxiong Qi <cqi@redhat.com> 14677 14678 Fix package NVR comparison in fedabipkgdiff 14679 * configure.ac: Add new dependency. 14680 * tests/runtestfedabipkgdiff.py.in (builds): Add new builds for 14681 running tests to test selecting latest build from a package. 14682 (packages): Add new package gnutls. 14683 (GetPackageLatestBuildTest.{test_get_latest_one, 14684 test_cannot_find_a_latest_build_with_invalid_distro}): Use new 14685 builds of package gnutls to run tests. 14686 * tools/fedabipkgdiff (cmp_nvr): New function used to compare nvrs 14687 by Python built-in function sorted. 14688 (Brew.listBuilds): Use the new cmp_nvr function. 14689 146902016-06-06 Chenxiong Qi <cqi@redhat.com> 14691 14692 Bug 20135 - Make fedabipkgdiff compare ABIs using devel packages 14693 * doc/manuals/fedabipkgdiff.rst: Add documentation for the new 14694 --no-devel-pkg command line option, as well as for the new default 14695 behaviour of taking devel packages into account during ABI 14696 comparison. 14697 * tools/fedabipkgdiff (PkgInfo): Add new attribute 14698 devel_package. 14699 (RPM.is_devel): New property to determine if rpm is a 14700 development package. 14701 (LocalRPM._find_rpm): New method to find a specific rpm. 14702 (LocalRPM.find_debuginfo): Use new method _find_rpm to find 14703 debuginfo package. 14704 (LocalRPM.find_devel): New method to find an associated 14705 development package. 14706 (Brew.select_rpms_from_a_build): RPMs selector method is 14707 changed to select development package also. 14708 (abipkgdiff): Construct and run abipkgdiff with and without 14709 --devel-pkg[12] options. 14710 (magic_construct): Construct PkgInfo with development package. 14711 (run_abipkgdiff): Run abipkgdiff against rpms with development 14712 packages. 14713 (diff_local_rpm_with_latest_rpm_from_koji): Find development 14714 package, and call method abipkgdiff with development package. 14715 (build_commandline_args_parser): add new option --no-devel-pkg. 14716 * tests/runtestfedabipkgdiff.py.in (packages): Add new package 14717 nss-util. 14718 (builds): Add new builds of nss-utils, nss-util-3.12.6-1.fc14 14719 and nss-util-3.24.0-2.0.fc25. 14720 (rpms): Add new associated rpms of the two new builds. 14721 (AssertionHelper.assert_functions_changes_summary): New method 14722 to match and assert functions changes summary. 14723 (AssertionHelper.assert_abi_comparison_result): Changed to 14724 support to help assert functions changes summary. 14725 (MockGlobalConfig.{no_devel_pkg, check_all_subpackages}): New 14726 fake options with default value for running tests. 14727 (RPMTest.setUp): add new development package for running test 14728 case. 14729 (RPMTest.test_is_devel): New test to test is_devel property. 14730 (RunAbipkgdiffTest.setUp): Add new development packages for 14731 running test case. 14732 (RunAbipkgdiffTest.{test_all_success, test_all_failure, 14733 test_partial_failure}): Mock global config. 14734 (RunAbipkgdiffWithDSOOnlyOptionTest): Removed. 14735 (CompareABIFromCommandLineTest.test_compare_with_no_devel_pkg): 14736 New test to test fedabipkgdiff with or without --no-devel-pkg 14737 option. 14738 * tests/data/Makefile.am: Add new rpms. 14739 * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ 14740 x86_64/nss-util-3.12.6-1.fc14.x86_64.rpm: New rpm for running 14741 tests. 14742 * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ 14743 x86_64/nss-util-debuginfo-3.12.6-1.fc14.x86_64.rpm: New rpm for 14744 running tests. 14745 * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ 14746 x86_64/nss-util-devel-3.12.6-1.fc14.x86_64.rpm: New rpm for 14747 running tests. 14748 * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ 14749 x86_64/nss-util-3.24.0-2.0.fc25.x86_64.rpm: New rpm for running 14750 tests. 14751 * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ 14752 x86_64/nss-util-debuginfo-3.24.0-2.0.fc25.x86_64.rpm: New rpm 14753 for running tests. 14754 * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ 14755 x86_64/nss-util-devel-3.24.0-2.0.fc25.x86_64.rpm: New rpm for 14756 running tests. 14757 147582016-06-03 Dodji Seketeli <dodji@redhat.com> 14759 14760 Improve python modules detection 14761 * configure.ac: Include 14762 autoconf-archive/ax_check_python_modules.m4 rather than 14763 autoconf-archive/ax_python_module.m4. Use AX_CHECK_PYTHON_MODULES 14764 rather than AX_PYTHON_MODULE. 14765 * Makefile.am: Add the new file 14766 autoconf-archive/ax_check_python_modules.m4 to source distribution 14767 and remove the older autoconf-archive/ax_python_module.m4 one. 14768 * autoconf-archive/ax_check_python_modules.m4: New file. 14769 * autoconf-archive/ax_python_module.m4: Remove. 14770 147712016-05-30 Chenxiong Qi <cqi@redhat.com> 14772 14773 Add integration tests for fedabipkgdiff 14774 * configure.ac: do not detect shutil module. 14775 * tests/runtestfedabipkgdiff.py.in: do not import shutil 14776 anymore. 14777 (BUILT_ABIPKGDIFF): new global variable to reference the 14778 abipkgdiff built from source code, as the new test case' tests 14779 require this command directly rather than mocking the 14780 global_config. 14781 (test_data_dir): convert variable name to uppercase, 14782 reference to the test data directory by absolute path instead of 14783 relative path. 14784 (TEST_TOPDIR): new global variable to use data directory as the 14785 topdir passed to fedabpkgdiff to download rpms. 14786 (TEST_DOWNLOAD_CACHE_DIR): new global variable referencing a 14787 fake download cache directory for tests only. 14788 (packages, builds, rpms): new global variables as a fake 14789 storage holding packages, builds and rpms. 14790 (AssertionHelper): new class helping to assert abipkgdiff 14791 result easily. 14792 (MockClientSession): new class to mock koji.ClientSession. 14793 (MockGlobalConfig.abipkgdiff): set this option to global 14794 variable BUILT_ABIPKGDIFF. 14795 (MockKojiClientSessin): removed. 14796 (mock_get_session): removed. 14797 (GetPackageLatestBuildTest.{test_get_latest_one, 14798 test_cannot_find_a_latest_build_with_invalid_distro, 14799 test_cannot_find_a_latest_build_with_invalid_distro}): mock 14800 koji.ClientSession with new class MockClientSession. Remove 14801 invalid documentation from docstring. Use new package rather 14802 than httpd. 14803 (DownloadRPMTest.setUp): remove self.download_dir and use global 14804 TEST_DOWNLOAD_CACHE_DIR. 14805 (DownloadRPMTest.tearDown): do not remove download cache 14806 directory. 14807 (DownloadRPMTest.make_remote_file_url): do not omit positional 14808 argument specifiers in string format. 14809 (DownloadRPMTest.{test_succeed_to_download_a_rpm, 14810 test_failed_to_download_a_rpm}): set fake download cache 14811 directory to mocked get_download_dir in mock.patch decorator. 14812 (BrewListRPMsTest.test_select_specific_rpms): use new 14813 MockClientSession to mock koji.ClientSession. Rewrite test by 14814 using the new package listed in global variable packages. 14815 (RunAbipkgdiffWithDSOOnlyOptionTest.{test_abipkgdiff_with_dso_only, 14816 test_abipkgdiff_without_dso_only}): set fake download cache 14817 directory to mocked get_download_dir in mock.patch decorator. 14818 (CompareABIFromCommandLineTest): new integration test case. 14819 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14820 i686/dbus-glib-0.100.2-2.fc20.i686.rpm: new rpm for running tests. 14821 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14822 i686/dbus-glib-debuginfo-0.100.2-2.fc20.i686.rpm: new rpm for 14823 running tests. 14824 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14825 i686/dbus-glib-devel-0.100.2-2.fc20.i686.rpm: new rpm for 14826 running tests. 14827 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14828 x86_64/dbus-glib-0.100.2-2.fc20.x86_64.rpm: new rpm for running 14829 tests. 14830 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14831 x86_64/dbus-glib-debuginfo-0.100.2-2.fc20.x86_64.rpm: new rpm 14832 for running tests. 14833 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ 14834 x86_64/dbus-glib-devel-0.100.2-2.fc20.x86_64.rpm: new rpm for 14835 running tests. 14836 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14837 i686/dbus-glib-0.106-1.fc23.i686.rpm: new rpm for running tests. 14838 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14839 i686/dbus-glib-debuginfo-0.106-1.fc23.i686.rpm: new rpm for 14840 running tests. 14841 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14842 i686/dbus-glib-devel-0.106-1.fc23.i686.rpm: new rpm for running 14843 tests. 14844 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14845 x86_64/dbus-glib-0.106-1.fc23.x86_64.rpm: new rpm for running 14846 tests. 14847 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14848 x86_64/dbus-glib-debuginfo-0.106-1.fc23.x86_64.rpm: new rpm for 14849 running tests. 14850 * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ 14851 x86_64/dbus-glib-devel-0.106-1.fc23.x86_64.rpm: new rpm for 14852 running tests. 14853 * tests/data/Makefile.am: add new rpms. 14854 148552016-05-31 Dodji Seketeli <dodji@redhat.com> 14856 14857 Bug 19967 - System-level suppressions for glibc 14858 * default.abignore: Add initial suppression specifications for 14859 glibc. 14860 148612016-05-31 Dodji Seketeli <dodji@redhat.com> 14862 14863 Escape all characters when reading a string in ini files 14864 * src/abg-ini.cc (read_context::peek): Take an output parameter to 14865 tell the caller when this function escaped the returned 14866 character. Added an overload without this new parameter. 14867 (read_context::read_string): Accept all characters as part of the 14868 string. 14869 * tests/data/test-diff-suppr/test7-var-suppr-9.suppr: New test 14870 input. 14871 * tests/data/test-diff-suppr/test7-var-suppr-report-9.txt: New 14872 test reference output. 14873 * tests/data/Makefile.am: Add the files above to source 14874 distribution. 14875 * tests/test-diff-suppr.cc (in_out_spec): Run a new comparison of 14876 libtest7-var-suppr-v{0,1}.so this time using the new 14877 test7-var-suppr-9.suppr specification that exercices a string with 14878 the escaped characters that we were having difficulty with. 14879 148802016-05-31 Dodji Seketeli <dodji@redhat.com> 14881 14882 Don't require all version symbol sections to present 14883 * src/abg-dwarf-reader.cc (get_symbol_versionning_sections): Allow 14884 returning just some of the three version-related section, not 14885 necessarily all of them. Adjust comment. 14886 (get_version_for_symbol): Be ready to not necessarily having the 14887 three version-related sections available. 14888 148892016-05-30 Dodji Seketeli <dodji@redhat.com> 14890 14891 Bug 20180 - Support system-wide suppression specifications 14892 * doc/manuals/abidiff.rst: Document the default suppression 14893 scheme, its interaction with the --supprs option and the new 14894 --no-default option. 14895 * doc/manuals/abipkgdiff.rst: Likewise. 14896 * doc/manuals/fedabipkgdiff.rst: Likewise. 14897 * configure.ac: Generate the tests/runtestdefaultsupprs.py file 14898 from the new tests/runtestdefaultsupprs.py.in template. 14899 * default.abignore: New file. 14900 * Makefile.am: Add it to source distribution. 14901 * src/Makefile.am: Define the ABIGAIL_ROOT_SYSTEM_LIBDIR 14902 preprocessor macro that is set the value of the $libdir autotools 14903 macro. 14904 * include/abg-tools-utils.h: Update copyright years. 14905 (get_system_libdir, get_default_system_suppression_file_path) 14906 (get_default_user_suppression_file_path) 14907 (load_default_system_suppressions) 14908 (load_default_user_suppressions): Declare new functions 14909 * src/abg-tools-utils.cc (get_system_libdir) 14910 (get_default_system_suppression_file_path) 14911 (get_default_user_suppression_file_path) 14912 (load_default_system_suppressions) 14913 (load_default_user_suppressions): Define new functions. 14914 (is_regular_file): Amend this so that it return true for symlinks 14915 to regular files too. 14916 (is_dir): Amend this so that it returns true for symlinks to 14917 directories too. 14918 * tools/abidiff.cc (options::no_default_supprs): New data member. 14919 (options::options): Initialize the new data member. 14920 (display_usage): Display a new help string for the new 14921 --no-default-suppression command line option. 14922 (parse_command_line): Parse this new command line option. 14923 (set_diff_context_from_opts): Load the default suppression 14924 specifications, unless --no-default-suppression or --supprs was 14925 provided. 14926 * tools/abipkgdiff.cc (options::no_default_supprs): New data 14927 member. 14928 (options::options): Initialize the new data member. 14929 (parse_command_line): Parse the new --no-default-suppression 14930 command line option. 14931 (main): Load the default suppression specifications, unless 14932 --no-default-suppression or --supprs was provided. 14933 * tools/fedabipkgdiff (abipkgdiff): Add --no-default-suppression 14934 to the invocation of abipkgdiff if it was provided on the command 14935 line. 14936 (build_commandline_args_parser): Parse the new 14937 --no-default-suppression command line option. 14938 * tests/runtestdefaultsupprs.py.in: New test harness template. 14939 * tests/Makefile.am: Add the new runtestdefaultsupprs.py to the 14940 set of tests. 14941 * tests/data/test-default-supprs/test0-type-suppr-0.suppr: New 14942 test input. 14943 * tests/data/test-default-supprs/test0-type-suppr-report-0.txt: Likewise. 14944 * tests/data/test-default-supprs/test0-type-suppr-v0.o: Likewise. 14945 * tests/data/test-default-supprs/test0-type-suppr-v1.o: Likewise. 14946 * tests/data/test-default-supprs/dirpkg-1-dir-report-0.txt: 14947 Likewise. 14948 * tests/data/test-default-supprs/dirpkg-1-dir1: Likewise. 14949 * tests/data/test-default-supprs/dirpkg-1-dir2: Likewise. 14950 * tests/data/Makefile.am: Add new the new tests input above to 14951 Makefile.am. 14952 * tests/runtestcanonicalizetypes.sh.in: Pass 14953 --no-default-suppression to abidiff invocations. 14954 * tests/runtestdefaultsupprs.py.in: Likewise. 14955 * tests/test-abidiff-exit.cc: Likewise. 14956 * tests/test-diff-dwarf-abixml.cc: Likewise. 14957 * tests/test-diff-filter.cc: Likewise. 14958 * tests/test-diff-suppr.cc: Likewise. 14959 * tools/abidiff.cc: Likewise. 14960 149612016-05-30 Dodji Seketeli <dodji@redhat.com> 14962 14963 Add --abipkgdiff option to fedabipkgdiff 14964 * tools/fedabipkgdiff (build_path_to_abipkgdiff): Define new 14965 function. 14966 (abipkgdiff): Invoke the new build_path_to_abipkgdiff() here. 14967 (build_commandline_args_parser): Parse the new --abipkgdiff 14968 option. 14969 149702016-05-28 Dodji Seketeli <dodji@redhat.com> 14971 14972 Better diagnostics when abipkgdiff has an extra argument 14973 * tools/abipkgdiff.cc (options::wrong_arg): New data member. 14974 (parse_command_line): Set options::wrong_arg 14975 to the wrong argument passed. 14976 (main): Tell wrong argument case apart, and report it. 14977 149782016-05-26 Dodji Seketeli <dodji@redhat.com> 14979 14980 Fix suppr spec wording in abipkgdiff manual 14981 * doc/manuals/abipkgdiff.rst: Fix the wording for the --suppr 14982 option. 14983 149842016-05-26 Dodji Seketeli <dodji@redhat.com> 14985 14986 Update reference to tools in libabigail-concepts manual 14987 * doc/manuals/libabigail-concepts.rst: Do not refer just to 14988 abidiff when talking about suppression specification. Also 14989 refer to abipkgdiff and other tools. 14990 149912016-05-30 Dodji Seketeli <dodji@redhat.com> 14992 14993 Fix some wording in the Libabigail overview manual page 14994 * doc/manuals/libabigail-overview.rst: Cleanup some confusion 14995 about Abigail-the-framework and libabigail-the-library. 14996 149972016-05-25 Dodji Seketeli <dodji@redhat.com> 14998 14999 Add test data for tests/runtestfedabipkgdiff.py 15000 * tests/data/test-fedabipkgdiff/dbus-glib-0.104-3.fc23.x86_64.rpm: 15001 New file. 15002 * tests/data/test-fedabipkgdiff/dbus-glib-0.80-3.fc12.x86_64.rpm: Likewise. 15003 * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: 15004 Likewise. 15005 * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: 15006 Likewise. 15007 150082016-05-25 Dodji Seketeli <dodji@redhat.com> 15009 15010 Add a 'check-valgrind' target to the top-most Makefile.am 15011 * Makefile.am (check-valgrind): Add this new target here. 15012 150132016-05-21 Chenxiong Qi <cqi@redhat.com> 15014 15015 Bug 20085 - Add --dso-only option to fedabipkgdiff 15016 * tools/fedabipkgdiff: Do not import shlex anymore. 15017 (ABIDIFF_OK, ABIDIFF_ERROR, ABIDIFF_USAGE_ERROR) 15018 (ABIDIFF_ABI_CHANGE): New global constant variables. 15019 (abipkgdiff): Pass the --dso-only option to the abipkgdiff command 15020 line tool, if that option was passed to fedabipkgdiff. Build this 15021 abipkgdiff command invocation from an array of strings, rather 15022 than from formatting a string. This makes us get rid of the shlex 15023 module. Fix typo in dry-run logged string. If there was an 15024 internal error reported by abipkgdiff, report it to stderr. 15025 (build_commandline_args_parser): Parse the --dso-only command line 15026 option. 15027 * tests/runtestfedabipkgdiff.py.in (fedabipkgdiff_mod): Fix a typo 15028 in initializing this global variable. 15029 (test_data_dir): New global variable, that is used to reference 15030 tests/data/test-fedabipkgdiff/. 15031 (RunAbipkgdiffTest.{test_all_success, test_partial_failure}): Fix 15032 typo. 15033 (Mockglobalconfig.{koji_topdir, dso_only}): New data members. 15034 (GetPackageLatestBuildTest.{test_get_latest_one, 15035 test_cannot_find_a_latest_build_with_invalid_distro, 15036 test_succeed_to_download_a_rpm, test_failed_to_download_a_rpm}): 15037 Fix typo. 15038 (BrewListRPMsTest.test_select_specific_rpms): Fix typo. 15039 (RunAbipkgdiffWithDSOOnlyOptionTest): New test case class. 15040 * doc/manuals/fedabipkgdiff.rst: update document for this new 15041 --dso-only option. 15042 * tests/data/test-fedabipkgdiff/dbus-glib-0.104-3.fc23.x86_64.rpm: 15043 New symbolic link to 15044 test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm. 15045 * tests/data/test-fedabipkgdiff/dbus-glib-0.80-3.fc12.x86_64.rpm: 15046 New symbolic link to 15047 test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm. 15048 * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: 15049 New symbolic link to 15050 test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm. 15051 * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: 15052 New symbolic link to 15053 test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm. 15054 * tests/data/Makefile.am: add tests/data/test-fedabipkgdiff so 15055 that this data directory and all things within it can be included 15056 in tarball. 15057 150582016-05-24 Sinny Kumari <sinny@redhat.com> 15059 15060 Change parent directory for keeping extracted packages in abipkgdiff 15061 * tools/abipkgdiff.cc (extracted_packages_parent_dir): Change 15062 TMPDIR environment variable to XDG_CACHE_HOME and default 15063 temporary parent directory to $HOME/.cache/libabigail/ 15064 150652016-05-20 Dodji Seketeli <dodji@redhat.com> 15066 15067 Make abi{pkg}diff filter out changes about private types 15068 * include/abg-comp-filter.h: Update copyright year. 15069 * src/abg-comp-filter.cc (has_virtual_mem_fn_change): Make this 15070 static function become exported. 15071 (has_virtual_mem_fn_change): Declare new function. 15072 * include/abg-suppression.h 15073 (suppression_base::{get,set}_is_artificial): Declare new 15074 accessors. 15075 (type_suppression::get_source_locations_to_keep): Return an 15076 unordered set of strings, not a vector. Add a non-const overload. 15077 (type_suppression::set_source_locations_to_keep): Set an unordered 15078 set of strings, not a vector. 15079 * src/abg-suppression.cc (suppression_base::priv::is_artificial_): 15080 New data member. 15081 (suppression_base::priv::priv): Initialize the new data member. 15082 (suppression_base::{get,set}_is_artificial): Define new accessors. 15083 (type_suppression::priv::source_locations_to_keep_): Change the 15084 vector of strings representing source file names into unordered 15085 set of string. 15086 (type_suppression::get_source_locations_to_keep): Return an 15087 unordered set of strings, not a vector. Define a non-const 15088 overload. 15089 (type_suppression::set_source_locations_to_keep): Set an unordered 15090 set of strings, not a vector. 15091 (type_suppression::suppresses_diff): Make this suppress virtual 15092 member function diffs if the enclosing type of the changed virtual 15093 member is suppressed by the current type_suppression. 15094 (read_type_suppression): Adjust to use the fact that the source 15095 locations are not stored in an unordered set, not in a vector 15096 anymore. Otherwise, using a vector here make things too slow. 15097 (type_suppression::suppresses_type): Likewise. Also, If the type 15098 we are looking at has no location because it's a true opaque type 15099 and if the current suppression is an artificial suppression that 15100 is meant to suppress change reports about non-public types, then 15101 suppress the type. 15102 * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Declare 15103 new public function. 15104 * src/abg-tools-utils.cc (PRIVATE_TYPES_SUPPR_SPEC_NAME): Define a 15105 new constant variable. 15106 (handle_fts_entry): Define new static function. 15107 (gen_suppr_spec_from_headers): Define new public function. 15108 * src/abg-comparison.cc 15109 (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): 15110 If a type suppression suppresses a given class C, make it change 15111 added/removed virtual functions whose enclosing type is C. 15112 * tools/abidiff.cc (options::{headers_dir1, headers_dir2}): New 15113 data members. 15114 (display_usage): Add help strings for --headers-dir1 and 15115 --headers-dir2. 15116 (parse_command_line): Parse the new --headers-dir1 and 15117 --headers-dir2 options. 15118 (set_diff_context_from_opts): Generate suppression specifications 15119 to filter out changes on private types, if --headers-dir1 or 15120 --headers-dir2 is given. 15121 * tools/abipkgdiff.cc (options::{devel_package1, devel_package2}): 15122 New data members. 15123 (typedef package_sptr): New typedef. 15124 (enum package::kind): New enum. 15125 (package::kind_): New data member. This replaces ... 15126 (package::is_debug_info_): ... this data member. 15127 (package::{devel_package_, private_types_suppressions_}): New data 15128 members. 15129 (package::package): Adjust. 15130 (package::get_kind): Define new member function. This replaces 15131 ... 15132 (package::is_debug_info): ... this member function overload. 15133 (package::set_kind): Define new member functin. It replaces ... 15134 (package::is_debug_info): ... this member function overload. 15135 (package::{devel_package, private_types_suppressions}): Define new 15136 accessors. 15137 (package::erase_extraction_directies): Erase the sub-directory 15138 where development packages are extracted to. 15139 (compare_args::private_types_suppr{1,2}): New data members. 15140 (compare_args::compare_args): Adjust. 15141 (display_usage): Add help strings for --devel-pkg1/--devel-pkg2. 15142 (compare): Make the overload that compares elf files take private 15143 types suppressions. Add the private types suppressions to the 15144 diff context. 15145 (pthread_routine_compare): Adjust the call to compare. 15146 (maybe_create_private_types_suppressions): Define new static 15147 function. 15148 (pthread_routine_extract_pkg_and_map_its_content): If a devel 15149 package was specified for the main package then extract it in 15150 parallel with the other package extraction. When the extraction 15151 is done, create private types suppressions by visiting the 15152 directories that contain the header files. 15153 (compare): In the overload that compares packages by scheduling 15154 comparison of individual elf files that are in the packages, pass 15155 in the private type suppressions too. 15156 (parse_command_line): Parse the new --devel-pkg{1,2} command line 15157 options. 15158 (main): Associate the devel package to the main package, if the 15159 --devel-pkg{1,2}. 15160 * doc/manuals/abidiff.rst: Add documentation about the new 15161 --headers-dir1 and --headers-dir2 options. 15162 * doc/manuals/abipkgdiff.rst: Likewise, add documentation about 15163 the new --devel-pkg1 and --devel-pkg2 libraries. 15164 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: 15165 New test reference output. 15166 * tests/data/test-diff-pkg/tbb-devel-4.1-9.20130314.fc22.x86_64.rpm: 15167 New test input package. 15168 * tests/data/test-diff-pkg/tbb-devel-4.3-3.20141204.fc23.x86_64.rpm: Likewise. 15169 * tests/test-diff-pkg.cc b/tests/test-diff-pkg.cc 15170 (InOutSpec::{first,second}_in_devel_package_path): New data 15171 members. 15172 (in_out_specs): Adjust. Also, add a new entry describing the new 15173 test inputs above. 15174 (test_task::perform): When the new test entry contains devel 15175 packages, pass them to abipkgdiff using the --devel1 and --devel2 15176 options. 15177 * tests/data/test-diff-suppr/test30-include-dir-v0/test30-pub-lib-v0.h: 15178 A new test input source code. 15179 * tests/data/test-diff-suppr/test30-include-dir-v1/test30-pub-lib-v1.h: Likewise. 15180 * tests/data/test-diff-suppr/test30-priv-lib-v0.cc: Likewise. 15181 * tests/data/test-diff-suppr/test30-priv-lib-v0.h: Likewise. 15182 * tests/data/test-diff-suppr/test30-priv-lib-v1.cc: Likewise. 15183 * tests/data/test-diff-suppr/test30-priv-lib-v1.h: Likewise. 15184 * tests/data/test-diff-suppr/test30-pub-lib-v0.cc: Likewise. 15185 * tests/data/test-diff-suppr/test30-pub-lib-v0.so: Add new test 15186 binary input. 15187 * tests/data/test-diff-suppr/test30-pub-lib-v1.cc: Add new test 15188 input source code. 15189 * tests/data/test-diff-suppr/test30-pub-lib-v1.so: Add new test 15190 binary input. 15191 * tests/data/test-diff-suppr/test30-report-0.txt: Add new test 15192 reference output. 15193 * tests/data/test-diff-suppr/test30-report-1.txt: Add new test 15194 reference output. 15195 * tests/test-diff-suppr.cc (InOutSpec::headers_dir{1,2}): New data 15196 members. 15197 (InOutSpec::abidiff_options): Renamed the bidiff_options data 15198 member into this. 15199 (in_out_specs): Adjust. Also, added the new test input above to 15200 this. 15201 (main): Adjust to invoke abidiff with the new --hd1 and --hd2 15202 options if the input specs for the tests has the new 15203 InOutSpec::headers_dir{1,2} data member set. Renamed bidiff into 15204 abidiff. 15205 * tests/data/Makefile.am: Add the new test inputs to the source 15206 distribution. 15207 152082016-05-24 Dodji Seketeli <dodji@redhat.com> 15209 15210 Fix the number of removed functions in change report 15211 * src/abg-suppression.cc (corpus_diff::report): Show the net 15212 number of removed functions, not the total number of the removed 15213 functions. 15214 152152016-05-23 Dodji Seketeli <dodji@redhat.com> 15216 15217 Document how to handle regression tests in CONTRIBUTING 15218 * CONTRIBUTING: Add a section about regression tests. 15219 * Makefile.am: Add a check-valgrind-recursive target. 15220 152212016-05-21 Dodji Seketeli <dodji@redhat.com> 15222 15223 Fix whitespaces in autotools files 15224 * configure.ac: Fix some white spaces. 15225 * tests/Makefile.am: Likewise. 15226 152272016-05-22 Dodji Seketeli <dodji@redhat.com> 15228 15229 Fix white space in abg-comparison.cc 15230 * src/abg-comparison.cc (struct diff_context::priv): Fix indentation. 15231 152322016-05-21 Dodji Seketeli <dodji@redhat.com> 15233 15234 Fix bash completion configure status 15235 * configure.ac: If bash completion is disabled, say so. 15236 152372016-05-22 Dodji Seketeli <dodji@redhat.com> 15238 15239 Enhance API doc for diff_context::add_diff 15240 * src/abg-comparison.cc (diff_context::add_diff): Enhance the API 15241 doc string. 15242 152432016-05-20 Dodji Seketeli <dodji@redhat.com> 15244 15245 Add missing API doc strings 15246 * src/abg-comparison.cc (diff::diff) 15247 (decl_diff_base::decl_diff_base, distinct_diff::distinct_diff) 15248 (base_diff::base_diff, scope_diff::scope_diff) 15249 (fn_parm_diff::fn_parm_diff) 15250 (function_type_diff::function_type_diff) 15251 (type_decl_diff::type_decl_diff, typedef_diff::typedef_diff) 15252 (translation_unit_diff::translation_unit_diff) 15253 (corpus_diff::corpus_diff): Add missing API doc strings. 15254 152552016-05-20 Dodji Seketeli <dodji@redhat.com> 15256 15257 Optimize out some shared_ptr use 15258 * include/abg-ir.h (pointer_type_def::get_naked_pointed_to_type): 15259 Declare new member function. 15260 * src/abg-ir.cc (pointer_type_def::priv::naked_pointed_to_type_): 15261 New data member. 15262 (pointer_type_def::priv::priv): Adjust to initialize the new data 15263 member. 15264 (pointer_type_def::pointer_type_def): Adjust to use the 15265 constructor pointer_type_def::priv::priv to initialize the 15266 pointed-to type (including its new naked pointer variant). So we 15267 do not have to initialize the priv_->pointed_to_type_ explicitely 15268 in the constructor anymore. 15269 (pointer_type_def::get_naked_pointed_to_type): Define new data 15270 member. 15271 (pointer_type_def::get_qualified_name): Use a naked pointer to the 15272 pointed-to type, rather than a smart pointer. 15273 152742016-05-20 Dodji Seketeli <dodji@redhat.com> 15275 15276 Light optimizations by passing reference to smart pointers around 15277 * include/abg-fwd.h (get_type_name): Take a reference to type_sptr. 15278 * src/abg-ir.cc (get_type_name): Take a reference to type_sptr. 15279 (suppression_base::priv::{get_file_name_regex, 15280 get_file_name_not_regex, get_soname_regex, get_soname_not_regex}): 15281 Return a reference to regex_t_sptr. 15282 152832016-05-20 Dodji Seketeli <dodji@redhat.com> 15284 15285 Minimize number of string::length calculation 15286 * src/abg-tools-utils.cc (string_ends_with): Call string::length 15287 just once on each instance of string that matters. 15288 152892016-05-20 Dodji Seketeli <dodji@redhat.com> 15290 15291 Avoid unnecessary computation of type name in suppression evaluation 15292 * src/abg-suppression.cc (type_suppression::suppresses_type): If 15293 neither the type suppression "name" or "name_regex" properties 15294 where provided in the suppression specification, then do not try 15295 to look at the type name. 15296 152972016-05-22 Dodji Seketeli <dodji@redhat.com> 15298 15299 Plug leak of diffs of member variables of class type 15300 * include/abg-comparison.h (diff_wptr, unordered_diff_sptr_set): New typedefs. 15301 (struct diff_sptr_hasher): Define new type. 15302 (diff_context::keep_diff_alive): Declare new member function. 15303 (diff::children_nodes): Return a vector of diff*, rather than a 15304 vector of diff_sptr. 15305 * src/abg-comparison.cc (diff_context::priv::live_diffs_): New 15306 data member. 15307 (diff_context::keep_diff_alive): Define new data member. 15308 (diff::priv::children_): Make this be a vector of diff*, rather 15309 than a vector of diff_sptr. 15310 (diff_less_than_functor::operator()): Add a new overload for 15311 diff*. Make the existing overload of diff_sptr use the new one. 15312 (diff::children_nodes): Adjust; 15313 (diff::append_child_node): Make sure the child node is kept 15314 alive. Only add the naked pointer to the child node to the vector 15315 of children. 15316 (diff::traverse): Adjust. 15317 (var_diff::priv::type_diff_): Make this be a weak pointer, rather 15318 than a shared pointer. 15319 (var_diff::type_diff): The var_diff::priv::type_diff_ data member 15320 is now a weak pointer, so make this accessor convert it to a 15321 shared pointer. 15322 (corpus_diff::priv::children_): Turn this into a vector of diff*, 15323 rather than a vector of diff_sptr. 15324 (corpus_diff::children_nodes): Adjust. 15325 (corpus_diff::append_child_node): Make sure the child node is kept 15326 alive. Only add the naked pointer to the child node to the vector 15327 of children. 15328 (category_propagation_visitor::visit_end): Adjust. 15329 (suppression_categorization_visitor::visit_end): Adjust. 15330 (redundancy_marking_visitor::{visit_begin, visit_end}): Adjust. 15331 153322016-05-20 Dodji Seketeli <dodji@redhat.com> 15333 15334 Speedup diff node child insertion 15335 * src/abg-comparison.cc (corpus_diff::append_child_node): Insert 15336 the new child at the right point in the vector of children, so 15337 that it remains sorted. 15338 153392016-05-21 Dodji Seketeli <dodji@redhat.com> 15340 15341 Fix invocation of delete operator in test-read-dwarf.cc 15342 * tests/test-read-dwarf.cc (main): Call delete[], not delete. 15343 153442016-05-22 Dodji Seketeli <dodji@redhat.com> 15345 15346 Plug leak of debug info handles 15347 * configure.ac: Check the presence of dwarf_getalt in libdw. If 15348 it's present, define the preprocessor macro 15349 LIBDW_HAS_DWARF_GETALT. Update the autoconf configuration 15350 summary. 15351 * src/abg-dwarf-reader.cc: Add config.h. 15352 (find_alt_debug_info_location): Factorize this out of ... 15353 (find_alt_debug_info): ... this function. Use dwarf_getalt if 15354 present, otherwise, keep using dwfl_standard_find_debuginfo. In 15355 the later case, return the file descriptor opened to access the 15356 alternate debug info, by parameter, so that the caller can fclose 15357 it. 15358 (read_context::alt_fd_): New data member. 15359 (read_context::read_context): Initialize the new alt_fd_ data 15360 member. 15361 (read_context::load_debug_info): Store the file descriptor used to 15362 access the alternate debug info into the new alt_fd_ data member. 15363 (read_context::~read_context): New desctructor. 15364 (get_soname_of_elf_file, get_type_of_elf_file): Free the elf 15365 handle. 15366 (read_context::load_debug_info): Be paranoid in making sure we 15367 never override alt_dwarf_. 15368 * tests/data/test-alt-dwarf-file/test0-report.txt: Adjust. 15369 153702016-05-22 Dodji Seketeli <dodji@redhat.com> 15371 15372 Plug leak of shared private data of class_diff type 15373 * include/abg-comparison.h (class_diff::get_priv): Declare new 15374 member function. 15375 (class_diff::get_priv): Define new member function. 15376 (class_diff::{chain_into_hierarchy, base_changes, deleted_bases, 15377 inserted_bases, changed_bases, base_changes, member_types_changes, 15378 member_types_changes, data_members_changes, inserted_data_members, 15379 deleted_data_members, member_fns_changes, changed_member_fns, 15380 member_fns_changes, deleted_member_fns, inserted_member_fns, 15381 member_fn_tmpls_changes, member_class_tmpls_changes, 15382 member_class_tmpls_changes, report}): Rather than accessing 15383 class_diff::priv directly, use the new class_diff::get_priv. 15384 153852016-05-21 Dodji Seketeli <dodji@redhat.com> 15386 15387 Remove circular ref from class_decl::priv::definition_of_declaration 15388 * include/abg-ir.cc (class_decl::get_definition_of_declaration): 15389 Return a shared pointer, rather than a reference to a shared pointer. 15390 * src/abg-ir.cc (class_decl::priv::definition_of_declaration_): 15391 Make this be a weak pointer. 15392 (class_decl::get_definition_of_declaration): 15393 Likewise. And return the shared pointer built out of the weak 15394 pointer we have in there now. 15395 153962016-05-21 Dodji Seketeli <dodji@redhat.com> 15397 15398 Plug leak of regex_t in suppression engine 15399 * include/abg-sptr-utils.h (build_sptr<T>): Declare an overload that 15400 allocates a T* and wraps it into a shared_ptr<T>. 15401 (build_sptr<regex_t>): Declare a specialization for regex_t. 15402 * src/abg-corpus.cc (build_sptr<regex_t>()): Define the 15403 specialization here. 15404 * src/abg-suppression.ccp 15405 (suppression_base::priv::{get_file_[not]_name_regex, 15406 get_soname_[not]_regex}): Use the new build_sptr<regex_t>(). 15407 (type_suppression::priv::{get_type_name_regex, 15408 get_source_location_to_keep_regex}): Likewise. 15409 (function_suppression::parameter_spec::priv::get_type_name_regex): 15410 Likewise. 15411 (function_suppression::priv::{get_name_regex, 15412 get_return_type_regex, get_symbol_name_regex, 15413 get_symbol_version_regex}): Likewise. 15414 (variable_suppression::priv::{get_name_regex, 15415 get_symbol_name_regex, get_symbol_version_regex, 15416 get_type_name_regex}): Likewise. 15417 154182016-05-18 Dodji Seketeli <dodji@redhat.com> 15419 15420 Plug leak of diff_context_sptr after calling compute_diff 15421 * src/abg-comparison.cc (diff::priv::ctxt_): Make this a weak_ptr. 15422 (diff::priv::get_context): Convert the weak pointer to the context 15423 into a shared_ptr and return it. 15424 (diff::priv::is_filtered_out): Adjust to use 15425 diff::priv::get_context() to access the context. 15426 (diff::context): Likewise. 15427 (corpus_diff::priv::ctxt_): Make this a weak_ptr. 15428 (corpus_diff::priv::priv): Add a new overload that takes two 15429 corpora and a diff context. 15430 (corpus_diff::priv::get_context): Convert the weak pointer to the 15431 context into a shared_ptr and return it. 15432 (corpus_diff::priv::ensure_lookup_tables_populated): Adjust to use 15433 the new corpus_diff::priv::get_context to get the context. 15434 (variable_is_suppressed): Likewise. 15435 (corpus_diff::priv::{apply_suppressions_to_added_removed_fns_vars, 15436 apply_filters_and_compute_diff_stats, emit_diff_stats, 15437 categorize_redundant_changed_sub_nodes, 15438 clear_redundancy_categorization}): Likewise. 15439 (corpus_diff::{corpus_diff, context, 15440 apply_filters_and_suppressions_before_reporting}): Adjust. 15441 * tools/abipkgdiff.cc (compare): Make the overload that compares 15442 elf binaries take a diff context output parameter. After the 15443 context is created by this function, it's return to the caller, so 15444 that it's life time is bound to the scope this function was 15445 called from. 15446 (pthread_routine_compare): Create a shared pointer to hold a 15447 reference on a diff context. Pass that shared pointer by 15448 reference to the compare function that compares elf binaries. 15449 Rather than storing corpora in the reports_map, (as those corpora 15450 would then out-live the diff context and thus create memory 15451 corruption issues), emit the report directly into an ostringstream 15452 and store that stream in reports_map. 15453 (compare): In the overoad that compares packages, rather than 15454 trying to get corpora from the report_map, just emit the content 15455 of the ostringstream that is now there. 15456 154572016-05-22 Dodji Seketeli <dodji@redhat.com> 15458 15459 Fix a read passed-the-end in abg-dwarf-reader.cc 15460 * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): Do 15461 not read passed the end of the array. 15462 154632016-05-21 Dodji Seketeli <dodji@redhat.com> 15464 15465 Support running "make check-valgrind" 15466 * autoconf-archive/ax_valgrind_check.m4: Add new file. Copied it 15467 from http://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html. 15468 * configure.ac: Include the new ax_valgrind_check.m4 file. 15469 Initialize the valgrind checking on tests. Update the configure 15470 status. 15471 * tests/test-valgrind-suppressions.supp: New valgrind suppression 15472 file to silence memcheck leak errors from python. 15473 * tests/Makefile.am: Add test-valgrind-suppressions.supp to source 15474 distribution. Add check-valgrind-memcheck-recursive target. 15475 154762016-05-22 Dodji Seketeli <dodji@redhat.com> 15477 15478 Update the CONTRIBUTING file 15479 * CONTRIBUTING: Cleanup. 15480 154812016-05-22 Dodji Seketeli <dodji@redhat.com> 15482 15483 Update the COMMIT-LOG-GUIDELINES file 15484 * COMMIT-LOG-GUIDELINES: Various enhancements. 15485 154862016-05-16 Dodji Seketeli <dodji@redhat.com> 15487 15488 Do not run fedabipkgdiff tests if --enable-fedabipkgdiff is turned off 15489 * tests/Makefile.am: Make running runtestfedabipkgdiff be 15490 dependent on ENABLE_FEDABIPKGDIFF. 15491 154922016-05-13 Chenxiong Qi <cqi@redhat.com> 15493 15494 Fix pep8 error 15495 * tools/fedabipkgdiff (build_commandline_args_parser): Fix 15496 PEP8 error, line is too long. 15497 154982016-05-13 Chenxiong Qi <cqi@redhat.com> 15499 15500 Use consistent string format 15501 * tools/fedabipkgdiff (download_rpm): do not omit positional 15502 argument specifiers in string format. 15503 155042016-05-16 Dodji Seketeli <dodji@redhat.com> 15505 15506 Remove config.h.in from the repository 15507 * config.h.in: Remove from repository. 15508 155092016-02-09 Chenxiong Qi <cqi@redhat.com> 15510 15511 Bug 19428 - New fedabipkgdiff utility 15512 * autoconf-archive/ax_compare_version.m4: New file copied from the 15513 autoconf-archive project. 15514 * autoconf-archive/ax_prog_python_version.m4: Likewise. 15515 * autoconf-archive/ax_python_module.m4: Likewise. 15516 * Makefile.am: Add the new files above to the source distribution. 15517 * configure.ac: Include the new m4 macros from the autoconf 15518 archive. Add a new --enable-fedabipkgdiff option. Update the 15519 report at the end of the configure process to show the status of 15520 the fedabipkgdiff feature. Add check for prerequisite python 15521 modules argparse, glob, logging, os, re, shlex, subprocess, sys, 15522 itertools, urlparse, itertools, shutil, unittest, xdg, koji and 15523 mock. These are necessary for the unit test of 15524 fedabipkgdiff. Generate tests/runtestfedabipkgdiff.py into the 15525 build directory, from the tests/runtestfedabipkgdiff.py.in input 15526 file. 15527 * tools/Makefile.am: Include the fedabipkgdiff to the source 15528 distribution and install it if the "fedabipkgdiff" feature is 15529 enabled. 15530 * tests/Makefile.am: Rename runtestfedabipkgdiff.sh into 15531 runtestfedabipkgdiff.py. Add the new runtestfedabipkgdiff.py.in 15532 autoconf template file in here. 15533 * tests/runtestfedabipkgdiff.py.in: New unit test file. 15534 * tools/fedabipkgdiff: New fedabipkgdiff tool. 15535 * doc/manuals/fedabipkgdiff.rst: New manual. 15536 155372016-05-07 Dodji Seketeli <dodji@redhat.com> 15538 15539 Implement a [suppress_file] suppression directive 15540 * doc/manuals/libabigail-concepts.rst: Document the new 15541 'suppress_file' directive. 15542 * include/abg-suppression.h (file_suppression): Define new class. 15543 (file_suppression_sptr): Define new typedef. 15544 (is_file_suppression, file_is_suppressed): Declare new functions. 15545 * src/abg-suppression.cc (): 15546 (read_file_suppression, is_file_suppression, file_is_suppressed): 15547 Define new functions. 15548 (file_suppression::{file_suppression, suppresses_file, 15549 ~file_suppression}): Define new member functions. 15550 * tools/abidiff.cc (main): If a suppression specification 15551 suppresses one of the input files, then do not perform the 15552 comparison. 15553 * tools/abipkgdiff.cc (compare): If a suppression specification 15554 suppresses a file that is to be compared, then do not perform the 15555 comparison. 15556 * tools/abicompat.cc (create_diff_context): New static function. 15557 (perform_compat_check_in_normal_mode) 15558 (perform_compat_check_in_weak_mode): Adjust to take a context in 15559 parameter. Do not create a diff context here anymore, do not load 15560 suppression files here either. 15561 (main): Use the new create_diff_context to create a diff context 15562 and initialize it, including loading suppression specifications. 15563 If any suppression specification suppresses a file to load, then 15564 do not load perform any compatibility checking. Adjust 15565 invocations of perform_compat_check_in_weak_mode and 15566 perform_compat_check_in_normal_mode to pass the diff context. 15567 * tests/data/test-diff-suppr/test0-type-suppr-3.suppr: New test 15568 input. 15569 * tests/data/test-diff-suppr/test0-type-suppr-4.suppr: Likewise. 15570 * tests/data/test-diff-suppr/test0-type-suppr-report-4.txt: Likewise. 15571 * tests/data/test-diff-suppr/test0-type-suppr-5.suppr: Likewise. 15572 * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: 15573 Likewise. 15574 * tests/data/test-diff-suppr/test0-type-suppr-6.suppr: Likewise. 15575 * tests/data/test-diff-suppr/test0-type-suppr-report-6.txt: 15576 Likewise. 15577 * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: 15578 Likewise. 15579 * tests/test-diff-suppr.cc (in_out_specs): Use the new test 15580 inputs. 15581 * tests/data/test-abicompat/test0-fn-changed-1.suppr: New test 15582 input. 15583 * tests/data/test-abicompat/test0-fn-changed-report-3.txt: 15584 Likewise. 15585 * tests/test-abicompat.cc (in_out_specs):: Use the new test 15586 inputs. 15587 * tests/data/Makefile.am: Add the new test material to source 15588 distribution. 15589 155902016-05-07 Dodji Seketeli <dodji@redhat.com> 15591 15592 Split suppression engine off of abg-comparison.{cc,h} 15593 * include/Makefile.am: Add abg-suppression.h to source 15594 distribution. 15595 * include/abg-comparison.h: Remove abg-ini.h include directive. 15596 (suppression_sptr, suppressions_type): Move these typedefs to 15597 abg-fwd.h. 15598 (class suppression_base, type_suppression) 15599 (type_suppression::insertion_range) 15600 (type_suppression::insertion_range::boundary) 15601 (type_suppression::insertion_range::integer_boundary) 15602 (type_suppression::insertion_range::fn_call_expr_boundary) 15603 (function_suppression, function_suppression::parameter_spec) 15604 (variable_suppression): Move these type definitions to the new 15605 abg-suppression.h. 15606 (read_suppressions, is_type_suppression, is_integer_boundary) 15607 (is_fn_call_expr_boundary, is_function_suppression) 15608 (is_variable_suppression, operator&) 15609 (operator|): Move these function declarations to the new 15610 abg-suppression.h. 15611 (type_suppression, type_suppression_sptr, type_suppression_type) 15612 (function_suppression, function_suppression_sptr) 15613 (function_suppressions_type, variable_suppression) 15614 (variable_suppression_sptr, variable_suppressions_type): Move 15615 these forward declaration and typedefs to the new 15616 abg-suppression.h. 15617 (diff_context::suppressions): Adjust return type to 15618 suppr::suppressions_type&. 15619 (diff_context::add_suppression): Adjust parameter type to 15620 suppr::suppressions_sptr. 15621 (diff_context::add_suppressions): Adjust parameter type 15622 suppr::suppressions_type&. 15623 (is_type_diff, is_decl_diff, is_var_diff, is_function_decl_diff) 15624 (is_pointer_diff, is_reference_diff, is_fn_parm_diff) 15625 (is_base_diff, is_child_node_of_function_parm_diff) 15626 (is_child_node_of_base_diff): Declare these new functions. They 15627 were previously static, local to abg-comparison.cc only. Now they 15628 need to be exported because they are used by the suppression 15629 engine's code that now lives in its one files. 15630 * include/abg-fwd.h (suppr::{suppression_base, suppression_sptr, 15631 suppressions_type}): Forward declare these here. 15632 * include/abg-suppression.h (class suppression_base) 15633 (type_suppression, type_suppression::insertion_range) 15634 (type_suppression::insertion_range::boundary) 15635 (type_suppression::insertion_range::integer_boundary) 15636 (type_suppression::insertion_range::fn_call_expr_boundary) 15637 (function_suppression, function_suppression::parameter_spec) 15638 (variable_suppression): Move these type definitions here, in the 15639 namespace suppr. 15640 (read_suppressions, is_type_suppression, is_integer_boundary) 15641 (is_fn_call_expr_boundary, is_function_suppression) 15642 (is_variable_suppression, operator&) 15643 (operator|): Move these function decalration here, in the 15644 namespace suppr. 15645 (type_suppression_sptr, type_suppressions_type) 15646 (function_suppression_sptr, function_suppressions_type) 15647 (variable_suppression_sptr, variable_suppressions_type): Move 15648 these typedefs here, in the namespace suppr. 15649 * src/Makefile.am: add src/abg-suppression.cc to source 15650 distribution. 15651 * src/abg-comparison.cc (is_type_diff, is_decl_diff, is_var_diff) 15652 (is_function_decl_diff, is_pointer_diff, is_reference_diff) 15653 (is_reference_or_pointer_diff, is_fn_parm_diff, is_base_diff) 15654 (is_child_node_of_function_parm_diff, is_child_node_of_base_diff): 15655 Export these functions. 15656 (*suppression*): Move all the suppression-related definitions to 15657 the new abg-suppression.cc. 15658 * src/abg-suppression.cc: New file. Contains all the *suppression* 15659 definitions from src/abg-comparison.cc, that are put in the suppr 15660 namespace. 15661 * tools/abicompat.cc: Adjust. 15662 * tools/abidiff.cc: Likewise. 15663 * tools/abipkgdiff.cc: Likewise. 15664 156652016-05-08 Dodji Seketeli <dodji@redhat.com> 15666 15667 Fix indentation for abidiff manual 15668 * doc/manuals/abidiff.rst: Fix indentation for the --suppression 15669 paragraph. 15670 156712016-05-08 Dodji Seketeli <dodji@redhat.com> 15672 15673 Add several shortcuts to options for abicompat 15674 * doc/manuals/abicompat.rst: Update documentation. 15675 * tools/abicompat.cc (display_usage): Update help strings. 15676 (parse_command_line): Add shortcuts --suppr, --appd, --libd1 and 15677 --libd2. 15678 156792016-05-08 Dodji Seketeli <dodji@redhat.com> 15680 15681 Update copyright year in tools/abicompat.cc 15682 * tools/abicompat.cc: Update copyright years to 2016. 15683 156842016-05-07 Dodji Seketeli <dodji@redhat.com> 15685 15686 Fix mention of tool's name in abidiff error message 15687 * src/abg-tools-utils.cc (emit_prefix): Try to emit the prefix 15688 only if the program name was provided. 15689 * abidiff.cc (maybe_check_suppression_files): Pass the name of the 15690 tool to the check_file function. 15691 156922016-05-07 Dodji Seketeli <dodji@redhat.com> 15693 15694 Update copyright year on abg-comparison.h 15695 * include/abg-comparison.h: Update copyright year. 15696 156972016-05-08 Dodji Seketeli <dodji@redhat.com> 15698 15699 Doc not show classes' inherited members in apidoc 15700 * doc/api/libabigail.doxy: Don't show inherited member functions 15701 or variables of a given class. 15702 157032016-05-08 Dodji Seketeli <dodji@redhat.com> 15704 15705 Fix typo in concept manual 15706 * doc/manuals/libabigail-concepts.rst: Do not refer to abidiff 15707 specifically for suppressions because several tools use 15708 suppressions. 15709 157102016-05-08 Dodji Seketeli <dodji@redhat.com> 15711 15712 Fix indentation in concepts manual 15713 * doc/manuals/libabigail-concepts.rst: Fix indentation. 15714 157152016-05-06 Dodji Seketeli <dodji@redhat.com> 15716 15717 Add some apidoc to dwarf_reader 15718 * include/abg-dwarf-reader.h (namespace dwarf_reader): Add apidoc. 15719 (enum elf_type): Add an apidoc for each enumerator. 15720 * src/abg-dwarf-reader.cc (get_type_of_elf_file): Add an apidoc 15721 for the 'type' parameter. 15722 157232016-04-28 Dodji Seketeli <dodji@redhat.com> 15724 15725 [abipkgdiff] Show SONAME of removed/added libraries 15726 * tools/abipkgdiff.cc (abi_diff::{added,removed}_binaries): Change 15727 the type of these data member from vector<string> to 15728 vector<elf_file_sptr>. 15729 (compare): Adjust. Show the soname of added/removed binaries. 15730 157312016-04-27 Dodji Seketeli <dodji@redhat.com> 15732 15733 Bug 20015 - support file_name_not_regexp and soname_not_regexp in suppr specs 15734 * include/abg-comparison.h 15735 (suppression_base::{get,set}_file_name_not_regex_str): Declare new 15736 member functions. 15737 (suppression_base::{get,set}_soname_not_regex_str): Likewise. 15738 (suppression_base::{names,sonames}_of_binaries_match): Likewise. 15739 * src/abg-comparison.cc 15740 (suppression_base::priv::get_file_name_regex): Fix comment. 15741 (suppression_base::priv::get_file_name_not_regex): New member 15742 function. 15743 (suppression_base::priv::get_soname_regex): Fix comment. 15744 (suppression_base::priv::get_soname_not_regex): New member 15745 function. 15746 (suppression_base::{get,set}_file_name_not_regex_str): Define new 15747 member functions. 15748 (suppression_base::{get,set}_soname_not_regex_str): Likewise. 15749 (suppression_base::{names,sonames}_of_binaries_match): Likewise. 15750 These got factorized out of type_suppression::suppresses_type, 15751 function_suppression::suppresses_function, 15752 function_suppression::suppresses_function_symbol, 15753 variable_suppression::suppresses_variable, 15754 variable_suppression::suppresses_variable_symbol. 15755 (type_suppression::suppresses_type): Use the new 15756 suppression_base::{names,sonames}_of_binaries_match. 15757 (read_type_suppression): Read the new file_name_not_regexp and 15758 soname_not_regexp properties. 15759 (function_suppression::{suppresses_function, 15760 suppresses_function_symbol}): Use the new 15761 suppression_base::{names,sonames}_of_binaries_match. 15762 (read_function_suppression): Read the new file_name_not_regexp and 15763 soname_not_regexp properties. 15764 (variable_suppression::{suppresses_variable, 15765 variable_suppression::suppresses_variable_symbol}): Use the new 15766 suppression_base::{names,sonames}_of_binaries_match. 15767 (read_variable_suppression): Use the new 15768 suppression_base::{names,sonames}_of_binaries_match. 15769 * doc/manuals/libabigail-concepts.rst: Document the new 15770 file_name_not_regexp and soname_not_regexp suppression properties. 15771 * tests/data/test-diff-suppr/test24-soname-report-10.txt: New test 15772 reference output. 15773 * tests/data/test-diff-suppr/test24-soname-report-11.txt: Likewise. 15774 * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. 15775 * tests/data/test-diff-suppr/test24-soname-report-13.txt: Likewise. 15776 * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. 15777 * tests/data/test-diff-suppr/test24-soname-report-15.txt: Likewise. 15778 * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. 15779 * tests/data/test-diff-suppr/test24-soname-report-9.txt: Likewise. 15780 * tests/data/test-diff-suppr/test24-soname-suppr-10.txt: New test input. 15781 * tests/data/test-diff-suppr/test24-soname-suppr-11.txt: Likewise. 15782 * tests/data/test-diff-suppr/test24-soname-suppr-12.txt: Likewise. 15783 * tests/data/test-diff-suppr/test24-soname-suppr-13.txt: Likewise. 15784 * tests/data/test-diff-suppr/test24-soname-suppr-14.txt: Likewise. 15785 * tests/data/test-diff-suppr/test24-soname-suppr-15.txt: Likewise. 15786 * tests/data/test-diff-suppr/test24-soname-suppr-16.txt: Likewise. 15787 * tests/data/test-diff-suppr/test24-soname-suppr-9.txt: Likewise. 15788 * tests/data/test-diff-suppr/test29-soname-report-2.txt: New test 15789 reference output. 15790 * tests/data/test-diff-suppr/test29-soname-report-3.txt: Likewise. 15791 * tests/data/test-diff-suppr/test29-soname-report-4.txt: Likewise. 15792 * tests/data/test-diff-suppr/test29-soname-report-5.txt: Likewise. 15793 * tests/data/test-diff-suppr/test29-soname-report-6.txt: Likewise. 15794 * tests/data/test-diff-suppr/test29-soname-report-7.txt: Likewise. 15795 * tests/data/test-diff-suppr/test29-soname-report-8.txt: Likewise. 15796 * tests/data/test-diff-suppr/test29-suppr-2.txt: New test input. 15797 * tests/data/test-diff-suppr/test29-suppr-3.txt: Likewise. 15798 * tests/data/test-diff-suppr/test29-suppr-4.txt: Likewise. 15799 * tests/data/test-diff-suppr/test29-suppr-5.txt: Likewise. 15800 * tests/data/test-diff-suppr/test29-suppr-6.txt: Likewise. 15801 * tests/data/test-diff-suppr/test29-suppr-7.txt: Likewise. 15802 * tests/data/test-diff-suppr/test29-suppr-8.txt: Likewise. 15803 * tests/data/Makefile.am: Add the new test material to source 15804 distribution. 15805 * tests/test-diff-suppr.cc (in_out_specs): Make this test harness 15806 run over the new test inputs. 15807 158082016-04-27 Dodji Seketeli <dodji@redhat.com> 15809 15810 Make API documentation of thread pools visible 15811 * include/abg-workers.h: Document the workers namespace, the task, 15812 queue and queue::task_done_notify types. 15813 * src/abg-workers.cc: Move the documentation of the thread_pool 15814 module inside the abigail::worker namespace, so that references to 15815 task and queue types (which are also in the abigail::worker 15816 namespace) can be resolved in the apidoc. 15817 158182016-04-27 Dodji Seketeli <dodji@redhat.com> 15819 15820 Update documentation to require doxygen and python-sphinx for building 15821 * COMPILING: Add python-sphinx to the set of required packages to 15822 build the documentation. 15823 * doc/website/mainpage.txt: Update the website to mention doxygen 15824 and python-sphinx for documentation. 15825 158262016-04-27 Dodji Seketeli <dodji@redhat.com> 15827 15828 Add doc, info, man and html-doc targets to generate documentation 15829 * Makefile.am: Add info, man and html-doc targets to generate 15830 documentation in info, man and html formats. If you want to 15831 generate them all, then the doc target is the one to be used. 15832 * COMPILING: Add documentation for the above. 15833 158342016-04-25 Dodji Seketeli <dodji@redhat.com> 15835 15836 Bug 19964 - Cannot load function aliases on ppc64 15837 * src/abg-dwarf-reader.cc (read_context::load_symbol_maps): While 15838 filling the ppc64-specific "function-entry-address => symbol" map, 15839 if we stumble accross a function-entry-address that belongs to an 15840 alias of 'symbol', then assume the alias must have been registered 15841 as an alias already, by the platform-agnostic code. Do not try to 15842 register the alias again. 15843 * tests/data/Makefile.am: Add the new test input binaries to the 15844 source distribution. 15845 * tests/data/test-diff-dwarf/libtest36-ppc64-aliases-v0.so: New 15846 binary test input. 15847 * tests/data/test-diff-dwarf/libtest36-ppc64-aliases-v1.so: Likewise. 15848 * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: 15849 New test reference output. 15850 * tests/data/test-diff-dwarf/test36-ppc64-aliases-v0.cc: Source 15851 code for the new binary test input above. 15852 * tests/data/test-diff-dwarf/test36-ppc64-aliases-v1.cc: Likewise. 15853 * tests/test-diff-dwarf.cc: Add the new test input to the list of 15854 test inputs considered by this test harness. 15855 158562016-04-20 Sinny Kumari <sinny@redhat.com> 15857 15858 Bug 19961 - Distinguish between PI executable and shared library 15859 * include/abg-dwarf-reader.h (elf_type): Add new enumerator 15860 ELF_TYPE_PI_EXEC. 15861 * src/abg-dwarf-reader.cc 15862 (lookup_data_tag_from_dynamic_segment): New function for 15863 data tag lookup in dynamic segment of an elf 15864 (elf_file_type): Return ELF_TYPE_PI_EXEC file type for 15865 a PI executable. 15866 (get_elf_file_type): Change this to take an elf handle. 15867 (get_type_of_elf_file): New function that got factorized out of ... 15868 (load_dt_soname_and_needed): ... this one. 15869 * tools/abipkgdiff.cc (create_maps_of_package_content): Also 15870 consider ELF_TYPE_PI_EXEC file type. 15871 (compare): Likewise. 15872 * tests/test-diff-pkg.cc (in_out_specs): Test case additions 15873 * tests/data/Makefile.am: Include test files 15874 * tests/data/test-diff-pkg/tarpkg-1-dir1.tar.gz: New test data 15875 * tests/data/test-diff-pkg/tarpkg-1-dir2.tar.gz: New test data 15876 * tests/data/test-diff-pkg/tarpkg-1-report-0.txt: New test result 15877 158782016-04-17 Dodji Seketeli <dodji@redhat.com> 15879 15880 Update website to 1.0.rc4 15881 * doc/website/mainpage.txt: Update tarball reference to 1.0.rc4 15882 158832016-04-17 Dodji Seketeli <dodji@redhat.com> 15884 15885 Bump current version number to 1.0.rc5 15886 * configure.ac: Bump current version number to 1.0.rc5 15887 158882016-04-17 Dodji Seketeli <dodji@redhat.com> 15889 15890 Add a 'release' target to main Makefile 15891 * Makefile.am: Add tarball, upload-release-only, upload-release 15892 and release targets. 15893 158942016-04-11 Dodji Seketeli <dodji@redhat.com> 15895 15896 Update ChangeLog for 1.0.rc4 15897 * ChangeLog: Update automatically by running "make 15898 update-changelog" 15899 159002016-04-11 Dodji Seketeli <dodji@redhat.com> 15901 15902 Update NEWS for 1.0.rc4 15903 * NEWS: Update for 1.0.rc4 15904 159052016-04-16 Dodji Seketeli <dodji@redhat.com> 15906 15907 Fix typos in the suppression specifications manual 15908 * doc/manuals/libabigail-concepts.rst: Fix typos. 15909 159102016-04-16 Dodji Seketeli <dodji@redhat.com> 15911 15912 Ease use of soname_regexp/file_name_regexp in suppr specs 15913 * doc/manuals/libabigail-concepts.rst: Update the manual to 15914 reflect the changes in the suppression_type, suppress_function and 15915 suppress_variable directives. 15916 * src/abg-comparison.cc (read_type_suppression): Accept that 15917 the suppress_type directive contains only file_name_regexp 15918 or the soname_regexp property. 15919 (read_function_suppression): Likewise for the suppress_function 15920 directive. 15921 (read_variable_suppression): Likewise for the suppress_variable 15922 directive. 15923 * tests/data/test-diff-suppr/libtest29-soname-v0.so: New binary 15924 test input. 15925 * tests/data/test-diff-suppr/libtest29-soname-v1.so: Likewise. 15926 * tests/data/test-diff-suppr/test24-soname-report-5.txt: New 15927 reference test output. 15928 * tests/data/test-diff-suppr/test24-soname-report-6.txt: Likewise. 15929 * tests/data/test-diff-suppr/test24-soname-report-7.txt: Likewise. 15930 * tests/data/test-diff-suppr/test24-soname-report-8.txt: Likewise. 15931 * tests/data/test-diff-suppr/test24-soname-suppr-5.txt: New test 15932 suppression file. 15933 * tests/data/test-diff-suppr/test24-soname-suppr-6.txt: Likewise. 15934 * tests/data/test-diff-suppr/test24-soname-suppr-7.txt: Likewise. 15935 * tests/data/test-diff-suppr/test24-soname-suppr-8.txt: Likewise. 15936 * tests/data/test-diff-suppr/test29-soname-report-0.txt: New 15937 reference test output. 15938 * tests/data/test-diff-suppr/test29-soname-report-1.txt: Likewise. 15939 * tests/data/test-diff-suppr/test29-soname-v0.cc: Source code for 15940 the new binary output above. 15941 * tests/data/test-diff-suppr/test29-soname-v1.cc: Likewise. 15942 * tests/data/test-diff-suppr/test29-suppr-0.txt: New test 15943 suppression file. 15944 * tests/data/test-diff-suppr/test29-suppr-1.txt: Likewise. 15945 * tests/data/Makefile.am: Add the new test material above to 15946 source distribution. 15947 * tests/test-diff-suppr.cc (in_out_specs): Make this test harness 15948 run over the new test input above. 15949 159502016-03-31 Dodji Seketeli <dodji@redhat.com> 15951 15952 Fix comments in tests/test-diff-pkg.cc 15953 * tests/test-diff-pkg.cc: Fix the wording of the introductory 15954 comments. 15955 159562016-03-30 Dodji Seketeli <dodji@redhat.com> 15957 15958 Bug 19885 - Cannot associates a function DIE to a symbol on powerpc64 15959 *from* the address of its entry point. 15960 More precisely, on ppc64, the address of a function is the address of 15961 a function descriptor. The function descriptor is a set of three 64 15962 bits addresses. The first element of the triplet is the function 15963 entry pointer address. So to get the symbol a given function entry 15964 point address belongs to, one must get to the function descriptor 15965 which contains said function entry point address. And function 15966 descriptors are in the ".opd" special section. 15967 Unfortunately, Libabigail's ELF/DWARF reader has no knowledge of all 15968 this. So it cannot get the symbol of a given function DWARF 15969 description. So it considers all functions as having no ELF symbols. 15970 So it shows no ABI change pertaining to function sub-types on ppc64. 15971 This patch makes Libabigail support function descriptors on ppc64 so 15972 it can detect changes on function sub-types there. 15973 * src/abg-dwarf-reader.cc (read_context::{opd_section_, 15974 fun_entry_addr_sym_map_}): New data members. 15975 (read_context::read_context): Initialize the new opd_section_ data 15976 member. 15977 (read_context::{find_opd_section, 15978 lookup_ppc64_elf_fn_entry_pointer_address, 15979 fun_entry_addr_sym_map_sptr, fun_entry_addr_sym_map, 15980 elf_architecture_is_ppc64, elf_architecture_is_big_endian}): New 15981 member functions. 15982 (read_context::lookup_elf_fn_symbol_from_address): Adjust to use 15983 the new read_context::fun_entry_addr_sym_map() function. 15984 (read_context::load_symbol_maps): Populate the function entry 15985 addresses -> symbol map, for ppc64 ELFv1. 15986 (read_context::load_elf_properties): Renamed 15987 read_context::load_remaining_elf_data into this. 15988 (read_corpus_from_elf): Load elf properties before trying to load 15989 elf symbols information. 15990 * tests/data/test-diff-filter/libtest32-struct-change-v0.so: New 15991 binary test input, compiled for ppc64le. 15992 * tests/data/test-diff-filter/libtest32-struct-change-v1.so: Likewise. 15993 * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: 15994 New test reference output. 15995 * tests/data/test-diff-filter/test32-ppc64le-struct-change-v0.c: 15996 Source code of the new binary test input above. 15997 * tests/data/test-diff-filter/test32-ppc64le-struct-change-v1.c: 15998 Likewise. 15999 * tests/data/Makefile.am: Add the new test material above to 16000 source distribution. 16001 * tests/test-diff-filter.cc (in_out_spec): Make this test harness 16002 run over the new test input binaries above. 16003 160042016-03-25 Dodji Seketeli <dodji@redhat.com> 16005 16006 Fix logs in abipkgdiff and add some more 16007 * tools/abipkgdiff.cc (compare): Fix logs to make them more 16008 readable in a multithreaded context. 16009 (create_maps_of_package_content): Likewise. Add logs about the 16010 number of elf files found in a given directory. Add logs about 16011 skipping files. 16012 160132016-03-25 Dodji Seketeli <dodji@redhat.com> 16014 16015 Bug 19867 - abipkgdiff skips symbolic links 16016 * include/abg-tools-utils.h (maybe_get_symlink_target_file_path): 16017 Declare new function. 16018 * src/abg-tools-utils.cc (get_stat): Use lstat here, not stat. 16019 Update comment. 16020 * tools/abipkgdiff.cc (first_package_tree_walker_callback_fn) 16021 (second_package_tree_walker_callback_fn): Follow symbolic links to 16022 elf files to get their target paths, and only work with that 16023 target path. 16024 (maybe_get_symlink_target_file_path): Define new function. 16025 * test-diff-pkg/symlink-dir-test1-report0.txt New test material. 16026 * test-diff-pkg/symlink-dir-test1/dir1/symlinks/foo.o: Likewise. 16027 * test-diff-pkg/symlink-dir-test1/dir1/symlinks/libfoo.so: Likewise. 16028 * test-diff-pkg/symlink-dir-test1/dir1/targets/foo.c: Likewise. 16029 * test-diff-pkg/symlink-dir-test1/dir1/targets/foo.o: Likewise. 16030 * test-diff-pkg/symlink-dir-test1/dir1/targets/libfoo.so: Likewise. 16031 * test-diff-pkg/symlink-dir-test1/dir2/symlinks/foo.o: Likewise. 16032 * test-diff-pkg/symlink-dir-test1/dir2/symlinks/libfoo.so: Likewise. 16033 * test-diff-pkg/symlink-dir-test1/dir2/targets/foo.c: Likewise. 16034 * test-diff-pkg/symlink-dir-test1/dir2/targets/foo.o: Likewise. 16035 * test-diff-pkg/symlink-dir-test1/dir2/targets/libfoo.so: Likewise. 16036 * tests/data/Makefile.am: Add the new test material to source 16037 distribution. 16038 * tests/test-diff-pkg.cc (in_out_spec): Run this test harness 16039 over the new test material above. 16040 160412016-03-21 Dodji Seketeli <dodji@redhat.com> 16042 16043 Fix typo on the web page 16044 * doc/website/mainpage.txt: Fix typo. 16045 160462016-03-18 Roland McGrath <roland@hack.frob.com> 16047 16048 Fix typo in configure --enable-deb help text 16049 * configure.ac: Fix typo in --enable-deb usage text. 16050 160512016-03-18 Dodji Seketeli <dodji@redhat.com> 16052 16053 Bug 19846 - variable decl associated with the wrong debug info section 16054 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Associate the 16055 decl of the variable to the same debug info file (alternate or 16056 not) as the DIE, not as its specification DIE. 16057 160582016-03-18 Dodji Seketeli <dodji@redhat.com> 16059 16060 Fix typo in the manual of abidiff 16061 * doc/manuals/abidiff.rst: Fix typo. 16062 160632016-03-18 Dodji Seketeli <dodji@redhat.com> 16064 16065 Fix typos in comments in src/abg-dwarf-reader.cc 16066 * src/abg-dwarf-reader.cc (read_context::{die_type_map, 16067 is_wip_class_die_offset, is_wip_function_type_die_offset}): Fix 16068 typo in comments. 16069 160702016-03-18 Dodji Seketeli <dodji@redhat.com> 16071 16072 Bug 19844 - Cannot try to canonicalize a type that is being constructed 16073 * src/abg-dwarf-reader.cc 16074 (read_context::{alternate_die_wip_classes_map_, 16075 alternate_die_wip_function_types_map_}): New data members. 16076 (read_context::lookup_type_from_die_offset): Lookup WIP class and 16077 function types too. 16078 (read_context::{die_wip_classes_map, die_wip_function_types_map}): 16079 Take a flag saying if we should get the map for the alternate 16080 debug info section or not. 16081 (read_context::{is_wip_class_die_offset, 16082 is_wip_function_type_die_offset}): Take a flagy saying if the DIE 16083 is in the alternate debug info section or not. 16084 (build_class_type_and_add_to_ir, build_function_type) 16085 (maybe_canonicalize_type): Adjust. 16086 (build_ir_node_from_die): Do not call maybe_canonicalize_type on 16087 type DIEs which no type has been constructed for. 16088 * tests/data/test-diff-pkg/gtk2-debuginfo-2.24.22-5.el7.i686.rpm: 16089 New test input. 16090 * tests/data/test-diff-pkg/gtk2-debuginfo-2.24.28-8.el7.i686.rpm: 16091 Likewise. 16092 * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686.rpm: 16093 Likewise. 16094 * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.28-8.el7.i686.rpm: 16095 Likewise. 16096 * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt: 16097 New test reference output. 16098 * tests/data/Makefile.am: Add the new test material to the source 16099 distribution. 16100 * tests/test-diff-pkg.cc (in_out_spec): Make this test harness run 16101 on the new test input above. 16102 161032016-03-16 Dodji Seketeli <dodji@redhat.com> 16104 16105 Fix a typo in include/abg-tools-utils.h 16106 * include/abg-tools-utils.h (enum abidiff_status): Fix typo in 16107 comment. 16108 161092016-03-16 Dodji Seketeli <dodji@redhat.com> 16110 16111 Update copyright dates for the manuals 16112 * doc/manuals/conf.py: Update copyright years. 16113 161142016-03-16 Dodji Seketeli <dodji@redhat.com> 16115 16116 More docs about ABIDIFF_ABI_INCOMPATIBLE_CHANGE 16117 * doc/manuals/abidiff.rst: Explain the kind of changes that flip 16118 the ABIDIFF_ABI_INCOMPATIBLE_CHANGE flag. 16119 161202016-03-09 Dodji Seketeli <dodji@redhat.com> 16121 16122 Fix typos on the web page 16123 * doc/website/mainpage.txt: Fix typos. 16124 161252016-03-08 Dodji Seketeli <dodji@redhat.com> 16126 16127 Bump version number to 1.0.rc4 16128 * configure.ac: Bump version number to 1.0.rc4 16129 161302016-03-08 Dodji Seketeli <dodji@redhat.com> 16131 16132 Fix potential race condition in test-diff-pkg.cc 16133 * tests/test-diff-pkg.cc (in_out_spec): Make the tar format tests 16134 output have different names. 16135 161362016-03-08 Dodji Seketeli <dodji@redhat.com> 16137 16138 Updated website to point to 1.0.rc3 tarball 16139 * doc/website/mainpage.txt: Updated website to point to 1.0.rc3 16140 tarball. 16141 161422016-03-08 Dodji Seketeli <dodji@redhat.com> 16143 16144 Update ChangeLog before 1.0.rc3 16145 * ChangeLog: Update for 1.0.rc3 16146 161472016-03-08 Dodji Seketeli <dodji@redhat.com> 16148 16149 Update NEWS file for 1.0.rc3 16150 * NEWS: update for 1.0.rc3 16151 161522016-03-07 Dodji Seketeli <dodji@redhat.com> 16153 16154 Walk function_type_diff tree in a deterministic way 16155 * src/abg-comparison.cc 16156 (function_type_diff::priv::{sorted_subtype_changed_parms_, 16157 sorted_changed_parms_by_id_}): Add two data members. 16158 (function_type_diff::ensure_lookup_tables_populated): Sort the 16159 changed parameters here ... 16160 (function_type_diff::report): ... not here. 16161 (function_type_diff::chain_into_hierarchy): Chain the *sorted* 16162 changed parameters. 16163 161642016-03-07 Dodji Seketeli <dodji@redhat.com> 16165 16166 Fix reference to test file in Makefile.am 16167 * tests/data/Makefile.am: Fix bogus reference to 16168 libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt. 16169 161702016-03-07 Dodji Seketeli <dodji@redhat.com> 16171 16172 Bug 19780 - abipkgdiff doesn't support parallel execution 16173 * tools/abipkgdiff.cc: Update copyright notice. 16174 (package::extracted_packages_parent_dir): Use mkdtemp to generate 16175 the unique root directory under which packages are extracted. 16176 * tests/test-diff-pkg.cc (struct test_task): New type. 16177 (main): Use worker threads to run abipkgdiff in parallel, 16178 depending on the number of CPUs advertised by the underlying 16179 machine. 16180 161812016-03-07 Dodji Seketeli <dodji@redhat.com> 16182 16183 Bug 19778 - diff_has_ancestor_filtered_out() loops forever 16184 * src/abg-comparison.cc (diff_has_ancestor_filtered_out): Add an 16185 overload that takes an additional map of pointer values. Make the 16186 older overload call the new one. 16187 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm: New test material. 16188 * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: 16189 New reference output. 16190 * tests/data/test-diff-pkg/libICE-1.0.9-2.el7.x86_64.rpm: New test material. 16191 * tests/data/test-diff-pkg/libICE-debuginfo-1.0.6-1.el6.x86_64.rpm: New test material. 16192 * tests/data/test-diff-pkg/libICE-debuginfo-1.0.9-2.el7.x86_64.rpm: 16193 New test material. 16194 * tests/data/Makefile.am: Add the new test material to source distribution. 16195 * tests/test-diff-pkg.cc (in_out_specs): Run this test harness 16196 over the new tests material above. 16197 161982016-03-07 Dodji Seketeli <dodji@redhat.com> 16199 16200 Forgot to add test2-filtered-removed-fns-v{0,1}.o 16201 * test2-filtered-removed-fns-v{0,1}.o: Add these test input files. 16202 162032016-03-03 Dodji Seketeli <dodji@redhat.com> 16204 16205 Bug 19596 - Suppressed removed symbol changes still considered incompatible 16206 * src/abg-comparison.cc (corpus_diff::has_incompatible_changes): 16207 Consider the *net* number of removed function and variable 16208 symbols. Also, if all function sub-type changes have been 16209 suppressed, then no virtual offset change should be considered 16210 incompatible. 16211 * tests/data/test-abidiff-exit/test1-voffset-change-report1.txt 16212 * tests/data/test-abidiff-exit/test1-voffset-change.abignore 16213 * tests/data/test-abidiff-exit/test2-filtered-removed-fns-report0.txt 16214 * tests/data/test-abidiff-exit/test2-filtered-removed-fns-report1.txt 16215 * tests/data/test-abidiff-exit/test2-filtered-removed-fns-v0.c 16216 * tests/data/test-abidiff-exit/test2-filtered-removed-fns-v1.c 16217 * tests/data/test-abidiff-exit/test2-filtered-removed-fns.abignore 16218 * tests/data/Makefile.am: Add the new test material above to 16219 source distribution. 16220 * tests/test-abidiff-exit.cc (InOutSpec::in_suppr_path): New data 16221 member. 16222 (in_out_specs): Adjust. Add new test inputs. 16223 (main): Adjust. 16224 162252016-02-25 Dodji Seketeli <dodji@redhat.com> 16226 16227 Fixup virtual member functions with linkage and no underlying symbol 16228 * src/abg-dwarf-reader.cc (die_function_decl_map_type): New 16229 typedef. 16230 (read_context::die_function_with_no_symbol_map_): New data member. 16231 (read_context::die_function_decl_with_no_symbol_map): New 16232 accessor. 16233 (read_context::fixup_functions_with_no_symbols): New member 16234 function. 16235 (finish_member_function_reading): Take a read_context. Schedule 16236 virtual member functions with linkage and no underlying symbol to 16237 be fixed up after all the debug info is read. 16238 (build_function_decl): After a virtual member function_decl has 16239 been updated, if it has its underlying symbol and was scheduled 16240 for fixup, then de-schedule it. 16241 (build_class_type_and_add_to_ir, build_ir_node_from_die): Adjust 16242 call to finish_member_function_reading. 16243 (read_corpus_from_elf): Move the pure ELF (symbol and other mundane 16244 information) information reading ... 16245 (read_debug_info_into_corpus): ... here. Make it happen *before* 16246 actual reading of DWARF information. We need symbol information 16247 to be present and fully set before we start reading debug info. 16248 This is so that we can know when a virtual member function doesn't 16249 need to be fixed up. Also, perform the fixup after the debug 16250 information was read. 16251 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 16252 162532016-02-25 Dodji Seketeli <dodji@redhat.com> 16254 16255 Add --verbose to abidw 16256 * doc/manuals/abidw.rst: Update the manual for the new --verbose 16257 option. 16258 * tools/abidw.cc (options::do_log): New data member. 16259 (options::options): Initialize it. 16260 (display_usage): New string for --verbose. 16261 (parse_command_line): Parse the --verbose option. 16262 (main): Set the the logging option. 16263 162642016-02-25 Dodji Seketeli <dodji@redhat.com> 16265 16266 Update copyright information 16267 * tools/abidiff.cc: Update copyright info for 2016. 16268 * tools/abidw.cc: Likewise. 16269 162702016-02-24 Dodji Seketeli <dodji@redhat.com> 16271 16272 Make libabigail link with pthread 16273 * src/Makefile.am: Add -pthread to libabigail_la_LDFLAGS. 16274 * tools/Makefile.am: Do not use abinilint_LDFLAGS when it should 16275 be abinilint_LDADD. This one was fixed by Michi Henning. 16276 162772016-02-24 Dodji Seketeli <dodji@redhat.com> 16278 16279 Update mentions to the build dependencies in the doc 16280 * COMPILING: Mention elfutils, libtool, autoconf, automake and 16281 libtool. 16282 * doc/website/mainpage.txt: Mention automake and libtool. Fix a typo. 16283 162842016-02-24 Dodji Seketeli <dodji@redhat.com> 16285 16286 Bug 19706 - Core dump from abidiff with suppression 16287 * src/abg-comparison.cc 16288 (function_suppression::suppresses_function): Make sure a function 16289 has a symbol before (de)referencing it. 16290 162912016-02-24 Dodji Seketeli <dodji@redhat.com> 16292 16293 Some small speed optimizations 16294 * include/abg-ir.h (var_decl::get_naked_type): Declare new member function. 16295 * src/abg-ir.cc (var_decl::get_naked_type): Define it. 16296 (equals): For the var_decl overload, avoid copying symbol 16297 smart pointers. Likewise for variable type smart pointers. 16298 (hash_type_or_decl): Avoid accessing canonical type smart pointer. 16299 163002016-02-24 Dodji Seketeli <dodji@redhat.com> 16301 16302 Mist style cleanups 16303 * include/abg-ir.h: Add missing comments. Space cleanups. Use 16304 shorter typedefs rather than long template instantiation names. 16305 Use string rather than the longer std::string. 16306 * src/abg-ir.cc: Space cleanups. Add missing comments. User 16307 shorter typedefs. 16308 * src/abg-reader.cc: Likewise. 16309 * src/abg-writer.cc: Likewise. 16310 163112016-02-24 Dodji Seketeli <dodji@redhat.com> 16312 16313 Implement string interning for Libabigail 16314 * include/Makefile.am: Add the new abg-interned-str.h file to 16315 source distribution. 16316 * include/abg-corpus.h (corpus::corpus): Re-arrange the order of 16317 * src/abg-corpus.cc 16318 (corpus::exported_decls_builder::priv::get_id): Return 16319 interned_string rather than std::string. 16320 (corpus::corpus): Re-arrange the order of parameters: take an 16321 environment as first parameter. parameters: take an environment 16322 as first parameter. 16323 * include/abg-dwarf-reader.h (lookup_symbol_from_elf) 16324 (lookup_public_function_symbol_from_elf): Likewise. 16325 * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) 16326 (lookup_symbol_from_gnu_hash_tab) 16327 (lookup_symbol_from_elf_hash_tab, lookup_symbol_from_symtab) 16328 (lookup_symbol_from_elf, lookup_public_function_symbol_from_elf) 16329 (lookup_public_variable_symbol_from_elf, lookup_symbol_from_elf) 16330 (lookup_public_function_symbol_from_elf): Take an environment as 16331 first parameter and adjust. 16332 (build_translation_unit_and_add_to_ir) 16333 (build_namespace_decl_and_add_to_ir, build_type_decl) 16334 (build_enum_type, finish_member_function_reading) 16335 (build_class_type_and_add_to_ir, build_function_type) 16336 (read_debug_info_into_corpus, read_corpus_from_elf): Adjust. 16337 * include/abg-fwd.h: Include abg-interned-str.h 16338 (get_type_name, get_function_type_name, get_method_type_name): 16339 Return a interned_string, rather than a std::string. 16340 * include/abg-interned-str.h: New declarations for interned strings 16341 and their pool. 16342 * include/abg-ir.h (environment::intern): Declare new method. 16343 (elf_symbol::{g,s}et_environment): Likewise. 16344 (type_or_decl_base::type_or_decl_base): Make the default 16345 constructor private. 16346 ({translation, type_or_decl_base}::set_environment) 16347 (set_environment_for_artifact): Take a const environment*. 16348 (elf_symbol::elf_symbol) 16349 (elf_symbol::create) 16350 (type_or_decl_base::type_or_decl_base) 16351 (translation::translation, decl_base::decl_base) 16352 (scope_decl::scope_decl, type_base::type_base) 16353 (type_decl::type_decl, scope_type_decl::scope_type_decl) 16354 (namespace_decl::namespace_decl) 16355 (enum_type_decl::enumerator::enumerator) 16356 (function_type::function_type, method_type::method_type) 16357 (template_decl::template_decl, function_tdecl::function_tdecl) 16358 (class_tdecl::class_tdecl, class_decl::class_decl): Take an 16359 environment. 16360 (type_or_decl_base::operator=) 16361 (enum_type_decl::enumerator::get_environment): Declare new method. 16362 (decl_base::{peek_qualified_name, peek_temporary_qualified_name, 16363 get_qualified_name, get_name, get_qualified_parent_name, 16364 get_linkage_name}, qualified_type_def::get_qualified_name) 16365 (reference_type_def::get_qualified_name) 16366 (array_type_def::get_qualified_name) 16367 (enum_type_decl::enumerator::{get_name, get_qualified_name}) 16368 ({var,function}_decl::get_id) 16369 (function_decl::parameter::{get_type_name, get_name_id}): Return 16370 an interned_string, rather than a std::string. 16371 (decl_base::{set_qualified_name, set_temporary_qualified_name, 16372 get_qualified_name, set_linkage_name}) 16373 (qualified_type_def::get_qualified_name) 16374 (reference_type_def::get_qualified_name) 16375 (array_type_def::get_qualified_name) 16376 (function_decl::parameter::get_qualified_name): Take an 16377 interned_string, rather than a std::string. 16378 (class_decl::member_{class,function}_template::member_{class,function}_template): 16379 Adjust. 16380 * src/abg-ir.cc (environment_setter::env_): Make this be a pointer 16381 to const environment. 16382 (environment_setter::visit_begin): Adjust. 16383 (interned_string_pool::priv): Define new type. 16384 (interned_string_pool::*): Define the method declared in 16385 abg-interned-str. h. 16386 (operator==, operator!=, operator+): Define operator for interned_string and 16387 std::string 16388 (operator<<): Define for interned_string. 16389 (translation_unit::priv::env_): Make this be a pointer to const 16390 environment. 16391 (translation_unit::priv::priv): Take a pointer to const 16392 environment. 16393 (elf_symbol::priv::env_): New data member. 16394 (elf_symbol::priv::priv): Adjust. Make an overoad take an 16395 environment. 16396 (translation_unit::{g,s}et_environment): Adjust. 16397 (interned_string_bool_map_type): New typedef. 16398 (environment::priv::classes_being_compared_): Make this hastable 16399 of string be a hashtable of interned_string. 16400 (environment::priv::string_pool_): New data member. 16401 (environment::{get_void_type_decl, 16402 get_variadic_parameter_type_decl}): Adjust. 16403 (type_or_decl_base::priv::env_): Make this be a pointer to const 16404 environment. 16405 (type_or_decl::base::priv::priv): Adjust. 16406 (type_or_decl_base::set_environment) 16407 (set_environment_for_artifact): Take a pointer to const 16408 environment. 16409 (elf_symbol::{g,s}et_environment, environment::intern) 16410 (type_or_decl_base::operator=): Define new methods. 16411 (decl_base::priv::{name_, qualified_parent_name_, 16412 temporary_qualified_name_, qualified_name_, linkage_name_}): Make 16413 these data member be of tpe interned_string. 16414 (decl_base::priv::priv): Make this take an environment. Adjust. 16415 (decl_base::{peek_qualified_name, peek_temporary_qualified_name, 16416 get_linkage_name, get_qualified_parent_name, get_name, 16417 get_qualified_name}, get_type_name, get_function_type_name) 16418 (get_method_type_name, get_node_name) 16419 (qualified_type_def::get_qualified_name) 16420 (pointer_type_def::get_qualified_name) 16421 (array_type_def::get_qualified_name) 16422 (enum_type_decl::enumerator::get_qualified_name) 16423 (var_decl::get_id, function_decl::get_id) 16424 (function_decl::parameter::get_{name_id, type_name}): Return an 16425 interned_string. 16426 (decl_base::{set_qualified_name, set_temporary_qualified_name}) 16427 (qualified_type_def::get_qualified_name) 16428 (pointer_type_def::get_qualified_name) 16429 (reference_type_def::get_qualified_name) 16430 (array_type_def::get_qualified_name) 16431 (function_decl::parameter::get_qualified_name): Take an 16432 interned_string. 16433 (decl_base::{set_name, set_linkage_name}): Intern the std::string 16434 passed in parameter. 16435 (equals): In the overload for decl_base, adjust for a little speed 16436 optimization that is justified by profiling. 16437 (pointer_type_def::priv::{internal_qualified_name_, 16438 temp_internal_qualified_name_}): Make these data member be 16439 interned_string. 16440 (enum_type_decl::enumerator::priv::env_): New data member. 16441 (enum_type_decl::enumerator::priv::{name_, qualified_name}): Make 16442 these data member be of type interned_string. 16443 (enum_type_decl::enumerator::get_environment): New method. 16444 (enum_type_decl::enumerator::priv::priv) Adjust. 16445 (typedef_decl::operator==): Implement a little speed optimization. 16446 (var_decl::priv::nake_type_): New data member. 16447 (var_decl::priv::id_): Make this data member be of type 16448 interned_string. 16449 (equals): In the overload for var_decl, function_type, 16450 function_decl, adjust for the use of interned_string. 16451 (function_decl::priv::id_): Make this be of type interned_string. 16452 (scope_decl::{add_member_decl, insert_member_decl}) 16453 (lookup_function_type_in_translation_unit) 16454 (synthesize_type_from_translation_unit, lookup_node_in_scope) 16455 (lookup_type_in_scope, scope_decl::scope_decl) 16456 (qualified_type_def::qualified_type_def) 16457 (qualified_type_def::get_qualified_name) 16458 (pointer_type_def::pointer_type_def) 16459 (reference_type_def::reference_type_def) 16460 (array_type_def::array_type_def, array_type_def::append_subrange) 16461 (array_type_def::get_qualified_name) 16462 (enum_type_decl::enum_type_decl) 16463 (enum_type_decl::enumerator::get_qualified_name) 16464 (enum_type_decl::enumerator::set_name) 16465 (typedef_decl::typedef_decl, var_decl::var_decl) 16466 (function_type::function_type, method_type::method_type) 16467 (function_decl::function_decl) 16468 (function_decl::parameter::parameter) 16469 (class_decl::priv::comparison_started) 16470 (class_decl::add_base_specifier) 16471 (class_decl::base_spec::base_spec) 16472 (class_decl::method_decl::method_decl) 16473 (type_tparameter::type_tparameter) 16474 (non_type_tparameter::non_type_tparameter) 16475 (template_tparameter::template_tparameter) 16476 (type_composition::type_composition) 16477 (function_tdecl::function_tdecl, class_tdecl::class_tdecl) 16478 (qualified_name_setter::do_update): Adjust. 16479 (translation_unit::translation_unit, elf_symbol::elf_symbol) 16480 (elf_symbol::create, type_or_decl_base::type_or_decl_base) 16481 (decl_base::decl_base, type_base::type_base) 16482 (type_decl::type_decl, scope_type_decl::scope_type_decl) 16483 (namespace_decl::namespace_decl) 16484 (enum_type_decl::enumerator::enumerator, class_decl::class_decl) 16485 (template_decl::template_decl, function_tdecl::function_tdecl) 16486 (class_tdecl::class_tdecl): Take an environment. 16487 * src/abg-comparison.cc 16488 (function_suppression::suppresses_function): Adjust. 16489 * src/abg-reader.cc (read_translation_unit) 16490 (read_corpus_from_input, build_namespace_decl, build_elf_symbol) 16491 (build_function_parameter, build_function_decl, build_type_decl) 16492 (build_function_type, build_enum_type_decl, build_enum_type_decl) 16493 (build_class_decl, build_function_tdecl, build_class_tdecl) 16494 (read_corpus_from_native_xml): Likewise. 16495 * src/abg-writer.cc (id_manager::m_cur_id): Make this mutable. 16496 (id_manager::m_env): New data member. 16497 (id_manager::id_manager): Adjust. 16498 (id_manager::get_environment): New method. 16499 (id_manager::{get_id, get_id_with_prefix}): Return an 16500 interned_string. 16501 (type_ptr_map): Make this be a hash map of type_base* -> 16502 interned_string, rather a type_base* -> string. 16503 (write_context::m_env): New data member. 16504 (write_context::m_type_id_map): Make this data member be mutable. 16505 (write_context::m_emitted_type_id_map): Make this be a hash map of 16506 interned_string -> bool, rather than string -> bool. 16507 (write_context::write_context): Take an environment and adjust. 16508 (write_context::get_environment): New method. 16509 (write_context::get_id_manager): New const overload. 16510 (write_context::get_id_for_type): Return an interned_string; adjust. 16511 (write_context::{record_type_id_as_emitted, 16512 record_type_as_referenced}): Adjust. 16513 (write_context::type_id_is_emitted): Take an interned_string. 16514 (write_context::{type_is_emitted, 16515 record_decl_only_type_as_emitted}): Adjust. 16516 (write_translation_unit, write_corpus_to_native_xml, dump): 16517 Adjust. 16518 * tools/abisym.cc (main): Adjust. 16519 * tests/data/test-read-write/test22.xml: Adjust. 16520 * tests/data/test-read-write/test23.xml: Adjust. 16521 * tests/data/test-read-write/test26.xml: Adjust. 16522 165232016-02-24 Dodji Seketeli <dodji@redhat.com> 16524 16525 Update copyright notice 16526 * include/abg-corpus.h: Update copyright notice. 16527 * include/abg-dwarf-reader.h: Likewise. 16528 * src/abg-comparison.cc: Likewise. 16529 * src/abg-corpus.cc: Likewise. 16530 * src/abg-ir.cc: Likewise. 16531 165322016-02-23 Dodji Seketeli <dodji@redhat.com> 16533 16534 Fix crash when handling templates with empty patterns 16535 * src/abg-ir.cc (function_tdecl::traverse): Do not crash when 16536 traversing a template with empty pattern. 16537 (class_tdecl::operator==): Do not crash when comparing templates 16538 with empty patterns. 16539 165402016-02-23 Dodji Seketeli <dodji@redhat.com> 16541 16542 Add missing inequality operators for ABI artifacts 16543 * include/abg-ir.h ({translation_unit, elf_symbol::version, 16544 context_rel, decl_base, type_base, type_decl, 16545 array_type_def::subrange_type, enum_type_def::enumerator, 16546 dm_context_rel, template_parameter}::operator!=): Declare. 16547 (operator==): Make the overload form translation_unit_sptr, 16548 scope_decl_sptr, class_decl::base_spec_sptr, 16549 class_decl::member_function_template_sptr, 16550 class_decl::member_class_template_sptr take const references. 16551 (operator!=): Declare an an overload for the non-member operator 16552 != of translation_unit_sptr, elf_symbol_sptr, 16553 type_or_decl_base_sptr, type_base_sptr, scope_decl_sptr, 16554 type_decl, qualified_type_def_sptr, pointer_type_def_sptr, 16555 reference_type_def_sptr, enum_type_decl_sptr, class_decl_sptr, 16556 class_decl::base_spec_sptr, 16557 class_decl::member_function_template_sptr, 16558 class_decl::member_class_template_sptr. 16559 * src/abg-ir.cc ({translation_unit, elf_symbol::version, 16560 context_rel, decl_base, type_base, type_decl, 16561 array_type_def::subrange_type, enum_type_def::enumerator, 16562 dm_context_rel, template_parameter}::operator!=): Define. 16563 (operator==): Make the overload for translation_unit_sptr, 16564 scope_decl_sptr, class_decl::base_spec_sptr, 16565 class_decl::member_function_template_sptr, 16566 class_decl::member_class_template_sptr take const references. 16567 (operator!=): Define an an overload for the non-member operator != 16568 of translation_unit_sptr, elf_symbol_sptr, type_or_decl_base_sptr, 16569 type_base_sptr, scope_decl_sptr, type_decl, 16570 qualified_type_def_sptr, pointer_type_def_sptr, 16571 reference_type_def_sptr, enum_type_decl_sptr, class_decl_sptr, 16572 class_decl::base_spec_sptr, 16573 class_decl::member_function_template_sptr, 16574 class_decl::member_class_template_sptr. 16575 165762016-02-20 Dodji Seketeli <dodji@redhat.com> 16577 16578 Make the tree pass distcheck again. 16579 * tests/data/Makefile.am: Add file 16580 test-diff-suppr/test28-add-aliased-function-report-0.txt to source 16581 distribution. 16582 165832016-02-18 Dodji Seketeli <dodji@redhat.com> 16584 16585 Bug 19658 - Type canonicalization slow for the 2nd binary loaded 16586 * include/abg-corpus.h (corpus::{record_canonical_type, 16587 lookup_canonical_type}): Declare new member functions. 16588 * src/abg-corpus.cc (corpus::priv::canonical_types_): New data 16589 member. 16590 (corpus::{record_canonical_type, lookup_canonical_type}): Define 16591 new member functions. 16592 * src/abg-ir.cc (type_base::get_canonical_type_for): Cache the 16593 canonical type inside the corpus of the type being canonicalized. 16594 Then later when canonicalizing another type, lookup in the cache 16595 inside its corpus to see if there is a type with the same name. 16596 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 16597 Adjust. 16598 165992016-02-18 Dodji Seketeli <dodji@redhat.com> 16600 16601 Add --verbose option to abidiff 16602 * doc/manuals/abidiff.rst: Add documentation for new --verbose 16603 option. 16604 * include/abg-dwarf-reader.h (set_do_log): Declare new function. 16605 * src/abg-dwarf-reader.cc (read_context::do_log_): New data 16606 member. 16607 (read_context::read_context): Initialize the new data member. 16608 (read_context::do_log): Define accessors. 16609 (set_do_log): Define new function; 16610 (read_context::canonicalize_types_scheduled) 16611 (read_debug_info_into_corpus): Add logs. 16612 * tools/abidiff.cc (options::do_log): New data member. 16613 (options::options): Initialize it. 16614 (display_usage): Add an usage string for --verbose. 16615 (parse_command_line): Parse the new --verbose option. 16616 (main): Set the dwarf reader's context wrt presence of the 16617 --verbose option. 16618 166192016-02-18 Dodji Seketeli <dodji@redhat.com> 16620 16621 Fix indentation 16622 * tools/abipkgdiff.cc (parse_command_line): Fix a wrong indentation. 16623 166242016-02-17 Dodji Seketeli <dodji@redhat.com> 16625 16626 Bug 19638 - DWARF reader fails to link clone function to its declaration 16627 * include/abg-ir.h (decl_base::set_linkage_name): Make this member 16628 function virtual. 16629 (class_decl::string_mem_fn_ptr_map_type): Define new member type. 16630 (class_decl::find_member_function): Declare new member function. 16631 (copy_member_function): Declare new function. Declare it as 16632 friend of class_decl. 16633 (method_decl::set_linkage_name): Declare an overload for this 16634 virtual function. 16635 * src/abg-dwarf-reader.cc (build_function_decl): Allow updating of 16636 linkage_name even if the linkage_name was already defined. 16637 (build_ir_node_from_die): In the case DW_TAG_subprogram, make the 16638 lookup of scope of the DIE work even if it has both an abstract 16639 origin and a specification (DW_AT_abstract_origin and 16640 DW_AT_specification). 16641 * src/abg-ir.cc (maybe_adjust_canonical_type): Define new 16642 function. 16643 (canonicalize): Use it. 16644 (function_decl::get_id): Return the linkage name first, if it 16645 exist. 16646 (class_decl::priv::mem_fns_map_): New data member. 16647 (class_decl::find_member_function): Define new member function. 16648 (class_decl::method_decl::set_linkage_name): Likewise. 16649 (class_decl::add_member_function): Update the new data member 16650 class_decl::priv::mem_fns_map_. 16651 (copy_member_function): Define new static function. 16652 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 16653 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 16654 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 16655 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 16656 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 16657 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 16658 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 16659 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 16660 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 16661 166622016-02-17 Dodji Seketeli <dodji@redhat.com> 16663 16664 Add function lookup by linkage name to libabigail::corpus 16665 * include/abg-corpus.h (corpus::lookup_functions): Declare new 16666 member function. 16667 * src/abg-corpus.cc (class corpus::exported_decls_builder::priv): 16668 Make class corpus be a friend of this type. 16669 (corpus::exported_decls_builder::priv::add_fn_to_id_fns_map): Fix 16670 a thinko that was preventing the fn_id -> functions map from ever 16671 being filled. Fix this function to make it associate each aliases 16672 of a given function to the function, in the hash table. 16673 (corpus::lookup_functions): Define new member function. 16674 166752016-02-17 Dodji Seketeli <dodji@redhat.com> 16676 16677 Fix style cleanups 16678 * include/abg-ir.h (method_type::{method_type, set_class_type, 16679 get_type, set_type}): Use type_base_sptr and class_decl_sptr 16680 instead of the full non-typedefed name. 16681 (method_type):Do some cleanups in the definition of the 16682 convenience typedefs. 16683 * src/abg-ir.cc (method_type::{method_type, set_class_type, 16684 get_type, set_type}): Use type_base_sptr and class_decl_sptr 16685 instead of the full non-typedefed name. 16686 * src/abg-writer.cc (write_class_decl): Add a comment. 16687 166882016-02-13 Dodji Seketeli <dodji@redhat.com> 16689 16690 Bug 19619 - failing to suppress added aliased function reports for C++ 16691 * src/abg-comparison.cc 16692 (function_suppression::suppresses_function): Make the evaluation 16693 of the "name" and "name_regexp" consider the cases of languages in 16694 which the function name is the same as the symbol name and the 16695 case of languages in which it is not. In the former case, all 16696 symbol alias names must be matched. In the latter case, if "name" 16697 and "name_regexp" match the function name, the suppression 16698 specification is considered to match the report about the function 16699 change. Also, use the elf_symbol::is_main_symbol() predicate to 16700 test for the symbol being a main symbol, rather than using 16701 error-prone pointer equality. 16702 * tests/data/test-diff-suppr/test27-add-aliased-function-0.suppr: 16703 New test input. 16704 * tests/data/test-diff-suppr/test27-add-aliased-function-1.suppr: Likewise. 16705 * tests/data/test-diff-suppr/test27-add-aliased-function-2.suppr: Likewise. 16706 * tests/data/test-diff-suppr/test27-add-aliased-function-3.suppr: Likewise. 16707 * tests/data/test-diff-suppr/test27-add-aliased-function-4.suppr: Likewise. 16708 * tests/data/test-diff-suppr/test27-add-aliased-function-report-0.txt: Likewise. 16709 * tests/data/test-diff-suppr/test27-add-aliased-function-report-1.txt: Likewise. 16710 * tests/data/test-diff-suppr/test27-add-aliased-function-report-2.txt: Likewise. 16711 * tests/data/test-diff-suppr/test27-add-aliased-function-report-3.txt: Likewise. 16712 * tests/data/test-diff-suppr/test27-add-aliased-function-report-4.txt: Likewise. 16713 * tests/data/test-diff-suppr/test27-add-aliased-function-report-5.txt: Likewise. 16714 * tests/data/test-diff-suppr/test27-add-aliased-function-v0.cc: Likewise. 16715 * tests/data/test-diff-suppr/test27-add-aliased-function-v0.o: Likewise. 16716 * tests/data/test-diff-suppr/test27-add-aliased-function-v1.cc: Likewise. 16717 * tests/data/test-diff-suppr/test27-add-aliased-function-v1.o: Likewise. 16718 * tests/data/test-diff-suppr/test28-add-aliased-function-0.suppr: Likewise. 16719 * tests/data/test-diff-suppr/test28-add-aliased-function-1.suppr: Likewise. 16720 * tests/data/test-diff-suppr/test28-add-aliased-function-2.suppr: Likewise. 16721 * tests/data/test-diff-suppr/test28-add-aliased-function-3.suppr: Likewise. 16722 * tests/data/test-diff-suppr/test28-add-aliased-function-4.suppr: Likewise. 16723 * tests/data/test-diff-suppr/test28-add-aliased-function-5.suppr: Likewise. 16724 * tests/data/test-diff-suppr/test28-add-aliased-function-report-0.txt: Likewise. 16725 * tests/data/test-diff-suppr/test28-add-aliased-function-report-1.txt: Likewise. 16726 * tests/data/test-diff-suppr/test28-add-aliased-function-report-2.txt: Likewise. 16727 * tests/data/test-diff-suppr/test28-add-aliased-function-report-3.txt: Likewise. 16728 * tests/data/test-diff-suppr/test28-add-aliased-function-report-4.txt: Likewise. 16729 * tests/data/test-diff-suppr/test28-add-aliased-function-report-5.txt: Likewise. 16730 * tests/data/test-diff-suppr/test28-add-aliased-function-report-6.txt: Likewise. 16731 * tests/data/test-diff-suppr/test28-add-aliased-function-v0.c: Likewise. 16732 * tests/data/test-diff-suppr/test28-add-aliased-function-v0.o: Likewise. 16733 * tests/data/test-diff-suppr/test28-add-aliased-function-v1.c: Likewise. 16734 * tests/data/test-diff-suppr/test28-add-aliased-function-v1.o: Likewise. 16735 * tests/data/Makefile.am: Add the new test material above to the 16736 source distribution. 16737 * tests/test-diff-suppr.cc: Add the new test inputs above to this 16738 test harness. 16739 167402016-02-12 Dodji Seketeli <dodji@redhat.com> 16741 16742 Emit more informational messages on unrecognized options 16743 * tools/abicompat.cc (options::prog_name): New data member. 16744 (display_help, perform_compat_check_in_normal_mode) 16745 (perform_compat_check_in_weak_mode, main): Prefix error messages 16746 with the name of the program. 16747 * tools/abidw.cc (options::wrong_option): New data member. 16748 (display_help): Prefix error messages with the name of the 16749 program.n 16750 (parse_command_line): Record the name of the unrecognized option. 16751 (main): Tell the name of the unrecognized option. Prefix error 16752 messages with the name of the program. 16753 * tools/abilint.cc (optionqs::wrong_option): New data member 16754 (display_usage): Prefix error messages with the name of the 16755 program. 16756 (parse_command_line): Record the name of the unrecognized option. 16757 (main): Tell the name of the unrecognized option. Prefix error 16758 messages with the name of the program. 16759 * tools/abipkgdiff.cc (options::{wrong_option, prog_name}): New 16760 data members. 16761 (package::erase_extraction_directory, display_usage, extract_rpm) 16762 (extract_deb, extract_tar) 16763 (erase_created_temporary_directories_parent, extract_package) 16764 (compare, create_maps_of_package_content): Prefix error messages 16765 with the name of the program. 16766 (maybe_check_suppression_files): Adjust. 16767 (parse_command_line): Record the name of the unrecognized option, 16768 and the name of option which lacks an operand. 16769 (main): Give the name of the unrecognized option. Prefix error 16770 messages with the name of the program. 16771 167722016-02-12 Dodji Seketeli <dodji@redhat.com> 16773 16774 Prefix abidiff error message with the 'abidiff' program name 16775 * include/abg-tools-utils.h (emit_prefix): Declare new function. 16776 (check_file): Add a new parameter with a default value, so that 16777 existing code keeps compiling. 16778 * src/abg-tools-utils.cc (emit_prefix): Define new function. 16779 (check_file): Use the emit_prefix function and give it the program 16780 name passed as a new parameter. 16781 * tools/abidiff.cc (display_usage, main): Use the new emit_prefix 16782 to prefix error messages. 16783 167842016-02-11 Dodji Seketeli <dodji@redhat.com> 16785 16786 Bug 19606 - Need better error message for invalid options 16787 * tools/abidiff.cc (options::wrong_option): New data member. 16788 (parse_command_line): Record the name of the unknown option and of 16789 the option which value is missing. 16790 167912016-02-11 Dodji Seketeli <dodji@redhat.com> 16792 16793 Add a comment about libabigail needing elfutils 0.159 at least. 16794 * configure.ac: Add a comment saying that we require at least 16795 elfutils 0.159. 16796 167972016-02-11 Dodji Seketeli <dodji@redhat.com> 16798 16799 Talk about mandatory properties in suppress_* directives 16800 * doc/manuals/libabigail-concepts.rst: Talk about the mandatory 16801 properties for suppress_type, suppress_function and 16802 suppress_variable directives. 16803 168042016-02-11 Dodji Seketeli <dodji@redhat.com> 16805 16806 Make abipkgdiff check for the presence of suppression spec files 16807 * tools/abipkgdiff.cc (maybe_check_suppression_files): Define new 16808 static function. 16809 (main): Use it. 16810 168112016-02-11 Dodji Seketeli <dodji@redhat.com> 16812 16813 Make abipkgdiff return correct exit code on usage error 16814 * tools/abipkgdiff.cc (main): Return the correct error code on 16815 usage error. 16816 168172016-02-11 Dodji Seketeli <dodji@redhat.com> 16818 16819 Bug 19604 - abidiff --suppressions doesn't complain about invalid file name 16820 * tools/abidiff.cc (maybe_check_suppression_files): Define new 16821 static function. 16822 (main): Use it. 16823 168242016-02-10 Dodji Seketeli <dodji@redhat.com> 16825 16826 Use proper WIFEXITED and WEXITSTATUS macros to get exit code 16827 * tests/test-diff-dwarf-abixml.cc (main): Use WIFEXITED and 16828 WEXITSTATUS macros to get the return code of the abidiff program. 16829 * tests/test-diff-filter.cc (test_task::perform): Likewise. 16830 * tests/test-diff-pkg.cc (main): Likewise. 16831 * tests/test-diff-suppr.cc (main): Likewise. 16832 168332016-02-10 Dodji Seketeli <dodji@redhat.com> 16834 16835 Bug 19596 - Incorrect exit status for incompatible ABI change 16836 * include/abg-comparison.h (enum diff_category): Adjust the 16837 comment for enumerator VIRTUAL_MEMBER_CHANGE_CATEGORY; changes of 16838 this category are incompatible ABI changes. 16839 (corpus_diff::diff_stats::num_func_with_virtual_offset_changes): 16840 Declare new accessors. 16841 * src/abg-comparison.cc 16842 (corpus_diff::diff_stats::priv::num_func_with_virt_offset_changes): 16843 New data member. 16844 (corpus_diff::diff_stats::priv::priv): Initialize the new data 16845 member. 16846 (corpus_diff::diff_stats::num_func_with_virtual_offset_changes): 16847 Define new accessors. 16848 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Use the 16849 new accessor to set the number of functions with virtual offset 16850 changes onto the stats data structure. 16851 (corpus_diff::has_incompatible_changes): Take functions with 16852 virtual offset changes into account. 16853 * tests/test-abidiff-exit.cc: New test harness to test for exit 16854 codes of abidiff. 16855 * tests/Makefile.am: Build the new test harness runtestabidiff 16856 from the test-abidiff-exit.cc source file. 16857 * tests/data/test-abidiff-exit/test1-voffset-change-report0.txt: 16858 New reference test output. 16859 * tests/data/test-abidiff-exit/test1-voffset-change-v0.cc: New 16860 test input source code. 16861 * tests/data/test-abidiff-exit/test1-voffset-change-v0.o: New test input. 16862 * tests/data/test-abidiff-exit/test1-voffset-change-v1.cc: New 16863 test input source code. 16864 * tests/data/test-abidiff-exit/test1-voffset-change-v1.o: New test input. 16865 * tests/data/Makefile.am: tests/data/Makefile.am: Add the new test 16866 inputs above to the source distribution. 16867 168682016-02-04 Dodji Seketeli <dodji@redhat.com> 16869 16870 Fix synthesizing of reference type 16871 * src/abg-ir.cc (synthesize_type_from_translation_unit): Support 16872 synthesizing reference types. 16873 * tests/data/test-abicompat/libtest9-fn-changed-v0.so: Add new 16874 test input. 16875 * tests/data/test-abicompat/libtest9-fn-changed-v1.so: Likewise. 16876 * tests/data/test-abicompat/test9-fn-changed-app: Likewise. 16877 * tests/data/test-abicompat/test9-fn-changed-app.cc: : Likewise. 16878 * tests/data/test-abicompat/test9-fn-changed-report-0.txt: Likewise. 16879 * tests/data/test-abicompat/test9-fn-changed-v0.cc: Likewise. 16880 * tests/data/test-abicompat/test9-fn-changed-v0.h: Likewise. 16881 * tests/data/test-abicompat/test9-fn-changed-v1.cc: Likewise. 16882 * tests/data/test-abicompat/test9-fn-changed-v1.h: Likewise. 16883 * tests/data/Makefile.am: Add the new material to source 16884 distribution. 16885 * tests/test-abicompat.cc (in_out_specs): Add the new test inputs 16886 to the test harness. 16887 168882016-02-03 Dodji Seketeli <dodji@redhat.com> 16889 16890 Fix synthesizing of pointer type 16891 * include/abg-ir.h: Update copyright. 16892 * src/abg-ir.cc (synthesize_type_from_translation_unit): Support 16893 synthesizing pointer types. 16894 * tests/data/test-abicompat/libtest8-fn-changed-libapp-v0.so: New 16895 test input. 16896 * tests/data/test-abicompat/libtest8-fn-changed-libapp-v1.so: Likewise. 16897 * tests/data/test-abicompat/test8-fn-changed-app: Likewise. 16898 * tests/data/test-abicompat/test8-fn-changed-app.c: Likewise. 16899 * tests/data/test-abicompat/test8-fn-changed-libapp-v0.c: Likewise. 16900 * tests/data/test-abicompat/test8-fn-changed-libapp-v0.h: Likewise. 16901 * tests/data/test-abicompat/test8-fn-changed-libapp-v1.c: Likewise. 16902 * tests/data/test-abicompat/test8-fn-changed-libapp-v1.h: Likewise. 16903 * tests/data/test-abicompat/test8-fn-changed-report-0.txt: Likewise. 16904 * tests/data/Makefile.am: Add the new test input files to source 16905 distribution. 16906 * tests/test-abicompat.cc (in_out_specs): Add the new test inputs 16907 above to the test harness. 16908 169092016-01-26 Mark Wielaard <mjw@redhat.com> 16910 16911 Remove defined but not used functions pointed out by GCC6. 16912 * src/abg-ir.cc (convert_node_to_decl(decl_base_sptr)): Remove 16913 definition. 16914 (get_node_name(decl_base_sptr)): Likewise. 16915 169162016-01-26 Mark Wielaard <mjw@redhat.com> 16917 16918 Make make more silent. 16919 * Makefile.am (AM_MAKEFLAGS): Set --no-print-directory. 16920 169212016-01-26 Mark Wielaard <mjw@redhat.com> 16922 16923 Fix GCC6 -Wmisleading-indentation warnings. 16924 * src/abg-dwarf-reader.cc (find_import_unit_point_before_die): 16925 Properly indent code after if clause. 16926 * src/abg-ini.cc (write_property_value): Properly indent return 16927 statement after else clause. 16928 169292016-01-27 Dodji Seketeli <dodji@redhat.com> 16930 16931 Fix abicompat's handling of library types not used by the application 16932 * tools/abicompat.cc (perform_compat_check_in_weak_mode): If the 16933 application doesn't use a given type defined and exported by the 16934 library, then skip it. 16935 169362016-01-27 Dodji Seketeli <dodji@redhat.com> 16937 16938 Do not crash when looking up a type from global scope 16939 * src/abg-ir.cc (lookup_type_in_scope): Gently Handle empty access 16940 path. 16941 169422016-01-25 Dodji Seketeli <dodji@redhat.com> 16943 16944 Comparing aliases of the same symbol must be done by pointer 16945 * src/abg-ir.cc (elf_symbol::operator==): Fix thinko and 16946 indentation. What was I thinking ... 16947 (elf_symbol::add_alias) 16948 (compute_aliases_for_elf_symbol): Do not compare aliases using the 16949 equality operator, because it considers all aliases of a given 16950 symbol as equal. Rather, use elf_symbol::is_main_symbol() to test 16951 if an alias is the main symbol alias. 16952 * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): 16953 Likewise. 16954 * src/abg-corpus.cc 16955 (corpus::priv::build_unreferenced_symbols_tables): Likewise. 16956 * src/abg-writer.cc (write_elf_symbol_aliases): Likewise. 16957 169582016-01-21 Dodji Seketeli <dodji@redhat.com> 16959 16960 Bug 19204 - libabigail aborts on DWARF referencing non-existing DIE 16961 * src/abg-dwarf-reader.cc (get_parent_die): If we couldn't find 16962 the parent of a given DIE, return false, do not abort. Also, 16963 assert that if we don't find the parent of a DIE in the main debug 16964 info, we don't find it in the alternate debug info either (and 16965 vice versa). This is because I'd like to abort on cases where we 16966 look for a DIE in the wrong debug info; those cases are likely to 16967 be hint that the DWARF reader is doing something wrong which ought 16968 to be investigated and fixed. 16969 (get_scope_for_die): If we couldn't get the parent of the DIE, 16970 then return a nil scope. 16971 * tests/data/test-types-stability/pr19204-libtcmalloc.so.4.2.6-xlc: 16972 New test binary input. 16973 * tests/data/Makefile.am: Add the new binary test input to the 16974 source distribution. 16975 * tests/test-types-stability.cc (elf_paths): Account for the new 16976 binary input. 16977 169782016-01-20 Dodji Seketeli <dodji@redhat.com> 16979 16980 Pass parm of elf_symbol::add_alias by reference 16981 * include/abg-ir.h (elf_symbol::add_alias): Pass parameter by 16982 reference. 16983 * src/abg-ir.cc (elf_symbol::add_alias): Likewise. 16984 169852016-01-20 Dodji Seketeli <dodji@redhat.com> 16986 16987 Bug 19141 - Libabigail doesn't support common ELF symbols 16988 * include/abg-ir.h (elf_symbol::elf_symbol): Take a new flag to 16989 say if the symbol is common. 16990 (elf_symbol::{is_common_symbol, has_other_common_instances, 16991 get_next_common_instance, add_common_instance}): New member functions. 16992 * src/abg-ir.cc (elf_symbol::priv::{is_common_, 16993 next_common_instance_): New data members. 16994 (elf_symbol::priv::priv): Adjust. 16995 (elf_symbol::{elf_symbol, create}): Take a new flag to say if the 16996 symbol is common. 16997 (textually_equals): Adjust to account for symbol common-ness. 16998 (elf_symbol::{is_common_symbol, has_other_common_instances, 16999 get_next_common_instance, add_common_instance}): Define new member 17000 functions. 17001 (elf_symbol::add_alias): Drive-by fix; compare symbols using 17002 pointer value. Value comparison is not necessary. 17003 * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) 17004 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) 17005 (read_context::lookup_elf_symbol_from_index): Adjust the creation 17006 of the symbol to account for common-ness. 17007 (read_context::load_symbol_maps): Recognize instances of a given 17008 common symbol and represent them as such. Do not mistake this 17009 with symbol aliases. 17010 * src/abg-reader.cc (build_elf_symbol): Adjust the creation of the 17011 symbol to account for common-ness. 17012 * src/abg-writer.cc (write_elf_symbol): Adjust symbol 17013 serialization to account common-ness. 17014 * tests/data/test-types-stability/pr19141-get5d.o: Add new test 17015 binary input. 17016 * tests/data/test-types-stability/pr19142-topo.o: Likewise. 17017 * tests/data/Makefile.am: Add the new test inputs to source distribution. 17018 * tests/test-types-stability.cc (elf_paths): The the new test 17019 inputs into account. 17020 170212016-01-13 Dodji Seketeli <dodji@redhat.com> 17022 17023 Bug 19434 - invalid character in attribute value 17024 * include/abg-tools-utils.h (string_is_ascii_identifier): Declare 17025 new function. 17026 * src/abg-tools-utils.cc (string_is_ascii_identifier): Define new function. 17027 * src/abg-dwarf-reader.cc (build_function_type): Discard parameter 17028 name if it's made of non-identifier ascii characters. 17029 * tests/data/test-types-stability/pr19434-elf0: New test binary input file. 17030 * tests/data/Makefile.am: Add the new test input to source distribution. 17031 * tests/test-types-stability.cc: Test the new test input into account. 17032 170332016-01-18 Dodji Seketeli <dodji@redhat.com> 17034 17035 Sort the tests run in tests/ by running the slowest ones first 17036 * tests/Makefile.am: Sort the tests by running the slowest ones 17037 first. 17038 170392016-01-15 Dodji Seketeli <dodji@redhat.com> 17040 17041 Use worker threads pattern to speed up some tests 17042 * include/Makefile.am: Add the new abg-workers.h to source 17043 distribution. 17044 * include/abg-workers.h: New file. 17045 * src/Makefile.am: Add the new abg-worker.cc to source 17046 distribution. 17047 * src/abg-workers.cc: New file. 17048 * tests/test-utils.cc: Update copyright. Make get_src_dir() and 17049 get_build_dir() return a const char*, as opposed to returning a 17050 string. Make that const char reside in thread local storage, so 17051 that two concurrent threads can safely call these functions in 17052 parallel, without any race. 17053 * tests/test-utils.h: Make get_src_dir() and get_build_dir() 17054 return a const char*, as opposed to returning a string. 17055 * tests/test-abicompat.cc: Update copyright. Adjust for 17056 get_src_dir() and get_build_dir() change. 17057 * tests/test-abidiff.cc: Likewise. 17058 * tests/test-alt-dwarf-file.cc: Likewise. 17059 * tests/test-core-diff.cc: Likewise. 17060 * tests/test-diff-dwarf-abixml.cc: Likewise. 17061 * tests/test-diff-dwarf.cc: Likewise. 17062 * tests/test-diff-pkg.cc: Likewise. 17063 * tests/test-diff-suppr.cc: Likewise. 17064 * tests/test-lookup-syms.cc: Likewise. 17065 * tests/test-read-dwarf.cc: Likewise. 17066 * tests/test-read-write.cc: Likewise. 17067 * tests/test-types-stability.cc: Likewise. Use the new task queue 17068 type to run these tests in parallel. 17069 * tests/test-diff-filter.cc: Likewise. 17070 170712016-01-18 Ondrej Oprala <ooprala@redhat.com> 17072 17073 Escape the value of the filepath attribute. 17074 * src/abg-writer.cc (write_location): Sanitize the filepath with 17075 xml::escape_xml_string(). 17076 (write_translation_unit): Likewise. 17077 (write_corpus_to_native_xml): Likewise. 17078 * tests/data/test-types-stability/pr19433-custom0: Add a new test file. 17079 * tests/test-types-stability.cc: Add the test file to the test harness. 17080 * tests/data/Makefile.am: Add the new test file to the list. 17081 170822016-01-09 Dodji Seketeli <dodji@redhat.com> 17083 17084 Make enum values take 64 bits on all platforms 17085 * include/abg-ir.h: Include stdint.h for int64_t. 17086 (enumerator::enumerator): Take an int64_t value for the value of 17087 the enumerator. 17088 (enumerator::{s,g}et_value): Take/return an int64_t value. 17089 * src/abg-ir.cc (enum_type_decl::enumerator::priv): Store the 17090 value in an int64_t. 17091 (enumerator::priv::priv): Take a int64_t for the value. 17092 (enum_type_decl::enumerator::enumerator): Likewise. 17093 (enum_type_decl::enumerator::{s,g}et_value): Take/returnan int64_t 17094 value. 17095 * src/abg-dwarf-reader.cc (die_unsigned_constant_attribute): Take 17096 an uint64_t value. 17097 (die_signed_constant_attribute): Take an int64_t value. 17098 (die_location, die_size_in_bits, die_access_specifier) 17099 (die_virtuality, die_is_virtual, die_is_declared_inline) 17100 (build_translation_unit_and_add_to_ir, build_type_decl) 17101 (build_enum_type, build_pointer_type_def, build_array_type): 17102 Adjust. 17103 * src/abg-reader.cc (build_enum_type_decl): Adjust. 17104 * src/abg-writer.cc (write_enum_type_decl): Do not cast the result 17105 of enumerator::get_value() anymore, it's value is now a int64_t. 17106 171072016-01-08 Dodji Seketeli <dodji@redhat.com> 17108 17109 Include missing <algorithm> to abg-dwarf-reader.cc 17110 * src/abg-dwarf-reader.cc: Add missing <algorithm> include file. 17111 171122016-01-08 Dodji Seketeli <dodji@redhat.com> 17113 17114 Bug 19138 - Failure to relate variables address from DWARF and ELF 17115 * include/abg-dwarf-reader.h (elf_type::ELF_TYPE_RELOCATABLE): New 17116 enumerator. 17117 * src/abg-dwarf-reader.cc (find_section): Factorize this from ... 17118 (find_text_section, find_bss_section): ... these. 17119 (find_rodata_section, find_data_section, find_data1_section): 17120 Define new static functions. 17121 (elf_file_type): Move this static function definition up. 17122 (read_context::{get_elf_file_type, address_is_in_section, 17123 get_data_section_for_variable_address}): New member functions. 17124 (read_context::maybe_adjust_fn_sym_address): Adjust comment. 17125 Adjust to use the new 17126 read_context::get_data_section_for_variable_address(). 17127 * tests/data/test-types-stability/pr19138-elf0: New test input 17128 binary. 17129 * tests/data/Makefile.am: Add the new test input binary to the 17130 test suite. 17131 * tests/test-types-stability.cc (elf_paths): Take it into account. 17132 171332016-01-08 Dodji Seketeli <dodji@redhat.com> 17134 17135 Bump version revision to 1.0.rc3 17136 * configure.ac: Change version_revision to rc3 17137 171382016-01-08 Dodji Seketeli <dodji@redhat.com> 17139 17140 Add a release announcement text pattern 17141 * release-text-template.txt: New file. 17142 171432016-01-08 Dodji Seketeli <dodji@redhat.com> 17144 17145 Upate build instructions on the website 17146 * doc/website/mainpage.txt: Add instruction about how to build 17147 tarballs. 17148 171492016-01-07 Dodji Seketeli <dodji@redhat.com> 17150 17151 Update website link for 1.0.rc2 17152 * doc/website/mainpage.txt: Update tarball link for 1.0.rc2 17153 171542016-01-07 Dodji Seketeli <dodji@redhat.com> 17155 17156 Update ChangeLog before 1.0.rc2 17157 * ChangeLog: Update with make update-changelog 17158 171592016-01-07 Dodji Seketeli <dodji@redhat.com> 17160 17161 Update NEWS for 1.0.rc2 17162 * NEWS: Update. 17163 171642016-01-07 Dodji Seketeli <dodji@redhat.com> 17165 17166 Fix tests/data/Makefile.am glitch 17167 * tests/data/Makefile.am: Fix a faulty file path. 17168 171692016-01-07 Dodji Seketeli <dodji@redhat.com> 17170 17171 Lexicographically sort added/removed base classes in change report 17172 * src/abg-comparison.cc (sort_string_base_diff_sptr_map): Define 17173 new static function. 17174 (struct base_spec_comp): Define new type. 17175 (class_diff::priv::sorted_{deleted,inserted}_bases_): New data 17176 members. 17177 (class_diff::ensure_lookup_tables_populated): Sort the deleted and 17178 inserted base classes. 17179 (class_diff::report): Use the sorted set of deleted/inserted base 17180 classes in the report. 17181 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 17182 171832016-01-06 Dodji Seketeli <dodji@redhat.com> 17184 17185 Fix regression on the support for alternate debug info files 17186 * src/abg-dwarf-reader.cc 17187 (imported_unit_point::imported_unit_from_alt_di): New data member. 17188 (imported_unit_point::imported_unit_point): Adjust. 17189 (read_context::alt_tu_die_imported_unit_points_map_): New data 17190 member. 17191 (read_context::alt_tu_die_imported_unit_points_map): New accessor. 17192 (die_die_attribute): Remove the overload which doesn't say if the 17193 resulting DIE comes from alternate debug info. 17194 (build_die_parent_relations_under): Take a new flag which says if 17195 we are building the relations about DIEs in the alternate debug 17196 info section or not. Use that flag to know if the imported unit 17197 trace we are building is for an alternate debug info file or not. 17198 (build_die_parent_maps): Build two different imported unit point 17199 trace vectors: one for the main debug info file, and another one 17200 for the alternate debug info file. 17201 (find_import_unit_point_between_dies): Take a flag that says if 17202 the beginning of the search is a DIE in the alternate debug info 17203 file or not. Use it to know if we should use the import point 17204 trace vectors from alternate debug info or from the main debug 17205 info file. When the import point trace vector is empty, return 17206 immediatly. 17207 (get_parent_die): If the parent DIE is a DW_TAG_partial_unit which 17208 hasn't been imported into this TU, then assume the logical parent 17209 is the DIE for the current translation unit. 17210 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: 17211 Reference test output. 17212 * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64.rpm: New 17213 input test rpm. 17214 * tests/data/test-diff-pkg/tbb-4.3-3.20141204.fc23.x86_64.rpm: 17215 Likewise. 17216 * tests/data/test-diff-pkg/tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm: 17217 Likewise. 17218 * tests/data/test-diff-pkg/tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm: 17219 Likewise. 17220 * tests/data/Makefile.am: Add the new test materials to the source 17221 distribution. 17222 * tests/test-diff-pkg.cc (int_out_specs): Add the new rpms to the 17223 list of rpms to test against. 17224 172252016-01-06 Dodji Seketeli <dodji@redhat.com> 17226 17227 Bump revision number to 1.0.rc2 17228 * configure.ac: Bump revision number to 1.0.rc2 17229 172302016-01-05 Dodji Seketeli <dodji@redhat.com> 17231 17232 Update link to the 1.0.rc1 tarball 17233 * doc/website/mainpage.txt: Update the "Getting source code" 17234 section. 17235 172362016-01-05 Dodji Seketeli <dodji@redhat.com> 17237 17238 Update ChangeLog before 1.0.rc1 17239 * ChangeLog: Update automatically with make update-changelog 17240 172412016-01-05 Dodji Seketeli <dodji@redhat.com> 17242 17243 Fix abidw -v 17244 * tools/abidw.cc (parse_command_line): Simplify logic. 17245 (main): Fix logic. 17246 172472016-01-05 Dodji Seketeli <dodji@redhat.com> 17248 17249 Add a NEWS file 17250 * NEWS: New file. 17251 * Makefile.am: Add NEWS file to source distribution. 17252 172532016-01-04 Dodji Seketeli <dodji@redhat.com> 17254 17255 Bug 19355 - Libabigail slow on r300_dri.so 17256 * src/abg-dwarf-reader.cc (struct imported_unit_point): Define new 17257 type. 17258 (operator<(const imported_unit_point&, const 17259 imported_unit_point&)): Define less-than operator for new 17260 imported_unit_point& type. 17261 (imported_unit_points_type, tu_die_imported_unit_points_map_type): 17262 New typedefs. 17263 (find_lower_bound_in_imported_unit_points): Define new static function. 17264 (read_context::tu_die_imported_unit_points_map_): New data member. 17265 (read_context::tu_die_imported_unit_points_map): New getter. 17266 (die_die_attribute): Define new overload. 17267 (build_die_parent_relations_under): Take imported_unit_points_type 17268 output parameter and populate it along the way. Remove the 17269 overload that takes a read_context as a parameter. 17270 (build_primary_die_parent_relations_under) 17271 (build_alternate_die_parent_relations_under): Remove. 17272 (build_die_parent_maps): Pass an instance of 17273 imported_unit_points_type to build_die_parent_relations_under. 17274 (find_import_unit_point_between_dies): Rename one overload of 17275 find_last_import_unit_point_before_die into this. Adjust to make 17276 it find the import point between two offsets. 17277 (find_import_unit_point_before_die): Rename the other overload of 17278 find_last_import_unit_point_before_die into this. Adjust to use 17279 find_import_unit_point_between_dies. 17280 (get_parent_die): Adjust to use find_import_unit_point_before_die. 17281 172822016-01-04 Dodji Seketeli <dodji@redhat.com> 17283 17284 Support two different variables having the same underlying symbol 17285 * src/abg-ir.cc (var_decl::get_id()): Include the name of the 17286 variable in the ID. 17287 172882016-01-04 Dodji Seketeli <dodji@redhat.com> 17289 17290 Avoid adding the same base class twice 17291 * src/abg-dwarf-reader.cc: 17292 * src/abg-reader.cc: 17293 172942016-01-04 Dodji Seketeli <dodji@redhat.com> 17295 17296 Speed up class_decl::find_base_class 17297 * src/abg-ir.cc (class_decl::priv::bases_map_): New data member. 17298 (class_decl::add_base_specifier): Add the new base specifier to 17299 the new class_decl::priv::bases_map_ data member. 17300 (class_decl::find_base_class): Use the new 17301 class_decl::priv::bases_map_ data member to speed up finding the 17302 base class. 17303 173042016-01-04 Dodji Seketeli <dodji@redhat.com> 17305 17306 Make class_decl::base_spec class follow the pimpl pattern 17307 * include/abg-ir.h (class_decl::base_spec::priv): Declare new 17308 private data type. 17309 (class_decl::base_spec::priv_): Declare new pimpl data member. 17310 (class_decl::base_spec::{base_class_, offset_in_bits_, 17311 is_virtual_}): Remove. 17312 (class_decl::base_spec::{get_base_class, get_is_virtual, 17313 get_offset_in_bits}): Make these member functions out of line. 17314 * src/abg-ir.cc (struct class_decl::base_spec::priv): New type. 17315 (class_decl::base_spec::{get_base_class, get_is_virtual, 17316 get_offset_in_bits}): Define these functions here. 17317 (class_decl::base_spec::base_spec): Adjust because now there is 17318 only one pimpl data member to initialize. 17319 173202015-11-16 Ondrej Oprala <ooprala@redhat.com> 17321 17322 Add the option of printing the file, line and column information about a type being reported. 17323 * bash-completion/abicompat: Complete the new "--no-show-locs" option. 17324 * bash-completion/abidiff: Likewise. 17325 * bash-completion/abidw: Likewise. 17326 * bash-completion/abipkgdiff: Likewise. 17327 * doc/manuals/abicompat.rst: Mention the new "--no-show-locs" option. 17328 * doc/manuals/abidiff.rst: Likewise. 17329 * doc/manuals/abidw.rst: Likewise. 17330 * doc/manuals/abipkgdiff.rst: Likewise. 17331 * include/abg-comparison.h (show_locs): Add declarations. 17332 * src/abg-comparison.cc: (diff_context::priv): Add a new switch 17333 called "show_locs_" and set its default value to false. 17334 (report_loc_info): New function. Outputting the extra information 17335 is conditionalized based on the associated diff contexts settings. 17336 (show_locs): define a getter/setter for 17337 diff_context::priv::show_locs_. 17338 ({distinct,pointer,reference,qualified_type,enum,class,scope,fn_parm, 17339 typedef,corpus}_diff::report): Call report_loc_info when 17340 appropriate. 17341 (maybe_report_diff_for_member): Likewise. 17342 (represent): Accept a const reference to a diff_context_sptr as a first 17343 argument and call report_loc_info on its second argument. 17344 * src/abg-dwarf-reader.cc: 17345 * tests/data/Makefile.am: Add the new test reference files. 17346 * tests/data/test-abicompat/test0-fn-changed-report-2.txt: New test 17347 reference output. 17348 * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. 17349 * tests/data/test-abicompat/test6-var-changed-report-1.txt: Likewise. 17350 * tests/data/test-abicompat/test7-fn-changed-report-2.txt: Likewise. 17351 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: 17352 Likewise. 17353 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: 17354 Likewise. 17355 * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. 17356 * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. 17357 * tests/test-abidiff.cc: Explicitly create a diff context and turn off 17358 location emitting. 17359 * tests/test-diff-dwarf.cc: Likewise. 17360 * tests/test-abicompat.cc: Add --no-show-locs to all existing test 17361 arguments. Run a few of the existing tests again, but without this 17362 option. 17363 * tests/test-diff-filter.cc: Likewise. 17364 * tests/test-diff-pkg.cc: Likewise. 17365 * tests/test-diff-suppr.cc: Likewise. 17366 * tools/abicompat.cc: Handle the new "--no-show-locs" option. 17367 * tools/abidiff.cc: Likewise. 17368 * tools/abidw.cc: Likewise. 17369 * tools/abipkgdiff.cc: Likewise. 17370 173712015-11-16 Ondrej Oprala <ooprala@redhat.com> 17372 17373 Fix a function doc 17374 * src/abg-ir.cc: (location_manager::expand_location): Fix a factual 17375 error in the function documentation. 17376 173772015-12-11 Dodji Seketeli <dodji@redhat.com> 17378 17379 [PERF] Speedup comparing declaration-only class_decls 17380 * src/abg-ir.cc (equals): In the overload for class_decl, avoid 17381 calling class_decl::get_is_declaration_only() several times. 17382 Avoid copying the qualified name of the class_decl. Also, use the 17383 == operator to compare strings, rather than the != one. 17384 173852015-12-11 Dodji Seketeli <dodji@redhat.com> 17386 17387 [PERF] Access naked pointers for canonical types and function types 17388 * include/abg-ir.h (type_base::get_naked_canonical_type): Declare 17389 new accessor. 17390 (function_decl::get_naked_canonical_type): Likewise. 17391 (function_decl::set_type): Pass a reference to the shared_ptr. 17392 * src/abg-ir.cc (type_base::priv::naked_canonical_type): New data 17393 member. 17394 (type_base::priv::priv): Initialize it. 17395 (canonicalize): Set the naked canonicalize type when we set its 17396 shared pointer. 17397 (type_base::get_naked_canonical_type): Define new accessor. 17398 ({pointer_type_def,reference_type_def,function_type,class_decl}::operator==): 17399 Use naked canonical pointers rather than the slower shared_ptr to 17400 canonical pointers. 17401 (function_decl::priv::naked_type_): New data member. 17402 (function_decl::priv::priv): Initialize it. 17403 (function_decl::get_naked_type): Define new accessor. 17404 (function_decl::set_type): Pass a reference to the shared_ptr . 17405 (equals): In the overload for function_decl, use the faster naked 17406 pointers to the type of the function. 17407 174082015-12-11 Dodji Seketeli <dodji@redhat.com> 17409 17410 [PERF] Turn some pimpl pointers into naked pointers 17411 * include/abg-ir.h ({decl_base, type_base, function_decl}::priv_) 17412 Make this a naked pointer to priv, rather than a shared_ptr<priv>. 17413 * src/abg-ir.cc (decl_base::~decl_base): Destroy the private data 17414 pointer, aka pimpl pointer. 17415 (type_base::~type_base): Likewise. 17416 (function_decl::~function_decl): Likewise. 17417 (class_decl::~class_decl): Likewise. 17418 174192015-12-11 Dodji Seketeli <dodji@redhat.com> 17420 17421 [PERF] Pass a bunch of perf-sensitive smart pointers by reference 17422 * include/abg-fwd.h (lookup_type_in_corpus, lookup_type_in_scope) 17423 (lookup_var_decl_in_scope): Pass the decls smart pointers by 17424 reference. 17425 * src/abg-ir.cc (lookup_type_in_corpus, lookup_type_in_scope) 17426 (lookup_var_decl_in_scope): Pass the decls smart pointers by 17427 reference, for performance reasons. 17428 174292015-12-10 Dodji Seketeli <dodji@redhat.com> 17430 17431 Bug 19126 - abidw segv on a dwz compressed version of r300_dri.so 17432 * include/abg-ir.h (class location_manager): Forward declare it 17433 before class location. 17434 (location::loc_manager_): New data member. 17435 (location::location): Take the location manager in one overload 17436 and initialize the new loc_managers_ in all the overloads. 17437 (location::get_location_manager): New getter. 17438 (location::expand): New member function. 17439 (location::*): Add API doc to all entry points. 17440 (location_manager::expand_location): Take a const location. 17441 (type_or_decl_base::set_corpus): Remove. 17442 (type_or_decl_base::{get,set}_translation): New accessors. 17443 (decl_base::{decl_base,get_location}): Take or return a reference 17444 on location. 17445 (scope_decl::scope_decl): Likewise. 17446 (type_decl::type_decl): Likewise. 17447 (namespace_decl::namespace_decl): Likewise. 17448 (qualified_type_def::qualified_type_def): Likewise. 17449 (pointer_type_def::pointer_type_def): Likewise. 17450 (reference_type_def::reference_type_def): Likewise. 17451 (array_type_def::subrange_type::{subrange_type, 17452 get_location}): Likewise. 17453 (enum_type_decl::enum_type_decl): Likewise. 17454 (typedef_decl::typedef_decl): Likewise. 17455 (var_decl::var_decl): Likewise. 17456 (function_decl::function_decl): Likewise. 17457 (function_decl::parameter::parameter): Likewise. 17458 (template_decl::template_decl): Likewise. 17459 (type_tparameter::type_tparameter): Likewise. 17460 (non_type_tparameter::non_type_tparameter): Likewise. 17461 (function_tdecl::function_tdecl): Likewise. 17462 (class_tdecl::class_tdecl): Likewise. 17463 (class_decl::class_decl): Likewise. 17464 (class_decl::method_decl::method_decl): Likewise. 17465 * src/abg-ir.cc (location::expand_location): Define new member 17466 function. 17467 (type_or_decl_base::priv::corpus_): Remove. 17468 (type_or_decl_base::priv::translation_unit_): New data member. 17469 (type_or_decl_base::priv::priv): Adjust. 17470 (type_or_decl_base::set_corpus): Remove. 17471 (type_or_decl_base::get_corpus): Adjust. 17472 (type_or_decl_base::{get,set}_translation_unit): New member 17473 functions. 17474 (decl_base::priv::priv): Take a reference to location. 17475 (decl_base::decl_base): Likewise. 17476 (decl_base::get_location): Return a reference to location. 17477 (location_manager::create_new_location): Adjust. 17478 (location_manager::expand_location): Take a reference to location. 17479 (translation_unit::get_global_scope()): Adjust. 17480 (translation_unit::bind_function_type_life_time): Likewise. 17481 (scope_decl::{add,insert}_member_decl): Adjust. 17482 (get_translation_unit): Likewise. 17483 (type_decl::type_decl): Take a reference to location. 17484 (namespace_decl::namespace_decl): Likewise. 17485 (qualified_type_def::qualified_type_def): Likewise. 17486 (pointer_type_def::pointer_type_def): Likewise. 17487 (reference_type_def::reference_type_def): Likewise. 17488 (array_type_def::subrange_type::priv::priv): Likewise. 17489 (array_type_def::subrange_type::{subrange_type, 17490 get_location}): Likewise. 17491 (enum_type_decl::enum_type_decl): Likewise. 17492 (typedef_decl::typedef_decl): Likewise. 17493 (var_decl::var_decl): Likewise. 17494 (function_decl::function_decl): Likewise. 17495 (function_decl::parameter::parameter): Likewise. 17496 (template_decl::template_decl): Likewise. 17497 (type_tparameter::type_tparameter): Likewise. 17498 (non_type_tparameter::non_type_tparameter): Likewise. 17499 (function_tdecl::function_tdecl): Likewise. 17500 (class_tdecl::class_tdecl): Likewise. 17501 (class_decl::class_decl): Likewise. 17502 (class_decl::method_decl::method_decl): Likewise. 17503 * src/abg-writer.cc (write_location): Take a reference to 17504 location and adjust. 17505 (write_array_type_def, write_function_decl, dump_decl_location): 17506 Adjust. 17507 175082015-12-08 Dodji Seketeli <dodji@redhat.com> 17509 17510 Fix some white space nits 17511 * src/abg-comparison.cc (class_diff::report): Remove a useless 17512 horizontal white space. 17513 * src/abg-ir.cc (operator==): Add a vertical space. 17514 175152015-12-08 Dodji Seketeli <dodji@redhat.com> 17516 17517 Filter out harmless diagnostics glitches due to some ODR violation 17518 * src/abg-comp-filter.cc 17519 (class_diff_has_harmless_odr_violation_change): New static 17520 function. 17521 (harmless_filter::visit): Call it. 17522 175232015-12-08 Dodji Seketeli <dodji@redhat.com> 17524 17525 Fix internal name for pointers, typedefs and arrays 17526 * include/abg-ir.h (pointer_type_def::priv_): New data structure. 17527 The type is now pimpled. 17528 (typedef_decl::priv_): Likewise. 17529 * src/abg-ir.cc (struct pointer_type_def::priv): New struct. 17530 (pointer_type_def::pointer_type_def): Adjust. 17531 (pointer_type_def::get_pointed_to_type): Likewise. 17532 (pointer_type_def::get_qualified_name): Store temporary/internal 17533 names into different caches. 17534 (array_type_def::priv::{temp_internal_qualified_name_, 17535 internal_qualified_name_}): New data members. 17536 (get_type_representation): In the overload for array_type_def, 17537 take requests for internal names into account. 17538 (array_type_def::get_qualified_name): Take requests for internal 17539 names into account. Store temporary/internal names into different 17540 caches. 17541 (typedef_decl::priv): New struct. 17542 (typedef_decl::typedef_decl): Adjust. 17543 (typedef_decl::get_underlying_type): Likewise. 17544 175452015-12-08 Dodji Seketeli <dodji@redhat.com> 17546 17547 Avoid try/catch code paths when that is possible 17548 * src/abg-ir.cc (is_type, equals): Do not use try/catch based 17549 dynamic_cast. 17550 175512015-12-08 Dodji Seketeli <dodji@redhat.com> 17552 17553 Fix comparison in qualified_type_diff::has_changes 17554 * src/abg-comparison.cc (qualified_type_diff::has_changes): Make 17555 this stupid and simple, now that we have (fast) canonical type 17556 based comparison. 17557 * include/abg-ir.h (qualified_type_diff::operator==): Add an 17558 overload for qualified_type_diff here. 17559 (operator==): Likewise. 17560 * src/abg-ir.cc (qualified_type_diff::operator==): Define it. 17561 (operator==): Likewise. 17562 175632015-12-06 Dodji Seketeli <dodji@redhat.com> 17564 17565 Bug 19336 - Better handle redundantly qualified reference types 17566 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Do not nuke 17567 the qualified type. Rather, just turn the redundant const 17568 qualifier into a no-op one. 17569 * src/abg-comparison.cc (compute_diff_for_types): Look through 17570 no-op qualified types. 17571 * include/abg-ir.h 17572 (decl_base::{peek,set}_temporary_qualified_name): Declare new 17573 accessors. 17574 * src/abg-ir.cc (decl_base::priv::temporary_qualified_name_): New 17575 data member. 17576 (decl_base::{peek,set}_temporary_qualified_name): Define new 17577 accessors. 17578 (qualified_type_def::priv::{temporary_internal_name_, 17579 internal_name}): New data members. 17580 (qualified_type_def::build_name): For a no-op qualified type, the 17581 internal name (which contains the 'none' qualifier) is different 17582 from the non-internal name. 17583 (qualified_type_def::get_qualified_name): Handle temporary names 17584 and non-temporary names in two different caches. Also handle 17585 internal and non-internal names in two different caches. This 17586 makes four different caches. 17587 (qualified_name_setter::do_update): Do not touch the non-internal, 17588 non-temporary qualified name cache if the qualified parent name is 17589 empty. 17590 * tools/abidw.cc (main): change --check-alternate-debug-info to 17591 make it *not* display the name/path to the alternate debug info, 17592 when it's found. Rather, only 17593 --check-alternate-debug-info-base-name keeps displaying the base 17594 name of the alternate debug info. 17595 * tests/data/test-alt-dwarf-file/test1-libgromacs-debug-dir/*: New 17596 test material. 17597 * tests/data/Makefile.am: Add the new test material to the build 17598 system. 17599 * tests/test-alt-dwarf-file.cc (in_out_specs): Take the new test 17600 input into account. 17601 * tests/data/test-read-dwarf/test1.abi: Adjust. 17602 * tests/data/test-read-dwarf/test7.so.abi: Likewise. 17603 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 17604 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 17605 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 17606 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 17607 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 17608 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 17609 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 17610 Likewise. 17611 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 17612 Likewise. 17613 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 17614 Likewise. 17615 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 17616 Likewise. 17617 176182015-12-06 Dodji Seketeli <dodji@redhat.com> 17619 17620 Do not forget to peel qualified type off when peeling types 17621 * include/abg-fwd.h (peel_qualified_type): Declare new function 17622 ... 17623 * src/abg-ir.cc (peel_qualified_type): ... and define it. 17624 (peel_typedef_pointer_or_reference_type): Peel qualified types 17625 here too. 17626 176272015-12-06 Dodji Seketeli <dodji@redhat.com> 17628 17629 Find more spots where to discriminate internal and non-internal names 17630 * src/abg-ir.cc (get_type_name, get_method_type_name) 17631 ({typedef_decl,var_decl,function_decl,class_decl}::get_pretty_representation): 17632 Propagate the internal-ness to the call to get_qualified_name(). 17633 176342015-12-06 Dodji Seketeli <dodji@redhat.com> 17635 17636 Constify is_qualified_type() 17637 * include/abg-fwd.h (is_qualified_type): Make this take a const 17638 parameter. 17639 * src/abg-ir.cc (is_qualified_type): Likewise. 17640 176412015-11-28 Dodji Seketeli <dodji@redhat.com> 17642 17643 Add missing new line to abidiff help message 17644 * tools/abidiff.cc (display_usage): Add missing new line. 17645 176462015-11-26 Dodji Seketeli <dodji@seketeli.org> 17647 17648 Do not abort when there is no binary to compare in a package 17649 * tests/data/test-diff-pkg/empty-pkg-libvirt-0.9.11.3-1.el7.ppc64.rpm: 17650 New input test package. 17651 * tests/data/test-diff-pkg/empty-pkg-libvirt-1.2.17-13.el7_2.2.ppc64.rpm: 17652 Likewise. 17653 * tests/data/test-diff-pkg/empty-pkg-report-0.txt: New test 17654 reference output. 17655 * data/Makefile.am: Add the new test material above to the build system. 17656 * tests/test-diff-pkg.cc (int_out_specs): Add the new test inputs 17657 to the set of tests. 17658 * tools/abipkgdiff.cc (compare): Do not abort if there is no 17659 binary to compare. 17660 176612015-11-14 Ondrej Oprala <ooprala@redhat.com> 17662 17663 Abidiff: Remove doubled line in help. 17664 * tools/abidiff.cc (display_usage): Remove a doubled help message. 17665 176662015-11-14 Ondrej Oprala <ooprala@redhat.com> 17667 17668 Add bash-completion scripts for the libabigail tools 17669 * Makefile.am: include bash-completion/Makefile.am 17670 * bash-completion/Makefile.am: New makefile for the bash-completion 17671 directory. 17672 * bash-completion/abicompat: New completion script. 17673 * bash-completion/abidiff: Likewise. 17674 * bash-completion/abidw: Likewise. 17675 * bash-completion/abilint: Likewise. 17676 * bash-completion/abinilint: Likewise. 17677 * bash-completion/abipkgdiff: Likewise. 17678 * bash-completion/abisym: Likewise. 17679 * configure.ac: Check for the bash-completion package. Handle 17680 the new --enable-bash-completion[=WHEN] configure option. 17681 * manuals/libabigail-tools.rst: Mention the scripts. 17682 176832015-11-17 Dodji Seketeli <dodji@redhat.com> 17684 17685 Read enum values in the size_t and write them in ssize_t 17686 * include/abg-ir.h (enum_type_def::enumerator::get_value): Return 17687 a size_t. 17688 * src/abg-ir.cc (enum_type_decl::enumerator::get_value): Likewise. 17689 * src/abg-dwarf-reader.cc (die_signed_constant_attribute): #if-out 17690 this static function that is not used anymore. 17691 (build_enum_type): Read the value of the enumerator using a size_t 17692 value. 17693 * src/abg-reader.cc (build_enum_type_decl): Read the enum value 17694 using a long long int. 17695 * src/abg-writer.cc (write_enum_type_decl): Write using a ssize_t. 17696 176972015-11-17 Dodji Seketeli <dodji@redhat.com> 17698 17699 Bump version to release candidate 1.0.rc1 17700 * configure.ac: Bump version to release candidate 1.0.rc1 17701 177022015-11-17 Dodji Seketeli <dodji@redhat.com> 17703 17704 Do not use designated initializers in abipkgdiff.cc 17705 * tools/abipkgdiff.cc (prepare_packages): Do not use designated 17706 initializers syntax. 17707 177082015-11-16 Dodji Seketeli <dodji@redhat.com> 17709 17710 Update ChangeLog for 1.0.rc0 17711 * ChangeLog: Udpate using make update-changelog 17712 177132015-11-16 Dodji Seketeli <dodji@redhat.com> 17714 17715 Fix doxygen configuration file paths in doc/Makefile.am 17716 * doc/Makefile.am: There was an extra "/doc" in the path. 17717 177182015-11-16 Dodji Seketeli <dodji@redhat.com> 17719 17720 Update ChangeLog file in preparation of 1.0.rc0 release 17721 * ChangeLog: Update using make update-changelog. 17722 177232015-11-16 Dodji Seketeli <dodji@redhat.com> 17724 17725 Add --version option to several libabigail tools 17726 * configure.ac: Set the version revision to "rc0". 17727 * doc/manuals/abicompat.rst: Adjust manual for new --version 17728 option. 17729 * doc/manuals/abidiff.rst: Likewise. 17730 * doc/manuals/abidw.rst: Likewise. 17731 * doc/manuals/abilint.rst: Likewise. 17732 * doc/manuals/abipkgdiff.rst: Likewise. 17733 * include/abg-config.h (config::{m_format_minor, m_format_major}): 17734 Make these be strings. 17735 (config::{get,set}_format_minor_version_number): Make these return 17736 strings. 17737 (config::{get,set}_format_major_version_number): Make these return 17738 or take strings. 17739 (abigail_get_library_version): Make this take strings. 17740 * src/abg-config.cc (config::config): Adjust. 17741 (config::{get,set}_format_major_version_number): Make these return 17742 or take strings. 17743 (config::{get,set}_format_minor_version_number): Make these return 17744 strings. 17745 (abigail_get_library_version): Make this take strings. 17746 * include/abg-version.h.in: Make the version variables be strings. 17747 * src/abg-writer.cc (write_translation_unit): The version numbers 17748 are now strings so adjust. 17749 * tools/{abicompat,abidiff,abidw,abilint,abipkgdiff,abisym}.cc 17750 (options::display_version): New data member. 17751 (options::options): Initialize it. 17752 (display_usage): Add documentation for new --version option. 17753 (parse_command_line): Parse new --version option. 17754 (main): Support --version. 17755 177562015-11-12 Dodji Seketeli <dodji@redhat.com> 17757 17758 Correctly handle fn DIE with abstract_origin in alt debug info 17759 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Consider that 17760 the function decl is for a DIE in the alternate debug info file only if 17761 the DIE itself comes from the alternate debug info file, not if 17762 the specification or the origin of the function comes from the 17763 alternate debug info file. 17764 * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-20.el7.ppc64.rpm: 17765 New test input rpm. 17766 * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64.rpm: Likewise. 17767 * tests/data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-20.el7.ppc64.rpm: Likewise. 17768 * tests/data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-7.el7.ppc64.rpm: Likewise. 17769 * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt: 17770 New test reference output. 17771 * tests/data/Makefile.am: Add the new test material to the source 17772 distribution. 17773 * tests/test-diff-pkg.cc (in_out_specs): Use the new test rpm 17774 inputs. 17775 177762015-11-09 Ondrej Oprala <ooprala@redhat.com> 17777 17778 Bug 19081 - abipkgdiff parallelization 17779 * doc/manuals/abipkgdiff.rst: Mention the new --no-parallel option. 17780 * tools/Makefile.am: Add -pthread to abipkgdiffs link options. 17781 * tools/abipkgdiff.cc (elf_file_paths_tls_key): New key for the 17782 thread-local vector of ELF filepaths. 17783 (reports_map): A map of the path of the first ELF of a compared pair 17784 and a corpus representing the difference. 17785 (env_map): A map of the corpus difference and a corresponding 17786 environment needed to be kept alive until the diff is reported. 17787 ({arg,map}_lock): mutexes to control access to the comparison argument 17788 list and the {reports,env}_map respectively. 17789 (options): Add a new member "parallel" and set it to true in the ctor. 17790 (elf_file): Add a new "size" member and set it in the ctor. 17791 (package descriptor): Arguments passed to extract_package_set. 17792 (compare_args): Arguments passed to the ELF comparison function. 17793 (display_usage): Mention the new "--no-parallel" option. 17794 (pthread_routine_extract_package): A wrapper function around 17795 extract_package to be used in a multi-threaded environment. 17796 ({first_second}_package_tree_walker_callback_fn): Add the new ELF file 17797 paths to a thread-specific vector. 17798 (compare): In an overload of compare, verbose output is updated to 17799 always mention the ELF files being compared for each reported stage. 17800 Reporting is no longer done in this function, the resulting difference 17801 is instead passed back to the calling function for reporting in the 17802 main thread, along with a corresponding environment. 17803 (pthread_routine_compare): Accept a pointer to a vector of comparison 17804 arguments. This function is to be called NTHREAD times and share the 17805 vector passed to it with its other invocations. Create the environment 17806 for compare() and store its output in a map if there is a difference. 17807 (create_maps_of_package_content): Allocate memory for a thread local 17808 vector of ELF paths and dispose of it before returning. 17809 (pthread_routine_extract_pkg_and_map_its_content): Renamed from 17810 extract_package_and_map_its_content. Extract the debuginfo as well as 17811 the regular package in this function. Spawn a separate thread for the 17812 extraction of the debug package. 17813 (pthread_join): A function handling thread joining throughout package 17814 extractions. 17815 (prepare_packages): Spawn a thread to extract each set of packages. 17816 (elf_size_is_greater): New comparison function used to order ELF pairs 17817 by size. 17818 (compare): In the overload of compare, pass through the ELF path 17819 vectors and identify pairs to be diffed. Put them in a vector and sort 17820 it by the summed ELF pair size. Spawn comparison threads and safely 17821 check for results in the proper order of the ELF pairs. Report any 17822 differences ASAP and collect the threads after all the reporting is 17823 done, checking their return status. 17824 (parse_command_line): Check for the "--no-parallel" option. 17825 178262015-11-10 Dodji Seketeli <dodji@redhat.com> 17827 17828 Fix typo in test-diff-dwarf-abixml.cc 17829 * tests/test-diff-dwarf-abixml.cc (main): Fix typo. 17830 178312015-10-14 Ondrej Oprala <ooprala@redhat.com> 17832 17833 Document abipkgdiff's option --no-abignore 17834 * doc/manuals/abipkgdiff.rst: Mention the new option. 17835 * tools/abipkgdiff.cc: Likewise. 17836 178372015-11-09 Dodji Seketeli <dodji@redhat.com> 17838 17839 Avoid canonicalizing function types too early 17840 * src/abg-dwarf-reader.cc (die_function_type_map_type): New 17841 typedef. 17842 * (): 17843 (read_context::die_wip_function_types_map_): New data member. 17844 (read_context::{die_wip_function_types_map, 17845 is_wip_function_type_die_offset}): New methods. 17846 (build_function_type): Mark the function being built as "work in 17847 progress". 17848 (maybe_canonicalize_type): Do not early-canonicalize WIP function 17849 types. 17850 * src/abg-reader.cc (build_function_type): Mark the function being 17851 built as "work in progress". 17852 * tests/test-diff-dwarf-abixml.cc: New test harness. 17853 * tests/Makefile.am: Add new test harness runtestdiffdwarfabixml 17854 to the build system. 17855 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1: 17856 New test binary input. 17857 * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: 17858 New test input. 17859 * tests/data/Makefile.am: Add new test inputs to source 17860 distribution. 17861 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 17862 178632015-11-09 Dodji Seketeli <dodji@redhat.com> 17864 17865 Propagate environment property to base specifiers 17866 * src/abg-comparison.cc (compute_diff): In the overload for 17867 class_decl::base_spec_sptr, assert that the environment of the 17868 base classes are equal and that the environment the base class is 17869 the same as the environment of the base specifier. 17870 * src/abg-ir.cc (add_base_specifier): Propagate the environment of 17871 the class to its base specifiers. 17872 * tests/data/test-types-stability/pr19026-libvtkIOSQL-6.1.so.1: 17873 New test binary input. 17874 * tests/data/Makefile.am: Add the new test input to the build 17875 system. 17876 * tests/test-types-stability.cc (elf_paths): Add new binary to the 17877 test harness. 17878 178792015-11-09 Dodji Seketeli <dodji@redhat.com> 17880 17881 Misc style fixes 17882 * src/abg-comparison.cc (diff_context::mark_diff_as_visited): Add 17883 missing space. 17884 (corpus_diff::priv::ensure_lookup_tables_populated): Likewise. 17885 * src/abg-dwarf-reader.cc (lookup_symbol_from_elf): Likewise. 17886 (get_soname_of_elf_file, get_type_of_elf_file): Likewise. 17887 * src/abg-ir.cc (var_decl::get_pretty_representation): Likewise. 17888 178892015-11-07 Dodji Seketeli <dodji@redhat.com> 17890 17891 Support DW_AT_count DWARF attribute 17892 * src/abg-dwarf-reader.cc (get_default_array_lower_bound): Define 17893 new static function. 17894 (build_array_type): Support the DW_AT_count attribute. 17895 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so: 17896 New test binary input. 17897 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so: Likewise. 17898 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt: 17899 New test reference output. 17900 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so: 17901 New test binary input. 17902 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so: 17903 New test binary input. 17904 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt: 17905 New test reference output. 17906 * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c: Source 17907 code for the binaries above. 17908 * tests/data/Makefile.am: Add the new test material to the build 17909 system. 17910 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs 17911 to the harness. 17912 179132015-11-07 Dodji Seketeli <dodji@redhat.com> 17914 17915 Bug 19173 - Abidiff doesn't detect symbol size change in library 17916 * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Take a size 17917 parameter. 17918 (elf_symbol::{get,set}_size): New accessors. 17919 * src/abg-ir.cc (elf_symbol::priv::size_): New data member. 17920 (elf_symbol::priv::priv): Initialize it. 17921 (elf_symbol::{elf_symbol, create}) Take a size parameter. 17922 (textually_equals): Compare the size of variable symbols. 17923 (elf_symbol::{get, set}_size): New accessors. 17924 * src/abg-comparison.cc (maybe_report_diff_for_symbol): New static 17925 function. 17926 ({function_decl_diff,var_diff}::report): Use it. 17927 * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) 17928 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) 17929 (read_context::lookup_elf_symbol_from_index): Set the size of the 17930 elf symbols' internal representation. 17931 * src/abg-reader.cc (build_elf_symbol): Read the size attribute if 17932 present. 17933 * src/abg-writer.cc (write_elf_symbol): Write the size attribute 17934 for variable symbols, if it's not zero. 17935 * tests/data/test-diff-dwarf/test34-pr19173-libfoo.so: New test 17936 input binary. 17937 * tests/data/test-diff-dwarf/test34-pr19173-libfoo2.so: Likewise. 17938 * tests/data/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt: 17939 New reference test output. 17940 * tests/data/Makefile.am: Add the new test input binaries to the 17941 build system. 17942 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test input 17943 above to the test harness. 17944 * tests/data/test-diff-dwarf/test9-report.txt: Adjust. 17945 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 17946 * tests/data/test-read-dwarf/test0.abi: Likewise. 17947 * tests/data/test-read-dwarf/test1.abi: Likewise. 17948 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 17949 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 17950 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 17951 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 17952 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 17953 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 17954 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 17955 Likewise. 17956 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 17957 Likewise. 17958 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. 17959 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 17960 Likewise. 17961 * tests/data/test-read-dwarf/test6.so.abi: Likewise. 17962 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 17963 179642015-11-07 Dodji Seketeli <dodji@redhat.com> 17965 17966 Add some needed vertical space 17967 * src/abg-dwarf-reader.cc (build_array_type): Add a new line after 17968 this function. 17969 179702015-11-07 Dodji Seketeli <dodji@redhat.com> 17971 17972 Pass a bunch of parameters by reference as they ought to be 17973 * include/abg-ir.h (operator==): In the overload for 17974 elf_symbol_sptr, pass the parameters by reference. 17975 * src/abg-ir.cc (operator==): Do the same at definition site. 17976 * src/abg-comparison.cc (maybe_report_diff_for_member): Pass 17977 parameters by reference. 17978 179792015-11-05 Dodji Seketeli <dodji@redhat.com> 17980 17981 Bug 19139 - DWARF reader doesn't handle garbage in function names 17982 * include/abg-tools-utils.h (string_is_ascii): Declare new 17983 function ... 17984 * src/abg-tools-utils.cc (string_is_ascii): ... and define it. 17985 * src/abg-writer.cc (write_function_type): Escape forbidden XML 17986 characters in function type names. 17987 * src/abg-dwarf-reader.cc (build_function_type): If a parameter 17988 name is not ascii, drop it on the floor. 17989 * tests/data/test-types-stability/pr19139-DomainNeighborMapInst.o: 17990 New test input binary. 17991 * tests/data/test-types-stability/pr19202-libmpi_gpfs.so.5.0: 17992 Likewise. 17993 * tests/data/Makefile.am: Add the new binaries above to the build 17994 system. 17995 * tests/test-types-stability.cc: New test harness. 17996 * tests/Makefile.am: Add the new test harness to the build system. 17997 179982015-11-05 Dodji Seketeli <dodji@redhat.com> 17999 18000 Introduce the name abixml in some comments 18001 * src/abg-reader.cc: Mention abixml in the comment at the top of 18002 the file. 18003 * src/abg-writer.cc: Likewise. 18004 180052015-10-17 Dodji Seketeli <dodji@redhat.com> 18006 18007 Bug 19026 - Types with same name and different size considered equivalent 18008 * src/abg-ir.cc (type_base::get_canonical_type_for): Really 18009 compare the size of the type to be canonicalized against the size 18010 of the *current* potential canonical type of the same name. 18011 180122015-10-17 Dodji Seketeli <dodji@redhat.com> 18013 18014 Add a script to update the reference output of runtestreaddwarf 18015 * tests/update-test-read-dwarf-output.py: New helper python program. 18016 180172015-10-17 Dodji Seketeli <dodji@redhat.com> 18018 18019 Style fixes in the abixml writer. 18020 * src/abg-writer.cc (write_var_decl): Use the var_decl_sptr 18021 typedef. 18022 (write_class_decl): Indent. 18023 180242015-10-17 Dodji Seketeli <dodji@redhat.com> 18025 18026 Fix typo in test-read-dwarf.cc 18027 * tests/test-read-dwarf.cc (for test test21-pr19092.so.abi): Fix 18028 typo in the output path of that test. 18029 180302015-10-17 Dodji Seketeli <dodji@redhat.com> 18031 18032 Adjust regression tests reference output for the current patch set 18033 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so: 18034 New test input binary. 18035 * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: 18036 New test reference output. 18037 * tests/data/Makefile.am: Add the new test files above to the 18038 source distribution. 18039 * tests/test-read-dwarf.cc (in_out_specs): Add the two new test 18040 files above to the set of test input files. 18041 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 18042 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 18043 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. 18044 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 18045 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 18046 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 18047 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 18048 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. 18049 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 18050 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. 18051 * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 18052 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 18053 180542015-10-17 Dodji Seketeli <dodji@redhat.com> 18055 18056 Use abidw --abidiff in test-read-dwarf.cc 18057 * tests/test-read-dwarf.cc (handle_in_out_spec): Rather than 18058 calling abilint on the abixml and abidiff-ing the .so file against 18059 its .so.abi, call abidw --abidiff on the .so file and voila. Ok, 18060 it does one extra save of abixml, but then that won't hurt. And 18061 things are faster now than what they were anyway :-) 18062 180632015-10-17 Dodji Seketeli <dodji@redhat.com> 18064 18065 Fix emitting of referenced type in abixml writer 18066 * Use of canonical pointers in the hash map of referenced types 18067 The abixml writer was using canonical types pointer values to hash 18068 referenced types in a map. It was doing so "by hand"; and it was thus 18069 messing things up for types without canonical types (like some class 18070 declarations) etc. 18071 This patch changes that by using the generic solution of 18072 abigail::ir::hash_type_or_decl(), which also uses the same canonical 18073 pointer type values. For types with no canonical types, that 18074 functions knows has to gracefully fallback. At worst, it will just 18075 make things slower, not wrong. 18076 * Sorting of referenced types 18077 The patch also changes the sorting function used for the hash map of 18078 referenced types. The previous solution was sorting the pretty 18079 representation of types; but then when two types have the same pretty 18080 representation (think, typedefs, for instance) then their relative 18081 position in the sorted result was random. This causes some stability 18082 issues, in that emitting the abixml for the same binary several times 18083 can lead to the some types being sorted differently -- they have the 18084 same name, but not necessarily the same type *IDs*, as they are 18085 different types. 18086 The new sorting code handles this better; it also uses the pretty 18087 representations of types, when they are equal, it uses the type IDs to 18088 tell the types apart. At least this brings stability in the abixml 18089 output, for a given binary. 18090 * Avoiding duplicating declaration-only types when emitting the 18091 context of referenced member types. 18092 We don't keep track of declaration-only classes that are emitted. 18093 This is because we allow a given class declaration (that carries no 18094 definition) to appear several times in a given ABI corpus. So when a 18095 referenced type is a class declaration, it always appears as if that 18096 referenced type has not been emitted. So when we specifically emit 18097 the not-emitted referenced types, it can happen that declaration-only 18098 classes can appear a lot of times. This is unnecessary duplication, 18099 aka bloat. 18100 This patch thus introduces a new hash map that tracks emitted 18101 declaration-only classes, so that we can allow duplication of class 18102 declarations when they follow what's done in the IR read from DWARF, 18103 and disallow that duplication when it's totally artificial and 18104 useless. 18105 * Better tracking of referenced types 18106 We were blatantly forgetting to mark some referenced types as such. 18107 So those were missing in some abixml output. 18108 This patch fixes the spots where we were forgetting that important 18109 information. 18110 * Better representation of the scopes of the referenced types that 18111 were specifically emitted. 18112 The previous code was failing at properly representing the class scope 18113 of some referenced types that were specifically emitted, or sometimes, 18114 for member types, representing the scope would be so screwed that the 18115 (referenced) member type itself wouldn't be emitted at all. 18116 This is because I thought that to emit a given member type, just 18117 emitting its parent scope would be enough. I thought that would 18118 automatically trigger emitting the member type itself. First, that 18119 would emit too much information at times; the other members of the 18120 scope are not necessarily needed. And second the "duplication 18121 detection code" would sometime refuse to emit the scope class, because 18122 it has already been emitted earlier! But the incarnation that got 18123 emitted didn't have this member type as member, then. Yes, in DWARF, 18124 the same class A can be declared several times with different member 18125 types in it. The complete representation of A would be a union of all 18126 those declarations of A that are seen. 18127 This patch addresses this issue by carefully emitting just the 18128 information that is needed from the scope of the referenced type. 18129 Basically the scope is declared just to declare/define the type we are 18130 interested in; period. The abixml reader is now properly geared to 18131 re-construct the scope by merging its different parts that are now 18132 scattered around, in the ABI corpus. That support is part of this 18133 patch set. 18134 instance, a member typedef would be emitted with the information of 18135 its parent class badly formatted. 18136 * src/abg-writer.cc (struct type_ptr_comp_functor): Remove this. 18137 (sort_type_ptr_map): Likewise. 18138 (write_context::record_type_as_referenced): Do not add the 18139 canonical type of the type to record as referenced directly. 18140 (write_context::type_is_referenced): Adjust accordingly. 18141 (struct write_context::type_ptr_cmp): New comparison functor. 18142 (write_context::sort_types): New sorting function. 18143 (write_context::{record_decl_only_type_as_emitted, 18144 decl_only_type_is_emitted}): New member functions. 18145 (write_member_type_opening_tag): Factorize out of ... 18146 (write_member_type): ... here. 18147 (write_class_decl_opening_tag): Factorize out of ... 18148 (write_class_decl): ... here. Now, keep track also of 18149 declaration-only classes that are emitted. 18150 (write_decl_in_scope): Use the new write_member_type_opening_tag 18151 and write_class_decl_opening_tag. Now write class scopes 18152 ourselves; they only contain the type declarations that we are 18153 emitting. 18154 (write_translation_unit): Use the new sorting code to sort the 18155 referenced types to emit. Do not emit referenced types that are 18156 declaration-only classes that have already been emitted. Handle 18157 the fact that emitting the referenced types might make those 18158 emitted type *reference* other types too! So handle those new 18159 referenced types as such, and emit them too. 18160 (write_qualified_type_def, write_typedef_decl, write_var_decl): Do 18161 not forget to mark referenced types as such. 18162 181632015-10-17 Dodji Seketeli <dodji@redhat.com> 18164 18165 Support updating a class in the abixml reader 18166 * include/abg-ir.h (class_decl::{find_base_class, 18167 find_member_type, find_data_member}): Declare new member functions .. 18168 * src/abg-ir.cc (class_decl::{find_base_class, 18169 find_member_type, find_data_member}): ... and define them. 18170 * src/abg-reader.cc (build_class_decl): Add the ability to update 18171 a class to add new data members, member types and base classes to 18172 it, if necessary. 18173 181742015-10-17 Dodji Seketeli <dodji@redhat.com> 18175 18176 Don't canonicalize types not added to their context in abixml reader 18177 * src/abg-reader.cc (read_context::maybe_canonicalize_type): 18178 Assert that a class type that is scheduled for canonicalization 18179 must be in a scope. We do this only for classes, for now. The 18180 assert here helped to spot (and fix) a lot of places where we 18181 were canonicalizing types without scope. 18182 (read_context::build_or_get_type_decl): Canonicalize types here, 18183 when they are built and (hopefully) added to their scope. There 18184 might be cases here where we try to canonicalize types that are 18185 not added to their scope. That should bomb in the assert above, 18186 at least for class types, for now. We'll then fix the places where 18187 the types are created, to make them properly scoped. 18188 (build_type_decl, build_qualified_type_decl) 18189 (build_pointer_type_def, build_reference_type_def) 18190 (build_array_type_def, build_enum_type_decl, build_typedef_decl): 18191 Do not try to canonicalize the types early, right when they are 18192 created. Canonicalization should happen at the point where (or 18193 after) they are added to their scope. 18194 (build_class_decl): Likewise. Also, schedule member types for 18195 canonicalization once they've been added to their scope. 18196 (build_class_tdecl): Schedule the pattern of the class template 18197 for canonicalization once it has been added to its scope. I am 18198 not sure I should do this, as the pattern is not yet a real type, 18199 but I am taking my bet. 18200 (build_type_composition): Schedule the composed type for 18201 canonicalization once it's been added to its scope. 18202 (handle_type_decl, handle_qualified_type_decl) 18203 (handle_pointer_type_def, handle_reference_type_def) 18204 (handle_function_type, handle_array_type_def) 18205 (handle_enum_type_decl, handle_typedef_decl, handle_class_decl): 18206 At this point, we should know if the type is to be added to a 18207 scope or not. If it's in a scope, then schedule for 18208 canonicalization. 18209 182102015-10-15 Dodji Seketeli <dodji@redhat.com> 18211 18212 Bug 19092 - abidw aborts on types that violate the ODR 18213 * src/abg-ir.cc (type_base::get_canonical_type_for): Look at the 18214 size of types with the same name which could be considered 18215 ODR-equal, to spot possible violations that would induce a type 18216 canonicalization error. 18217 * tests/data/test-read-dwarf/test21-pr19092.so: New test input 18218 binary. 18219 * tests/data/test-read-dwarf/test21-pr19092.so.abi: New reference 18220 abixml for the binary above. 18221 * tests/data/Makefile.am: Add the new test input above to source 18222 distribution. 18223 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 18224 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18225 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 18226 Likewise. 18227 * tests/test-read-dwarf.cc (int_out_specs): Add the two test input 18228 above. 18229 182302015-10-15 Dodji Seketeli <dodji@redhat.com> 18231 18232 Fix activation of Debian package support 18233 * configure.ac: If we cannot activate Debian package support, then 18234 report it clearly. 18235 182362015-10-15 Dodji Seketeli <dodji@redhat.com> 18237 18238 Misc style cleanup 18239 * include/abg-fwd.h: Remove unnecessary declaration of class 18240 parameter. 18241 * src/abg-ir.cc: Remove trailing space in a comment. 18242 * src/abg-reader.cc: Fix a comment. 18243 182442015-10-15 Dodji Seketeli <dodji@redhat.com> 18245 18246 Emit statistics about resolved class declarations 18247 * src/abg-dwarf-reader.cc 18248 (read_context::resolve_declaration_only_classes): Emit statistics 18249 about resolved classes and the missed ones. 18250 182512015-10-15 Dodji Seketeli <dodji@redhat.com> 18252 18253 Add a missing xml text reader call 18254 * src/abg-reader.cc (read_corpus_from_input): Add the necessary 18255 call to xmlTextReaderNext call after the xmlTextReaderExpand call. 18256 182572015-10-15 Dodji Seketeli <dodji@redhat.com> 18258 18259 Pass some more parameters in reference 18260 * include/abg-ir.h (operator==): For the type_base_sptr and 18261 decl_base_sptr overloads, pass the parameters by reference. 18262 ({var,function}_decl::{set,get}_symbol): Pass the elf_symbol_ptr 18263 by reference. 18264 * src/abg-ir.cc (operator==): For the type_base_sptr and 18265 decl_base_sptr overloads, pass the parameters by reference, now in 18266 the definition. 18267 ({var,function}_decl::{set,get}_symbol): Pass the elf_symbol_ptr 18268 by reference, now in the definition. 18269 182702015-10-15 Dodji Seketeli <dodji@redhat.com> 18271 18272 Adjust tests for the patchset 18273 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 18274 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18275 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 18276 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 18277 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 18278 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18279 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 18280 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 18281 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 18282 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 18283 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 18284 182852015-10-15 Dodji Seketeli <dodji@redhat.com> 18286 18287 Make abidw --abidiff not show definitely harmless changes 18288 * tools/abidw.cc (set_diff_context): New function. 18289 (main): Use that new function. Do not show any output for 18290 --abidiff if only compatible changes were detected. Also, do not 18291 abort if no input binary was giving. 18292 182932015-10-15 Dodji Seketeli <dodji@redhat.com> 18294 18295 Allow only one definition of a given type per corpus in abixml 18296 * src/abg-writer.cc (write_translation_unit): Do not clear some 18297 important per-translation unit maps here. There are needed to 18298 keep track of the emitted and referenced types through the entire 18299 corpus. Avoid (wrongly) recording function types twice. 18300 (write_array_type_def, write_function_decl, write_function_type): 18301 Record referenced types. 18302 (write_class_decl): Record referenced types, and, allow only 18303 declarations to be duplicated in a corpus. 18304 183052015-10-15 Dodji Seketeli <dodji@redhat.com> 18306 18307 A series of small speed optimizations here and there 18308 * src/abg-comparison.cc (var_diff::has_changes): Just compare the 18309 two var_decl. It's (way) faster now than using recursive hashing 18310 for that. 18311 * src/abg-ir.cc (elf_symbol::does_alias): Get out early if the two 18312 main symbols are equal. 18313 (equals): In the overload for function_decl, start by comparing 18314 types. This can be very fast for functions with different types, 18315 as it amounts to a pointer comparison. In the overload for 18316 class_decl, avoid a map lookup when it's not necessary. 18317 183182015-10-15 Dodji Seketeli <dodji@redhat.com> 18319 18320 Accelerate a slow path in hash_type_or_decl() 18321 * include/abg-ir.h (is_function_parameter, is_class_base_spec): 18322 Declare new functions. 18323 * src/abg-ir.cc (is_function_parameter, is_class_base_spec): 18324 Define them. 18325 (hash_type_or_decl): Handle hashing of function parameters are 18326 class base specifications with the fast path of type hashing. 18327 183282015-10-15 Dodji Seketeli <dodji@redhat.com> 18329 18330 Implement fast type lookup in a corpus 18331 * include/abg-fwd.h (components_to_type_name): Declare new 18332 function. 18333 * include/abg-ir.h (string_type_base_wptr_map_type): New typedef. 18334 (translation_unit::{get,set}_types): Declare new member functions. 18335 * src/abg-ir.cc (translation_unit::priv::types_): New data member. 18336 (translation_unit::{get,set}_types): Define these member 18337 functions. 18338 (maybe_update_types_lookup_map): Define new static function. 18339 (components_to_type_name): Define new function. 18340 (scope_decl::{add_member_decl, insert_member_decl}): Call the new 18341 maybe_update_types_lookup_map. 18342 (scope_decl::find_iterator_for_member): Fix logic. 18343 (class_decl::set_is_declaration_only): When a class declaration 18344 becomes a definition, update the name -> type map maintained in 18345 the scope of the class. 18346 (lookup_type_in_translation_unit): Use the hash map of qualified 18347 name -> types that is now maintained in the translation unit. 18348 This is way faster than the previous walking algorithm. 18349 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 18350 When fixing up global variable declarations that need to be 18351 re-added to the translation unit, use the new fast type lookup 18352 function. 18353 183542015-10-15 Dodji Seketeli <dodji@redhat.com> 18355 18356 Set the corpus of all ABI artifact reads from abixml 18357 * src/abg-reader.cc (read_translation_unit): Set the current 18358 corpus to the current translation unit being built. 18359 183602015-10-14 Dodji Seketeli <dodji@redhat.com> 18361 18362 Make canonicalization non sensitive to struct-ness of subtypes 18363 * include/abg-fwd.h (get_type_name, get_function_type_name) 18364 (get_method_type_name, get_pretty_representation): Add an 18365 "internal" flag to all overoads. 18366 * include/abg-ir.h 18367 ({type_or_decl_base, decl_base, type_decl, scope_type_decl, 18368 qualified_type_def, array_type_def, enum_type_decl, typedef_decl, 18369 var_decl, function_decl, function_decl::parameter, function_type, 18370 method_type, class_decl}::get_pretty_representation): Add an 18371 'internal' flag. 18372 ({decl_base, qualified_type_def, pointer_type_def, 18373 reference_type_def, array_type_def, enum_type_decl::enumerator, 18374 function_decl::parameter}::get_qualified_name): Likewise. 18375 (qualified_type_def::build_name): Likewise. 18376 * src/abg-ir.cc ({decl_base, qualified_type_def, pointer_type_def, 18377 reference_type_def, array_type_def, enum_type_decl, 18378 enum_type_decl::enumerator, 18379 function_decl::parameter}::get_qualified_name): Take an "internal" 18380 flag. 18381 (qualified_type_def::build_name): Likewise. 18382 ({decl_base, type_decl, namespace_decl, array_type_def, 18383 enum_type_decl, typedef_decl, var_decl, function_type, 18384 method_type, function_decl, 18385 class_decl}::get_pretty_representation): Likewise. 18386 (get_type_name, get_function_type_name, get_method_type_name) 18387 (get_pretty_representation): Likewise. 18388 (type_base::get_canonical_type_for): Call 18389 get_pretty_representation() with the "internal" flag set to 18390 "true", to get a pretty representation that is independant from 18391 the struct-ness of the subtypes of the type being canonicalized. 18392 183932015-10-14 Dodji Seketeli <dodji@redhat.com> 18394 18395 Handle aliased function decls when comparing decls in general 18396 * include/abg-ir.h (is_function_decl): Add a const to the 18397 reference parameter, making it comply with the definition. 18398 * src/abg-ir.cc (equals): In the overload for decl_base, when the 18399 two linkage names are different, consider the case of the decls 18400 being aliased functions. 18401 184022015-10-14 Dodji Seketeli <dodji@redhat.com> 18403 18404 Fix const-ness of a function parameter 18405 * include/abg-fwd.h (is_function_decl): Add a const to the 18406 parameter to make it comply with the definition in abg-ir.cc. 18407 Woops. 18408 184092015-10-14 Dodji Seketeli <dodji@redhat.com> 18410 18411 Fix "is-anonymous" abixml property impact on some tests 18412 * tests/data/test-abidiff/test-PR18166-libtirpc.so: New file. 18413 * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Likewise. 18414 * tests/data/test-abidiff/test-corpus0-report0.txt: Renamed into 18415 tests/data/test-abidiff/test-PR18166-libtirpc.so.report.txt. 18416 * tests/data/test-abidiff/test-corpus0-v{0,1}.so.abi: Removed. 18417 * tests/data/Makefile.am: Renamed test-corpus0-* files into 18418 test-PR18166-libtirpc.so-* files. 18419 * tests/test-abidiff.cc (specs): Adjust. 18420 184212015-10-14 Dodji Seketeli <dodji@redhat.com> 18422 18423 Do not compare access specs for member types & functions 18424 * include/abg-fwd.h (is_function_decl): Declare a new overload. 18425 * src/abg-ir.cc (is_function_decl): Define a new overload. 18426 (equals): In the overload for decl_base, do not compare access 18427 specifiers when comparing member functions and types. 18428 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 18429 * tests/data/test-diff-filter/test0-report.txt: Likewise. 18430 * tests/data/test-diff-filter/test01-report.txt: Likewise. 18431 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. 18432 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. 18433 * tests/data/test-diff-filter/test4-report.txt: Likewise. 18434 184352015-10-14 Dodji Seketeli <dodji@redhat.com> 18436 18437 Fix strip_typedef issues 18438 * src/abg-ir.cc (strip_typedef): Do not canonicalize 18439 the return type of the method type to typedef-strip. 18440 Acknowledge that the return type can be nil. 18441 184422015-10-14 Dodji Seketeli <dodji@redhat.com> 18443 18444 Force late canonicalizing of function types read from abixml 18445 * src/abg-reader.cc (build_function_type): Late-canonicalize 18446 function types. 18447 184482015-10-13 Ondrej Oprala <ooprala@redhat.com> 18449 18450 Bug 19082 - Recognize suppression spec files 18451 * tests/data/Makefile.am: Add new test material to the build system. 18452 * tests/data/test-diff-pkg/dirpkg-{0-dir1,{1,2}-dir2}/dir.abignore: 18453 A test suppression specification. 18454 * tests/data/test-diff-pkg/dirpkg-{2,3}-dir2/.abignore: Likewise. 18455 * tests/data/test-diff-pkg/dirpkg-3.suppr: Likewise. 18456 * tests/data/test-diff-pkg/dirpkg-{1,2,3}-dir{1,2}/libobj-v0.so: New 18457 binary test inputs. 18458 * tests/data/test-diff-pkg/dirpkg-{1,2,3}-dir{1,2}/obj-v0.cc: New test 18459 source files 18460 * tests/data/test-diff-pkg/dirpkg-{1,2,3}-report-{0,1}.txt: New 18461 reference outputs 18462 * tests/test-diff-pkg.cc: Adjust to run the new tests. 18463 * tools/abipkgdiff.cc (prog_options): New static pointer to struct 18464 opts. 18465 (file_tree_walker_callback_fn): Rename to 18466 first_package_tree_walker_callback_fn. 18467 (second_package_tree_walker_callback_fn): Check for ELF files just 18468 like the previous function but additionally check for files 18469 ending with ".abignore", unless disabled from the command line. 18470 ({create_maps_of_package,extract_package_and_map_its}_content): 18471 Add a callback as a new argument. 18472 (main) handle the new "--no-abignore" option, which turns off 18473 the search for suppression files within the new package. 18474 184752015-10-08 Dodji Seketeli <dodji@redhat.com> 18476 18477 Bug 19024 - Failing to flag underlying type of enums as anonymous 18478 * src/abg-dwarf-raeder.cc (build_enum_type): Set the is-anonymous 18479 flag on the underlying type of the enum. 18480 * tests/data/test-read-dwarf/test0.abi: Adjust. 18481 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 18482 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 18483 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 18484 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18485 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 18486 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 18487 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 18488 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18489 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 18490 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. 18491 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 18492 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 18493 184942015-10-08 Dodji Seketeli <dodji@redhat.com> 18495 18496 Bug 19025 - abixml writer forgets to emit some member types 18497 * include/abg-fwd.h (is_namespace): Fix prototype. 18498 * src/abg-writer.cc (struct type_ptr_comp_functor): New internal 18499 type. 18500 (sort_type_ptr_map): New static function. 18501 (write_context::m_referenced_types_map): Renamed 18502 m_referenced_fntypes_map data member into this. 18503 (write_context::get_referenced_types): New member function. 18504 (write_context::record_type_as_referenced): Renamed 18505 record_fntype_as_referenced member function into this. Adjust. 18506 (write_context::type_is_referenced): Renamed fntype_is_referenced 18507 into this. 18508 (write_context::clear_referenced_types_map): Renamed 18509 clear_referenced_fntypes_map member function into this. Adjust. 18510 (write_decl_in_scope): New static function. 18511 (write_translation_unit): Use it here to emit types that are 18512 referenced by other types in the TU, but that are not emitted. 18513 Adjust. 18514 (write_pointer_type_def, write_reference_type_def) 18515 (write_typedef_decl): Record the underlying types referenced by 18516 the emitted types as being, well, referenced. 18517 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so: 18518 New test binary input. 18519 * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: 18520 New reference output of the binary input above. 18521 * tests/data/Makefile.am: Add the new test material above to the 18522 source distribution. 18523 * tests/test-read-dwarf.cc (in_out_spec): Add the new test inputs. 18524 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 18525 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 18526 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18527 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 18528 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 18529 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 18530 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18531 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 18532 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 18533 Likewise. 18534 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 18535 Likewise. 18536 185372015-10-06 Ondrej Oprala <ooprala@redhat.com> 18538 18539 Parallelize test read-dwarf. 18540 * tests/Makefile.am: Link runtestreaddwarf with libpthread. 18541 * tests/test-read-dwarf.cc (main) Create worker threads corresponding 18542 to the number of CPUs online, add a "--no-parallel" option and move 18543 the main loop... 18544 (handleInOutSpec) ...here. 18545 185462015-10-07 Dodji Seketeli <dodji@redhat.com> 18547 18548 Bug 19023 - Type canonicalization is sensitive to struct-ness 18549 * include/abg-ir.h (class_decl::is_struct): Declare a setter for the 18550 "is-struct" property. 18551 * src/abg-ir.cc (class_decl::is_struct): And define that setter 18552 here. 18553 (type_base::get_canonical_type_for): Temporarily set the 18554 'is-struct' flag of the class type to 'false' before building its 18555 pretty representation. 18556 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so: 18557 New test input binary. 18558 * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: 18559 New test reference output. 18560 * tests/data/Makefile.am: Add the new test material above to the 18561 source distribution. 18562 * tests/test-read-dwarf.cc (in_out_specs): Add the two new test 18563 inputs to the list of test inputs to consider. 18564 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 18565 185662015-10-06 Dodji Seketeli <dodji@redhat.com> 18567 18568 Style adjustment in abg-corpus.cc 18569 * src/abg-corpus.cc (corpus::exported_decls_builder::id_var_map_): 18570 Renamed data member vars_map_ into this. 18571 (corpus::exported_decls_builder::id_var_map): Renamed vars_map 18572 into this. 18573 (corpus::exported_decls_builder::var_id_is_in_id_var_map): Renamed 18574 var_is_in_map into this. 18575 (corpus::exported_decls_builder::{add_var_to_map, 18576 add_var_to_exported, maybe_add_var_to_exported_vars}): Adjust. 18577 185782015-10-06 Dodji Seketeli <dodji@redhat.com> 18579 18580 Bug 19037 - Make ABI corpus support several functions with same symbol 18581 * include/abg-corpus.h 18582 (corpus::exported_decls_builder::str_{fn,var}_ptr_map_type): 18583 Remove these typedefs from here as they only used internally in 18584 abg-corpus.cc. So we move them there instead. 18585 * src/abg-corpus.cc (str_fn_ptrs_map_type): New typedef. 18586 (str_var_ptr_map_type): Moved the typedef that was in 18587 corpus::exported_decls_builder here. 18588 (corpus::exported_decls_builder::id_fns_map_): Rename the fns_ 18589 data member into this. Make it have a str_fn_ptrs_map_type as a 18590 type. 18591 (corpus::exported_decls_builder::id_fns_map): Renamed the 18592 fns_map() accessor into this one. 18593 (corpus::exported_decls_builder::{fn_id_is_in_id_fns_map, 18594 fn_is_in_fns}): New member functions. 18595 (corpus::exported_decls_builder::fn_is_in_id_fns_map): Rename 18596 fn_is_in_map into this. 18597 (corpus::exported_decls_builder::add_fn_to_id_fns_map): Rename 18598 add_fn_to_map into this. 18599 (corpus::exported_decls_builder::add_fn_to_exported): Adjust. 18600 (corpus::exported_decls_builder::maybe_add_fn_to_exported_fns): 18601 Adjust. 18602 * src/abg-comparison.cc (function_decl_diff::report): Emit reports 18603 about function name changes (for a given function ID) only if 18604 there are sub-type changes to be reported for the function. In 18605 that case, do not forget to emit the sub-type changes after the 18606 name changes have been reported. 18607 (corpus_diff::priv::ensure_lookup_tables_populated): Several 18608 functions of the same ID can be removed or added from/to the 18609 corpus. 18610 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so: 18611 New test input binary. 18612 * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: 18613 New test output reference. 18614 * tests/data/Makefile.am: Add the new test materials to the source 18615 distribution. 18616 * tests/test-read-dwarf.cc (in_out_specs): Adjust to add the new 18617 test inputs above. 18618 186192015-10-05 Ondrej Oprala <ooprala@redhat.com> 18620 18621 Do not imply private access when building a struct from ABIXML. 18622 * src/abg-reader.cc (read_context): Abort if we run into an 18623 unsupported access specifier. 18624 (build_class_decl) Default to public access for the children 18625 of a struct. 18626 186272015-10-05 Ondrej Oprala <ooprala@redhat.com> 18628 18629 Fix minor warnings when building documentation. 18630 * manuals/abilint.rst: Fix the "Literal block expected" warning. 18631 * manuals/abipkgdiff.rst: Fix the "Title underline too short" warning. 18632 186332015-10-05 Ondrej Oprala <ooprala@redhat.com> 18634 18635 Fix an "Unknown target name" error during make info. 18636 * doc/manuals/libabigail-overview.rst: Fix the reference to 18637 "ELF symbols". 18638 186392015-10-05 Ondrej Oprala <ooprala@redhat.com> 18640 18641 Fix a path in doc/Makefile.am 18642 * doc/Makefile.am: Prefix the path for DOXY_WEBSITE_SRC_CFG and 18643 DOXY_WEBSITE_BLD_{CFG,DIR} with "/doc" to protect it against make 18644 clean. 18645 186462015-10-04 Dodji Seketeli <dodji@redhat.com> 18647 18648 Misc style cleanups 18649 * src/abg-reader.cc (read_is_struct): Fix comment. 18650 (build_type_decl): Use type_decl_sptr rather than 18651 shared_ptr<type_decl>. 18652 (build_type_decl): Use typedef_decl_sptr rather than 18653 shared_ptr<typedef_decl>. 18654 186552015-10-04 Dodji Seketeli <dodji@redhat.com> 18656 18657 Use the ODR to speed up type canonicalization 18658 * include/abg-fwd.h (class corpus): Forward-declare this. 18659 (is_anonymous_type): Declare this new function. 18660 * include/abg-ir.h (corpus_sptr, corpus_wptr): Declare these 18661 typedefs here too. 18662 (translation_unit::{g,s}et_corpus): Declare new member functions. 18663 (type_or_decl_base::{g,s}et_corpus): Likewise. 18664 * src/abg-ir.cc (translation_unit::priv::corpus): New data member. 18665 (translation_unit::priv::priv): Initialize it. 18666 (translation_unit::{g,s}et_corpus): Define new accessors. 18667 (translation_unit::get_global_scope): Propagate the corpus of the 18668 translation unit to its newly created global scope. 18669 (translation_unit::bind_function_type_life_time): Propagate the 18670 corpus of the translation_unit to the added function type. 18671 (type_or_decl_base::priv::corpus_): Add new data member. 18672 (type_or_decl_base::priv::priv): Initialize it. 18673 (type_or_decl_base::{g,s}et_corpus): Define new accessors. 18674 (scope_decl::{add,insert}_member_decl): Propagate the context's 18675 corpus to the member added to the context. 18676 (decl_base::priv::is_anonymous_): Add new data member. 18677 (decl_base::priv::priv): Initialize it. 18678 (decl_base::{s,g}et_is_anonymous): Define accessors. 18679 (is_anonymous_type): Define a new test function. 18680 (decl_base::set_name): Update the "is_anonymous" property. 18681 (type_base::get_canonical_type_for): Implement the ODR-based 18682 optimization to type canonicalization. 18683 * src/abg-corpus.cc (corpus::add): When a translation unit is 18684 added to a corpus, set the corpus of the translation unit. 18685 * src/abg-dwarf-reader.cc (build_enum_type) 18686 (build_class_type_and_add_to_ir): Set the "is_anonymous" flag on 18687 anonymous enums and classes. 18688 * src/abg-reader.cc (read_is_anonymous): Define new static 18689 function. 18690 (build_type_decl, build_enum_type, build_class_decl): Call the new 18691 read_is_anonymous function and set the "is_anonymous" property on 18692 the built type declaration. 18693 * src/abg-writer.cc (write_is_anonymous): Define new static 18694 function. 18695 (write_type_decl, write_enum_type_decl, write_class_decl): Write 18696 the "is_anonymous" property. 18697 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 18698 Adjust. 18699 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 18700 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 18701 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 18702 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18703 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 18704 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 18705 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 18706 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18707 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 18708 187092015-10-04 Dodji Seketeli <dodji@redhat.com> 18710 18711 Late canonicalize all types that reference classes when reading DWARF 18712 * include/abg-fwd.h (peel_array_type): Declare new function. 18713 * src/abg-ir.cc (peel_array_type): Define it. 18714 (peel_typedef_pointer_or_reference_type): Peel arrays too, to get 18715 the type of its element. 18716 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): If a pointer, 18717 reference, array or typedef references a class, then do 18718 late-canonicalize this type. 18719 187202015-10-04 Dodji Seketeli <dodji@redhat.com> 18721 18722 Fix infinite loop in peel_typedef_pointer_or_reference_type 18723 * src/abg-ir.cc (peel_typedef_pointer_or_reference_type): Make 18724 sure the variable tested in the condition is the one updated by 18725 the loop. 18726 187272015-10-02 Dodji Seketeli <dodji@redhat.com> 18728 18729 Try harder to hash_type_or_decl avoid the slow path 18730 * src/abg-ir.cc (hash_type_or_decl): When a declaration-only 18731 class has a definition, then use the canonical type of that 18732 definition as a hash value. If the class no definition, only 18733 then, use the slow patfh of computing the recursive progressive 18734 hash value of the type. 18735 187362015-10-02 Dodji Seketeli <dodji@redhat.com> 18737 18738 Do not use recursive type hashing when writing out function types 18739 * src/abg-writer.cc (typedef fn_shared_ptr_map): Remove. 18740 (write_context::m_referenced_fntypes_map): Change the type of this 18741 into type_ptr_map. 18742 (write_context::{record_fntype_as_referenced, 18743 fntype_is_referenced}): Use the pointer value of the canonical 18744 type of the referenced type as key for the map. 18745 187462015-10-02 Dodji Seketeli <dodji@redhat.com> 18747 18748 Prevent build_function_type from not canonicalizing certain types 18749 * src/abg-dwarf-reader.cc (build_function_type): Associate the 18750 type being built with its DIE, before starting to build the 18751 sub-types. The current type is then amended with the sub-types 18752 that are built later. 18753 (build_ir_node_from_die): In the case for DW_TAG_subroutine_type, 18754 do not associate the type to the DIE here, as it's been done in 18755 build_function_type. 18756 * src/abg-ir.cc (function_type::set_parameters): Adjust the index 18757 of the parameters being set to the function: they start at 1, 18758 unless the first parameter is artificial, in which case its index 18759 starts at zero. This is just like what is done when the function 18760 type is constructed directly with the parameters passed as an 18761 argument to the constructor. 18762 187632015-10-02 Dodji Seketeli <dodji@redhat.com> 18764 18765 Fix detection of changes in pointer diff in the comparison engine 18766 * src/abg-comparison.cc (pointer_diff::has_changes): Just 18767 comparing the underlying type might not be enough. Let's just 18768 compare the pointer itself. Now that we have canonical types, 18769 comparing the pointer itself is not slower. 18770 187712015-10-02 Dodji Seketeli <dodji@redhat.com> 18772 18773 Do not overly canonicalize types during typedef stripping 18774 * src/abg-ir.cc (strip_typedef): Do not canonicalize the stripped 18775 type if the input one is not canonicalized. 18776 187772015-10-02 Dodji Seketeli <dodji@redhat.com> 18778 18779 Cleanup some IR type comparison operators 18780 * include/abg-ir.h (operator==): In the overloads for type_decl, 18781 enum and class_decl, turn the shared_ptr parameter into a const 18782 reference to the shared_ptr. 18783 * src/abg-ir.cc (operator==): Do the same in the definitions. 18784 187852015-10-02 Dodji Seketeli <dodji@redhat.com> 18786 18787 Add missing deep equality operator for pointer and reference types 18788 * include/abg-ir.h (pointer_type_def::operator==): Add an overload 18789 for pointer_type_def. 18790 (reference_type_def::operator==) Add an overload for 18791 reference_type_def. 18792 (operator==): Add an overload for pointer_type_def_sptr and 18793 reference_type_def_sptr. 18794 * src/abg-ir.cc (pointer_type_def::operator==): Make the overload 18795 for type_base& use the overload for decl_base&. Add a new 18796 overload for pointer_type_def& and make is use the overload for 18797 decl_base& too. 18798 (operator==): Add free form overloads for pointer_type_def& and 18799 reference_type_def&. 18800 (reference_type_def::operator==): Add comments. Add an overload 18801 for reference_type_def&. 18802 188032015-10-02 Dodji Seketeli <dodji@redhat.com> 18804 18805 constify is_class_type() 18806 * include/abg-fwd.h (is_class_type): Take a pointer to const. 18807 * src/abg-ir.cc (is_class_type): Adjust. 18808 188092015-10-01 Ondrej Oprala <ooprala@redhat.com> 18810 18811 Bug 19027 - ABI asymmetry with enums over INT_MAX 18812 * src/abg-reader.cc (build_enum_type_decl): Use strtol 18813 instead of atoi to parse the values and check for overflow. 18814 * tests/data/Makefile.am: Add the new test material to the build 18815 system. 18816 * tests/data/test-read-dwarf/test17-pr19027.so: New test file. 18817 * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 18818 * tests/test-read-dwarf.cc: Adjust to launch the new test. 18819 188202015-10-01 Dodji Seketeli <dodji@redhat.com> 18821 18822 Encourage people to use autoreconf -i 18823 * COMPILING: Mention autoreconf -i, rather than just autoreconf. 18824 188252015-09-23 Ondrej Oprala <ooprala@redhat.com> 18826 18827 Bug 17340 - Support pointers and references to functions 18828 * include/abg-comparison.h (compute_diff_for_distinct_kinds): Take the 18829 first two arguments of type const type_or_decl_base_sptr instead. 18830 * include/abg-ir.h (translation_unit::get_function_types): Declare new 18831 method. 18832 (function_types): Declare new typedef. 18833 * src/abg-comparison.cc (compute_diff_for_types): Take the first two 18834 arguments of type const type_or_decl_base_sptr instead of a const 18835 decl_base_sptr. 18836 (try_to_diff): Likewise. 18837 (try_to_diff<class_decl>): Likewise. 18838 (try_to_diff_distinct_kinds): Likewise. 18839 (compute_diff_for_distinct_kinds): Likewise. Also remove a variant 18840 accepting arguments of type const type_base_sptr. 18841 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Skip 18842 building a pointer if it points to the beginning of a vptr. 18843 (build_pointer_type_def): Declare utype_decl of type 18844 type_or_decl_base_sptr and adjust assignments to it accordingly. 18845 (build_function_type): New function definition. 18846 (build_function_decl): Call build_function_type instead of building 18847 an ftype manually. 18848 (build_ir_node_from_die): Amend case DW_TAG_subroutine_type with 18849 appropriate calls to build a function type. 18850 * src/abg-ir.cc (translation_unit::get_function_types): New method 18851 definition. 18852 ({pointer,reference}_type_def::pointer_type_def): Expect that 18853 pointed_to might not have an accompanying declaration and set a type's 18854 name in this case as well. 18855 ({pointer,reference}_type_def::get_qualified_name): Generate a 18856 qualified name even if the pointed-to type has no declaration. 18857 * src/abg-reader.cc (build_function_type): New function definition. 18858 (handle_element_node): Return a type_or_decl_base_sptr instead and 18859 try calling handle_function_type in addition to others. 18860 (handle_function_type): New function definition that calls 18861 build_function_type. 18862 (build_type): Try calling build_function_type as well. 18863 * src/abg-writer.cc (fn_shared_ptr_map): Declare new typedef. 18864 (write_context::{clear_referenced_fntypes_map,fntype_is_referenced, 18865 record_fntype_as_referenced}): New member functions. 18866 (write_translation_unit): Call the new clear_referenced_fntypes_map. 18867 * tests/data/Makefile.am: Add the new test material to the build 18868 system. 18869 (write_translation_unit): Separately write function types that have 18870 been recorded to emit by write_{pointer,reference}_type_def. 18871 (write_{pointer,reference}_type_def): Record the type pointed to as 18872 a type to be emitted if type == function type. 18873 (write_function_type): Write the details of a function type in the 18874 abixml format and unmark the type. 18875 * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: New 18876 test reference report. 18877 * tests/data/test-diff-dwarf/test32-fnptr-changes-v{0,1}.cc: New test 18878 source files. 18879 * tests/data/test-diff-dwarf/test32-fnptr-changes-v{0,1}.o: New binary 18880 test inputs. 18881 * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: New 18882 test reference report. 18883 * tests/data/test-diff-dwarf/test33-fnref-changes-v{0,1}.cc: New test 18884 source files. 18885 * tests/data/test-diff-dwarf/test33-fnref-changes-v{0,1}.o: New binary 18886 test inputs. 18887 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 18888 Adjust. 18889 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 18890 Likewise. 18891 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 18892 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 18893 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 18894 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 18895 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 18896 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 18897 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18898 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 18899 * tests/data/test-read-write/test27.xml: New test source file. 18900 * tests/test-diff-dwarf.cc: Adjust to launch the new tests. 18901 * tests/test-read-write.cc: Likewise. 18902 189032015-09-09 Ondrej Oprala <ooprala@redhat.com> 18904 18905 Generalize some dwarf-reader functions to generate and return instances of type_or_decl_base_stpr to be able to propagate types occurring without an accompanying declaration. 18906 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Return 18907 a type_or_decl_base_sptr instead. 18908 (get_scope_for_die): Likewise. 18909 (build_class_type_and_add_to_ir): Typecast the assignment from 18910 build_ir_node_from_die properly. 18911 (build_{qualified,reference,array,typedef}_type): Likewise. 18912 (build_pointer_type_def): Likewise. 18913 (build_{var,function}_decl): Likewise. 18914 189152015-09-29 Ondrej Oprala <ooprala@redhat.com> 18916 18917 Move a constructor declaration 18918 * include/abg-ir.h (decl_base): Change the decl_base() declaration's 18919 visibility to private. 18920 189212015-09-24 Dodji Seketeli <dodji@redhat.com> 18922 18923 Bug 18535 - abidiff reports false positive ABI difference for libstdc++ 18924 *non-static* data member; a static data member only is not enough to 18925 make the class declaration become a definition. 18926 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): The 18927 presence of a data member shouldn't make a declaration-only class 18928 loose its declaration-only-ness; the presence of a enon-static* 18929 data member should. 18930 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. 18931 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 18932 * tests/data/test-diff-filter/test31-pr18535-libstdc++-4.8.3.so: 18933 New binary test input. 18934 * tests/data/test-diff-filter/test31-pr18535-libstdc++-4.9.2.so: 18935 Likewise. 18936 * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: 18937 New test reference output. 18938 * tests/data/Makefile.am: Add the new test material to the build 18939 system. 18940 * tests/test-diff-filter.cc (in_out_specs): Add the new test 18941 inputs to the set of inputs to consider. 18942 189432015-09-21 Dodji Seketeli <dodji@redhat.com> 18944 18945 Remove duplicated runtestreaddwarf test 18946 * tests/Makefile.am: Remove one copy of the runtestreaddwarf test 18947 that is present twice. 18948 189492015-09-21 Dodji Seketeli <dodji@redhat.com> 18950 18951 Add a missing function declaration 18952 * include/abg-tools-utils.h (dir_name): Add missing function 18953 declaration. 18954 189552015-09-21 Dodji Seketeli <dodji@redhat.com> 18956 18957 Remove some dead code in abilint 18958 * tools/abilint.cc (options::bidiff): Remove. 18959 (options::options): Adjust. 18960 (display_usage): Remove usage string for --bidiff 18961 (parse_command_line): Remove parsing of un-implemented option 18962 --bidiff. 18963 189642015-09-21 Dodji Seketeli <dodji@redhat.com> 18965 18966 Add a new --abidiff option to abidw 18967 * tools/abidw.cc (options::abidiff): New data member. 18968 (options::options): Initialize it. 18969 (display_usage): Add a usage string for the new --abidiff option. 18970 (parse_command): Parse the new --abidiff options. 18971 (main): Save the abi of the input elf in a temporary abixml file; 18972 read it back and compare both. 18973 189742015-09-21 Dodji Seketeli <dodji@redhat.com> 18975 18976 Misc style fixes 18977 * src/abg-hash.cc (class_decl::hash::operator()): Use a temporary 18978 variable to ease debugging. 18979 * src/abg-reader.cc (read_context::is_wip_type): Make this 18980 function const. 18981 * src/abg-writer.cc (write_context): Move data members at the top. 18982 189832015-09-21 Dodji Seketeli <dodji@redhat.com> 18984 18985 Speed up type canonicalization by avoiding recursive hashing 18986 * include/abg-ir.h (canonical_types_map_type): Adjust this typedef 18987 to make it point to an unordered_map which the key is now a string 18988 and the value is a vector of types. 18989 (type_or_decl_base::{get_cached_hash_value, set_cached_hash_value, 18990 cached_hash}): Remove these member functions and type. 18991 (struct type_base::cached_hash): Remove. 18992 * src/abg-ir.cc (struct type_or_decl_base::priv::hash_): Remove. 18993 (type_or_decl_base::priv::priv): Adjust. 18994 (type_or_decl_base::{g,s}et_cached_hash_value): Remove. 18995 (type_base::get_canonical_type_for): For declaration-only classes, 18996 look at their definition for the canonical_type. Do not use 18997 recursive type hashing anymore. Rather, use the pretty 18998 representation string, and hash that. 18999 (class_decl::base_spec::get_hash): Do away with hash value caching 19000 here. 19001 (class_decl::operator==): For decl-only classes, look at their 19002 definitions for canonical types. 19003 (hash_type_or_decl): Adjust comment. Use the canonical type 19004 pointer value for type hash. That's the fast path. Otherwise, if 19005 not available, fall back to a slow path which is the recursive 19006 type hash we were using before. 19007 * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Schedule all 19008 classes and typedef to classes for late canonicalization. 19009 * src/abg-hash.cc (type_base::dynamic_hash::operator()): There is 19010 no hash value cashing anymore. 19011 (type_base::cached_hash::operator()): Remove. 19012 * src/abg-reader.cc (read_context::get_type): Slight style 19013 adjustment. 19014 (read_translation_unit_from_file) 19015 (read_translation_unit_from_buffer): Do not forget to canonicalize 19016 types when reading just one translation unit. 19017 (build_type_tparameter, build_template_tparameter): Canonicalize 19018 the type. 19019 * src/abg-writer.cc (struct type_hasher): New hasher type. 19020 (type_ptr_map): Use a deep pointer comparison equal operator 19021 functor, and canonical types as type hash values. 19022 (write_class_decl): Do not write size and alignment on decl-only 19023 classes. Do not record decl-only classes as being emitted. Their 19024 definition must be emitted before. 19025 * tests/test-read-write.cc (main): Do not do abi testing on 19026 translation units (as opposed to doing it on abi corpora) as that 19027 code is not wet yet. We need to know how to diff namespaces. 19028 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 19029 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 19030 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 19031 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 19032 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 19033 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 19034 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 19035 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 19036 190372015-09-21 Dodji Seketeli <dodji@redhat.com> 19038 19039 Update qualified name of a decl when it's added to its context 19040 * include/abg-ir.h (decl_base::priv_): Make this be public, so 19041 that the qualified name updater function can access it. 19042 (class class_decl): Make set_member_is_static() a friend function. 19043 * src/abg-ir.cc (class ::qualified_name_setter): New tree walking 19044 type. 19045 (decl_base::get_qualified_parent_name): Do not do any computation 19046 here. Just return the pre-computed qualified parent name string. 19047 (decl_base::get_qualified_name): Likewise, for qualified name. 19048 (scope_decl::{add,insert}_member_decl): Update the qualified name of the 19049 newly added member. Set the scope of the member here. It's not 19050 going to be set elsewhere, from now on. 19051 (add_decl_to_scope): Do not set the scope here anymore. Just call 19052 scope_decl::add_member_decl and let it do the work. 19053 (insert_decl_into_scope): Likewise, just call 19054 scope_decl::insert_member_decl and let it do the work. 19055 (class_decl::{add_data_member, add_member_function}): Do not 19056 handle details of context setting at this point. Let 19057 scope_decl::add_member_decl do it. Adjust the properties of the 19058 context relation afterwards. In add_data_member, when a data 19059 member changes its static-ness, move the data member into the 19060 class_decl::priv::non_static_data_members_ or out of it, as 19061 necessary. 19062 (class_decl::insert_member_decl): By default, a data member is 19063 considered static. 19064 (set_member_is_static): Move this definition after the definitions 19065 of class_decl, so that this function can see those. Also, when a 19066 data member changes its static-ness, move the data member into the 19067 class_decl::priv::non_static_data_members_ or out of it, as 19068 necessary. 19069 (class_decl::add_member_function_template): As we the 19070 underlying function template decl to the context, do not do any 19071 scope adding for it here. 19072 (::qualified_name_setter::{do_update, visit_begin}): Define new 19073 member functions. 19074 (update_qualified_name): Define new static function. 19075 * src/abg-reader.cc (build_class_decl): Make build_function_decl, 19076 build_var_decl, build_function_tdecl and build_class_tdecl 19077 automatically add the created decl to their context, and then 19078 update the properties of the resulting member decl later, just 19079 like what we do in the DWARF reader. 19080 190812015-09-21 Dodji Seketeli <dodji@redhat.com> 19082 19083 Add new test functions 19084 * include/abg-fwd.h (is_function_decl, is_decl, is_namespace) 19085 (is_scope_decl): Declare new function overloads. 19086 * src/abg-ir.cc (is_function_decl, is_decl, is_namespace) 19087 (is_scope_decl): Define them. 19088 190892015-09-21 Dodji Seketeli <dodji@redhat.com> 19090 19091 Constify some diff-utils functor operators 19092 * include/abg-diff-utils.h (deep_ptr_eq_functor::operator()): Make 19093 the overloads be const. 19094 190952015-09-16 Dodji Seketeli <dodji@redhat.com> 19096 19097 Support source_location_not_in and source_location_not_regexp suppressions 19098 * include/abg-ini.h (enum property_value::value_kind): Add a 19099 LIST_PROPERTY_VALUE kind. 19100 (class {list_property_value, list_property}): Declare new types. 19101 (is_list_property, is_list_property_value): Declare new functions. 19102 * src/abg-ini.cc (struct list_property_value::priv): Define new 19103 type. 19104 (list_property_value::{list_property_value, get_content, 19105 set_content, as_string}): Define new member functions. 19106 (is_list_property_value): Define new function. 19107 (struct list_property::priv): Define new type. 19108 (list_property::{list_property, get_value, set_value, 19109 handle_escape}): Define new member functions. 19110 (is_list_property): Define new function. 19111 (read_context::buf_): New data member. 19112 (read_context::{peek, get, put_back, good, eof, read_string, 19113 read_list_property_value}): New member functions. 19114 (read_context::read_next_char): Use the new read_context::{get, 19115 good, eof} member function, rather than using the input stream 19116 directly. 19117 (read_context::{skip_white_spaces, skip_comments, 19118 skip_white_spaces_or_comments, read_property_name, 19119 read_function_name, read_function_argument, 19120 read_function_call_expr, read_property_value, 19121 read_tuple_property_value, read_section_name, read_section}): 19122 Adjust to use the new member functions of read_context rather than 19123 using the input stream directly. 19124 (read_context::read_string_property_value): Likewise. Use the new 19125 read_context::read_string() method. 19126 (read_context::{read, write}_property): Support reading list_property. 19127 * include/abg-comparison.h 19128 (type_suppression::{get_source_locations_to_keep, 19129 set_source_locations_to_keep, 19130 set_source_location_to_keep_regex_str, 19131 get_source_location_to_keep_regex_str}): Add new member functions. 19132 * src/abg-comparison.cc 19133 (type_suppression::priv::{source_location_to_keep_, 19134 source_location_to_keep_regex_str_, 19135 source_location_to_keep_regex_}): Add new data members. 19136 (type_suppression::priv::{g,s}et_source_location_to_keep_regex): 19137 Define new member functions. 19138 (type_suppression::{g,s}et_source_locations_to_keep): Define new 19139 member functions. 19140 (type_suppression::{g,s}et_source_location_to_keep_regex_str): 19141 Likewise. 19142 (type_suppression::suppresses_type): Support 19143 "source_location_not_regexp" and "source_location_not_in" 19144 properties of suppression specifications. 19145 (read_type_suppression): Likewise. Also adjust to the fact that 19146 ta tuple property value that is a list of strings is not a list 19147 property value. 19148 * doc/manuals/libabigail-concepts.rst: Add documentation for 19149 source_location_not_in and source_location_not_regexp. 19150 * tests/data/test-diff-suppr/libtest26-loc-suppr-v{0,1}.so: New 19151 binary test inputs. 19152 * tests/data/test-diff-suppr/test26-loc-suppr-{0,1,2}.suppr: New 19153 suppression specification test inputs. 19154 * tests/data/test-diff-suppr/test26-loc-suppr-report-{0,1,2,3}.txt: 19155 New test reference reports. 19156 * tests/data/test-diff-suppr/test26-loc-suppr-v{0,1}.cc: Source 19157 code of the test binary input above. 19158 * tests/data/test-diff-suppr/test26-loc-suppr.h: Likewise. 19159 * tests/data/Makefile.am: Add the new test material to source 19160 distribution. 19161 * tests/test-diff-suppr.cc (in_out_specs): Add the new test inputs above. 19162 191632015-09-16 Dodji Seketeli <dodji@redhat.com> 19164 19165 Pass simple property data by reference 19166 * include/abg-ini.h (simple_property::{simple_property, 19167 set_value}): Pass the value shared pointer by reference. 19168 * src/abg-ini.cc (simple_property::{simple_property, set_value): 19169 Pass the value shared pointer by reference. 19170 191712015-09-15 Dodji Seketeli <dodji@redhat.com> 19172 19173 Make string_ends_with() allow long suffixes 19174 * src/abg-tools-utils.cc (string_ends_with): Allow suffixes of the 19175 same size as the input string. 19176 191772015-09-13 Dodji Seketeli <dodji@redhat.com> 19178 19179 Add missing 'break' keyword in e_machine_to_string() 19180 * src/abg-dwarf-reader.cc (e_machine_to_string): Add missing 19181 'break' keywords in switch/case statement. 19182 191832015-09-09 Dodji Seketeli <dodji@redhat.com> 19184 19185 Fix compilation warnings in abipkgdiff.cc 19186 * tools/abipkgdiff.cc (package::erase_extraction_directory) 19187 (extract_rpm, extract_deb, extract_tar) 19188 (erase_created_temporary_directories_parent): Check the return 19189 value of the system() function. 19190 (extract_package): Add necessary white space. 19191 191922015-09-09 Dodji Seketeli <dodji@redhat.com> 19193 19194 Fix spurious errors in the install-man-and-info-doc target 19195 * doc/manuals/Makefile.am (install-man-and-info-doc): Don't check 19196 for abidiff.info, that thing doesn't exist. Rather, check for 19197 abigail.info. Use gzip -f in case the zipped file exists already. 19198 191992015-09-09 Dodji Seketeli <dodji@redhat.com> 19200 19201 Compare qualified name in decl_base comparison operator 19202 * src/abg-ir.cc (equals): In the overload for decl_base, compare 19203 qualified names, not just names. 19204 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 19205 192062015-09-08 Dodji Seketeli <dodji@redhat.com> 19207 19208 Fix a stupid typo in function sorting code 19209 * src/abg-comparison.cc (function_comp::operator()): Fix a typo 19210 preventing the proper sorting of function name when their 19211 declarator names are equal. Oops. 19212 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 19213 192142015-09-08 Dodji Seketeli <dodji@redhat.com> 19215 19216 Update manual for abipkgdiff 19217 * doc/manuals/abipkgdiff.rst: Say we support tarballs and plain 19218 directories. 19219 192202015-09-07 Dodji Seketeli <dodji@redhat.com> 19221 19222 Adjust {s,g}et_show_stats() to use a reference 19223 * include/abg-dwarf-reader.h ({s,g}et_show_stats): Use a reference 19224 to the reader. 19225 * tools/abidiff.cc (main): Adjust. 19226 * tools/abidw.cc (main): Likewise. 19227 192282015-09-07 Dodji Seketeli <dodji@redhat.com> 19229 19230 Use cache type hash values only after type canonicalization is done 19231 *when* we request that hash value. If we are computing the hash value 19232 of struct list itself, then the temporary value of "struct list" is 19233 zero. But then once we are done computing the hash value of "struct 19234 list", that value becomes non-zero. 19235 Hence, the hash value of a type depends on when that value is 19236 computed. 19237 But then if we want to cache that hash value and re-use it later, 19238 which value should we cache? Definitely not the zero value! 19239 So in other words, we can use (and thus cache) the hash value of a 19240 given type T only after the hash values of all types which use T have 19241 been computed. 19242 To satisfy that condition, we decide to use the (cached) hash value of 19243 each type only after we've computed all the hash values of all types 19244 of the system. 19245 So, during type canonicalization, when a type T is canonicalized, this 19246 patch stores the hash value of T. But then it's only when all types 19247 are canonicalized that the hashing code is allowed to re-use the 19248 cached value of types. 19249 This fixes the issues of spurious type differences introduced when the 19250 same type was read either from DWARF or from abixml. Those 19251 differences where introduced by differences in the order of hashing 19252 types which sub-types refer to themselves. The patch also updates 19253 regression tests accordingly. 19254 * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Before we 19255 read debug info and build the IR, set a flag in the environment 19256 saying that type canonicalization isn't finished yet. But then, 19257 after type canonicalization is done, flip that flag to say that 19258 type canonicalization is done. 19259 * src/abg-reader.cc (read_corpus_from_input): Likewise. 19260 * src/abg-ir.cc (type_base::get_canonical_type_for): Once a type 19261 has been canonicalized, cache its hash value. 19262 * src/abg-hash.cc (type_base::dynamic_hash::operator()): If type 19263 canonicalization has been done and if the type has a cached value, 19264 use that one. 19265 * tests/data/test-read-dwarf/test2.so.abi: Adjust. 19266 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 19267 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 19268 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 19269 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 19270 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 19271 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 19272 * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 19273 192742015-09-07 Dodji Seketeli <dodji@redhat.com> 19275 19276 Introduce the concept of environment 19277 * include/abg-ir.h: Adjust note about memory management. 19278 (class environment): Declare new class. 19279 (translation_unit::translation_unit): Take an environment in 19280 parameter. 19281 (translation_unit::{g,s}et_environment): Declare new member 19282 functions. 19283 (type_or_decl_base::{g,s}et_environment): Likewise. 19284 (type_or_decl_base::{get_cached_hash_value, 19285 set_cached_hash_value}): Change the name of 19286 decl_base::peek_hash_value() and decl_base::set_hash() here into 19287 these and move them here. 19288 (type_or_decl_base::hashing_started): Move 19289 decl_base::hashing_started() here. 19290 ({g,s}et_environment_for_artifact): Declare new functions. 19291 (class decl_base): Move member functions hashing_started(), 19292 peek_hash_value() and set_hash() on to the type_or_decl_base base 19293 class. 19294 (scope_decl::scope_decl): Initialize the virtual member 19295 type_or_decl_base(). 19296 (type_decl::{get_void_type_decl, 19297 get_variadic_parameter_type_decl}): Remove these static member 19298 functions. They are now non-static member functions of the new 19299 environment type. 19300 * src/abg-ir.cc (class environment_setter): New internal class. 19301 (get_canonical_types_map): Remove. This now becomes a member 19302 function of the environment type. 19303 (class usage_watchdog): Remove. 19304 (usage_watchdog_{s,w}ptr): Remove these typedefs. 19305 (get_usage_watchdog_wptr, ref_usage_watchdog) 19306 (maybe_cleanup_type_system_data): Remove these functions. 19307 (translation_unit::priv::usage_watchdog_): Remove data member. 19308 (translation_unit::priv::env_): New data member. 19309 (translation_unit::priv::priv): Take an environment and initialize 19310 the new env_ data member. Do not initialize the removed 19311 usage_watchdog_. 19312 (translation_unit::translation_unit): Take an environment 19313 parameter. 19314 (translation_unit::get_global_scope): Set the environment of a new 19315 global scope. 19316 (translation_unit::{g,s}et_environment): New accessors. 19317 (translation_unit::bind_function_type_life_time): Set the 19318 environment of the function type. 19319 (struct environment::priv): New class. 19320 (environment::{environment, ~environment, get_canonical_types_map, 19321 get_variadic_parameter_type_decl, canonicalization_is_done}): New 19322 member functions. 19323 (struct type_or_decl_base::priv): New class. 19324 (type_or_decl_base::{type_or_decl_base, hashing_started, 19325 get_cached_hash_value, set_cached_hash_value, set_environment, 19326 get_environment, traverse}): New member functions. 19327 ({s,g}get_environment_for_artifact): New functions. 19328 (decl_base::priv::{hash_, hashing_started}): Remove. 19329 (decl_base::priv::priv): Adjust. 19330 (decl_base::decl_base): In the copy constructor, initialize the 19331 virtual base type_or_decl_base. Do not initialize hash_ and 19332 hashing_started data member that got removed. 19333 (decl_base::{hashing_started, peek_hash_value, set_hash}): Remove 19334 member functions. 19335 (strip_typedef): Set the environment of the new type which has its 19336 typedefs stripped off. Adjust the call to type_or_void(). 19337 (scope_decl::{add, insert}_member_decl): Set the environment of 19338 the new member decl to the environment of its scope. 19339 (synthesize_type_from_translation_unit) 19340 (synthesize_function_type_from_translation_unit): Set the 19341 environment for the newly synthesized type. Adjust calls to 19342 type_or_void(). 19343 (type_or_void): Take an environment in parameter. Get the void 19344 type from the environment. 19345 (get_canonical_types_map): Remove. 19346 (type_base::get_canonical_type_for): Get the canonical types map 19347 from the environment, not from a global variable. 19348 (type_decl::{get_void_type_decl, 19349 get_variadic_parameter_type_decl}): Remove. 19350 (pointer_type_def::pointer_type_def): Adjust call to type_or_void. 19351 (reference_type_def::reference_type_def): Likewise. 19352 (function_decl::parameter::get_pretty_representation): Get the 19353 variadic parameter type decl from the environment. 19354 (class_decl::priv::classes_being_compared_): Remove static data 19355 member. 19356 (class_decl::priv::{mark_as_being_compared, 19357 unmark_as_being_compared, comparison_started): Use the "classes 19358 being compared" map from the environment. 19359 (class_decl::base_spec::get_hash): Adjust. 19360 (keep_type_alive): Get the alive types array from the environment) 19361 not from a global variable anymore. 19362 (get_next_string): Put the counter in thread-local storage. 19363 * src/abg-hash.cc (scope_decl::hash::operator()) 19364 (function_decl::hash::operator()): Do not handle caching (here). 19365 * include/abg-corpus.h (corpus::{g,s}et_environment): Declare new 19366 accessors. 19367 * src/abg-corpus.cc (corpus::priv::env): New data member. 19368 (corpus::priv::priv): Initialize it. 19369 (corpus::corpus): Take an environment in parameter. 19370 (corpus::{g,s}et_environment): Define new member functions 19371 (corpus::add): Set the environment of the newly added translation 19372 unit, if it's not set already set. In any case, assert that the 19373 translation unit must use the same environment as the corpus. 19374 * include/abg-dwarf-reader.h (create_read_context) 19375 (read_corpus_from_elf): Take an environment parameter. 19376 ({s,g}et_debug_info_root_path, {s,g}et_environment): Declare new 19377 functions. 19378 * src/abg-dwarf-reader.cc (read_context::{env_, 19379 offline_callbacks_}): New data members. 19380 (read_context::read_context): Initialize them. 19381 (read_context::clear_per_translation_unit_data): Do not touch the 19382 void type declaration, it doesn't belong to the translation unit. 19383 (read_context::{env, offline_callbacks}): New accessors. 19384 (read_context::{create_default_dwfl}): New member function. 19385 (read_context::dwfl_handle): Add a setter overload. 19386 ({s,g}et_debug_info_root_path): Define new accessors. 19387 (create_default_dwfl, create_dwfl_sptr, create_default_dwfl_sptr): 19388 Remove these. 19389 (build_translation_unit_and_add_to_ir): Adjust to pass the 19390 environment to the newly created translation unit. 19391 (build_function_decl): Adjust to pass the environment to the 19392 created function and parameter types. Get variadic parameter type 19393 node from the current environment, not from a global variable. 19394 And do not try to canonicalize function types here. 19395 (read_debug_info_into_corpus): Set the environment of the newly 19396 created corpus. 19397 (build_ir_node_for_void_type): Get the void type node from the 19398 current environment, rather than from a global variable. 19399 (create_read_context): Take the environment in parameter. 19400 Create the default dwarf front end library handle using the new 19401 member function of the read context. Set the current environment 19402 used by the reader. 19403 (read_corpus_from_elf): Take an environment in 19404 parameter. Overhaul. This is now simpler. 19405 (has_alt_debug_info): Adjust the call to create_read_context() to 19406 make it pass an empty environment. 19407 * include/abg-fwd.h (class environment): Forward declare. 19408 * include/abg-reader.h (read_translation_unit_from_file) 19409 (read_translation_unit_from_buffer) 19410 (read_translation_unit_from_istream) 19411 (read_corpus_from_native_xml): Take an environment in parameter. 19412 * src/abg-reader.cc (read_context::m_env): New data member. 19413 (read_context::read_context): Initialize it. 19414 (read_context::{get_environment, set_environment}): New data 19415 member. 19416 (read_translation_unit): Set environment of the new translation 19417 unit. 19418 (read_corpus_from_input): Set the environment of the new corpus. 19419 (read_translation_unit_from_file) 19420 (read_translation_unit_from_buffer) 19421 (read_translation_unit_from_istream, read_corpus_from_native_xml): 19422 Take an environment in parameter. 19423 (build_function_parameter): Get variadic parameter type from the environment. 19424 * src/abg-comparison.cc (compute_diff): Add asserts in all the 19425 overloads to ensure that the artifact being compared come from the 19426 same environment. 19427 * tests/print-diff-tree.cc (main): Create an env for the ABI 19428 artifacts to use. 19429 * tests/test-abidiff.cc (main): Likewise. 19430 * tests/test-diff-dwarf.cc (main): Likewise. 19431 * tests/test-ir-walker.cc (main): Likewise. 19432 * tests/test-read-dwarf.cc (main): Likewise. 19433 * tests/test-read-write.cc (main): Likewise. 19434 * tools/abicompat.cc (main): Likewise. 19435 * tools/abidiff.cc (main): Likewise. 19436 * tools/abidw.cc (main): Likewise. 19437 * tools/abilint.cc (main): Likewise. 19438 * tools/abipkgdiff.cc (main): Likewise. 19439 194402015-09-07 Dodji Seketeli <dodji@redhat.com> 19441 19442 Fix redundant const qualifier stripping 19443 * include/abg-ir.h (operator&, operator~): Add overloaded bitwise 19444 operators for qualified_type_def::CV. 19445 * src/abg-ir.cc (operator&, operator~): Define them. 19446 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Fix 19447 comment. If there are multiple qualifiers, only strip the const 19448 one. 19449 (build_ir_node_from_die): Once we've built a qualified type, if 19450 the 'const' qualifier is stripped, then add the new (stripped) 19451 type to the set of new types. 19452 194532015-09-05 Dodji Seketeli <dodji@redhat.com> 19454 19455 Fix wording in README 19456 * README: Fix wording. 19457 194582015-09-02 Dodji Seketeli <dodji@redhat.com> 19459 19460 Misc style fixes 19461 * src/abg-hash.cc (class_decl::hash::operator()): Remove some dead 19462 code. 19463 * src/abg-ir.cc (equals): In the overload for class_decl, 19464 re-indent. 19465 194662015-09-02 Dodji Seketeli <dodji@redhat.com> 19467 19468 Re-arrange some regression tests order 19469 * tests/Makefile.am: Run runtestreaddwarf and 19470 runtestcanonicalizetypes at the beginning. 19471 194722015-09-02 Dodji Seketeli <dodji@redhat.com> 19473 19474 Bug 18904 - Fix support for C++ rvalue references 19475 * src/abg-comparison.cc (reference_diff::has_changes): Just 19476 compare the references, rather than assuming that the change can 19477 only be on underlying types. 19478 (reference_diff::report): Describe lvalue/rvalue changes for 19479 references. 19480 * src/abg-ir.cc (reference_type_def::reference_type_def): Properly 19481 set the name for an rvalue reference. 19482 (equals): For references, compare lvalue-ness too. 19483 (reference_type_def::get_qualified_name): Properly set rvalue 19484 reference names. 19485 * tests/data/test-diff-filter/test30-pr18904-rvalueref-liba.so: 19486 New test input. 19487 * tests/data/test-diff-filter/test30-pr18904-rvalueref-libb.so: 19488 New test input. 19489 * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: 19490 New test reference output. 19491 * tests/data/Makefile.am: Add the new files to source 19492 distribution. 19493 * tests/test-diff-filter.cc (in_out_specs): Run the new tests. 19494 194952015-09-02 Dodji Seketeli <dodji@redhat.com> 19496 19497 More type degradation fixes (from DWARF to abixml) 19498 * include/abg-fwd.h (get_type_scope): Declare new function. 19499 * src/abg-hash.cc (var_decl::hash::operator()): Do not cache the 19500 hash because that can alter the hash computing of a larger type 19501 which embeds a var decl as a member declaration. This is 19502 especially true if the var decl indirectly references the larger 19503 type. The only way to cache the value of a var decl would be to 19504 wait after all canonical types have been computed. We'd then seal 19505 all types. After that sealing happens, we can cache var decls 19506 starting from the top-level ones. 19507 (function_decl::hash::operator()): Likewise. 19508 * src/abg-ir.cc (get_type_scope): Define new functions. 19509 * src/abg-reader.cc (read_is_declaration_only): Declare this 19510 function earlier. 19511 (typedef const_types_map_it): Adjust this to make it point to a 19512 map of string and vector of types, as opposed to a map to string 19513 and type as it was before. 19514 (typedef types_map_it): New typedef. 19515 (read_context::map_id_and_node): Map a type id to the last 19516 xmlNodePtr that represent a *declaration*. That gives more leeway 19517 to the declaration resolution code to choose the right definition 19518 later. Otherwise, there are cases where the wrong definition. By 19519 wrong definition, I mean a definition that is different from the 19520 one chosen by the DWARF reading code, for a given declaration. 19521 Basically for a given ABI corpus, a type declaration resolve to 19522 the first definition seen in the corpus. 19523 (read_context::get_all_type_decls): Define new member function. 19524 (read_context::types_equal): Use qualified names only if both 19525 types have a scope. 19526 (read_context::key_type_decl): Now a given ID is associated to 19527 *all* the declarations and definition that have that ID. 19528 (read_translation_unit_from_input): Make sure the current corpus 19529 node points to the right node. 19530 (build_class_decl): Resolve class declarations to the first 19531 definition seen in the corpus. Key a type decl before reading its 19532 members as a reading a member can request the current decl. No 19533 need to try and canonicalize a member type, as build_class_decl() 19534 does that already. 19535 * tests/data/test-read-dwarf/test16-pr18904.so: New test binary 19536 input. 19537 * tests/data/test-read-dwarf/test16-pr18904.so.abi: New test 19538 output reference. 19539 * tests/test-read-dwarf.cc: Run the test above. 19540 * tests/data/Makefile.am: Add the new test input to source 19541 distribution. 19542 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 19543 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 19544 * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. 19545 * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 19546 195472015-08-30 Dodji Seketeli <dodji@redhat.com> 19548 19549 Bug 18892 - type degradation from DWARF to abixml on libtsan.so 19550 * src/abg-reader.cc (read_context::maybe_canonicalize_type): Late 19551 canonicalize enum types. 19552 (build_enum_type_decl): Read the linkage name of the enum type. 19553 * src/abg-writer.cc (write_enum_type_decl): Emit the linkage name 19554 of the enum type. 19555 * tests/data/test-read-dwarf/test15-pr18892.so: New binary test 19556 input. 19557 * tests/data/test-read-dwarf/test15-pr18892.so.abi: New test 19558 output reference. 19559 * tests/data/Makefile.am: Add the new test inputs above to source 19560 distribution. 19561 * tests/test-read-dwarf.cc (in_out_specs): Run the two tests above. 19562 195632015-08-30 Dodji Seketeli <dodji@redhat.com> 19564 19565 Bug 18893 - type degradation from dwarf to abixml on libGLU.so 19566 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Do not 19567 consider that virtual member functions disqualify a class from 19568 being declaration-only. 19569 * src/abg-hash.cc (var_decl::hash::operator()): Do not cache the 19570 result of hashing before we are done building the type of the 19571 var_decl. 19572 (function_decl::hash::operator()): Likewise, do not cache the 19573 result of hashing before we are done building the type of the 19574 function_decl. 19575 * src/abg-reader.cc (build_class_decl): Build the link between a 19576 class declaration and its definition. If there are several 19577 definitions of a class in the corpus, keep just one. 19578 * src/abg-writer.cc (write_class_is_declaration_only): Emit the 19579 link between a class declaration and its definition. 19580 (write_class_decl): Emit a class declaration even if it has a 19581 definition. The definition is going to be emitted 19582 separately. 19583 * tests/data/test-read-dwarf/test14-pr18893.so: New binary test 19584 input. 19585 * tests/data/test-read-dwarf/test14-pr18893.so.abi: New test 19586 reference output. 19587 * tests/data/Makefile.am: Add the new test input files to source 19588 distribution. 19589 * tests/test-read-dwarf.cc (in_out_specs): Run the new tests. 19590 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 19591 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 19592 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 19593 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 19594 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 19595 * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. 19596 195972015-08-30 Dodji Seketeli <dodji@redhat.com> 19598 19599 Use common canonicalization oracle when reading class type from dwarf 19600 * src/abg-dwarf-reader.cc (build_ir_node_from_die): 19601 (maybe_canonicalize_type): Move the specific logic that was in 19602 build_ir_node_from_die (for class types) here. 19603 196042015-08-30 Dodji Seketeli <dodji@redhat.com> 19605 19606 Fix crash in file type guessing 19607 * src/abg-tools-utils.cc (string_ends_with): Handle the case where 19608 the string suffix is longer than the string itself. 19609 196102015-08-29 Dodji Seketeli <dodji@redhat.com> 19611 19612 Bug 18894 - Fix representation of enumerators in abixml format 19613 * include/abg-ir.h (enum_type_decl::enumerator::get_value()): 19614 Change the type of this from size_t to ssize_t. 19615 * src/abg-ir.cc (enum_type_decl::enumerator::get_value): Do the 19616 same on the definition side. 19617 (non_canonicalized_subtype_detector::visit_begin): If a type 19618 refers to itself, late canonicalize it to have a similar hashing 19619 result as what the abixml reader does. 19620 * src/abg-reader.cc (build_enum_type_decl): Use ssize_t to read 19621 the value of enumerators. 19622 * tests/data/test-read-dwarf/test13-pr18894.so.abi: New test input. 19623 * tests/data/Makefile.am: Add the new test inputs above to source 19624 distribution. 19625 * tests/test-read-dwarf.cc (in_out_specs): Add new test inputs. 19626 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 19627 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. 19628 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 19629 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 19630 196312015-08-29 Dodji Seketeli <dodji@redhat.com> 19632 19633 Detect vtable changes from member function changes 19634 * include/abg-ir.h (class_decl::{has_virtual_base, has_vtable}): 19635 Declare new member functions. 19636 * src/abg-comp-filter.cc (has_virtual_mem_fn_change): New overload 19637 for function_decl_diff. 19638 (has_virtual_mem_fn_change): In the overload for diff*, support 19639 virtual member function changes detection for function_decl_diff*. 19640 * src/abg-comparison.cc (function_decl_diff::report): Detect and 19641 report changes to a vtable by looking a changes that can happen to 19642 a given member function. 19643 (corpus_diff::report): Detect and report changes to vtables by 19644 looking at changes change to member functions. 19645 * tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt: 19646 New text input. 19647 * tests/data/test-diff-dwarf/test29-vtable-changes-v{0,1}.cc: Source 19648 code of new test input binaries. 19649 * tests/data/test-diff-dwarf/test29-vtable-changes-v{0,1}.o: New 19650 test input binaries. 19651 * tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt: 19652 New text input. 19653 * tests/data/test-diff-dwarf/test30-vtable-changes-v{0,1}.cc: New 19654 test input. 19655 * tests/data/test-diff-dwarf/test30-vtable-changes-v{0,1}.o: New 19656 test input binaries. 19657 * tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt: 19658 New test input. 19659 * tests/data/test-diff-dwarf/test31-vtable-changes-v{0,1}.cc: 19660 Source code of new test input binary. 19661 * tests/data/test-diff-dwarf/test31-vtable-changes-v{0,1}.o: New 19662 test input binary. 19663 * tests/data/Makefile.am: Add the new test input files above to 19664 source distribution. 19665 * tests/test-diff-dwarf.cc (in_out_specs): Consume the new test 19666 inputs above. 19667 196682015-08-29 Dodji Seketeli <dodji@redhat.com> 19669 19670 Do not hash or compare virtual member functions as par of classes 19671 * src/abg-ir.cc (equals): When comparing two classes, do not 19672 compare their virtual member functions. 19673 * src/abg-hash.cc (class_decl::hash::operator()): Do not hash 19674 virtual member functions when hashing a class. 19675 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 19676 196772015-08-29 Dodji Seketeli <dodji@redhat.com> 19678 19679 Misc style fixes 19680 * src/abg-ir.cc (qualified_type_def::get_qualified_name): Fix 19681 typos in comments. 19682 (class_decl::member_class_template::operator==): Add comments. 19683 (operator==): Add comment for the overload of 19684 class_decl::member_class_template_sptr. 19685 (function_tdecl::operator==): Add comments. 19686 196872015-08-29 Dodji Seketeli <dodji@redhat.com> 19688 19689 Adjust many reference output for the non-regression test suite 19690 * tests/data/test-abidiff/test-enum0-report.txt: Adjust. 19691 * tests/data/test-abidiff/test-enum1-report.txt: Adjust. 19692 * tests/data/test-abidiff/test-qual-type0-report.txt: Adjust. 19693 * tests/data/test-abidiff/test-struct0-report.txt: Adjust. 19694 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 19695 * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. 19696 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 19697 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 19698 * tests/data/test-read-write/test17.xml: Adjust. 19699 197002015-08-29 Dodji Seketeli <dodji@redhat.com> 19701 19702 Make test-read-dwarf.cc and test-read-write.cc abidiff the ABIs 19703 * tests/test-read-dwarf.cc (main): Use abidiff to compare the 19704 input elf file with the XML emitted. That should yield the empty 19705 set. 19706 * tests/test-read-write.cc (main): Likewise, use abidiff to 19707 compare the input abixml file with the one that is emitted. 19708 197092015-08-29 Dodji Seketeli <dodji@redhat.com> 19710 19711 Add a new --noout option to abidw 19712 * tools/abidw.cc (options::noout): New data member. 19713 (options::options): Initialize it. 19714 (display_usage): Add a usage string for the new option. 19715 (parse_command_line): Parse the new option. 19716 (main): If --noout is provided, do not emit the XML form. 19717 * doc/manuals/abidw.rst: Document the new option. 19718 197192015-08-29 Dodji Seketeli <dodji@redhat.com> 19720 19721 Add a --no-architecture option to abidiff 19722 * tools/abidiff.cc (options::no_arch): New data member. 19723 (options::options): Initialize it. 19724 (display_usage): Display a help string for the new options. 19725 (parse_command_line): Parse the new options. 19726 (main): If --no-architecture is provided, set the corpus 19727 architecture to "". 19728 * doc/manuals/abidiff.rst: Document the new options. 19729 197302015-08-29 Dodji Seketeli <dodji@redhat.com> 19731 19732 Read abixml as a whole file and fix lots discrepancies with dwarf 19733 * src/abg-reader.cc (class read_context): Move data member at 19734 the top of the class like what is done elsewhere in the code 19735 base. 19736 (read_context::m_corp_node): New data member. 19737 (read_context::read_context): Initialize it. 19738 (read_context::{get,set}_corpus_node): New accessors. 19739 (read_context::map_id_and_node): Accept that a node id previously 19740 defined is defined again. In that case we just remember the first 19741 mapping id -> xml-node. That seems to work for now. 19742 (read_context::get_translation_unit): Fix the logic. 19743 (read_context::m_wip_types_map): Rename 19744 read_context::m_wip_classes_map into this. 19745 (read_context::clear_wip_types_map): Rename 19746 read_context::clear_wip_classes into this. 19747 (read_context::mark_type_as_wip): Rename 19748 read_context::mark_class_as_wip into this. 19749 (read_context::unmark_type_as_wip): Rename 19750 read_context::unmark_type_as_wip into this. 19751 (read_context::is_wip_type): Rename read_context::is_wip_class 19752 into this. 19753 (read_context::types_equal): New member function. 19754 (read_context::clear_per_translation_unit_data): Do not clear 19755 anything anymore as the previous data that were per-tu are now 19756 per-corpus. 19757 (read_context::clear_per_corpus_data): Clear here the previous 19758 data that were per-tu. 19759 (read_context::maybe_canonicalize_type): Add a new force_delay 19760 flag that forces the type to be late-canonicalized. Also force 19761 late-canonicalize references, pointers, qualified-type and typedef 19762 because they must be canonicalized once they've been added to 19763 their context; but then this function might be called too early, 19764 before they are added to their context. 19765 (read_context::type_id_new_in_translation_unit): Remove this 19766 member function. 19767 (read_translation_unit_from_input): Be able to either use the 19768 xmlTextReader interface, or get the current 'abi-instr' xml 19769 element node. If using the xmlTextReader interface, use it to 19770 move to the 'abi-instr' node, expand it and then use that. In 19771 either case, call read_translation_unit() with the 'abi-instr' xml 19772 element node. 19773 (read_translation_unit): Take an 'abi-instr' XML element in 19774 argument now, use that to read the translation unit, as opposed to 19775 using the xmlTextReader interface we where using before to walk 19776 the sub-tree of the abi-instr xml node. 19777 (read_context::get_scope_for_node): If the scope is a new 19778 translation unit, then build the new translation unit. 19779 (read_symbol_db_from_input): Take the function and variable symbol 19780 data bases, and read the current xml element node (do not use the 19781 xmlTextReader interface anymore) to populate the function and 19782 variable symbols. 19783 (read_elf_needed_from_input): Do not use the xmlTextReader 19784 interface anymore. Rather, use the current xml element node, look 19785 for the 'elf-needed' xml element node and use it to populate the 19786 set of elf dependencies. 19787 (read_corpus_from_input): Rework to expand the contents of the 19788 corpus node and use the result, rather than just exclusively 19789 relying on the xmlTextReader interface. 19790 (build_function_parameter): Build a proper IR node for variadic 19791 parameters. Build function type node *after* having built all the 19792 parameters IR, so that parameter indexing is the same as what is 19793 done in the DWARF reader. Also, if the function is not being 19794 added to its context yet, then delay the canonicalizing of its 19795 type, just like what is done by the DWARF reader. 19796 (build_qualified_type_decl, build_pointer_type_def) 19797 (build_reference_type_def, build_enum_type_decl, build_type_decl): 19798 Adjust. Do not enforce anymore that the ID of this type be new in 19799 the current TU. Delay canonicalizing if the type is not being 19800 added to its context. For typedefs, use an adapted way of 19801 checking the consistency of the underlying type. 19802 (build_array_type_def): Do not enforce anymore that the ID of this 19803 type be new in the current TU. Support the fact that the array 19804 might not have any DW_AT_byte_size attribute. Force late 19805 canonicalizing if the array is not being added to its context. 19806 (build_class_decl): Adjust. Reuse the 19807 read_context::maybe_canonicalize_type() function rather than 19808 trying to determine locally when to canonicalize. 19809 (build_template_tparameter): Adjust 19810 198112015-08-29 Dodji Seketeli <dodji@redhat.com> 19812 19813 Fix handling of class declaration during DWARF reading 19814 *virtual* member functions, data members, base classes or a 19815 DW_AT_byte_size as being conditions for being defined. 19816 * src/abg-dwarf-reader.cc (read_context::decl_only_classes_map_): 19817 Remove this data member. 19818 (read_context::{declaration_only_classes_to_force_defined, 19819 schedule_declaration_only_class_for_forced_resolution}): Remove 19820 these member functions. 19821 (read_context::resolve_declaration_only_classes): Do not force 19822 resolution of class declaration. 19823 (build_class_type_and_add_to_ir): Do not schedule classes for 19824 forced-resolution when they are used as base classes. The 19825 presence of a member function is not enough to make the class be 19826 defined. It needs to be a virtual member function. 19827 198282015-08-28 Dodji Seketeli <dodji@redhat.com> 19829 19830 Fix important hashing issues 19831 * src/abg-hash.cc (class_decl::hash::operator()): Do not force 19832 base classes to have definitions anymore. GCC and Clang (at 19833 least) some time emits debug info in which the definition of some 19834 base classes are missing, especially when those base classes have 19835 vtables. In that case, the definition of the class might it's in 19836 the binary where the vtable is emitted, which might not be the 19837 binary we are looking at. So let's relax the assertion we had 19838 here for base classes. For hashing virtual member functions, 19839 directly walk the virtual member functions by looking at 19840 class_decl::get_virtual_mem_fns() rather than walking all 19841 member functions and looking for the virtual ones. This is a 19842 speed optimization but it also helps during debugging. 19843 198442015-08-28 Dodji Seketeli <dodji@redhat.com> 19845 19846 Fix template comparison operators 19847 * include/abg-ir.h (function_tdecl::operator==): Introduce a new 19848 virtual member operator that takes a function_tdecl&. 19849 * src/abg-ir.cc 19850 (class_decl::member_function_template::operator==): Avoid the 19851 static cast in the overload for member_base. In the overload for 19852 member_class_template, avoid infinite recursion. 19853 (function_tdecl::operator==): In the overload for decl_base, do 19854 not do the real work here in the overload for decl_base Rather, 19855 the real work is done in the new overload for function_tdecl, and 19856 all other overloads call that one. 19857 198582015-08-28 Dodji Seketeli <dodji@redhat.com> 19859 19860 Use size/alignment of class definition when requested on declaration 19861 * include/abg-ir.h (type_base::{set_size_in_bits, 19862 set_alignment_in_bits}): Make these member functions virtual. 19863 (class_decl::{set_size_in_bits, get_size_in_bits, 19864 get_alignment_in_bits, set_alignment_in_bits}): Declare these 19865 virtual member functions. 19866 * src/abg-ir.cc (class_decl::{set_size_in_bits, get_size_in_bits, 19867 get_alignment_in_bits, set_alignment_in_bits}): Define these 19868 virtual functions. 19869 198702015-08-28 Dodji Seketeli <dodji@redhat.com> 19871 19872 Fix type lookup algorithm 19873 * src/abg-ir.cc (find_next_delim_in_cplus_type): Define new static 19874 function. 19875 (fqn_to_components): Use the new function above to break up a 19876 fully qualified name into components, rather than the too simple 19877 string::find_first_of() we were using previously. 19878 (lookup_node_in_scope): If the found type (class) is a 19879 declaration-only and if it has a definition, then return it. 19880 198812015-08-26 Dodji Seketeli <dodji@redhat.com> 19882 19883 Make decl hashing always take qualified name into account 19884 * src/abg-hash.cc (decl_base::hash::operator()(const decl_base&)): 19885 Always hash the qualified name of the decl. 19886 198872015-08-26 Dodji Seketeli <dodji@redhat.com> 19888 19889 Accept base classes which types are compatible with class type 19890 * include/abg-fwd.h (is_compatible_with_class_type): Declare a new 19891 overload. 19892 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Rather 19893 than requiring that base classes be of class type, just require 19894 that they be compatible with class types. 19895 * src/abg-ir.cc (is_compatible_with_class_type): Define a new 19896 overload. 19897 198982015-08-26 Dodji Seketeli <dodji@redhat.com> 19899 19900 Harden function_decl::get_pretty_representation() 19901 * src/abg-ir.cc (function_decl::get_pretty_representation): Make 19902 sure the function type is a member function before calling 19903 get_member_function_is_{virtual,ctor,dtor,const}. 19904 199052015-08-25 Dodji Seketeli <dodji@redhat.com> 19906 19907 Don't cache type qualified name before canonicalization 19908 * src/abg-ir.cc (decl_base::{get_qualified_parent_name, 19909 get_qualified_name}): Use the qualified name cache only if the 19910 type is fully built, i.e, when its canonical type is present. 19911 (qualified_type_def::get_qualified_name): Likewise. 19912 (pointer_type_def::get_qualified_name): Likewise. 19913 (reference_type_def::get_qualified_name): Likewise. 19914 (array_type_def::get_qualified_name): Likewise. 19915 199162015-08-22 Dodji Seketeli <dodji@redhat.com> 19917 19918 Misc style cleanups 19919 * configure.ac: Fix some spelling typos. 19920 * src/abg-tools-utils.cc (guess_file_type): Fix indentation. 19921 * tests/test-diff-pkg.cc (int_out_specs): Add some vertical spaces 19922 for better legibility. 19923 * tools/abidiff.cc (main): Add a missing space. 19924 * tools/abipkgdiff.cc (extract_deb): Fix a typo in the comment. 19925 199262015-08-22 Dodji Seketeli <dodji@redhat.com> 19927 19928 Make abipkgdiff compare tar archives containing binaries 19929 * config.h.in (WITH_TAR): New configuration preprocessor macro. 19930 * configure.ac: Add a new --enable-tar option. It's turned on 19931 automatically if the tar program is found in the PATH. Adjust the 19932 build configuration report to add the tar archive support. 19933 * include/abg-tools-utils.h (string_ends_with): Declare new 19934 function. 19935 (enum file_type): Add a new FILE_TYPE_TAR enumerator. 19936 * src/abg-tools-utils.cc (string_ends_with): Define new function. 19937 (operator<<(ostream&, file_type)): Serialize the new FILE_TYPE_TAR 19938 enumerator. 19939 (guess_file_type): Detect UStar format file by reading its magic 19940 number. Detect compressed tar files based on the file path 19941 extension. 19942 * tools/abipkgdiff.cc (extract_tar): Define new function. 19943 (extract_package): Handle tar packages. 19944 (main): Handle tar archives. 19945 * tools/abidiff.cc (main): Handle the new FILE_TYPE_TAR 19946 enumerator. 19947 * tools/abilint.cc (main): Likewise. 19948 * tests/data/test-diff-pkg/tarpkg-0-dir{1,2}.ta{,r,.bz2, gz}: New 19949 test input tarballs. 19950 * tests/data/test-diff-pkg/tarpkg-0-report-0.txt: New test output 19951 reference. 19952 * tests/data/Makefile.am: Add the new test data file above to 19953 source distribution. 19954 * tests/test-diff-pkg.cc (in_out_specs): Add new tests cases. 19955 199562015-08-22 Dodji Seketeli <dodji@redhat.com> 19957 19958 Misc style fixes in abipkgdiff 19959 * include/abg-tools-utils.h (enum file_type): Fix the comment for 19960 for the FILE_TYPE_DEB enumerator. 19961 * tools/abipkgdiff.cc (main): Fix the style of the conditions. 19962 Also, fix the text emitted. 19963 199642015-08-22 Dodji Seketeli <dodji@redhat.com> 19965 19966 Make abipkgdiff compare directories containing binaries 19967 * include/abg-tools-utils.h (enum file_type): Add a new 19968 FILE_TYPE_DIR enumerator. 19969 * src/abg-tools-utils.cc (operator<<(ostream&, file_type)): 19970 Support serialization of the new FILE_TYPE_DIR enumerator. 19971 (guess_file_type): Detect that the path given is a directory. 19972 * tools/abipkgdiff.cc (package::package): If the package is a 19973 directory, then set its extracted directory path to the path of 19974 the directory. 19975 (package::erase_extraction_directory): Do not erase the extraction 19976 directory if the package is a directory provided by the user. 19977 (extract_package): If the package is a directory provided by the 19978 user, then there is nothing to extract. 19979 (main): If the first package is a directory, then the second one 19980 should be a directory as well. 19981 * tools/abidiff.cc (main): Support directories as input. 19982 * tools/abilint.cc (main): Likewise. 19983 * tests/data/test-diff-pkg/dirpkg-0-dir{1,2}/libobj-v0.so: New 19984 binary test inputs. 19985 * test/data/test-diff-pkg/dirpkg-0-report-0.txt: New input test 19986 file. 19987 * tests/data/test-diff-pkg/dirpkg-1-dir{1,2}/obj-v0.cc: Source 19988 code of the binary test inputs above. 19989 * tests/data/Makefile.am: Add the new files above to the source 19990 distribution. 19991 * tests/test-diff-pkg.cc (in_out_specs): Add the new test input 19992 files above to the set of tests this harness has to run over. 19993 199942015-08-22 Dodji Seketeli <dodji@redhat.com> 19995 19996 [dwarf reader] Support reference types without explicit DW_AT_byte_size 19997 * src/abg-dwarf-reader.cc (build_reference_type): If the type DIE 19998 has no DW_AT_byte_size, assume the type size is the translation 19999 unit's address size. 20000 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 20001 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 20002 200032015-08-21 Dodji Seketeli <dodji@redhat.com> 20004 20005 [dwarf reader] Support pointer types without explicit DW_AT_byte_size 20006 * abg-dwarf-reader.cc (build_pointer_type_def): If the type DIE 20007 has no DW_AT_byte_size, assume the type size is the translation 20008 unit's address size. 20009 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 20010 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. 20011 200122015-08-21 Dodji Seketeli <dodji@redhat.com> 20013 20014 make abipkgdiff compile with GCC 4.4.7 20015 * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): 20016 The string holding the dir name is no more __thread, as this won't 20017 compile with GCC 4.4.7 20018 200192015-08-21 Dodji Seketeli <dodji@redhat.com> 20020 20021 Misc style fixes 20022 * src/abg-dwarf-reader.cc (read_context::die_type_map): Fix typo 20023 in the comment. 20024 * src/abg-ir.cc (peel_typedef_type): Fix typo in the comment. 20025 * src/abg-reader.cc 20026 (read_context::perform_late_type_canonicalizing): Fix a type in 20027 the comment. 20028 200292015-08-21 Dodji Seketeli <dodji@redhat.com> 20030 20031 Make get_pretty_representation work on method types 20032 * include/abg-fwd.h (is_method_type): Declare new overloads for 20033 naked pointers. 20034 (get_method_type_name): Declare new functions. 20035 (get_pretty_representation): Declare new overloads for 20036 method_type. 20037 * src/abg-ir.cc (get_function_type_name): If the function type is 20038 a method type, handle it as such. 20039 (get_method_type_name): Define new functions. 20040 (get_pretty_representation): If the function type is a method 20041 type, handle it as such. 20042 (get_pretty_representation): Define new overloads for method_type 20043 and pointer/reference to method_type. 20044 (is_method_type): Add overloads for naked pointers. 20045 200462015-08-21 Dodji Seketeli <dodji@redhat.com> 20047 20048 Hash a class declaration the same as its definition 20049 * src/abg-hash.cc (class_decl::hash::operator()(const class_decl&)): 20050 If the class declaration has a definition, hash its definition 20051 instead. Otherwise, if the class declaration has no definition, 20052 just return a zero hash, like what we were doing before. 20053 * src/abg-reader.cc (read_context::maybe_canonicalize_type): Do 20054 not early canonicalize method types because most of the time, when 20055 this function is called, the method hasn't been added to its 20056 parent class yet. So wait until late before canonicalizing. 20057 * src/abg-writer.cc (write_class_is_declaration_only): Do not emit 20058 the "is-declaration-only" property if the declaration has a 20059 definition. 20060 (write_class_decl): If the class declaration has a definition, 20061 emit the definition instead. 20062 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. 20063 * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. 20064 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 20065 * tests/data/test-read-write/test18.xml: Likewise. 20066 * tests/data/test-read-write/test20.xml: Likewise. 20067 * tests/data/test-read-write/test21.xml: Likewise. 20068 200692015-08-20 Dodji Seketeli <dodji@redhat.com> 20070 20071 Add a --stats to abidiff and abidw 20072 * include/abg-dwarf-reader.h (get_show_stats) 20073 (set_show_stats): New accessors for a new "show_stats" property of 20074 the dwarf reader context. 20075 * src/abg-dwarf-reader.cc: Include iostream to use std::cerr. 20076 (dwarf_reader::show_stats_): New data member. 20077 (dwarf_reader::dwarf_reader): Initialize it. 20078 (dwarf_reader::show_stats) 20079 (get_show_stats) 20080 (set_show_stats): Define new accessors. 20081 (dwarf_reader::die_type_map): Add const overload to this accessor. 20082 (dwarf_reader::lookup_type_from_die_offset): Make this accessor 20083 const. 20084 (dwarf_reader::add_late_canonicalized_types_stats): New member 20085 function. 20086 (dwarf_reader::perform_late_type_canonicalizing): Emit the 20087 statistics about late-canonicalized types if the user asked for 20088 it. 20089 * tools/abidiff.cc (options::show_stats): New data member. 20090 (options::options): Initialize it. 20091 (display_usage): Document it. 20092 (parse_command_line): Parse the new --stats option. 20093 (main): Create a dwarf reader context, set the show_stats to it 20094 and then use that context to read the corpora before diffing them. 20095 * tools/abidw.cc (options::show_stats): New data member. 20096 (options::options): Initialize it. 20097 (display_usage): Document it. 20098 (parse_command_line): Parse the new --stats option. 20099 (main): Set the show_stats to the dwarf reader context before 20100 using it. 20101 * doc/manuals/abidiff.rst: Update the manual. 20102 * doc/manuals/abidw.rst: Update the manual. 20103 201042015-08-19 Dodji Seketeli <dodji@redhat.com> 20105 20106 Canonicalize all types that got scheduled for late canonicalization 20107 * src/abg-dwarf-reader.cc 20108 (read_context::canonicalize_types_scheduled): Canonicalize all 20109 types scheduled for late canonicalization. 20110 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 20111 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 20112 201132015-08-19 Dodji Seketeli <dodji@redhat.com> 20114 20115 Propagate canonical type of a class definition to its declaration 20116 * src/abg-ir.cc: (canonicalize): Propagate the canonical type of 20117 the type definition to its declaration. 20118 (class_decl::set_definition_of_declaration): Likewise. 20119 201202015-08-19 Dodji Seketeli <dodji@redhat.com> 20121 20122 Make type_has_non_canonicalized_subtype() tighter 20123 * include/abg-fwd.h (is_typedef, is_pointer_type) 20124 (is_reference_type): Declare new overloads. 20125 (peel_typedef_type): Renamed get_typedef_underlying_type into 20126 this. 20127 (peel_pointer_type, peel_reference_type) 20128 (peel_typedef_pointer_or_reference_type): Declare new functions. 20129 * src/abg-ir.cc (peel_typedef_type): Renamed 20130 get_typedef_underlying_type into this. 20131 (is_typedef, is_pointer_type, is_reference_type): Define new 20132 overloads. 20133 (peel_pointer_type, peel_reference_type) 20134 (peel_typedef_pointer_or_reference_type): Define new functions. 20135 (non_canonicalized_subtype_detector::has_non_canonical_type_): 20136 Make the type of this data member be a type_base*, not a bool. 20137 This is so that we can return the first non-canonicalized subtype 20138 of the type we are looking at. 20139 (non_canonicalized_subtype_detector::non_canonicalized_subtype_detector): 20140 Adjust the data member initialization. 20141 (non_canonicalized_subtype_detector::visit_begin): Add an overload 20142 for function_decl*, to avoid looking into non-virtual member 20143 functions. 20144 In the overload for type_base*, peel typedefs, pointers and 20145 reference of each sub-type that has no canonical type, to see if 20146 refers to the type we are actually walking. If yes, then keep 20147 going. 20148 (type_has_non_canonicalized_subtype): Return the non-canonicalized 20149 sub-type found. 20150 * src/abg-comparison.cc (type_suppression::suppresses_diff): 20151 Adjust for the get_typedef_underlying_type -> peel_typedef_type 20152 renaming. 20153 201542015-08-19 Dodji Seketeli <dodji@redhat.com> 20155 20156 Make decl_base::get_qualified_name() work when decl context changes 20157 * include/abg-ir.h (class decl_base): Make class scope_decl a 20158 friend of decl_base. 20159 (type_base::priv_): Make this protected, rather than private. 20160 * src/abg-ir.cc (scope_decl::add_member_decl) 20161 (scope_decl::insert_member_decl): Reset the cache of the result of 20162 decl_base::get_qualified_name(). 20163 * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 20164 201652015-08-18 Dodji Seketeli <dodji@redhat.com> 20166 20167 Bug 18844 - assert failure in abidw at abg-dwarf-reader.cc:6537 20168 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 20169 Schedule declaration-only class resolution before the class 20170 appears as usable as to other types being built. 20171 * tests/data/test-read-dwarf/test12-pr18844.so: Add a new binary 20172 test input. 20173 * tests/data/test-read-dwarf/test12-pr18844.so.abi: The reference 20174 ABI XML output for the binary above. 20175 * tests/data/Makefile.am: Add the new test inputs above to the 20176 source distribution. 20177 * tests/test-read-dwarf.cc (in_out_specs): Add the new test inputs 20178 above to the set of input this test harness has to run over. 20179 201802015-08-18 Dodji Seketeli <dodji@redhat.com> 20181 20182 Fix a little glitch in the test suite 20183 * test-read-dwarf.cc (in_out_specs): Emit the output of the test11 20184 to output/test-read-dwarf/test11-pr18828.so.abi, not 20185 output/test-read-dwarf/test10-pr18828.so.abi. 20186 201872015-08-18 Dodji Seketeli <dodji@redhat.com> 20188 20189 Escape XML property names that were not escaped before 20190 * src/abg-writer.cc (write_namespace_decl, write_typedef_decl) 20191 (write_var_decl): Escape the XML characters that are forbidden in 20192 XML properties, and that are emitted as value of the 'name' 20193 property. 20194 201952015-08-15 Dodji Seketeli <dodji@redhat.com> 20196 20197 Bug 18828 - Handle force-resolving of multiple declarations-only of the same type 20198 * src/abg-dwarf-reader.cc 20199 (read_context::resolve_declaration_only_classes): Accept that a 20200 class that needs to be force-resolved might have been declared 20201 several times. In that case, some instances of that 20202 declaration-only class might have already been resolved (or 20203 completed). 20204 * tests/data/test-read-dwarf/test11-pr18828.so: New binary input. 20205 It comes from bug https://sourceware.org/bugzilla/show_bug.cgi?id=18828. 20206 * tests/data/test-read-dwarf/test11-pr18828.so.abi: The reference 20207 output for the binary above. 20208 * tests/data/Makefile.am: Add the test input files above to source 20209 distribution. 20210 * tests/test-read-dwarf.cc (in_out_specs): Add the test inputs 20211 above to the set of input this test harness has to run over. 20212 202132015-08-15 Dodji Seketeli <dodji@redhat.com> 20214 20215 Avoid declaring a type several times in the same TU in the XML format 20216 * src/abg-writer.cc (write_context::{record_type_id_as_emitted, 20217 record_type_as_emitted, type_id_is_emitted, type_is_emitted, 20218 clear_emitted_types_map}): New member functions. 20219 (write_context::m_emitted_type_id_map): New data member. 20220 (write_translation_unit): Clear the per-translation unit map of 20221 emitted types. Do not emit a type that has already been emitted 20222 in this translation unit. 20223 (write_namespace_decl): Do not emit a type that has already been 20224 emitted in this translation unit. 20225 (write_type_decl, write_qualified_type_def) 20226 (write_pointer_type_def, write_reference_type_def) 20227 (write_array_type_def, write_typedef_decl, write_class_decl) 20228 (write_type_tparameter, write_template_tparameter): Record the 20229 type we've just written as having been written out. 20230 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust as 20231 duplicated declarations got removed. 20232 202332015-08-14 Dodji Seketeli <dodji@redhat.com> 20234 20235 Misc style fixes in the XMLABI writer 20236 * src/abg-writer.cc (write_context): Align data members. 20237 (write_translation_unit): Remove useless horizontal white spaces. 20238 (write_decl, write_qualified_type_def, write_pointer_type_def) 20239 (write_reference_type_def, write_array_type_def) 20240 (write_enum_type_decl, write_typedef_decl, write_class_decl) 20241 (write_type_tparameter): Use the *_sptr typedefs rather than the 20242 longer form of shared_ptr<sometype> in function signatures. 20243 (write_enum_type_decl): In this function in particular, indent a 20244 line properly. 20245 202462015-08-14 Dodji Seketeli <dodji@redhat.com> 20247 20248 Fix typos in abipkgdiff 20249 * tools/abipkgdiff.cc (display_usage): s/pompare/compare. Give a 20250 better help message for --help. 20251 (extract_rpm): Insert a space after the path of the package being 20252 extracted, when emitting a verbose message. 20253 202542015-08-14 Dodji Seketeli <dodji@redhat.com> 20255 20256 Install the manpage for abipkgdiff 20257 * doc/manuals/Makefile.am (section1_manpages): Add abipkgdiff.1 to 20258 the set of manpages to be install into section 1. 20259 202602015-08-12 Dodji Seketeli <dodji@redhat.com> 20261 20262 Bug 18818 - abidw aborts on a class with a non-complete base class 20263 * src/abg-dwarf-reader.cc 20264 (read_context::decl_only_classes_to_force_defined_map_): New data 20265 member. 20266 (read_context::declaration_only_classes_to_force_defined): New 20267 accessors. 20268 (read_context::schedule_declaration_only_class_for_forced_resolution): 20269 New member function. 20270 (build_class_type_and_add_to_ir): If a base class is a 20271 declaration-only class then mark it as needing to be force-defined 20272 *if* it's still not defined at the end of the abi corpus loading. 20273 (read_context::resolve_declaration_only_classes): If 20274 declaration-only classes that need to force-defined are present 20275 and not defined (when we reach the end of the ABI corpus) then 20276 force-define them as empty classes. 20277 * tests/data/test-read-dwarf/test10-pr18818-gcc.so: New test 20278 binary input file. This comes from a user binary submitted to bug 20279 https://sourceware.org/bugzilla/show_bug.cgi?id=18818. The 20280 original URL to the binary is 20281 https://sourceware.org/bugzilla/attachment.cgi?id=8518. 20282 * tests/data/test-read-dwarf/test9-pr18818-clang.so: New binary 20283 input file. This comes from the same bug report as above. The 20284 original URL to the binary is 20285 https://sourceware.org/bugzilla/attachment.cgi?id=8511. 20286 * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: New 20287 reference output file. 20288 * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 20289 * tests/data/Makefile.am: Add the new files above to the source 20290 distribution. 20291 * tests/test-read-dwarf.cc (in_out_specs): Add the test inputs 20292 above the set of tests input this harness has to run over. 20293 202942015-08-14 Dodji Seketeli <dodji@redhat.com> 20295 20296 Update the abipkgdiff manual to say that .deb files are now supported 20297 * doc/manuals/abipkgdiff.rst: Say that .deb fiel are now supported 20298 by abipkgdiff. 20299 203002015-08-14 Dodji Seketeli <dodji@redhat.com> 20301 20302 Update comment about the supported formats in abipkgdiff 20303 * tools/abipkgdiff.cc: Now that .deb packages are supported, say 20304 it. 20305 203062015-08-14 Dodji Seketeli <dodji@redhat.com> 20307 20308 Make the support of RPM and DEB package formats conditional 20309 * config.h.in: Define WITH_DEB and WITH_RPM pre-processor macros. 20310 * configure.ac: Add --enable-{rpm,deb} switches. Check for 20311 rpm2cpio and cpio programs, unless --disable-rpm was provided. If 20312 they are found and if --enable-rpm=auto was provided, then 20313 consider that --enable-rpm=yes was provided. In that case, set 20314 the WITH_RPM macro to 1. Otherwise, undefine that macro. 20315 Similarly, check for dpkg unless --disable-deb was provided. If 20316 it's found and if --enable-deb=auto was provided, consider that 20317 --enable-deb=yes was provided. In that case, set the WITH_DEB 20318 macro to 1. Otherwise, undefine that macro. Define the 20319 ENABLE_RPM and ENABLE_DEB conditional automake variables, if the 20320 rpm resp. deb support is enabled. Emit a notice about the rpm and 20321 deb features being enabled or not, at the end of the configure 20322 process. 20323 * tests/test-diff-pkg.cc: Include the config.h header. 20324 (in_out_spec): Guard rpm tests by the WITH_RPM macro. Similarly, 20325 guard deb tests by the WITH_DEB macro. 20326 * tools/abipkgdiff.cc: Include the config.h header. 20327 (extract_rpm): Guard this function definition with the WITH_RPM 20328 macro. 20329 (extract_deb): Guard this function definition with the WITH_DEB 20330 macro. 20331 (extract_package): Guard the handling of rpm packages with the 20332 WITH_RPM macro and the handling of deb package with the WITH_DEB 20333 macro. If a package not-support package format is encountered, 20334 emit an appropriate error message and error out. 20335 203362015-08-07 Matthias Klose <doko@debian.org> 20337 20338 Add support for .deb files to abipkgdiff 20339 * include/abg-tools-utils.h (file_type): Add FILE_TYPE_DEB. 20340 * tools/abipkgdiff.cc (extract_deb): New. 20341 (extract_package, main): Handle FILE_TYPE_DEB. 20342 * src/abg-tools-utils.cc (operator<<): Handle FILE_TYPE_DEB. 20343 (guess_file_type): Detect FILE_TYPE_DEB. 20344 * tools/abidiff.cc (main): Handle FILE_TYPE_DEB. 20345 * tools/abilint.cc (main): Handle FILE_TYPE_DEB. 20346 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb: 20347 Input debian debug info package; to be compared by the test 20348 harness runtestdiffpkg. 20349 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64.deb: 20350 Input debian package; to be compared by the test harness 20351 runtestdiffpkg. 20352 * tests/data/test-diff-pkg/libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb: 20353 Input debug info package 20354 * tests/data/test-diff-pkg/libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb: 20355 Input debian package; to be compared by the test harness 20356 runtestdiffpkg. 20357 * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: 20358 Reference output for the comparison of the packages above. 20359 * tests/data/Makefile.am: Add the new files above to the source distribution. 20360 * tests/test-diff-pkg.cc (in_out_specs): Add the input packages 20361 above to the set of files to be compared by this test harness. 20362 203632015-08-14 Dodji Seketeli <dodji@redhat.com> 20364 20365 Add configure check for rm and mkdir used by abipkgdiff 20366 * configure.ac: Add configure checks for rm and mkdir used by 20367 abipkgdiff. 20368 203692015-08-14 Dodji Seketeli <dodji@redhat.com> 20370 20371 Fix a comment in configure.ac 20372 * configure.ac: Fix a comment. 20373 203742015-08-14 Dodji Seketeli <dodji@redhat.com> 20375 20376 Do not remove api and website source files by accident 20377 * doc/Makefile.am: Do not remove the entirety of the build dir of 20378 doxygen for the apidoc and the website as these can be also the 20379 source dirs. Rather, remove that is under the html/ sub-directory 20380 of the build dir, as this is always generated by doxygen. 20381 203822015-08-13 Dodji Seketeli <dodji@redhat.com> 20383 20384 Add an abipkgdiff --fail-no-dbg command line option 20385 * tools/abipkgdiff.cc (options::fail_if_no_debug_info): New data 20386 member. 20387 (options::options): Initialize it. 20388 (display_usage): Document it. 20389 (compare): If the user asked for it, fail if the we couldn't file 20390 the debug info for the corpus files being compared. 20391 203922015-08-13 Dodji Seketeli <dodji@redhat.com> 20393 20394 Add -h and -d option shortcuts to abidw 20395 * tools/abidw.cc (display_usage): Added a documentation string. 20396 (parse_command_line): Parse the new -h and -d shortcuts. 20397 * doc/manuals/abidw.rst: Update the manual. 20398 203992015-08-13 Dodji Seketeli <dodji@redhat.com> 20400 20401 Add a -h option shortcut to abidiff 20402 * tools/abidiff.cc (display_usage): Add documentation for the new 20403 switch. 20404 (parse_command_line): Parse the -h option. 20405 * doc/manuals/abidiff.rst: Update the manual. 20406 204072015-08-13 Dodji Seketeli <dodji@redhat.com> 20408 20409 Add a -h shortcup to abipkgdiff --help 20410 * tools/abipkgdiff.cc (display_usage): Document the -h shortcut. 20411 (parse_command_line): Parse the -h shortcut to --help. 20412 204132015-08-09 Dodji Seketeli <dodji@redhat.com> 20414 20415 Bug 18791 - libabigail fails to read the output of abidw 20416 * src/abg-reader.cc (read_context::get_scope_for_node): Take an 20417 access_specifier output parameter to set the access specifier of 20418 the current node in its scope. Update the function to set the 20419 access_specifier. 20420 (read_context::build_or_get_type_decl): Adjust to set the access 20421 specifier of the type we are building, in case it's a member type. 20422 * tests/data/test-abidiff/test-PR18791-v{0,1}.so.abi: New test input files. 20423 * tests/data/test-abidiff/test-PR18791-report0.txt: New test 20424 output reference. 20425 * tests/data/Makefile.am: Add the new test material to the source 20426 distribution. 20427 * tests/test-abidiff.cc (specs): Add the new test inputs to the set of 20428 input files this test harness has to run over. 20429 204302015-08-09 Dodji Seketeli <dodji@redhat.com> 20431 20432 Fix a thinko in language support de-serialization 20433 * src/abg-ir.cc (string_to_translation_unit_language): Fix 20434 thinko. What was I thinking ... 20435 204362015-08-06 Dodji Seketeli <dodji@redhat.com> 20437 20438 Add --no-added-syms to abipkgdiff 20439 * tools/abipkgdiff.cc (options::show_added_syms): New data member. 20440 (options::options): Initialize it. 20441 (parse_command_line): Parse the new --no-added-syms option and set 20442 the options::show_added_syms flag accordingly. 20443 (display_usage): Add a help string for the new option. 20444 (set_diff_context_from_opts): Set the diff context according to 20445 the state of the new options::show_added_syms flag. 20446 * doc/manuals/abipkgdiff.rst: Add manual entry for the new 20447 --no-added-syms options. 20448 * tests/data/test-diff-pkg/test-rpm-report-5.txt: New test 20449 reference input file. 20450 * tests/data/Makefile.am: Add the new file above to source 20451 distribution. 20452 * tests/test-diff-pkg.cc (InOutSpec::prog_options): New data 20453 member. 20454 (in_out_specs): Adjust. Add a new input to run the test again 20455 with --no-added-syms. 20456 (main): Adjust to pass the program options contained in 20457 InOutSpec::prog_options to abipkgdiff. 20458 fixup! Add --no-added-syms to abipkgdiff 20459 204602015-08-06 Dodji Seketeli <dodji@redhat.com> 20461 20462 Update diff stats when added symbols are removed from change report 20463 * include/abg-comparison.h (diff_context_wptr) 20464 (corpus_diff::diff_stats_sptr): New typedefs. 20465 (corpus_diff::diff_stats::diff_stats): Make this constructor take 20466 a diff_context_sptr. Make the default constructor private. 20467 * src/abg-comparison.cc (corpus_diff::diff_stats::priv::ctxt_): 20468 New data member. This is a weak pointer to a diff_context. 20469 (corpus_diff::diff_stats::priv::priv): Take a diff_context_sptr 20470 and initialize the weak pointer ctxt_ to it. 20471 (corpus_diff::diff_stats::priv::ctxt): New accessor to the 20472 diff_context hold by the diff_stats. 20473 (corpus_diff::diff_stats::{num_removed_func_filtered_out, 20474 num_added_func_filtered_out, num_removed_vars_filtered_out, 20475 num_added_vars_filtered_out, num_removed_func_syms_filtered_out, 20476 num_added_func_syms_filtered_out, 20477 num_removed_var_syms_filtered_out, 20478 num_added_var_syms_filtered_out}): If the user asked for the added 20479 [or removed] variables/functions/symbols to be ignored, the 20480 accessors for the number of filtered added/removed variables/functions/symbols 20481 return the total number of added/removed 20482 variables/functions/symbols; that is, say that *all* added/removed 20483 variables/functions/symbols got filtered out. 20484 (corpus_diff::priv::diff_stats_): Turn this data member into a 20485 [shared] pointer to diff_stats. 20486 (corpus_diff::priv::filters_and_suppr_applied_): Remove this data 20487 member. Now that diff_stats_ is a pointer, we don't need this 20488 boolean anymore. 20489 (corpus_diff::apply_filters_and_suppressions_before_reporting): 20490 Adjust to the fact that filters_and_suppr_applied_ is gone, and 20491 that diff_stats_ is now a pointer. 20492 (corpus_diff::report): Control un-referenced added symbols 20493 reporting with 20494 diff_context::show_added_symbols_unreferenced_by_debug_info() 20495 204962015-07-31 Dodji Seketeli <dodji@redhat.com> 20497 20498 Make applying supp specs through pointer access look through typedefs 20499 * include/abg-comparison.h (type_suppression::suppresses_type): 20500 Declare new member function. 20501 (get_typedef_diff_underlying_type_diff): Declare new function. 20502 * include/abg-fwd.h (get_typedef_underlying_type): Likewise. 20503 * src/abg-comparison.cc (type_suppression::suppresses_type): 20504 Define new member function. 20505 (get_typedef_diff_underlying_type_diff): Define new function. 20506 (type_suppression::suppresses_diff): After looking through the 20507 different kind of access methods, use the new 20508 type_suppression::suppresses_type(), rather than doing lots of 20509 stuff ourselves here. But then, if the suppression doesn't apply 20510 to the subjects of the diff, look through typedefs and try to 20511 apply the suppression again. 20512 * src/abg-ir.cc (get_typedef_underlying_type): Define new 20513 function. 20514 * tests/data/test-diff-suppr/libtest25-typedef-v{0,1}.so: New 20515 binary test input files. 20516 * tests/data/test-diff-suppr/test25-typedef-v{0,1}.c: Source code 20517 for the binary test input files above. 20518 * tests/data/test-diff-suppr/test25-typedef-report-{0, 1}.txt: New test 20519 input files. 20520 * tests/data/test-diff-suppr/test25-typedef-suppr-0.txt: New test 20521 input file. 20522 * tests/data/Makefile.am: Add the new test material to the source 20523 distribution. 20524 * tests/test-diff-suppr.cc (in_out_specs): Add the test inputs 20525 above to the set of test inputs this harness has to run over. 20526 205272015-07-24 Dodji Seketeli <dodji@redhat.com> 20528 20529 Make abipkgdiff erase the *parent* directory of temporary files 20530 * tools/abipkgdiff.cc 20531 (erase_created_temporary_directories_parent): New static function. 20532 (compare): After comparison, erase the temporary parent directory 20533 as well. 20534 205352015-07-24 Dodji Seketeli <dodji@redhat.com> 20536 20537 Make the name of the removed variable section be consistent 20538 * src/abg-comparison.cc (corpus_diff::report): Introduce the 20539 section of removed variables with the string "Removed variable", 20540 rather than with the string "Deleted variable". 20541 * tests/data/test-abicompat/test2-var-removed-report-0.txt: Adjust. 20542 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-0.txt: Likewise. 20543 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-3.txt: Likewise. 20544 * tests/data/test-diff-suppr/test18-suppr-removed-var-report-5.txt: Likewise. 20545 205462015-07-24 Dodji Seketeli <dodji@redhat.com> 20547 20548 Consider default symbol versions when computing added/removed fns/vars 20549 * include/abg-corpus.h (corpus::{lookup_function_symbol, 20550 lookup_variable_symbol}): Take a elf_symbol::version object, 20551 rather than a string representing the version. Add an overload 20552 that takes an elf_symbol. 20553 * src/abg-corpus.cc (find_symbol_by_version): New static function. 20554 (corpus::{lookup_function_symbol, lookup_variable_symbol}): Take a 20555 elf_symbol::version object, rather than a string representing the 20556 version. Add an overload that takes an elf_symbol. If the looked 20557 up symbol has no version and if the corpus contains a symbol with 20558 the same name and with a default version, then return that latter 20559 symbol if the corpus doesn't contain a symbol with the same name 20560 and empty version. 20561 * src/abg-comparison.cc 20562 (class_diff::ensure_lookup_tables_populated): Adjust. 20563 (corpus_diff::priv::ensure_lookup_tables_populated): Before 20564 deciding that a symbol has been added, if the symbol has a default 20565 version, make sure no symbol with the same name and without 20566 version was present in the former corpus. Similarly, before 20567 deciding that a symbol has been removed, if the symbol has no 20568 version, make sure the latter corpus has no symbol with the same 20569 name and with a default version. 20570 * tests/data/test-diff-dwarf/test12-report.txt: Adjust. The 20571 function should not be considered as added, because its symbol 20572 (and version) was already present in the former DSO. 20573 205742015-07-24 Dodji Seketeli <dodji@redhat.com> 20575 20576 Fix a thinko in removed variables detection 20577 * src/abg-comparison.cc 20578 (corpus_diff::priv::ensure_lookup_tables_populated): Once we have 20579 computed a set of potentially deleted variables that turned out to 20580 contain variables that were actually *NOT* deleted, really take 20581 these into account by removing these false positives from the set 20582 of deleted *variables*. We were trying to delete these from the 20583 set deleted *functions*; woops, I guess this was a copy & paste 20584 error. 20585 205862015-07-24 Dodji Seketeli <dodji@redhat.com> 20587 20588 Fix logic of type_has_non_canonicalized_subtype() 20589 * src/abg-ir.cc (type_has_non_canonicalized_subtype): Once the 20590 type has been traversed, just test if the visitor has accumulated 20591 the 'has_non_canonical_type' property. 20592 205932015-07-24 Dodji Seketeli <dodji@redhat.com> 20594 20595 Fix style issues 20596 * include/abg-ir.h (struct ir_node_visitor): Fix the wording of 20597 the comment of this type. 20598 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Fix the 20599 filling of the text of the comment of the code that chooses to 20600 perform early canonicalizing. 20601 206022015-07-24 Dodji Seketeli <dodji@redhat.com> 20603 20604 Adding member type doesn't reset declaration-only-ness of a class 20605 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 20606 Adding a new member type shouldn't remove the 20607 declaration-only-ness of the class. 20608 206092015-07-22 Dodji Seketeli <dodji@redhat.com> 20610 20611 Extract all packages for a given run of abipkgdiff under the same temp dir 20612 * tools/abipkgdiff.cc (package::{<all data members>}): Make the 20613 data members be private. Make their names end with an underscore. 20614 (package::extracted_package_parent_dir_path): Remove. 20615 (package::extracted_package_dir_path): Rename into 20616 package::extracted_dir_path_. 20617 (package::extracted_packages_parent_dir): New static member 20618 function, accessor. 20619 (package::package): Adjust to the new names of the data members. 20620 Call the new package::extracted_package_parent_dir() static member 20621 function to initial the package::extracted_dir_path_ data member. 20622 (package::{path, extracted_dir_path, type, is_debug, 20623 path_elf_file_sptr_map, debug_info_package}): New accessors for 20624 the data members. 20625 (package::{erase_extraction_directory, 20626 erase_extraction_directories}): Adjust. 20627 (erase_created_temporary_directories) 20628 (create_maps_of_package_content) 20629 (extract_package_and_map_its_content, prepare_packages, compare) 20630 (main): Adjust. 20631 206322015-07-22 Dodji Seketeli <dodji@redhat.com> 20633 20634 Add a --keep-tmp-files option to abipkgidff 20635 * tools/abipkgdiff.cc (options::keep_tmp_files): New data member. 20636 (options::options): Initialize it. 20637 (display_usage): Display a usage string for the new 20638 --keep-tmp-files option. 20639 (parse_command_line): Parse the new --keep-tmp-files option. 20640 (compare): Do not erase temporary directories if the users asked so. 20641 * doc/manuals/abipkgdiff.rst: Document the new --keep-tmp-files 20642 options. 20643 206442015-07-21 Dodji Seketeli <dodji@redhat.com> 20645 20646 Show linkage names in abipkgdiff output 20647 * doc/manuals/abipkgdiff.rst: Document the new --no-linkage-name 20648 options. 20649 * tools/abipkgdiff.cc (options::show_linkage_names): New data 20650 member. 20651 (options::options): Initialize it. 20652 (display_usage): Display a usage string for --no-linkage-name. 20653 (parse_command_line): Parse the --no-linkage-name option. 20654 (set_diff_context_from_opts): Set the diff context accordingly. 20655 * tests/data/test-diff-pkg/test-rpm-report-0.txt: Adjust. 20656 206572015-07-21 Dodji Seketeli <dodji@redhat.com> 20658 20659 Add --no-added-binaries to abipkgdiff 20660 * tools/abipkgdiff.cc (options::show_added_binaries): New data 20661 member. 20662 (options::options): Initialize it. 20663 (display_usage): Add a help string for --no-added-binaries. 20664 (parse_command_line): Parse the new --no-added-binaries option. 20665 (compare): Do not show added binaries if the user doesn't want to. 20666 * doc/manuals/abipkgdiff.rst: Document the new --no-added-binaries 20667 option. 20668 206692015-07-21 Dodji Seketeli <dodji@redhat.com> 20670 20671 make abipkgdiff return a proper exit code 20672 * tools/abipkgdiff.cc (compare): Return an instance 20673 abigail::tools_utils::abidiff_status, just like what we do in 20674 abidiff. 20675 * doc/manuals/abipkgdiff.rst: Document the new exit code. 20676 206772015-07-21 Dodji Seketeli <dodji@redhat.com> 20678 20679 Fix logic of determining if changes happened in abidiff 20680 * tools/abidiff.cc (main): Simplify the logic when determining if 20681 the comparison between two corpora yields worthwhile changes. 20682 206832015-07-21 Dodji Seketeli <dodji@redhat.com> 20684 20685 Add a new corpus_diff::has_net_changes() entry point 20686 * include/abg-comparison.h (corpus_diff::has_net_changes): Declare 20687 new member function. 20688 * src/abg-comparison.cc (corpus_diff::has_net_changes): Define it. 20689 206902015-07-20 Dodji Seketeli <dodji@redhat.com> 20691 20692 Fix type synthesis to fix abicompat weak mode 20693 * include/abg-fwd.h 20694 (synthesize_type_from_translation_unit): Declare new function. 20695 (synthesize_function_type_from_translation_unit): Make the 20696 translation_unit parameter non-const because the function needs to 20697 bind the life time of the synthesized function to the life time of 20698 the translation unit. Make this function be a friend of 20699 abigail::ir::translation_unit. 20700 (synthesize_function_type_from_translation_unit): 20701 * src/abg-ir.cc (translation_unit::priv::synthesized_types_): New 20702 data member. 20703 (synthesize_type_from_translation_unit): Define new function. 20704 (synthesize_function_type_from_translation_unit): Make the 20705 translation_unit parameter non-const. If the return is void, then 20706 take that in account carefuly. Rather than just looking up the 20707 type of parameters and return value, synthesize them too, 20708 especially when they are qualified types. Bind the life time of 20709 the synthesized function type to the lifetime of the translation 20710 unit. 20711 * tests/data/test-abicompat/test7-fn-changed-report-1.txt: New 20712 test reference output. 20713 * tests/test-abicompat.cc (in_out_spec): Run the harness on the 20714 exisiting test7-fn-changed-app and libtest7-fn-changed-libapp-v1 20715 but in weak mode this time. 20716 207172015-07-20 Dodji Seketeli <dodji@redhat.com> 20718 20719 Clean up the output of abicompat weak mode 20720 * tools/abicompat.cc (perform_compat_check_in_weak_mode): Remove 20721 disgracious vertical spaces in the wording. 20722 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Adjust. 20723 * tests/data/test-abicompat/test6-var-changed-report-0.txt: Adjust. 20724 207252015-07-20 Sinny Kumari <sinny@redhat.com> 20726 20727 Display --suppressions|--suppr option in help usage 20728 * tools/abipkgdiff.cc (display_usage): Print 20729 --suppressions|--suppr <path> option in help usage 20730 207312015-07-20 Dodji Seketeli <dodji@redhat.com> 20732 20733 Fix computing the set of exported functions and varible symbols 20734 * src/abg-ir.cc (elf_symbol::get_name_and_version_from_id): Always 20735 set the version and name of the symbol. 20736 * src/abg-corpus.cc 20737 (corpus::exported_decls_builder::{keep_wrt_id_of_fns_to_keep, 20738 keep_wrt_id_of_vars_to_keep}): Reset the symbol name *and* version 20739 before passing it. This is redundant with the fix in 20740 elf_symbol::get_name_and_version_from_id() that always set the 20741 symbol name and version now, but I felt it makes it easier to 20742 understand the fix overall. 20743 * tests/data/test-abicompat/libtest7-fn-changed-libapp-v{0,1}.so: 20744 New test input binaries. 20745 * tests/data/test-abicompat/test7-fn-changed-app: Likewise. 20746 * tests/data/test-abicompat/test7-fn-changed-{app, libapp-v0, 20747 libapp-v1}.c: Source code of the binary test inputs above. 20748 * * tests/data/test-abicompat/test7-fn-changed-{libapp-v0, 20749 libapp-v1}.h: Likewise. 20750 * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Test 20751 input. 20752 * tests/data/Makefile.am: Add the new test material above to 20753 source distribution. 20754 * tests/test-abicompat.cc (int_out_specs): Add the test inputs 20755 above to the set of inputs this test harness has to run over. 20756 207572015-07-20 Dodji Seketeli <dodji@redhat.com> 20758 20759 Fix the wording of description of abipkgdiff.cc again 20760 * tools/abipkgdiff.cc: Fix the wording again. 20761 207622015-07-20 Dodji Seketeli <dodji@redhat.com> 20763 20764 Remove use of tmpnam from abilint 20765 * include/abg-tools-utils.h (abigail::tools_utils::temp_file): 20766 Declare new type. 20767 (abigail::tools_utils::temp_file_sptr): New typedef. 20768 * src/abg-tools-utils.cc (temp_file::priv): Define new type. 20769 (temp_file::{temp_file, is_good, get_path, get_stream, create}): 20770 Define new member functions. 20771 * tools/abilint.cc (main): Do not use tmpnam anymore. Use the new 20772 abigail::tools_utils::temp_file type instead. 20773 207742015-07-20 Dodji Seketeli <dodji@redhat.com> 20775 20776 Try to avoid a race condition when abipkgdiff extracts packages. 20777 * include/abg-tools-utils.h (get_random_number) 20778 (get_random_number_as_string): Declare new functions. 20779 * src/abg-tools-utils.cc (get_random_number) 20780 (get_random_number_as_string): Define them. 20781 * tools/abipkgdiff.cc 20782 (package::extracted_package_parent_dir_path): New data member. 20783 (package::package): Initialize 20784 package::extracted_package_parent_dir_path to 20785 <tmpdir>/<randomname>, with randomname being a random number 20786 represented as a string. 20787 (extract_rpm): Make sure to create a hierarchy of directories, not 20788 just a directory. 20789 207902015-07-19 Dodji Seketeli <dodji@redhat.com> 20791 20792 Fix the wording of the description of the abipkgdiff.cc file 20793 * tools/abipkgdiff.cc: Fix the wording of the description. 20794 207952015-07-19 Dodji Seketeli <dodji@redhat.com> 20796 20797 Fix the --suppressions manual doc for abidiff 20798 * doc/manuals/abidiff.rst: Talk about the --suppr shortcut of the 20799 --suppressions option. 20800 208012015-07-19 Dodji Seketeli <dodji@redhat.com> 20802 20803 On changed fn, show symbol info when name is different from linkage name in C 20804 * include/abg-ir.h (translation_unit::language): New enum type. 20805 (translation_unit::{get_language, set_language}): Declare new 20806 accessors. 20807 (translation_unit_language_to_string) 20808 (string_to_translation_unit_language, is_c_language) 20809 (is_cplus_plus_language): Declare new functions. 20810 * src/abg-ir.cc (translation_unit::priv::language_): New data 20811 member. 20812 (translation_unit::priv::language_): Initialize it. 20813 (translation_unit::{set_language, get_language}): Define new 20814 member functions. 20815 (translation_unit_language_to_string) 20816 (string_to_translation_unit_language, is_c_language) 20817 (is_cplus_plus_language): Define new functions. 20818 * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): New 20819 static function. 20820 (build_translation_unit_and_add_to_ir): Read the language of the 20821 translation unit. 20822 * src/abg-comparison.cc (corpus_diff::report): When reporting a 20823 change in a function sub-type, if we are in C language translation 20824 unit, if the function name is different from its linkage name, 20825 even if the symbol doesn't have any alias, show symbol 20826 information. 20827 * src/abg-reader.cc (read_translation_unit_from_input): Read the 20828 'language' property of the translation unit, if present. 20829 * src/abg-writer.cc (write_translation_unit): Write the 'language' 20830 property to the translation unit, if present. 20831 * tests/data/test-read-dwarf/test0.abi: Adjust for the new 20832 'language' property of the 'abi-instr' element. 20833 * tests/data/test-read-dwarf/test1.abi: Likewise. 20834 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 20835 * tests/data/test-read-dwarf/test3.so.abi: Likewise. 20836 * tests/data/test-read-dwarf/test4.so.abi: Likewise. 20837 * tests/data/test-read-dwarf/test5.o.abi: Likewise. 20838 * tests/data/test-read-dwarf/test6.so.abi: Likewise. 20839 * tests/data/test-read-dwarf/test7.so.abi: Likewise. 20840 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: 20841 Likewise. 20842 208432015-07-19 Dodji Seketeli <dodji@redhat.com> 20844 20845 Add --suppressions to abipkgdiff 20846 * tools/abipkgdiff.cc (options::suppressions): New data member. 20847 (set_diff_context_from_opts): Set the suppression specifications 20848 provided by the user to the diff context. 20849 (parse_command_line): Parse the --suppressions and --suppr command 20850 line options. 20851 * doc/manuals/abipkgdiff.rst: Document the --suppressions and 20852 --suppr options. 20853 208542015-07-18 Dodji Seketeli <dodji@redhat.com> 20855 20856 Support file_name_regexp and soname_regexp in supp-specs 20857 * include/abg-comparison.h (suppression_base::priv_): Make this 20858 pimpl member protected. 20859 (suppression_base::set_file_name_regex_str) 20860 (get_file_name_regex_str, get_soname_regex_str) 20861 (set_soname_regex_str): Declare new accessors. 20862 (function_suppression::{suppresses_function, 20863 suppresses_function_symbol}): Take a diff_context_sptr. 20864 (variable_suppression::{suppresses_variable, 20865 suppresses_variable_symbol}): Take a diff_context_sptr. 20866 * src/abg-comparison.cc 20867 (suppression_base::priv::{file_name_regex_str_, file_name_regex_, 20868 soname_regex_str_, soname_regex_}): Define new data members. 20869 (suppression_base::priv::get_file_name_regex_str) 20870 (get_soname_regex_str): Define new member functions. 20871 (suppression_base::set_file_name_regex_str) 20872 (get_file_name_regex_str, get_soname_regex_str) 20873 (set_soname_regex_str): Define new accessors. 20874 (type_suppression::suppresses_diff): Evaluate file_name_regexp and 20875 soname_regexp. 20876 (read_type_suppression): Fix the reading of the "label" property. 20877 Read the file_name_regexp and soname_regexp properties. 20878 (function_suppression::{suppresses_function, 20879 suppresses_function_symbol): Take a diff_context_sptr parameter. 20880 Evaluate file_name_regexp and soname_regexp properties. 20881 (function_suppression::suppresses_diff): Adjust for the api change 20882 of function_suppression::suppresses_function(). 20883 (read_function_suppression): Read the file_name_regexp and 20884 soname_regexp properties. 20885 (variable_suppression::suppresses_variable): Take a 20886 diff_context_sptr parameter and evaluate file_name_regexp and 20887 soname_regexp properties. 20888 (variable_suppression::suppresses_variable_symbol): Likewise. 20889 (variable_suppression::suppresses_diff): Adjust for the api change 20890 of variable_suppression::suppresses_variable(). 20891 (read_variable_suppression): Read the file_name_regexp and 20892 soname_regexp properties. 20893 (function_is_suppressed, variable_is_suppressed): Take a 20894 diff_context_sptr parameter. 20895 (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): 20896 Adjust. 20897 * doc/manuals/libabigail-concepts.rst: Document file_name_regexp 20898 and soname_regexp in the manual. 20899 * tests/data/test-diff-suppr/libtest24-soname-v{0,1}.so: New test 20900 binary input files. 20901 * tests/data/test-diff-suppr/test24-soname-report-{0,4}.txt: New 20902 test input files. 20903 * tests/data/test-diff-suppr/test24-soname-suppr-{0,4}.txt: 20904 Likewise. 20905 * tests/data/test-diff-suppr/test24-soname-v{0,1}.cc: Source code 20906 of the binary test input files above. 20907 * tests/data/Makefile.am: Add the new test material above to 20908 source distribution. 20909 * tests/test-diff-suppr.cc (in_out_spec): Add the new test inputs 20910 to the set of tests this harness has to run over. 20911 209122015-07-18 Dodji Seketeli <dodji@redhat.com> 20913 20914 Fix possible crash in suppression evaluation 20915 * src/abg-comparison.cc (type_suppression::suppresses_diff): When 20916 evaluating the reach_kind property, do not crash on diff nodes 20917 that are pointer_diff or reference_diff to something else but a 20918 type diff. 20919 209202015-07-17 Dodji Seketeli <dodji@redhat.com> 20921 20922 Fix '--' being rendered as '-' in html manuals 20923 * doc/manuals/abicompat.rst: Quote options as verbatim. 20924 * doc/manuals/abidiff.rst: Likewise. 20925 * doc/manuals/abidw.rst: Likewise. 20926 * doc/manuals/abilint.rst: Likewise. 20927 * doc/manuals/abipkgdiff.rst: Likewise. 20928 209292015-07-17 Dodji Seketeli <dodji@redhat.com> 20930 20931 Fix the --verbose option 20932 * tools/abipkgdiff.cc (compare): In the elf_file overload, do not 20933 emit an error message when a binary could not be analyzed unless 20934 --verbose was provided. 20935 209362015-07-16 Dodji Seketeli <dodji@redhat.com> 20937 20938 Cleanup the output for added/removed binaries 20939 * tools/abipkgdiff.cc (compare): In the overload for packages, 20940 indent the content of the "Removed binaries" and "Added binaries" 20941 paragraphs. 20942 209432015-07-16 Dodji Seketeli <dodji@redhat.com> 20944 20945 Avoid redundant diff report messages by default. 20946 * tools/abipkgdiff.cc (options::show_redundant_changes): New data 20947 member. 20948 (options::options): Initialize it. 20949 (display_usage): Add a help string for the --redundant command 20950 Line option. 20951 (set_diff_context_from_opts): New static function. 20952 (compare): Take the options variable. Set the diff context from 20953 the options, especially if we should show redundant changes or 20954 not. Use that diff context when comparing ABIs. 20955 (parse_command_line): Parse the new --redundant command line 20956 switch. 20957 * doc/manuals/abipkgdiff.rst: Document the new --redundant option. 20958 209592015-07-16 Dodji Seketeli <dodji@redhat.com> 20960 20961 Support comparing only shared libraries 20962 * tools/abipkgdiff.cc (options::compare_dso_only): New data 20963 member. 20964 (options::options): Initialize it. 20965 (display_usage): Display a little help string for it. 20966 (create_maps_of_package_content): Take the option variable. Do 20967 not compare non-dso files if the --dso-only option was provided. 20968 (extract_package_and_map_its_content, prepare_packages, compare): 20969 Take the option variable. 20970 (parse_command_line): Parse the new --dso-only option. 20971 * doc/manuals/abipkgdiff.rst: Add documentation for the new 20972 --dso-only option. 20973 209742015-07-15 Dodji Seketeli <dodji@redhat.com> 20975 20976 Comment functions and types of abipkgdiff 20977 * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Better wording 20978 of the apidoc of this function. 20979 * tools/abipkgdiff.cc (verbose, elf_file_paths): Add apidoc for 20980 these global variables. 20981 (struct options, ): Add apidoc for these types. 20982 (options::{erase_extraction_directory, 20983 erase_extraction_directories}, display_usage, extract_rpm) 20984 (erase_created_temporary_directories, extract_package) 20985 (file_tree_walker_callback_fn, compare) 20986 (create_maps_of_package_content) 20987 (extract_package_and_map_its_content, prepare_packages, compare) 20988 (parse_command_line): Add apidoc for these functions. 20989 209902015-07-16 Sinny Kumari <sinny@redhat.com> 20991 20992 Add regression tests for abipkgdiff tool 20993 * tests/Makefile.am: Build new runtestdiffpkg regression test 20994 * tests/data/Makefile.am: Add new test files to source 20995 * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm: 20996 Test data for abipkgdiff tool 20997 * tests/data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm: Likewise 20998 * tests/data/test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: 20999 Likewise 21000 * tests/data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: 21001 Likewise 21002 * tests/data/test-diff-pkg/test-rpm-report-0.txt: Expected test output 21003 * tests/data/test-diff-pkg/test-rpm-report-1.txt: Likewise 21004 * tests/data/test-diff-pkg/test-rpm-report-2.txt: Likewise 21005 * tests/data/test-diff-pkg/test-rpm-report-3.txt: Likewise 21006 * tests/data/test-diff-pkg/test-rpm-report-4.txt: Likewise 21007 * tests/test-diff-pkg.cc: New file 21008 210092015-07-15 Dodji Seketeli <dodji@redhat.com> 21010 21011 Add a manual for abipkgidiff 21012 * doc/manuals/abipkgdiff.rst: New manual file. 21013 * doc/manuals/libabigail-tools.rst: Refer to the manual for 21014 abipkgdiff. 21015 * doc/manuals/Makefile.am: Add the new manual file to source 21016 distribution. 21017 * doc/manuals/conf.py: Add the manual for abipkgdiff to section 1. 21018 210192015-07-15 Dodji Seketeli <dodji@redhat.com> 21020 21021 Comment functions and types of abipkgdiff 21022 * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Better wording 21023 of the apidoc of this function. 21024 * tools/abipkgdiff.cc (verbose, elf_file_paths): Add apidoc for 21025 these global variables. 21026 (struct options, ): Add apidoc for these types. 21027 (options::{erase_extraction_directory, 21028 erase_extraction_directories}, display_usage, extract_rpm) 21029 (erase_created_temporary_directories, extract_package) 21030 (file_tree_walker_callback_fn, compare) 21031 (create_maps_of_package_content) 21032 (extract_package_and_map_its_content, prepare_packages, compare) 21033 (parse_command_line): Add apidoc for these functions. 21034 210352015-07-15 Dodji Seketeli <dodji@redhat.com> 21036 21037 Various style fixes 21038 * abipkgdiff.cc (get_soname_of_elf_file): Fix spacing. 21039 * tools/abipkgdiff.cc (elf_file_paths): Make this global variable 21040 static. 21041 (extract_rpm): Rename parameter pkg_path name into package_path. 21042 210432015-07-15 Dodji Seketeli <dodji@redhat.com> 21044 21045 Remove the last direct fiddling with ELF from abipkgdiff.cc 21046 * abg-dwarf-reader.h (enum elf_type): Move this declaration here 21047 from abipkgdiff.cc to here. 21048 (get_type_of_elf_file): Declare this new function. 21049 (get_soname_from_elf): Change this to take a path to the elf file 21050 rather than a Elf* handler. So now to use this, the user doesn't 21051 have to get her hand dirty with elfutils. 21052 * src/abg-dwarf-reader.cc (get_soname_from_elf): Change this to 21053 take a path to the elf file rather than a Elf* handler. 21054 (elf_file_type): Move this static function here, from 21055 abipkgdiff.cc. 21056 (get_type_of_elf_file): New function. This has been factorized 21057 out of create_maps_of_package_content() in abipkgdiff.cc. 21058 * tools/abipkgdiff.cc (class elf_file): Changed struct elf_file 21059 into this. Make the default constructor private. 21060 (elf_file::elf_file): Change the constructor to just take the path 21061 to the elf_file. The base name, soname and elf file type are now 21062 computed from the path file, in the constructor. This makes 21063 instantiation much much easier from the point of view of the user 21064 of the type. 21065 (struct abi_diff): Renamed struct abi_changes into this. 21066 (abi_diff::has_changes): Define new member function. 21067 (abi_diffs): Remove this global variable. 21068 (package::package): Remove the elf file type from the set of 21069 parameters of this constructor. Rather, compute that elf file 21070 type from the path to the elf file, in the constructor. Again, 21071 this eases the use of the type. 21072 (elf_file_type): Remove this from here, as it got moved to 21073 abg-dwarf-reader.cc. 21074 (compare): In the elf_file overload, return true if the comparison 21075 yields ABI changes. 21076 (create_maps_of_package_content): Do not fiddle with elfutils 21077 stuff here. Rather, just instantiate elf_file and the analyzing 21078 of the file magically happens. 21079 (compare): Make the package overload take an abi_diff as output 21080 parameter, rather than populating a global variable in return. 21081 (compare): Add an other overload for package that doesn't take the 21082 abi_diff as output parameter and write it in terms of the previous 21083 one. 21084 (main): Adjust as the instantiation of package is now simpler. 21085 210862015-07-08 Dodji Seketeli <dodji@redhat.com> 21087 21088 Add a --verbose option to abipkgdiff 21089 * tools/abipkgdiff.cc (verbose): Add a new global variable. 21090 (package::erase_extraction_directory, extract_rpm, compare) 21091 (create_maps_of_package_content): Emit verbose information. 21092 (parse_command_line): Parse the --verbose option. 21093 210942015-07-08 Dodji Seketeli <dodji@redhat.com> 21095 21096 Use the library to implement ABI comparison in abipkgdiff 21097 * tools/abipkgdiff.cc (compare): In the overload for elf_file, use 21098 abigail::comparison::compute_diff() to compare the ABI of two 21099 corpora. The corpora themselves is read using 21100 abigail::dwarf_reader::read_corpus_from_elf(). This cleans up the 21101 output of the tool because nothing is emitted to standard output 21102 if the two ABI corpora compares equal. 21103 211042015-07-08 Dodji Seketeli <dodji@redhat.com> 21105 21106 Fix several string passing issues in abipkgdiff.cc 21107 * tools/abipkgdiff.cc (elf_file::elf_file): Pass the strings by 21108 reference. Also, change the order of the parameters; all the 21109 strings are passed first, then the elf_type is passed last. 21110 (package::package): Likewise, pass the strings by reference, not 21111 by value. 21112 (create_maps_of_package_content): Adjust for the change in 21113 parameters order of elf_file::elf_file. 21114 211152015-07-08 Dodji Seketeli <dodji@redhat.com> 21116 21117 Only try to compare DSOs or executable binaries in abipkgdiff 21118 * tools/abipkgdiff.cc (compare): In the overload for packages, 21119 only compare binaries that are DSO or executable. 21120 211212015-07-08 Dodji Seketeli <dodji@redhat.com> 21122 21123 Avoid flushing the output stream in abipkgdiff.cc 21124 * tools/abipkgdiff.cc (extract_package) 21125 (create_maps_of_package_content, compare, main): Avoid flushing 21126 the output stream arbitrarily. 21127 211282015-07-08 Sinny Kumari <sinny@redhat.com> 21129 21130 Move get_soname() function to abg-dwarf-reader.h/cc 21131 * include/abg-dwarf-reader.h (get_soname_from_elf): Declare 21132 new function 21133 * src/abg-dwarf-reader.cc (get_soname_from_elf): Define new 21134 function 21135 * tools/abipkgdiff.cc (get_soname): Remove function 21136 (pkg_diff): Call get_soname_from_elf() instead of get_soname() 21137 211382015-07-07 Dodji Seketeli <dodji@redhat.com> 21139 21140 Important organizational changes in abipkgdiff.cc 21141 * Avoid using shortened names when the line is not too long. 21142 * Use shared_ptr when possible. 21143 * When a function parameter is not meant to be nil, do not pass it 21144 as a pointer; rather, pass it as a reference. 21145 * Avoid doing things that can "fail" in a destructor; e.g, spawning 21146 a process. Also, it's not common practise to cleanup a resource in a 21147 type destructor, when that resource has not been created in one of the 21148 member functions of the type. It eases maintenance when resource 21149 creation and cleanup is performed at the same logical level. 21150 * tools/abipkgdiff.cc (option::package{1,2}): Rename 21151 option::pkg{1,2} into this, to increase legibility. 21152 (option::debug_package{1,2}): Likewise, rename 21153 option::debug_pkg{1,2} into this. 21154 (elf_file::~elf_file): Do not "delete this" in a destructor. This 21155 leads to double free. It's when someone invokes the "delete" 21156 operator on a pointer to the object that the destructor of the 21157 object is executed automatically; so if in the destructor the 21158 delete operator is called again, bad things are going to happen. 21159 As the destructor is now empty, remove it altogether. 21160 (elf_file_sptr): New typedef for shared_ptr<elf_file>. 21161 (package::path): Rename package::pkg_path into this, for better 21162 legibility. 21163 (package::extracted_package_dir_path): Rename 21164 package::extracted_pkg_dir_path into this. 21165 (package::type): Rename package::pkg_type into this. 21166 (package::is_debug_info): Rename package::is_debuginfo_pkg into 21167 this. 21168 (package::path_elf_file_sptr_map): Rename 21169 package::dir_elf_files_map into this because this is a map of 21170 path -> elf_file_sptr. Also, now the value of the map element is 21171 a elf_file_sptr, no more an elf_file*. 21172 (package::debug_info_package): Rename package::debuginfo_pkg into 21173 this. 21174 (package::package): Adjust for the changes above. 21175 (package::{erase_extraction_directory, 21176 erase_extraction_directories}): New member functions. 21177 (elf_file_paths): Renamed dir_elf_files_path into this. 21178 (erase_created_temporary_directories) 21179 (create_maps_of_package_content) 21180 (extract_package_and_map_its_content, prepare_packages): New 21181 static functions. 21182 (get_soname, elf_file_type, extract_rpm): Make this static. 21183 (extract_package): Take a const package& rather than a 21184 package_sptr to express that the function really expects a non-nil 21185 object by reference (not by copy) and that the object won't be 21186 modified. Using a reference removes the possibility that the 21187 pointer could be nil, causing crashes in the code where 21188 parameter->something was used. Now only parameter.something can 21189 be used, so no crash possible there. This is more solid code. 21190 (file_tree_walker_callback_fn): Rename callback() into this. It 21191 makes the code more legible and kind of 'self-documented'. At 21192 least you get the hint that this is a callback function for some 21193 file tree walking (ftw) function. Adjust for the relevant names 21194 renaming above. 21195 (compare): Rename compute_abidiff into this; again, this increases 21196 legibility; at least at the point of use of this function. Rename 21197 compare_package() into a an overload of compare() as well. 21198 compare_package() used to take a vector of packages. It was hard 21199 to guess by reading the signature of the function, which element 21200 of the vector is expected to be the first vector of the 21201 comparison, which one is to be the second, etc. Now, this 21202 function takes two packages, named first_package and 21203 second_package. That is more "typed"; that is, the signature is 21204 more meaningful. Greater legibility, hopefully. And in the body 21205 of the function, the debug information packages are now accessed 21206 using the package::debug_info_package data member. Again, this is 21207 less surprising, I believe. Also, explicitly erase the temporary 21208 files that were created during this comparison. All this 21209 simplifies the logic of this function, hopefully. 21210 (parse_command_line): Make this static. Add new --d1 and --d2 21211 command line switches that are shortcuts of --debug-info-pkg1 and 21212 --debug-info-pkg2. Adjust this function for the relevant name 21213 changes above. Make lines be shorter than 80 characters. 21214 (main): Do not create any vector of parameters anymore as the 21215 compare_packages() function don't take any vector of parameter 21216 anymore. Just instantiate first_package and second_package now. 21217 Adjust for the relevant name changes above. This hopefully 21218 simplifies the logic of this function. 21219 212202015-07-06 Dodji Seketeli <dodji@redhat.com> 21221 21222 Wording fixes in abipkgdiff.cc 21223 * tools/abipkgdiff.cc (extract_package): Renamed extract_pkg into 21224 this because shortening 'package' into 'pkg' provides no 21225 legibility improvement. 21226 (compare_packages): Renamed pkg_diff() into this, so that the name 21227 of the function starts with a verb, and the shortened 'pkg' word 21228 is renamed back to the 'package' word. This way, the code almost 21229 reads like normal English sentences with verbs and complement, 21230 thus enhancing legibility and easing latter maintenance. 21231 (main): Adjust for the changes above. 21232 212332015-07-06 Dodji Seketeli <dodji@redhat.com> 21234 21235 Re-indent tools/abipkgdiff.cc 21236 * tools/abipkgdiff.cc: Re-indent the file properly and fix some 21237 white spacing here and there. 21238 212392015-07-06 Dodji Seketeli <dodji@redhat.com> 21240 21241 Some slight typo and wording fixes in abipkgdiff 21242 * tools/abipkgdiff.cc (display_usage): Fixed the typo in 21243 'bi-pacakge.' Also, refer to 'package', not to 'bi-package' that 21244 is surprising to the user at first. 21245 (compute_abidiff): Shorten the size of the introductory line. 21246 212472015-07-03 Dodji Seketeli <dodji@redhat.com> 21248 21249 Remove names of unused variables in callback() 21250 * tools/abipkgdiff.cc (callback): Remove the name of parameters st 21251 and flag. 21252 212532015-07-03 Dodji Seketeli <dodji@redhat.com> 21254 21255 Remove useless const from the declaration of extract_rpm() 21256 * tools/abipkgdiff.cc (extract_rpm): Remove useless const qualifier. 21257 212582015-07-03 Dodji Seketeli <dodji@redhat.com> 21259 21260 End all branches of get_soname() finish with a return statement 21261 * tools/abipkgdiff.cc (get_soname): Have just one return statement 21262 at the end of this function. 21263 212642015-07-03 Dodji Seketeli <dodji@redhat.com> 21265 21266 Fix abipkgdiff compilation issues 21267 * tools/abipkgdiff.cc (elf_file::elf_file): Initialize data member 21268 in the same order as they were declared. 21269 (package::package): Likewise. 21270 212712015-06-19 Sinny Kumari <sinny@redhat.com> 21272 21273 Exclude processing symlink, display removed/added binaries between two packages 21274 * tools/abipkgdiff.cc (abi_changes): Declare new struct 21275 (callback): Exclude symbloic link file for durther processing 21276 (compute_abidiff): Consider SONAME if exists as key in map instead 21277 of binary name, else binary as key. Also, print if removed/added 21278 binaries exist between packages 21279 212802015-06-09 Sinny Kumari <sinny@redhat.com> 21281 21282 Stdout ABI changes if same binary found in both package 21283 * tools/abipkgdiff.cc (compute_abidiff): New function 21284 tools/abipkgdiff.cc (pkg_diff): Iterate through list of binaries 21285 in both package directory and call compute_diff function if 21286 same binary found in both file. 21287 tools/abipkgdiff.cc (main): Also consider debug-info directories 21288 avilable in debu-info packages. 21289 212902015-06-02 Sinny Kumari <sinny@redhat.com> 21291 21292 Save ELF files, their type and SONAME if exist for extracted packages 21293 * tools/abipkgdiff.cc (elf_type): Declare new enum 21294 (elf_file): Declare new struct 21295 (package): Add member variable dir_elf_files_map 21296 (get_soname): Define new function 21297 (elf_file_type): Define new function 21298 (extract_rpm): Iterate over extracted directory files 21299 and filter ELF binary files along with their information 21300 like name, soname, elf_type and save in dir_elf_files_map 21301 213022015-05-26 Sinny Kumari <sinny@redhat.com> 21303 21304 Extract packages(RPMs) into temporary directories for further processing 21305 * tools/abipkgdiff.cc (struct package): Declare new struct 21306 (package_sptr): Declare shared_ptr for struct package 21307 (extract_rpm): Define new fuction to extract rpm package 21308 (extract_pkg): Define new function to extract pacakge 21309 (pkg_diff): Define new function to get ABI diff between 21310 two packages 21311 (main): Create new object of type pacakge for each binary 21312 and debuginfo pacakge passed in commandline options 21313 213142015-05-21 Sinny Kumari <sinny@redhat.com> 21315 21316 Guess RPM file type 21317 * include/abg-tools-utils.h (file_type): Added member 21318 FILE_TYPE_RPM and FILE_TYPE_SRPM 21319 (operator<<): New function declaration. 21320 * src/abg-tools-utils.cc (file_type): Detect RPM and 21321 SRPM file type 21322 (operator<<): New function definition 21323 * tools/abidiff.cc (main): Check for RPM and SRPM 21324 file type as well. 21325 * tools/abilint.cci (main): Check for RPM and SRPM file 21326 type as well. 21327 * tools/abipkgdiff.cc (main): Check whether input files 21328 to abipkgdiff are valid RPM files or not. 21329 213302015-05-19 Sinny Kumari <sinny@redhat.com> 21331 21332 Initial skeleton of abipkgdiff tool 21333 * tools/Makefile.am: Include abipkgdiff.cc in compilation and 21334 generate abipkgdiff binary. 21335 * tools/abipkgdiff.cc: New file 21336 213372015-07-16 Dodji Seketeli <dodji@redhat.com> 21338 21339 Support reading binaries that do not have a symbol table 21340 * src/abg-dwarf-reader.cc 21341 (read_context::find_symbol_table_section): Allow returning a nil 21342 pointer to symbol table. 21343 (read_context::lookup_elf_symbol_from_index): Return an empty elf 21344 symbol if we got a nil pointer to symbol table. 21345 (read_context::load_symbol_maps): If no symbol table is found then 21346 consider that the symbol maps loading failed. 21347 213482015-07-16 Dodji Seketeli <dodji@redhat.com> 21349 21350 Remove extra vertical spaces from diff report 21351 * src/abg-comparison.cc (class_diff::report): Do not emit new line 21352 unless the diff is to be reported. 21353 * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Adjust. 21354 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Adjust. 21355 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: 21356 : Adjust. 21357 213582015-07-09 Dodji Seketeli <dodji@redhat.com> 21359 21360 Allow null types in type comparison again 21361 * src/abg-comparison.cc (compute_diff): In the overload of 21362 type_base_sptr accept nil types. 21363 213642015-07-08 Dodji Seketeli <dodji@redhat.com> 21365 21366 Handle the life time of the map of canonical types 21367 * include/abg-ir.h (type_base::canonical_types_map_type): Move 21368 this typedef into abg-ir.cc and out of the type_base namespace. 21369 (type_base::get_canonical_types_map): Likewise. 21370 * src/abg-ir.cc (canonical_types_map_type): New typedef that got 21371 moved here from type_base::canonical_types_map_type. 21372 (get_canonical_types_map): Likewise got moved here from 21373 type_base::get_canonical_types_map. Made static in the process. 21374 (class usage_watchdog): New type. 21375 (usage_watchdog_sptr, usage_watchdog_wptr): New typedefs. 21376 (get_usage_watchdog, get_usage_watchdog_wptr, ref_usage_watchdog) 21377 (maybe_cleanup_type_system_data): New static functions. 21378 (translation_unit::priv::usage_watchdog_): Add new data member. 21379 (translation_unit::priv::priv): Get a reference on the usage 21380 watchdog. 21381 (translation_unit::priv::~priv): If the usage watchdog says that 21382 the type system is not used, then cleanup the global data 21383 logically owned by the type system. 21384 * include/abg-dwarf-reader.h (read_corpus_from_elf): Make this 21385 return a corpus and set the status by reference using a parameter. 21386 * src/abg-dwarf-reader.cc (read_corpus_from_elf): Implement the 21387 above. 21388 * include/abg-reader.h (read_translation_unit_from_file) 21389 (read_translation_unit_from_buffer) 21390 (read_translation_unit_from_istream): Remove the overloads that do 21391 not return a translation_unit_sptr and that pass it as a 21392 parameter. Only keep the overloads that return a 21393 translation_unit_sptr, forcing users of the API to own a proper 21394 reference on the resulting translation_unit pointer. That is 21395 important to handle the life time of the global data of the type 21396 system that need to be cleared when the last translation unit is 21397 de-allocated. 21398 * src/abg-reader.cc (read_translation_unit_from_input): Make this 21399 return a translation_unit_sptr. 21400 (read_translation_unit_from_file) 21401 (read_translation_unit_from_buffer) 21402 (read_translation_unit_from_istream): Remove the overloads that do 21403 not return a translation_unit_sptr and that pass it as a 21404 parameter. Only keep the overloads that return a 21405 translation_unit_sptr. 21406 (read_to_translation_unit): Make this return a 21407 translation_unit_sptr. 21408 * tests/print-diff-tree.cc (main): Adjust. 21409 * tests/test-diff-dwarf.cc (main): Likewise. 21410 * tests/test-ir-walker.cc (main): Likewise. 21411 * tests/test-read-dwarf.cc (main): Likewise. 21412 * tests/test-read-write.cc (main): Likewise. 21413 * tools/abicompat.cc (main): Likewise. 21414 * tools/abidiff.cc (main): Likewise. 21415 * tools/abidw.cc (main): Likewise. 21416 * tools/abilint.cc (main): Likewise. 21417 214182015-07-08 Dodji Seketeli <dodji@redhat.com> 21419 21420 Add --d{1,2} shortcut options for --debug-info-dir{1,2} in abidiff 21421 * tools/abidiff.cc (display_usage): Add the --d{1,2} to the help 21422 strings. 21423 (parse_command_line): Parse the new --d1 and --d2 options. 21424 214252015-07-08 Dodji Seketeli <dodji@redhat.com> 21426 21427 Factorize incompatible and subtype changes detection 21428 * include/abg-comparison.h (corpus_diff::{has_incompatible_changes, 21429 has_net_subtype_changes}): Declare new member functions. 21430 * src/abg-comparison.cc (corpus_diff::{has_incompatible_changes, 21431 has_net_subtype_changes}): Define them. 21432 * abidiff.cc (main): Use the new member functions above. 21433 214342015-07-09 Dodji Seketeli <dodji@redhat.com> 21435 21436 Adjust some tests for output changes 21437 * tests/data/test-abidiff/test-struct1-report.txt: Adjust. 21438 * tests/data/test-diff-dwarf/test10-report.txt: Likewise. 21439 * tests/data/test-diff-dwarf/test11-report.txt: Likewise. 21440 * tests/data/test-diff-dwarf/test13-report.txt: Likewise. 21441 * tests/data/test-diff-filter/test2-report.txt: Likewise. 21442 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Likewise. 21443 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: Likewise. 21444 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Likewise. 21445 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Likewise. 21446 214472015-07-06 Dodji Seketeli <dodji@redhat.com> 21448 21449 Fix missing newlines in diff report 21450 * src/abg-comparison.cc (class_diff::report): The overload of 21451 represent() for instances of var_decl does not emit new lines. So 21452 the caller must ensure a new line is emitted. 21453 214542015-07-02 Dodji Seketeli <dodji@redhat.com> 21455 21456 Support filtering out just one alias of a function 21457 * include/abg-comparison.h (function_suppression::{get, 21458 set}_allow_other_aliases): Declare new member functions. 21459 * src/abg-comparison.cc 21460 (function_suppression::priv::allow_other_aliases_): New data 21461 member. 21462 (function_suppression::priv::priv): Initialize it to 'true'. 21463 (function_suppression::{get, set}_allow_other_aliases): Define new 21464 member functions. 21465 (read_function_suppression): Parse the new "allow_other_aliases" 21466 property. 21467 (function_suppression::suppresses_function): Update to evaluate 21468 the new 'allow_other_aliases' property when there is a property to 21469 match against some a symbol name of the function. 21470 (corpus_diff::report): Fix the printing of function aliases when 21471 printing sub-type changes to properly emit the plural of the word 21472 'symbol' when the function has several aliases. 21473 * include/abg-ir.h (elf_symbol::get_number_of_aliases): Declare 21474 new member function. 21475 * src/abg-ir.cc (elf_symbol::get_number_of_aliases): Define new 21476 member function. 21477 * doc/manuals/libabigail-concepts.rst: Update manual. 21478 * tests/data/test-diff-dwarf/test5-report.txt: Adjust. 21479 * tests/data/test-diff-suppr/libtest23-alias-filter-v0.so: New 21480 test input. 21481 * tests/data/test-diff-suppr/libtest23-alias-filter-v1.so: Likewise. 21482 * tests/data/test-diff-suppr/test23-alias-filter-0.suppr: Likewise. 21483 * tests/data/test-diff-suppr/test23-alias-filter-1.suppr: Likewise. 21484 * tests/data/test-diff-suppr/test23-alias-filter-2.suppr: Likewise. 21485 * tests/data/test-diff-suppr/test23-alias-filter-3.suppr: Likewise. 21486 * tests/data/test-diff-suppr/test23-alias-filter-4.suppr: Likewise. 21487 * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. 21488 * tests/data/test-diff-suppr/test23-alias-filter-report-1.txt: Likewise. 21489 * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. 21490 * tests/data/test-diff-suppr/test23-alias-filter-report-3.txt: Likewise. 21491 * tests/data/test-diff-suppr/test23-alias-filter-report-4.txt: Likewise. 21492 * tests/data/test-diff-suppr/test23-alias-filter-report-5.txt: Likewise. 21493 * tests/data/test-diff-suppr/test23-alias-filter-v0.c: Likewise. 21494 * tests/data/test-diff-suppr/test23-alias-filter-v1.c: Likewise. 21495 * tests/data/test-diff-suppr/test23-alias-filter-version-script: Likewise. 21496 * tests/data/Makefile.am: Add the new test stuff to source 21497 distribution. 21498 * tests/test-diff-suppr.cc (in_out_spec): Add the tests inputs 21499 above to the list of input to run over. 21500 215012015-07-01 Dodji Seketeli <dodji@redhat.com> 21502 21503 Complete apidoc 21504 * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Finish the 21505 incomplete apidoc for this member function. 21506 215072015-07-01 Dodji Seketeli <dodji@redhat.com> 21508 21509 Show aliases of functions with changed sub-types 21510 * include/abg-ir.h (elf_symbol::get_aliases_id_string): Declare 21511 new overload. 21512 * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Define new 21513 overload. 21514 * src/abg-comparison.cc (corpus_diff::report): For functions with 21515 sub-type changes report their aliases. Do not do this if the 21516 function is a constructor or destructor because these almost 21517 always have aliases, at least with GCC and the developer most 21518 certainly has not done anything special for that; she would thus 21519 be uselessly surprised by that remote implementation detail. 21520 * tests/data/test-diff-dwarf/test5-report.txt: Adjust test. 21521 215222015-06-25 Dodji Seketeli <dodji@redhat.com> 21523 21524 Update ChangeLog file 21525 * ChangeLog: Update automatically using 'make update-changelog'. 21526 215272015-06-23 Dodji Seketeli <dodji@redhat.com> 21528 21529 Misc typo fixes 21530 * src/abg-comparison.cc 21531 (corpus_diff::priv::{deleted, added}n_variable_is_suppressed): Fix 21532 a typo. 21533 * tests/data/test-diff-dwarf/test16-syms-only-v0.cc: Fix a typo in 21534 the comments. 21535 * tests/data/test-diff-dwarf/test16-syms-only-v1.cc: Likewise. 21536 215372015-06-22 Dodji Seketeli <dodji@redhat.com> 21538 21539 Apply suppression specifications to added and removed functions and variables 21540 * include/abg-comparison.h (is_type_suppression) 21541 (is_function_suppression): Declare new functions. 21542 ({function, variable}_suppression::change_kind): Declare new enum. 21543 (function_suppression::{parse_change_kind, get_change_kind, 21544 set_change_kind, suppresses_function, 21545 suppresses_function_symbol}): Declare new member functions. 21546 (variable_suppression::{parse_change_kind, get_change_kind, 21547 set_change_kind, suppresses_variable, suppresses_variable, 21548 suppresses_variable_symbol}): Declare new member functions. 21549 (operator{&,|}): Declare new operators for 21550 function_suppression::change_kind and 21551 variable_suppression::change_kind enums. 21552 (corpus_diff::diff_stats::{num_removed_func_filtered_out, 21553 net_num_func_removed, num_added_func_filtered_out, 21554 net_num_func_added, num_removed_vars_filtered_out, 21555 net_num_vars_removed, num_added_vars_filtered_out, 21556 net_num_vars_added, num_removed_func_syms_filtered_out, 21557 num_added_func_syms_filtered_out, net_num_removed_func_syms, 21558 net_num_added_func_syms, num_added_var_syms_filtered_out, 21559 num_removed_vars_filtered_out, net_num_removed_var_syms, 21560 net_num_added_var_syms}): Declare new member functions. 21561 (corpus_diff::diff_stats::num_changed_vars_filtered_out): Renamed 21562 corpus_diff::diff_stats::num_vars_filtered_out into this. 21563 (corpus_diff::diff_stats::num_changed_func_filtered_out): Renamed 21564 corpus_diff::diff_stats::num_func_filtered_out into this. 21565 * src/abg-comparison.cc (is_type_suppression) 21566 (is_function_suppression): Define new 21567 function. 21568 (function_suppression::priv::change_kind): New data member. 21569 (function_suppression::priv): Initialize it. 21570 (function_suppression::{parse_change_kind, get_change_kind, 21571 set_change_kind, suppresses_function, 21572 suppresses_function_symbol}): Define new member functions. 21573 (operator{&,|}): Define new operators for the new 21574 function_suppression::change_kind enum. 21575 (function_suppression::suppresses_diff): Re-write this in terms of 21576 the new function_suppression::suppresses_function() function. 21577 (read_function_suppression): Support reading the new "change_kind" 21578 property. 21579 (variable_suppression::priv::change_kind_): New data member. 21580 (variable_suppression::priv::priv): Initialize it. 21581 (variable_suppression::{parse_change_kind, get_change_kind, 21582 set_change_kind, suppresses_variable, 21583 suppresses_variable_symbol}): Define new member functions. 21584 (is_variable_suppression): Define new function. 21585 (operator{&,|}): Define new operators for 21586 variable_suppression::change_kind enum. 21587 (variable_suppression::suppresses_diff): Re-write in terms of the 21588 new variable_suppression::suppresses_variable function. 21589 (read_variable_suppression): Support reading the new "change_kind" 21590 property. 21591 (corpus_diff::diff_stats::priv::{num_removed_func_filtered_out, 21592 num_added_func_filtered_out, num_removed_vars_filtered_out, 21593 num_added_vars_filtered_out, num_removed_func_syms_filtered_out, 21594 num_added_func_syms_filtered_out, 21595 num_removed_var_syms_filtered_out, 21596 num_added_var_syms_filtered_out}): New data members. 21597 (corpus_diff::diff_stats::priv::num_changed_func_filtered_out): 21598 Renamed the data member num_func_filtered_out into this. 21599 (corpus_diff::diff_stats::priv::num_changed_vars_filtered_out): 21600 Renamed data member num_vars_filtered_out into this. 21601 (corpus_diff::diff_stats::priv::priv): Initialize the new data 21602 members. 21603 (corpus_diff::diff_stats::{num_removed_func_filtered_out, 21604 num_removed_func_filtered_out, net_num_func_removed, 21605 net_num_func_added, num_added_func_filtered_out, 21606 net_num_func_added, num_removed_vars_filtered_out, 21607 num_removed_vars_filtered_out, net_num_vars_removed, 21608 num_added_vars_filtered_out, net_num_vars_added, 21609 num_removed_func_syms_filtered_out, 21610 num_added_func_syms_filtered_out, net_num_removed_func_syms, 21611 net_num_added_func_syms, num_added_var_syms_filtered_out, 21612 num_removed_vars_filtered_out, net_num_removed_var_syms, 21613 net_num_added_var_syms}): Define new member functions. 21614 (corpus_diff::diff_stats::num_changed_func_filtered_out): Renamed 21615 corpus_diff::diff_stats::num_func_filtered_out into this. 21616 (corpus_diff::diff_stats::num_changed_vars_filtered_out): Renamed 21617 corpus_diff::diff_stats::num_vars_filtered_out into this. 21618 (corpus_diff::diff_stats::{net_num_func_changed, 21619 net_num_vars_changed}): Adjust. 21620 (corpus_diff::priv::{suppressed_deleted_fns_, 21621 suppressed_added_fns_, suppressed_deleted_vars_, 21622 suppressed_added_vars_, suppressed_added_unrefed_fn_syms_, 21623 suppressed_deleted_unrefed_fn_syms_, 21624 suppressed_added_unrefed_var_syms_, 21625 suppressed_deleted_unrefed_fn_syms_}): New data members. 21626 (corpus_diff::priv::{apply_suppressions_to_added_removed_fns_vars, 21627 deleted_function_is_suppressed, added_function_is_suppressed, 21628 deleted_variable_is_suppressed, added_variable_is_suppressed, 21629 added_unrefed_fn_sym_is_suppressed, 21630 deleted_unrefed_fn_sym_is_suppressed, 21631 added_unrefed_var_sym_is_suppressed, 21632 deleted_unrefed_var_sym_is_suppressed}): Define member functions. 21633 (function_is_suppressed, variable_is_suppressed): Define new 21634 functions. 21635 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Compute 21636 stats for filtered added or removed functions, variables and their 21637 symbols. 21638 (corpus_diff::priv::emit_diff_stats): Emit diff stats for filtered 21639 added or removed functions, variables and symbols. 21640 (corpus_diff::report): Support suppressed reports about added or 21641 removed functions, variables and symbols. Fixed a typo that was 21642 in there for a while. Note that that fix requires updating some 21643 regression tests, and the part of this patch that touches 21644 regression tests does that. 21645 (apply_suppressions): In the overload for corpus_diff, apply the 21646 suppression to added or removed functions and variables. 21647 * doc/manuals/libabigail-concepts.rst: Update this manual to 21648 reflect the changes above. Also, perform an extensive cleanup of 21649 the manual to introduce more section titles to make it easier to 21650 navigate the document using the table of content. 21651 * tests/data/test-abicompat/test2-var-removed-report-0.txt: 21652 Adjust. 21653 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 21654 * tests/data/test-diff-dwarf/test12-report.txt: Likewise. 21655 * tests/data/test-diff-dwarf/test18-alias-sym-report-0.txt: 21656 Likewise. 21657 * tests/data/test-diff-dwarf/test19-soname-report-0.txt: Likewise. 21658 * tests/data/test-diff-dwarf/test7-report.txt: Likewise. 21659 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 21660 * tests/data/test-diff-dwarf/test9-report.txt: Likewise. 21661 * tests/data/test-diff-dwarf/test16-syms-only-report.txt: Likewise. 21662 * tests/data/test-diff-dwarf/test17-non-refed-syms-report-0.txt: 21663 Likewise. 21664 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: 21665 Likewise. 21666 * tests/data/test-diff-filter/test0-report.txt: Likewise. 21667 * tests/data/test-diff-filter/test01-report.txt: Likewise. 21668 * tests/data/test-diff-filter/test13-report.txt: Likewise. 21669 * test-diff-suppr/test15-suppr-added-fn-v0.o: Add new test 21670 material. 21671 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 21672 * tests/data/test-diff-filter/test2-report.txt: Likewise. 21673 * tests/data/test-diff-filter/test21-compatible-vars-report-0.txt: 21674 Likewise. 21675 * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: 21676 Likewise. 21677 * test-diff-suppr/test15-suppr-added-fn-v1.o: Likewise. 21678 * test-diff-suppr/test15-suppr-added-fn-0.suppr: Likewise. 21679 * test-diff-suppr/test15-suppr-added-fn-1.suppr: Likewise. 21680 * test-diff-suppr/test15-suppr-added-fn-2.suppr: Likewise. 21681 * test-diff-suppr/test15-suppr-added-fn-3.suppr: Likewise. 21682 * test-diff-suppr/test15-suppr-added-fn-4.suppr: Likewise. 21683 * test-diff-suppr/test15-suppr-added-fn-report-0.txt: Likewise. 21684 * test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise. 21685 * test-diff-suppr/test15-suppr-added-fn-report-2.txt: Likewise. 21686 * test-diff-suppr/test15-suppr-added-fn-report-3.txt: Likewise. 21687 * test-diff-suppr/test15-suppr-added-fn-report-4.txt: Likewise. 21688 * test-diff-suppr/test15-suppr-added-fn-report-5.txt: Likewise. 21689 * test-diff-suppr/test15-suppr-added-fn-v0.cc: Likewise. 21690 * test-diff-suppr/test15-suppr-added-fn-v1.cc: Likewise. 21691 * test-diff-suppr/test16-suppr-removed-fn-v0.o: Likewise. 21692 * test-diff-suppr/test16-suppr-removed-fn-v1.o: Likewise. 21693 * test-diff-suppr/test16-suppr-removed-fn-0.suppr: Likewise. 21694 * test-diff-suppr/test16-suppr-removed-fn-1.suppr: Likewise. 21695 * test-diff-suppr/test16-suppr-removed-fn-2.suppr: Likewise. 21696 * test-diff-suppr/test16-suppr-removed-fn-3.suppr: Likewise. 21697 * test-diff-suppr/test16-suppr-removed-fn-4.suppr: Likewise. 21698 * test-diff-suppr/test16-suppr-removed-fn-report-0.txt: Likewise. 21699 * test-diff-suppr/test16-suppr-removed-fn-report-1.txt: Likewise. 21700 * test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise. 21701 * test-diff-suppr/test16-suppr-removed-fn-report-3.txt: Likewise. 21702 * test-diff-suppr/test16-suppr-removed-fn-report-4.txt: Likewise. 21703 * test-diff-suppr/test16-suppr-removed-fn-report-5.txt: Likewise. 21704 * test-diff-suppr/test16-suppr-removed-fn-v0.cc: Likewise. 21705 * test-diff-suppr/test16-suppr-removed-fn-v1.cc: Likewise. 21706 * test-diff-suppr/test17-suppr-added-var-v0.o: Likewise. 21707 * test-diff-suppr/test17-suppr-added-var-v1.o: Likewise. 21708 * test-diff-suppr/test17-suppr-added-var-0.suppr: Likewise. 21709 * test-diff-suppr/test17-suppr-added-var-1.suppr: Likewise. 21710 * test-diff-suppr/test17-suppr-added-var-2.suppr: Likewise. 21711 * test-diff-suppr/test17-suppr-added-var-3.suppr: Likewise. 21712 * test-diff-suppr/test17-suppr-added-var-4.suppr: Likewise. 21713 * test-diff-suppr/test17-suppr-added-var-report-0.txt: Likewise. 21714 * test-diff-suppr/test17-suppr-added-var-report-1.txt: Likewise. 21715 * test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise. 21716 * test-diff-suppr/test17-suppr-added-var-report-3.txt: Likewise. 21717 * test-diff-suppr/test17-suppr-added-var-report-4.txt: Likewise. 21718 * test-diff-suppr/test17-suppr-added-var-report-5.txt: Likewise. 21719 * test-diff-suppr/test17-suppr-added-var-v0.cc: Likewise. 21720 * test-diff-suppr/test17-suppr-added-var-v1.cc: Likewise. 21721 * test-diff-suppr/test18-suppr-removed-var-v0.o: Likewise. 21722 * test-diff-suppr/test18-suppr-removed-var-v1.o: Likewise. 21723 * test-diff-suppr/test18-suppr-removed-var-0.suppr: Likewise. 21724 * test-diff-suppr/test18-suppr-removed-var-1.suppr: Likewise. 21725 * test-diff-suppr/test18-suppr-removed-var-2.suppr: Likewise. 21726 * test-diff-suppr/test18-suppr-removed-var-3.suppr: Likewise. 21727 * test-diff-suppr/test18-suppr-removed-var-4.suppr: Likewise. 21728 * test-diff-suppr/test18-suppr-removed-var-report-0.txt: Likewise. 21729 * test-diff-suppr/test18-suppr-removed-var-report-1.txt: Likewise. 21730 * test-diff-suppr/test18-suppr-removed-var-report-2.txt: Likewise. 21731 * test-diff-suppr/test18-suppr-removed-var-report-3.txt: Likewise. 21732 * test-diff-suppr/test18-suppr-removed-var-report-4.txt: Likewise. 21733 * test-diff-suppr/test18-suppr-removed-var-report-5.txt: Likewise. 21734 * test-diff-suppr/test18-suppr-removed-var-v0.cc: Likewise. 21735 * test-diff-suppr/test18-suppr-removed-var-v1.cc: Likewise. 21736 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v0.o: New 21737 test input. 21738 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v1.o: 21739 Likewise. 21740 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-0.suppr: 21741 Likewise. 21742 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-1.suppr: 21743 Likewise. 21744 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-2.suppr: 21745 Likewise. 21746 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-3.suppr: 21747 Likewise. 21748 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-4.suppr: 21749 Likewise. 21750 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-0.txt: 21751 Likewise. 21752 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-1.txt: 21753 Likewise. 21754 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-2.txt: 21755 Likewise. 21756 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-3.txt: 21757 Likewise. 21758 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-4.txt: 21759 Likewise. 21760 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-5.txt: 21761 Likewise. 21762 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v0.cc: 21763 Likewise. 21764 * tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v1.cc: 21765 Likewise. 21766 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v0.o: 21767 Likewise. 21768 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v1.o: 21769 Likewise. 21770 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-0.suppr: 21771 Likewise. 21772 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-1.suppr: 21773 Likewise. 21774 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-2.suppr: 21775 Likewise. 21776 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-3.suppr: 21777 Likewise. 21778 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-4.suppr: 21779 Likewise. 21780 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-0.txt: 21781 Likewise. 21782 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-1.txt: 21783 Likewise. 21784 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-2.txt: 21785 Likewise. 21786 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-3.txt: 21787 Likewise. 21788 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-4.txt: 21789 Likewise. 21790 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-5.txt: 21791 Likewise. 21792 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v0.cc: 21793 Likewise. 21794 * tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v1.cc: 21795 Likewise. 21796 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-v0.o: 21797 Likewise. 21798 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-v1.o: 21799 Likewise. 21800 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-0.suppr: 21801 Likewise. 21802 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-1.suppr: 21803 Likewise. 21804 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-2.suppr: 21805 Likewise. 21806 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-3.suppr: 21807 Likewise. 21808 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-4.suppr: 21809 Likewise. 21810 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-0.txt: 21811 Likewise. 21812 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-1.txt: 21813 Likewise. 21814 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-2.txt: 21815 Likewise. 21816 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-3.txt: 21817 Likewise. 21818 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-4.txt: 21819 Likewise. 21820 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-5.txt: 21821 Likewise. 21822 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-v0.cc: 21823 Likewise. 21824 * tests/data/test-diff-suppr/test21-suppr-added-var-sym-v1.cc: 21825 Likewise. 21826 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v0.o: 21827 Likewise. 21828 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v1.o: 21829 Likewise. 21830 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-0.suppr: 21831 Likewise. 21832 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-1.suppr: 21833 Likewise. 21834 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-2.suppr: 21835 Likewise. 21836 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-3.suppr: 21837 Likewise. 21838 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-4.suppr: 21839 Likewise. 21840 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-0.txt: 21841 Likewise. 21842 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-1.txt: 21843 Likewise. 21844 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-2.txt: 21845 Likewise. 21846 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-3.txt: 21847 Likewise. 21848 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-4.txt: 21849 Likewise. 21850 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-5.txt: 21851 Likewise. 21852 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v0.cc: 21853 Likewise. 21854 * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v1.cc: 21855 Likewise. 21856 * tests/data/Makefile.am: Add the new test materials above to source 21857 distribution. 21858 * tests/test-diff-suppr.cc (in_out_specs): Add the new tests 21859 material above to the list of test inputs this harness has to run 21860 over. 21861 218622015-06-22 Dodji Seketeli <dodji@redhat.com> 21863 21864 Do not compare static data members when comparing types 21865 * include/abg-ir.h (class_decl::get_non_static_data_members): 21866 Declare new data members. 21867 * src/abg-comparison.cc 21868 (class_diff::ensure_lookup_tables_populated): Only look at 21869 non-static data members. 21870 (compute_diff): In the overload for class_decl, only compare 21871 non-static data members. 21872 * src/abg-hash.cc (class_decl::hash::operator()): Do not hash 21873 static data members members hashing a class_decl. 21874 * src/abg-ir.cc (class_decl::priv::data_members_): New data 21875 member. 21876 (class_decl::priv::priv): When initializing data members, store 21877 the non-static data members on the side, in the new 21878 class_decl::priv::non_static_data_members_ data member. 21879 (class_decl::get_non_static_data_members): Define member function. 21880 (class_decl::add_data_member): Store the non-static data members 21881 on the side in class_decl::priv::non_static_data_members_. 21882 (equals): In the overload for class_decl, do not take in account 21883 static data members when running the comparison. 21884 * tests/data/test-diff-dwarf/test7-report.txt: Adjust. 21885 * tests/data/test-diff-filter/test12-report.txt: Adjust. 21886 218872015-06-23 Dodji Seketeli <dodji@redhat.com> 21888 21889 Add a --suppr short alias to the --suppressions option of abidiff 21890 * tools/abidiff.cc (display_usage): Add a help string for the new 21891 --suppr option. 21892 (parse_command_line): Support the --suppr option which is an alias 21893 for --suppressions. 21894 218952015-06-23 Dodji Seketeli <dodji@redhat.com> 21896 21897 Enable large file support 21898 * configure.ac: Call the AC_SYS_LARGEFILE autoconf macro. 21899 * config.h.in: Update. 21900 219012015-06-23 Dodji Seketeli <dodji@redhat.com> 21902 21903 Do not build zip archive support by default 21904 * configure.ac: By default, unconditionally disable the 21905 zip-archive support. 21906 219072015-06-23 Dodji Seketeli <dodji@redhat.com> 21908 21909 Put the man pages of the binaries in section 1 21910 * doc/manuals/Makefile.am(section1_manpages, section7_manpages): 21911 Two new variables to contain the man page names per section. 21912 (manpages): Set this variable to $section1_manpages and $section7_manpages. 21913 (install-man-and-info-doc): In this rule, create the destination 21914 directories for section 1 and 7 and copy the right man pages in 21915 their right directory. 21916 * doc/manuals/conf.py (man_pages): Generate the binary man pages 21917 into section 1 and the libabigail man page into section 7. 21918 219192015-06-23 Dodji Seketeli <dodji@redhat.com> 21920 21921 Sort deleted/added variables and symbols before emitting report 21922 * src/abg-comparison.cc (sort_string_var_ptr_map) 21923 (sort_string_elf_symbol_map): Define new static functions. 21924 (var_comp, elf_symbol_comp): Define new comparison functors. 21925 (corpus_diff::report): Sort the deleted variables, added 21926 variables, deleted function symbols, added function symbols, 21927 deleted variable symbols, and added variable symbols before 21928 walking them to emit reports. 21929 219302015-06-23 Dodji Seketeli <dodji@redhat.com> 21931 21932 Remove useless white space 21933 * src/abg-comparison.cc (sort_string_parm_map): Remove trailing 21934 white space from comment. 21935 219362015-06-23 Dodji Seketeli <dodji@redhat.com> 21937 21938 Bug 18580 - abidw ignores --out-file 21939 * tools/abidw.cc (main): Take the argument of --out-file into 21940 account when emitting the serialized form of the ABI. 21941 219422015-06-23 Dodji Seketeli <dodji@redhat.com> 21943 21944 Fix a thinko in the comparison code 21945 * src/abg-comparison.cc 21946 (class_diff::ensure_lookup_tables_populated): Ensure that when a 21947 member function is wrongly considered as being added, then either 21948 the new member function doesn't have a symbol name (linkage name) 21949 or it has one, and it was already present in the first version of 21950 the binary. 21951 # Veuillez saisir le message de validation pour vos 21952 modifications. Les lignes # commençant par '#' seront ignorées, et 21953 un message vide abandonne la validation. # Sur la branche 21954 fix-master # Votre branche est à jour avec 'origin/master'. # # 21955 Modifications qui seront validées : # modified: 21956 src/abg-comparison.cc # # Modifications qui ne seront pas validées 21957 : # modified: tools/abidw.cc # # Fichiers non suivis: # abidw.abi 21958 # build/ # depcomp # missing # patch-edited.txt # patch.txt # 21959 prtests/ # test-driver # # ------------------------ >8 21960 ------------------------ # Ne touchez pas à la ligne ci-dessus # 21961 Tout se qui suit sera éliminé. 21962 diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc 21963 index 14208f5..ef7c6c9 100644 21964 --- a/src/abg-comparison.cc 21965 +++ b/src/abg-comparison.cc 21966 @@ -7419,8 +7419,8 @@ class_diff::ensure_lookup_tables_populated(void) const 21967 inserted_member_fns().begin(); 21968 i != inserted_member_fns().end(); 21969 ++i) 21970 - if (i->second->get_symbol() 21971 - && f->lookup_function_symbol(i->second->get_symbol()->get_name(), 21972 + if (!i->second->get_symbol() 21973 + || f->lookup_function_symbol(i->second->get_symbol()->get_name(), 21974 i->second->get_symbol()->get_version().str())) 21975 to_delete.push_back(i->first); 21976 219772015-06-07 Dodji Seketeli <dodji@redhat.com> 21978 21979 Build libabigail tests with position-independent code 21980 * tests/Makefile.am: Add -fPIC to the compile flags. 21981 219822015-06-07 Dodji Seketeli <dodji@redhat.com> 21983 21984 Build libabigail tools as position-independent code 21985 * tools/Makefile.am: Compile the binaries here with -fPIC. Note 21986 that the library libabigail.la is built with libtool which already 21987 takes care of this, so no need to worry about this for 21988 libabigail.la. 21989 219902015-06-07 Dodji Seketeli <dodji@redhat.com> 21991 21992 Update ChangeLog file 21993 * ChangeLog: Update this automatically by typing make 21994 update-changelog. 21995 219962015-06-07 Dodji Seketeli <dodji@redhat.com> 21997 21998 Avoid infinite loop in elf_symbol::get_alias_from_name() 21999 * src/abg-ir.cc (elf_symbol::get_alias_from_name) 22000 (elf_symbol::get_alias_which_equals): Test for the next alias 22001 pointing to the main symbol, in the loop exit condition. 22002 220032015-06-04 Dodji Seketeli <dodji@redhat.com> 22004 22005 Change the linkage name only when necessary 22006 * include/abg-ir.h (elf_symbol::get_alias_from_name): Declare new 22007 member function. 22008 * src/abg-ir.cc (elf_symbol::get_alias_from_name): Define it. 22009 * src/abg-dwarf-reader.cc (build_var_decl, build_function_decl): 22010 Once the linkage name is supposed to contain the value of the 22011 DW_AT_linkage_name attribute, set it the name of the underlying 22012 symbol only if value of DW_At_linkage_name is missing or different 22013 from the names of all the aliases of the underlying symbol. 22014 * tests/data/test-read-dwarf/test2.so.abi: Adjust. 22015 220162015-06-04 Dodji Seketeli <dodji@redhat.com> 22017 22018 Various white space cleanups 22019 * include/abg-comparison.h: Remove various useless vertical white 22020 spaces. 22021 * tests/test-diff-dwarf.cc (in_out_spec): Fix indentation of some 22022 entries. 22023 220242015-06-04 Dodji Seketeli <dodji@redhat.com> 22025 22026 Fix various comments here and there 22027 * src/abg-comparison.cc 22028 (diff_context::set_or_get_canonical_diff_for, compute_diff) 22029 (redundancy_marking_visitor::visit_begin): Fix comment in these 22030 functions. 22031 * src/abg-ir.cc (elf_symbol::is_variable): Likewise. 22032 220332015-06-04 Dodji Seketeli <dodji@redhat.com> 22034 22035 Add missing apidoc to elf_symbol type 22036 * src/abg-ir.cc (elf_symbol::{elf_symbol, get_name, set_name, 22037 get_type, set_type, get_binding, set_binding, get_version, 22038 is_defined, is_public, is_function, is_variable}): Add missing 22039 apidoc to these member functions. 22040 220412015-06-04 Dodji Seketeli <dodji@redhat.com> 22042 22043 Cleanup logic in class_diff::ensure_lookup_tables_populated() 22044 * src/abg-comparison.cc 22045 (class_diff::ensure_lookup_tables_populated): Remove the code that 22046 tries to lookup allegedly added functions from the set of deleted 22047 ones, by using the pretty printed name of the function. Handling 22048 the case of a function decl not correctly tied to it symbol is 22049 handled my generically a bit later in this function. 22050 220512015-06-04 Dodji Seketeli <dodji@redhat.com> 22052 22053 Report possible changes in the set of aliases of a symbol. 22054 * src/abg-comparison.cc (function_decl_diff::report): Report 22055 a change in the aliases of the symbols of a function; note that 22056 everything else but have stayed equal in the function. 22057 220582015-06-04 Dodji Seketeli <dodji@redhat.com> 22059 22060 Report vtable changes in top-level function change reports 22061 * src/abg-comparison.cc (function_decl_diff::report): Report about 22062 virtual-ness and vtable offset changes. 22063 * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: 22064 New test input file. 22065 * tests/data/test-diff-dwarf/test28-vtable-changes-v{0,1}.o: New 22066 test input binaries. 22067 * tests/data/test-diff-dwarf/test28-vtable-changes-v{0,1}.cc: 22068 Source code of the input binaries above. 22069 * tests/data/Makefile.am: Add the new test input above to source 22070 distribution. 22071 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test input 22072 above to the list of input this test harness has to run over. 22073 220742015-06-03 Dodji Seketeli <dodji@redhat.com> 22075 22076 Support new 'accessed_through' suppression property 22077 * include/abg-comparison.h (enum type_suppression::reach_kind): 22078 Define new enum. 22079 (type_suppression::{get_consider_reach_kind, 22080 set_consider_reach_kind, get_reach_kind, 22081 mark_last_diff_visited_per_class_of_equivalence, 22082 clear_last_diffs_visited_per_class_of_equivalence, 22083 get_last_visited_diff_of_class_of_equivalence}): Declare new 22084 member functions. 22085 * src/abg-comparison.cc (diff_has_ancestor_filtered_out) 22086 (read_suppression_reach_kind): Define static function. 22087 (type_suppression::priv::{consider_reach_kind_, reach_kind_}): 22088 Define new data members. 22089 (type_suppression::priv::priv): Take a new reach_kind parameter. 22090 (type_suppression::type_suppression): Adjust to new prototype of 22091 priv constructor. 22092 (type_suppression::{get_consider_reach_kind, 22093 set_consider_reach_kind, get_reach_kind, set_reach_kind}): Define 22094 new member functions. 22095 (type_suppression::suppresses_diff): Interpret the result of 22096 type_suppression::get_reach_kind() to determine if the suppression 22097 specification suppresses a given diff node. 22098 (read_type_suppression): Support reading the content of the 22099 "accessed_through" property. 22100 (diff_context::priv::last_visited_diff_node_): New data member. 22101 (diff_context::{mark_last_diff_visited_per_class_of_equivalence, 22102 clear_last_diffs_visited_per_class_of_equivalence, 22103 get_last_visited_diff_of_class_of_equivalence}): Define new data 22104 members. 22105 (redundancy_marking_visitor::visit_begin): So if the current diff 22106 node has already been visited, but if the previously visited node 22107 has been filtered out, then do not mark this node as being 22108 redundant. And mark the current diff node as being the last 22109 visited one in its class of equivalence. 22110 (categorize_redundancy): Clear the map of diff nodes visited per 22111 class of equivalence. 22112 * doc/manuals/libabigail-concepts.rst: Document the new 22113 'accessed_through' property. 22114 * tests/data/test-diff-suppr/test13-suppr-through-pointer-0.suppr: 22115 New test input data. 22116 * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-{0,1}.txt: 22117 Likewise. 22118 * tests/data/test-diff-suppr/libtest13-suppr-through-pointer-v{0,1}.so: 22119 New test input binaries. 22120 * tests/data/test-diff-suppr/test13-suppr-through-pointer-v{0,1}.cc: 22121 Source code of the test input binaries above. 22122 * tests/data/test-diff-suppr/test14-suppr-non-redundant-0.suppr: 22123 New test input data. 22124 * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: 22125 Likewise. 22126 * tests/data/test-diff-suppr/test14-suppr-non-redundant-v{0,1}.o: 22127 New test input binaries. 22128 * tests/data/test-diff-suppr/test14-suppr-non-redundant-v{0,1}.cc: 22129 Source code of the binaries above. 22130 221312015-06-03 Dodji Seketeli <dodji@redhat.com> 22132 22133 Fix redundancy marking for change of types used directly 22134 * include/abg-comparison.h (pointer_map): Make this be a map of 22135 {size_t, size_t} pairs, rather than {size_t, bool}, so that each 22136 pointer in the map can be associated to another one. 22137 (diff_context::diff_has_been_visited): Return the pointer to the 22138 first diff node of the equivalence class that has been visited. 22139 * src/abg-comparison.cc (is_pointer_diff, is_reference_diff) 22140 (is_reference_or_pointer_diff, is_fn_parm_diff, is_base_diff) 22141 (is_child_node_of_function_parm_diff, is_child_node_of_base_diff): 22142 Define new static functions. 22143 (diff_context::diff_has_been_visited): Return the pointer to the 22144 first diff node of the equivalence class that has been visited. 22145 (diff_context::mark_diff_as_visited): Save the pointer to the 22146 first diff node of a given class of equivalence that has been 22147 visited. 22148 (redundancy_marking_visitor::visit_begin): If a diff node is a 22149 child node of a function parameter diff or base diff node and if 22150 it's not a pointer or reference diff node, then do not mark it as 22151 redundant. Also, make sure to not mark the first diff node of a 22152 given class of equivalence that has been visited, as redundant; 22153 only the other subsequent nodes should be marked redundant; we 22154 were hitting this case because of an optimization that makes 22155 equivalent class diff nodes to share their private (pimpl) data. 22156 * tests/data/test-diff-filter/test29-finer-redundancy-marking-v{0,1}.o: 22157 New test input binaries. 22158 * tests/data/test-diff-filter/test29-finer-redundancy-marking-v{0,1}.cc: 22159 Source code of the new test input binaries above. 22160 * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: 22161 New test input. 22162 * tests/data/Makefile.am: Add the new test material above to the 22163 source distribution. 22164 * tests/test-diff-filter.cc (in_out_specs): Make this test harness 22165 run over the additional test input above. 22166 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust. 22167 221682015-06-02 Dodji Seketeli <dodji@redhat.com> 22169 22170 Fix detection of local changes in base classes 22171 * abg-ir.cc (equals): In the overload of class_decl::base_spec, if 22172 the underlying class carries changes, then do not flag these 22173 changes as local for the class_decl::base_spec. 22174 * tests/data/test-diff-dwarf/test27-local-base-diff-v{0,1}.o: New 22175 test input binaries. 22176 * tests/data/test-diff-dwarf/test27-local-base-diff-v{0,1}.cc: Source 22177 code for the test input binaries above. 22178 * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: 22179 New test input. 22180 * tests/data/Makefile.am: Add the test inputs above to source 22181 distribution. 22182 221832015-06-02 Dodji Seketeli <dodji@redhat.com> 22184 22185 Fix symbols comparison 22186 * include/abg-ir.h (elf_symbol_wptr): New typedef. 22187 (elf_symbol): Make the constructors and assignment operator 22188 private. The type can neither be copied nor created with the new 22189 operator. 22190 (elf_symbol::create): New static member function. 22191 (elf_symbol::{get_main_symbol, get_next_alias, add_alias}): 22192 Adjust. 22193 ( compute_aliases_for_elf_symbol): Likewise. 22194 (elf_symbol::operator=): Make this private. 22195 (elf_symbol::get_alias_which_equals): Declare new member function. 22196 * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): 22197 Adjust. 22198 * src/abg-comparison.cc 22199 (class_diff::ensure_lookup_tables_populated): Adjust. 22200 * src/abg-corpus.cc 22201 (corpus::priv::build_unreferenced_symbols_tables): Likewise. 22202 * include/abg-dwarf-reader.h (lookup_symbol_from_elf) 22203 (lookup_public_function_symbol_from_elf): Adjust. 22204 * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) 22205 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_elf_hash_tab) 22206 (lookup_symbol_from_symtab, lookup_symbol_from_elf) 22207 (lookup_public_function_symbol_from_elf) 22208 (lookup_public_variable_symbol_from_elf): Adjust. 22209 (read_context::lookup_elf_symbol_from_index): Likewise. 22210 (read_context::lookup_elf_fn_symbol_from_address): Likewise. 22211 (read_context::lookup_elf_var_symbol_from_address): Likewise. 22212 (read_context::lookup_public_function_symbol_from_elf): Likewise. 22213 (read_context::lookup_public_variable_symbol_from_elf): Likewise. 22214 (read_context::load_symbol_maps): Likewise. 22215 (build_var_decl, build_function_decl): Likewise. 22216 * src/abg-ir.cc (elf_symbol::priv::{main_symbol_, next_alias_}): 22217 Change the type of these from elf_symbol* to elf_symbol_wptr. 22218 (elf_symbol::priv::priv): Adjust. 22219 (elf_symbol::{create, get_alias_which_equals}): Define new functions. 22220 (textually_equals): Likewise. 22221 (elf_symbol::{get_main_symbol, is_main_symbol, get_next_alias, 22222 add_alias}): Adjust to return or take elf_symbol_sptr type, rather 22223 than a elf_symbol* one. 22224 (elf_symbol::{get_aliases_id_string, does_alias}): Adjust. 22225 (compute_alias_for_elf_symbol): Likewise. 22226 (elf_symbol::operator==): Two symbols A and B are now equal if A 22227 has at least one alias that is textually equal to B. 22228 (equals): In the overload for function_decls, in the part where we 22229 compare the decl_base part of the functions without considering 22230 their decl names, we now also omit considering their linkage 22231 names, because we compared they symbols before. 22232 * tools/abisym.cc (main): Adjust. 22233 * tests/data/test-diff-dwarf/test12-report.txt: Adjust. 22234 * tests/data/test-diff-dwarf/test12-report.txt: Adjust. 22235 * tests/data/test-diff-dwarf/test18-alias-sym-report-0.txt: Adjust. 22236 * tests/data/test-diff-dwarf/test8-report.txt: Adjust. 22237 * tests/data/test-diff-filter/test10-report.txt: Adjust. 22238 * tests/data/test-diff-filter/test13-report.txt: Adjust. 22239 * tests/data/test-diff-filter/test2-report.txt: Adjust. 22240 * tests/data/test-diff-filter/test20-inline-report-0.txt: Adjust. 22241 * tests/data/test-diff-filter/test20-inline-report-1.txt: Adjust. 22242 * tests/data/test-diff-filter/test9-report.txt: Adjust. 22243 222442015-04-22 Dodji Seketeli <dodji@redhat.com> 22245 22246 Support specifying data member insertion in suppressions 22247 * include/abg-comparison.h (type_suppression::insertion_range): 22248 Declare new type. 22249 (type_suppression::insertion_ranges): Declare new typedef. 22250 (type_suppression::{s,g}et_data_member_insertion_ranges): Declare 22251 new member functions. 22252 (is_integer_boundary, is_fn_call_expr_boundary): Declare new 22253 functions. 22254 (type_suppression::insertion_range::{boundary, integer_boundary, 22255 fn_call_expr_boundary}): Define new types. 22256 * src/abg-comparison.cc: 22257 (struct type_suppression::insertion_range::priv): New type. 22258 (type_suppression::insertion_range::{insertion_range, begin, 22259 end}): Define new member functions. 22260 (type_suppression::priv::insertion_ranges_): Add data member. 22261 (type_suppression::{s,g}et_data_member_insertion_ranges): Define 22262 new member functions. 22263 (type_suppression::insertion_range::boundary::priv): Define new 22264 type. 22265 (type_suppression::insertion_range::boundary::{boundary, 22266 ~boundary}): Define new member functions. 22267 (type_suppression::insertion_range::integer_boundary::priv): 22268 Define new type. 22269 (type_suppression::insertion_range::integer_boundary::{integer_boundary, 22270 as_integer, operator int, ~integer_boundary}): Define member 22271 functions. 22272 (type_suppression::insertion_range::fn_call_expr_boundary::priv): 22273 Define new type. 22274 (type_suppression::insertion_range::fn_call_expr_boundary::{fn_call_expr_boundary, 22275 as_function_call_expr, operator ini::function_call_expr_sptr}): 22276 Define new member functions. 22277 (type_suppression::insertion_range::{create_integer_boundary, 22278 type_suppression::insertion_range::create_fn_call_expr_boundary, 22279 type_suppression::insertion_range::eval_boundary}): Define new 22280 member functions. 22281 (is_integer_boundary, is_fn_call_expr_boundary): Define new 22282 functions. 22283 (read_type_suppression, read_function_suppression) 22284 (read_variable_suppression): Support the new kinds of 22285 property-related types. Aslo, in read_type_suppression, support 22286 the new properties has_data_member_inserted_at, 22287 has_data_member_inserted_between and 22288 has_data_members_inserted_between. 22289 (type_suppression::suppresses_diff): If we are looking at a type 22290 diff node that has inserted data members, evaluate the insertion 22291 ranges of the current type_suppression and see if they match the 22292 inserted data members. 22293 * include/abg-ini.h (property, simple_property, property_value) 22294 (string_property_value, tuple_property_value, function_call_expr): 22295 Declare new types. 22296 (property_sptr, property_value_sptr, string_property_value_sptr) 22297 (tuple_property_value_sptr): Declare new typedefs. 22298 (is_string_property_value, is_tuple_property_value) 22299 (is_simple_property, is_tuple_property, read_function_call_expr): 22300 Declare new functions. 22301 * src/abg-ini.cc (char_is_white_space, char_is_comment_start) 22302 (char_is_delimiter, char_is_property_value_char) 22303 (char_is_section_name_char, char_is_property_name_char) 22304 (char_is_comment_start, char_is_white_space) 22305 (remove_trailing_white_spaces, is_string_property_value) 22306 (is_tuple_property_value, is_simple_property, is_tuple_property) 22307 (write_property_value, char_is_function_name_char) 22308 (char_is_function_argument_char): Define new functions. 22309 (property::priv, tuple_property_value::priv) 22310 (simple_property::priv, tuple_property::priv): Define new types. 22311 (property::{property, get_name, set_name, ~property}): Define new 22312 member functions. 22313 (struct property_value::priv): Define new type. 22314 (property_value::{property_value, get_kind, operator const 22315 string&(), ~property_value}): Define new member functions. 22316 (struct string_property_value::priv): Define new type. 22317 (string_property_value::{string_property_value, set_content, 22318 as_string, operator string()}, ~string_property_value): Define new 22319 member functions. 22320 (tuple_property_value::{tuple_property_value, get_value_items, 22321 ~tuple_property_value, as_string}): Likewise. 22322 (simple_property::{simple_property, get_value, set_value, 22323 ~simple_property}): Likewise. 22324 (tuple_property::{tuple_property, set_value, get_value}): 22325 Likewise. 22326 (config::section::find_property): Adjust return type. 22327 (read_context::{char_is_delimiter, char_is_property_value_char, 22328 char_is_section_name_char, char_is_property_name_char, 22329 char_is_comment_start, char_is_white_space}): Remove these from 22330 here as they got moved them to be non-member functions above. 22331 (read_context::read_property_value): Return a property_value_sptr 22332 and do not take any parameter anymore. 22333 (read_context::{read_string_property_value, 22334 read_tuple_property_value, read_function_name, 22335 read_function_argument, read_function_call_expr}): Define new 22336 member functions. 22337 (read_context::read_property): Adjust return type. Also, change to read 22338 the different new kinds of properties values. 22339 (function_call_expr::priv): Define new type. 22340 (function_call_expr::{function_call_expr, get_name, 22341 get_arguments}): New member functions. 22342 (read_context::read_section): Adjust. 22343 (write_property, write_section): Adjust. 22344 * tests/data/test-diff-suppr/libtest{11,12}-add-data-member-v{0,1}.so: 22345 New test input binaries. 22346 * tests/data/test-diff-suppr/test{11,12}-add-data-member-{0,1}.suppr: 22347 New input suppression files. 22348 * tests/data/test-diff-suppr/test11-add-data-member-{2,3,4}.suppr: 22349 Add new test input files. 22350 * tests/data/test-diff-suppr/test{11,12}-add-data-member-report-{0,1}.txt: 22351 New reference output files. 22352 * tests/data/test-diff-suppr/test12-add-data-member-report-2.txt: 22353 Likewise. 22354 * tests/data/test-diff-suppr/test{11,12}-add-data-member-v{0,1}.cc: 22355 Source code for the new binaries above. 22356 * tests/test-diff-suppr.cc (in_out_specs): Add new test inputs. 22357 * tests/data/Makefile.am: Add the new test related files above to 22358 source distribution. 22359 * doc/manuals/libabigail-concepts.rst: Document the new properties 22360 has_data_member_inserted_at, has_data_member_inserted_between and 22361 has_data_members_inserted_between. 22362 223632015-05-24 Dodji Seketeli <dodji@redhat.com> 22364 22365 Make indexes of function parameters start at 1 22366 * src/abg-ir.cc (function_type::function_type): Starts the index 22367 of the parameters at 1, unless the firs parameter is an artificial 22368 one, in which case it starts at 0. 22369 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Adjust. 22370 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 22371 * tests/data/test-diff-dwarf/test1-report.txt: Adjust. 22372 * tests/data/test-diff-dwarf/test10-report.txt: Adjust. 22373 * tests/data/test-diff-dwarf/test11-report.txt: Adjust. 22374 * tests/data/test-diff-dwarf/test13-report.txt: Adjust. 22375 * tests/data/test-diff-dwarf/test15-enum-report.txt: Adjust. 22376 * tests/data/test-diff-dwarf/test2-report.txt: Adjust. 22377 * tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt: Adjust. 22378 * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: Adjust. 22379 * tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt: Adjust. 22380 * tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt: Adjust. 22381 * tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt: Adjust. 22382 * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt: Adjust. 22383 * tests/data/test-diff-dwarf/test4-report.txt: Adjust. 22384 * tests/data/test-diff-dwarf/test6-report.txt: Adjust. 22385 * tests/data/test-diff-dwarf/test7-report.txt: Adjust. 22386 * tests/data/test-diff-dwarf/test8-report.txt: Adjust. 22387 * tests/data/test-diff-filter/test0-report.txt: Adjust. 22388 * tests/data/test-diff-filter/test01-report.txt: Adjust. 22389 * tests/data/test-diff-filter/test1-report.txt: Adjust. 22390 * tests/data/test-diff-filter/test10-report.txt: Adjust. 22391 * tests/data/test-diff-filter/test13-report.txt: Adjust. 22392 * tests/data/test-diff-filter/test14-0-report.txt: Adjust. 22393 * tests/data/test-diff-filter/test14-1-report.txt: Adjust. 22394 * tests/data/test-diff-filter/test16-report-2.txt: Adjust. 22395 * tests/data/test-diff-filter/test16-report.txt: Adjust. 22396 * tests/data/test-diff-filter/test17-0-report.txt: Adjust. 22397 * tests/data/test-diff-filter/test17-1-report.txt: Adjust. 22398 * tests/data/test-diff-filter/test18-report.txt: Adjust. 22399 * tests/data/test-diff-filter/test19-enum-report-1.txt: Adjust. 22400 * tests/data/test-diff-filter/test2-report.txt: Adjust. 22401 * tests/data/test-diff-filter/test22-compatible-fns-report-0.txt: Adjust. 22402 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt: Adjust. 22403 * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Adjust. 22404 * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Adjust. 22405 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Adjust. 22406 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: Adjust. 22407 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Adjust. 22408 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Adjust. 22409 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Adjust. 22410 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Adjust. 22411 * tests/data/test-diff-filter/test3-report.txt: Adjust. 22412 * tests/data/test-diff-filter/test9-report.txt: Adjust. 22413 * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Adjust. 22414 * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Adjust. 22415 * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Adjust. 22416 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Adjust. 22417 * tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt: Adjust. 22418 * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Adjust. 22419 * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Adjust. 22420 * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Adjust. 22421 * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Adjust. 22422 * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Adjust. 22423 * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Adjust. 22424 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust. 22425 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Adjust. 22426 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Adjust. 22427 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Adjust. 22428 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Adjust. 22429 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Adjust. 22430 * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Adjust. 22431 * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Adjust. 22432 * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Adjust. 22433 * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Adjust. 22434 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Adjust. 22435 * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: Adjust. 22436 * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: Adjust. 22437 * tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt: Adjust. 22438 224392015-05-22 Dodji Seketeli <dodji@redhat.com> 22440 22441 Some wording fixes to doc/manuals/libabigail-concepts.rst 22442 * doc/manuals/libabigail-concepts.rst: Some light wording fixes. 22443 224442015-05-24 Dodji Seketeli <dodji@redhat.com> 22445 22446 Type read from DWARF don't have alignment information 22447 * src/abg-dwarf-reader.cc (build_type_decl) 22448 (build_class_type_and_add_to_ir, build_pointer_type_def) 22449 (build_reference_type, build_function_decl): Set the alignment for 22450 native types, class, reference and function type to zero, 22451 effectively meaning that they don't have alignment information. 22452 * src/abg-hash.cc (var_decl::hash::operator): Take the hash value 22453 of the data member context in account when computing the hash 22454 value of a given data member. 22455 * tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt: 22456 Adjust. 22457 * tests/data/test-diff-dwarf/test10-report.txt: Likewise. 22458 * tests/data/test-diff-dwarf/test13-report.txt: Likewise. 22459 * tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt: Likewise. 22460 * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt: Likewise. 22461 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 22462 * tests/data/test-diff-dwarf/test9-report.txt: Likewise. 22463 * tests/data/test-diff-filter/test13-report.txt: Likewise. 22464 * tests/data/test-diff-filter/test6-report.txt: Likewise. 22465 * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: Likewise. 22466 * tests/data/test-read-dwarf/test0.abi: Likewise. 22467 * tests/data/test-read-dwarf/test1.abi: Likewise. 22468 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 22469 * tests/data/test-read-dwarf/test3.so.abi: Likewise. 22470 * tests/data/test-read-dwarf/test4.so.abi: Likewise. 22471 * tests/data/test-read-dwarf/test5.o.abi: Likewise. 22472 * tests/data/test-read-dwarf/test6.so.abi: Likewise. 22473 * tests/data/test-read-dwarf/test7.so.abi: Likewise. 22474 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Likewise. 22475 224762015-05-06 Dodji Seketeli <dodji@redhat.com> 22477 22478 Better name ID function parameters 22479 * src/abg-ir.cc (function_decl::parameter::get_name_id): Make this 22480 be "parameter-<index>". 22481 224822015-05-06 Dodji Seketeli <dodji@redhat.com> 22483 22484 Better detection of parameter sub-type changes 22485 * include/abg-fwd.h (type_has_sub_type_changes): Declare new 22486 function. 22487 * src/abg-ir.cc (type_has_sub_type_changes): Define it. 22488 * src/abg-comparison.cc (fn_parm_diff::report): Use the new 22489 function type_has_sub_type_changes() instead of just looking at 22490 name changes. 22491 * tests/data/test-diff-dwarf/test4-report.txt: Adjust this 22492 reference test output. 22493 224942015-05-06 Dodji Seketeli <dodji@redhat.com> 22495 22496 Fix a potential crash when comparing variadic parameters again 22497 * src/abg-comparison.cc (redundancy_marking_visitor::visit_begin): 22498 Avoid flagging diffs of variadic parameter *types* as redundant as 22499 well. 22500 225012015-05-06 Dodji Seketeli <dodji@redhat.com> 22502 22503 Add debugging function for function parameters 22504 * include/abg-ir.h 22505 (function_decl::parameter::get_pretty_representation): Declare new 22506 virtual member function. 22507 * src/abg-ir.cc 22508 (function_decl::parameter::get_pretty_representation): Define it. 22509 225102015-05-06 Dodji Seketeli <dodji@redhat.com> 22511 22512 Add comments 22513 * src/abg-dwarf-reader.cc (build_function_decl): Add comments when 22514 building the function parameters. 22515 225162015-05-06 Dodji Seketeli <dodji@redhat.com> 22517 22518 Add a debugging function for type_or_decl_base* 22519 * include/abg-fwd.h (get_pretty_representation): Declare new 22520 overload for type_or_decl_base*. 22521 * src/abg-ir.cc (get_pretty_representation): Define it and express 22522 the previous overload for type_or_decl_base_sptr in terms of this 22523 new one. 22524 225252015-05-05 Dodji Seketeli <dodji@redhat.com> 22526 22527 Return a reference to smart pointer for the void type node 22528 * src/abg-ir.h (type_decl::get_void_type_decl): Return a reference 22529 to the smart pointer initially returned. 22530 * src/abg-ir.cc (type_decl::get_void_type_decl): Likewise. 22531 225322015-05-05 Dodji Seketeli <dodji@redhat.com> 22533 22534 Bug 18342 - Segmentation fault while comparing functions with variadic parameters 22535 * include/abg-fwd.h (is_array_type): New overload for a naked 22536 pointer. 22537 * include/abg-ir.h (type_decl::get_variadic_parameter_type_decl): Declare new 22538 static function. 22539 * src/abg-ir.cc (is_array_type): Define new function overload for 22540 naked pointers 22541 (type_decl::get_variadic_parameter_type_decl): Define new static 22542 function. 22543 * src/abg-dwarf-reader.cc (build_function_decl): The type of 22544 variadic parameter is now a special type_decl. 22545 * include/abg-comparison.h (is_diff_of_variadic_parameter_type) 22546 (is_diff_of_variadic_parameter): New function declarations. 22547 * src/abg-comparison.cc (is_diff_of_variadic_parameter_type) 22548 (is_diff_of_variadic_parameter): Define new functions. 22549 (compute_diff): Refuse to return a NULL 22550 diff for types. Assert that the parameters are non-NULL. 22551 (report_size_and_alignment_changes): We are comparing arrays only 22552 if the two parameters are arrays. 22553 (fn_parm_diff::fn_parm_diff): Refuse that type diff for this diff 22554 node is non empty. 22555 (fn_parm_diff::report): Strengthen an assert. Cleanup a comment. 22556 (redundancy_marking_visitor::visit_begin): Do not mark function 22557 type and variadic parms diff nodes as redundant for local changes. 22558 * tests/data/test-diff-dwarf/libtest26-added-parms-before-variadic-v{0,1}.so: 22559 New test input binaries. 22560 * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt: 22561 New test output reference. 22562 * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-v{0,1}.c: 22563 Source code of the new test input binaries above. 22564 * tests/data/Makefile.am: Add the new test stuff to source 22565 distribution. 22566 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs 22567 above to the set of input to run this test harness over. 22568 225692015-04-24 Dodji Seketeli <dodji@redhat.com> 22570 22571 Fix archive writing support 22572 * configure.ac: Require libzip 0.10.1 at least. 22573 * src/abg-writer.cc (archive_write_ctxt::serialized_tus): Make 22574 this be a list<string>, rather than a vector<string>. 22575 (create_archive_write_context): Truncate the archive if it exists 22576 already. 22577 (write_translation_unit_to_archive): Do not use the deprecated 22578 zip_add() function anymore. Rather, use zip_file_add(). 22579 * tests/test-write-read-archive.cc (main): Double check if the 22580 translation unit we read is empty or not. 22581 225822015-04-22 Dodji Seketeli <dodji@redhat.com> 22583 22584 Use a better wording for the COPYING file 22585 * COPYING: Update to a more complete description. 22586 225872015-04-20 Dodji Seketeli <dodji@redhat.com> 22588 22589 Update licence texts 22590 * COPYING: Of course we know the licence we want to use now :-) 22591 * COPYING-GPLV3: Add the text of GPLv3. 22592 * Makefile.am: Add the file COPYING-GPLV3 above to source 22593 distribution. 22594 225952015-04-15 Dodji Seketeli <dodji@redhat.com> 22596 22597 18252 - Added parameters are not properly sorted 22598 * src/abg-comparison.cc (sort_string_parm_map): Define new static 22599 function. 22600 (struct parm_comp): Define new type. 22601 (function_type_diff::priv::{sorted_deleted_parms_, 22602 sorted_added_parms_}): New data members that hold sorted 22603 deleted/added parameters. 22604 (function_type_diff::ensure_lookup_tables_populated): Initialize 22605 the two new data members above. 22606 (function_type_diff::report): For the report of parameters that 22607 got added/removed, use the sorted set of added/removed parameters 22608 above. 22609 * tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt: 22610 New test input. 22611 * tests/data/test-diff-dwarf/libtest24-added-fn-parms-v{0,1}.so: 22612 Likewise. 22613 * tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt: 22614 Likewise. 22615 * tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v{0,1}.so: 22616 Likewise. 22617 * tests/data/test-diff-dwarf/test24-added-fn-parms-v{0,1}.c: 22618 Likewise. 22619 * tests/data/test-diff-dwarf/test25-removed-fn-parms-v{0,1}.c: 22620 Likewise. 22621 * tests/data/Makefile.am: Add the new test material above to the 22622 source distribution. 22623 226242015-04-14 Dodji Seketeli <dodji@redhat.com> 22625 22626 Misc reporting fixes/improvements 22627 * src/abg-comparison.cc (distinct_diff::report): Remove spurious 22628 vertical space before reporting size and alignment changes here. 22629 (represent): In the variables/data member overload, report type 22630 changes first. Then the other changes. 22631 (report_size_and_alignment_changes): Make this report array size 22632 changes too. Also, make some small adjustments about how type 22633 size/alignment changes are introduced. 22634 (array_diff::report): Now that report_size_and_alignment_changes() 22635 supports size change reporting, just use that function rather than 22636 doing it here. 22637 (corpus_diff::report): Consistently add a space between each 22638 changed function report. Prefix changed variables with a [C], 22639 just like for functions. 22640 * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust. 22641 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Likewise. 22642 * tests/data/test-abicompat/test6-var-changed-report-0.txt: Likewise. 22643 * tests/data/test-abidiff/test-qual-type0-report.txt: Likewise. 22644 * tests/data/test-abidiff/test-struct0-report.txt: Likewise. 22645 * tests/data/test-abidiff/test-struct1-report.txt: Likewise. 22646 * tests/data/test-abidiff/test-var0-report.txt: Likewise. 22647 * tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt: Likewise. 22648 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 22649 * tests/data/test-diff-dwarf/test1-report.txt: Likewise. 22650 * tests/data/test-diff-dwarf/test10-report.txt: Likewise. 22651 * tests/data/test-diff-dwarf/test11-report.txt: Likewise. 22652 * tests/data/test-diff-dwarf/test13-report.txt: Likewise. 22653 * tests/data/test-diff-dwarf/test15-enum-report.txt: Likewise. 22654 * tests/data/test-diff-dwarf/test2-report.txt: Likewise. 22655 * tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt: Likewise. 22656 * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: Likewise. 22657 * tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt: Likewise. 22658 * tests/data/test-diff-dwarf/test3-report.txt: Likewise. 22659 * tests/data/test-diff-dwarf/test6-report.txt: Likewise. 22660 * tests/data/test-diff-dwarf/test7-report.txt: Likewise. 22661 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 22662 * tests/data/test-diff-dwarf/test9-report.txt: Likewise. 22663 * tests/data/test-diff-filter/test0-report.txt: Likewise. 22664 * tests/data/test-diff-filter/test01-report.txt: Likewise. 22665 * tests/data/test-diff-filter/test1-report.txt: Likewise. 22666 * tests/data/test-diff-filter/test10-report.txt: Likewise. 22667 * tests/data/test-diff-filter/test11-report.txt: Likewise. 22668 * tests/data/test-diff-filter/test13-report.txt: Likewise. 22669 * tests/data/test-diff-filter/test14-0-report.txt: Likewise. 22670 * tests/data/test-diff-filter/test14-1-report.txt: Likewise. 22671 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 22672 * tests/data/test-diff-filter/test15-1-report.txt: Likewise. 22673 * tests/data/test-diff-filter/test16-report-2.txt: Likewise. 22674 * tests/data/test-diff-filter/test16-report.txt: Likewise. 22675 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 22676 * tests/data/test-diff-filter/test17-1-report.txt: Likewise. 22677 * tests/data/test-diff-filter/test18-report.txt: Likewise. 22678 * tests/data/test-diff-filter/test19-enum-report-1.txt: Likewise. 22679 * tests/data/test-diff-filter/test2-report.txt: Likewise. 22680 * tests/data/test-diff-filter/test20-inline-report-1.txt: Likewise. 22681 * tests/data/test-diff-filter/test21-compatible-vars-report-0.txt: Likewise. 22682 * tests/data/test-diff-filter/test22-compatible-fns-report-0.txt: Likewise. 22683 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt: Likewise. 22684 * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: Likewise. 22685 * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Likewise. 22686 * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Likewise. 22687 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Likewise. 22688 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: Likewise. 22689 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 22690 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Likewise. 22691 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Likewise. 22692 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. 22693 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Likewise. 22694 * tests/data/test-diff-filter/test3-report.txt: Likewise. 22695 * tests/data/test-diff-filter/test6-report.txt: Likewise. 22696 * tests/data/test-diff-filter/test9-report.txt: Likewise. 22697 * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Likewise. 22698 * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Likewise. 22699 * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. 22700 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. 22701 * tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt: Likewise. 22702 * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. 22703 * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. 22704 * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. 22705 * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. 22706 * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Likewise. 22707 * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Likewise. 22708 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Likewise. 22709 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. 22710 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. 22711 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. 22712 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. 22713 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. 22714 * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Likewise. 22715 * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Likewise. 22716 * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Likewise. 22717 * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Likewise. 22718 * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. 22719 * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. 22720 * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. 22721 * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. 22722 * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. 22723 * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. 22724 * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Likewise. 22725 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Likewise. 22726 * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: Likewise. 22727 * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: Likewise. 22728 * tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt: Likewise. 22729 227302015-04-10 Dodji Seketeli <dodji@redhat.com> 22731 22732 Make abidiff and abicompat return meaningful exit codes 22733 * doc/manuals/abicompat.rst: Update documentation for abicompat 22734 exit codes. 22735 * doc/manuals/abidiff.rst: Likewise for abidiff exit codes. 22736 * include/abg-tools-utils.h (enum abidiff_status): Declare new 22737 enum. 22738 (operator{|,&,|=}): Declare new operators for the new enum 22739 abidiff_status. 22740 (abidiff_status_has_error, abidiff_status_has_abi_change) 22741 (abidiff_status_has_incompatible_abi_change): Declare new 22742 functions. 22743 * src/abg-tools-utils.cc (operator{|,&,|=}): Define these new 22744 operators. 22745 (abidiff_status_has_error, abidiff_status_has_abi_change) 22746 (abidiff_status_has_incompatible_abi_change): Define new 22747 functions. 22748 * tests/test-diff-filter.cc (main): Adjust for the new exit code 22749 of abidiff. 22750 * tests/test-diff-suppr.cc (main): Likewise. 22751 * tests/test-abicompat.cc (main): Likewise. 22752 * tools/abicompat.cc (enum abicompat_status): Remove. 22753 (operator{|,&,|=}): Remove these operators for enum 22754 abicompat_status. 22755 (perform_compat_check_in_normal_mode) 22756 (perform_compat_check_in_weak_mode): Return abidiff_status instead 22757 of abicompat_status. Adjust therefore. 22758 (main): Adjust to return abidiff_status now, instead of a just 22759 zero for all non-error cases. 22760 * tools/abidiff.cc (main): Likewise. 22761 227622015-04-01 Dodji Seketeli <dodji@redhat.com> 22763 22764 Add support for abicompat weak mode 22765 * include/abg-fwd.h (class type_or_decl_base): Forward declare 22766 this. 22767 (is_decl, is_type, is_function_type, get_name, get_type_name) 22768 (get_function_type_name, get_pretty_representation) 22769 (lookup_function_type_in_corpus, lookup_type_in_translation_unit) 22770 (lookup_function_type_in_translation_unit) 22771 (synthesize_function_type_from_translation_unit) 22772 (hash_type_or_decl): New function declarations. 22773 * src/abg-corpus.cc (lookup_type_in_corpus) 22774 (lookup_function_type_in_corpus): Define new functions. 22775 * include/abg-ir.h 22776 (translation_unit::lookup_function_type_in_translation_unit): 22777 Declare new friend function. 22778 (class type_or_decl_base): Declare this. 22779 (operator==(const type_or_decl_base&, const type_or_decl_base&)): 22780 Declare new operator. 22781 (operator==(const type_or_decl_base_sptr&, const 22782 type_or_decl_base_sptr&)): Likewise. 22783 (class {decl_base, type_base}): Make these class inherit 22784 type_or_decl_base. 22785 (decl_base::get_member_scopes): New const overload. 22786 (bool operator==(const function_decl::parameter_sptr&, 22787 const function_decl::parameter_sptr&)): New operator. 22788 (function_type::get_parameters): Remove the non-const overload. 22789 (function_type::get_pretty_representation): Declare new member 22790 function. 22791 (method_type::get_pretty_representation): Likewise. 22792 * src/abg-ir.cc (bool operator==(const type_or_decl_base&, const 22793 type_or_decl_base&)): Define new equality operator. 22794 (bool operator==(const type_or_decl_base_sptr&, const 22795 type_or_decl_base_sptr&)): Likewise. 22796 (strip_typedef): Do not expect canonicalized types anymore. Now 22797 the system accepts (and expects) canonicalized types in certain 22798 cases. For instance, non-complete types and aggregated types that 22799 contain non-complete sub-types. 22800 (get_name, get_function_type_name, get_type_name) 22801 (get_pretty_representation, is_decl, is_type, is_function_type) 22802 (lookup_function_type_in_translation_unit) 22803 (synthesize_function_type_from_translation_unit) 22804 (lookup_type_in_scope, lookup_type_in_translation_unit): Define 22805 new functions or new overloads. 22806 (bool operator==(const function_decl::parameter_sptr&, 22807 const function_decl::parameter_sptr& r)): Define 22808 new operator. 22809 (function_type::get_parameters): Remove non-const overload. 22810 (function_type::get_pretty_representation): Define new function. 22811 (function_type::traverse): Adjust. 22812 (method_type::get_pretty_representation): Likewise. 22813 (function_decl::get_pretty_representation): Avoid emitting the 22814 type of cdtors. 22815 (hash_type_or_decl): Define new function. 22816 * include/abg-dwarf-reader.h (create_read_context) 22817 (read_corpus_from_elf): Take a new 'read_all_types' flag. 22818 * src/abg-dwarf-reader.cc (read_context::load_all_types_): New 22819 flag. 22820 (read_context::read_context): Initialize it. 22821 (read_context::canonical_types_scheduled): If some types still 22822 have non-canonicalized sub-types, then do not canonicalize them. 22823 (read_context::load_all_types): New member functions. 22824 (build_function_decl): Do not represent void return type like 22825 empty type anymore, rather, represent it like a void type node. 22826 (build_ir_node_from_die): When asked, load all types 22827 including those that are not reachable from an exported 22828 declaration. 22829 (create_read_context, read_corpus_from_elf): Take a new 22830 'load_all_types' flag and honour it. 22831 * src/abg-reader.cc (read_context::type_is_from_translation_unit): 22832 Support looking up function types in the current translation unit, 22833 now that we now how to lookup function types. 22834 * include/abg-comparison.h (diff_context::{has_diff_for, add_diff, 22835 set_canonical_diff_for, set_or_get_canonical_diff_for, 22836 get_canonical_diff_for}): Make these take instances of 22837 type_or_decl_base_sptr, instead of decl_base_sptr. 22838 (diff::diff): Likewise. 22839 (diff::{first_subject, second_subject}): Make these return 22840 type_or_decl_base_sptr instead of decl_base_sptr. 22841 (type_diff_base::type_diff_base): Make these take instances of 22842 type_or_decl_base_sptr instead of decl_base_sptr. 22843 (distinct_diff::distinct_diff): Likewise. 22844 (distinct_diff::{first, second}): Make these return 22845 type_or_decl_base_sptr instead of decl_base_sptr. 22846 (distinct_diff::entities_are_of_distinct_kinds): Make these take 22847 instances of type_or_decl_base_sptr instead of decl_base_sptr. 22848 (class function_type_diff): Create this new type. It's a 22849 factorization of the function_decl_diff type. 22850 * src/abg-comparison.cc (): 22851 * src/abg-comp-filter.cc ({harmless, harmful}_filter::visit): 22852 Adjust as diff::{first,second}_subject() now returns a 22853 type_or_decl_base_sptr, no more a decl_base_sptr. 22854 (decls_type, decls_diff_map_type): Remove these typedefs and replace it with ... 22855 (types_or_decls_type, types_or_decls_diff_map_type): ... these. 22856 (struct {decls_hash, decls_equals): Remove these type sand replace them with ... 22857 (struct {types_or_decls_hash, types_or_decls_equals}): ... these. 22858 ({type_suppression, variable_suppression}::suppresses_diff): 22859 Adjust. 22860 (diff_context::priv::decls_diff_map): Replace this with ... 22861 (diff_context::priv::types_or_decls_diff_map): ... this. 22862 (diff_context::{has_diff_for, add_diff, get_canonical_diff_for, 22863 set_canonical_diff_for, set_or_get_canonical_diff_for}): Take 22864 type_or_decl_base_sptr instead of decl_base_sptr. 22865 (diff::priv::{first, second}_subject): Make the type of these be 22866 type_or_decl_base_sptr, no more decl_base_sptr. 22867 (diff::priv::priv): Adjust for the subjects of the diff being of 22868 type type_or_decl_sptr now, no more decl_base_sptr. 22869 (diff_less_than_functor::operator()(const diff_sptr, const 22870 diff_sptr) const): Adjust. 22871 (diff::diff): djust for the subjects of the diff being of type 22872 type_or_decl_sptr now, no more decl_base_sptr. 22873 (diff::{first,second}_subject): Make the type of these be 22874 type_or_decl_base_sptr, no more decl_base_sptr. 22875 (report_size_and_alignment_changes): Likewise. 22876 (type_diff_base::type_diff_base): Make the type of this be 22877 type_or_decl_base_sptr instead of type_base_sptr. 22878 (distinct_diff::distinct_diff): Make this take instances of 22879 type_or_decl_base_sptr instead of decl_base_sptr. 22880 (distinct_diff::{first, second, entities_are_of_distinct_kinds}): 22881 Likewise. 22882 (distinct_diff::has_changes): Simplify logic. 22883 (distinct_diff::report): Adjust. 22884 (compute_diff_for_types): Add an additional case to support the 22885 new function_type. 22886 (report_size_and_alignment_changes): Make this take instances of 22887 type_or_decl_base_sptr instead of decl_base_sptr. 22888 (class_diff::priv::member_type_has_changed): Return an instance of 22889 type_or_decl_base_sptr rather than a decl_base_sptr. 22890 (class_diff::report): Adjust. 22891 (diff_comp::operator()(const diff&, diff&) const): Adjust. 22892 (enum function_decl_diff::priv::Flags): Remove. 22893 (function_decl_diff::priv::{first_fn_flags_, second_fn_flags_, 22894 fn_flags_changes_}): Remove. 22895 (function_decl_diff::priv::{fn_is_declared_inline_to_flag, 22896 fn_binding_to_flag}): Remove. 22897 (function_decl_diff::{deleted_parameter_at, 22898 inserted_parameter_at}): Remove. 22899 (function_decl_diff::ensure_lookup_tables_populated): Empty this. 22900 (function_decl_diff::chain_into_hierarchy): Adjust. 22901 (function_decl_diff::function_decl_diff): This now only takes the 22902 subjects. It's body is now empty. 22903 (function_decl_diff::{return_type_diff, subtype_changed_parms, 22904 removed_parms, added_parms, type_diff}): Remove these member 22905 functions. 22906 (function_decl_diff::type_diff): Define new member function. 22907 (function_decl_diff::report): Simplify logic by using the 22908 reporting of the child type diff node. 22909 (compute_diff): Likewise, in the overload for function_decl_sptr 22910 simplify logic by using the child type diff object. 22911 (function_type_diff::priv): Define new type. 22912 (function_type_diff::{function_type_diff, 22913 ensure_lookup_tables_populated, deleted_parameter_at, 22914 inserted_parameter_at, finish_diff_type, first_function_type, 22915 second_function_type, return_type_diff, subtype_changed_parms, 22916 removed_parms, added_parms, get_pretty_representation, 22917 has_changes, has_local_changes, report, chain_into_hierarchy}): 22918 Define new functions. 22919 (compute_diff): Define new overload for function_type_sptr. 22920 * tools/abicompat.cc (options::weak_mode): New data member. 22921 (options::options): Initialize it. 22922 (enum abicompat_status): New enum 22923 (abicompat_status operator|(abicompat_status, abicompat_status)) 22924 (abicompat_status& operator|=(abicompat_status &, abicompat_status)) 22925 (abicompat_status operator&(abicompat_status, abicompat_status)): 22926 New operators to manipulate the abicompat_status enum. 22927 (display_usage): Add help string for the new --weak-mode option. 22928 (parse_command_line): Add the new --weak-mode command line 22929 argument. If the tool is called with just the application and one 22930 library then assume that we are in the weak mode. 22931 (perform_compat_check_in_normal_mode): Define new function, factorized 22932 from what was in the main function. 22933 (perform_compat_check_in_weak_mode): Define new function. 22934 (struct {fn,var}_change): Define new types. 22935 (main): Use perform_compat_check_in_weak_mode() and 22936 perform_compat_check_in_normal_mode(). 22937 * tools/abidiff.cc (main): Adjust. 22938 * tools/abidw.cc: (options::load_all_types): Add new data member. 22939 (options::options): Initialize it. 22940 (display_usage): New help string for --load-all-types. 22941 (parse_command_line): Support the new --load-all-types option. 22942 (main): Adjust and honour the --load-all-types option. 22943 * tools/abilint.cc (main): Adjust. 22944 * doc/manuals/abicompat.rst: Update documentation for the new weak 22945 mode. Also provide stuff that was missing from the examples 22946 provided. 22947 * doc/manuals/abidw.rst: Update documentation for the new 22948 --load-all-types option. 22949 * tests/print-diff-tree.cc (main): Adjust. 22950 * tests/test-diff-dwarf.cc (main): Likewise. 22951 * tests/test-read-dwarf.cc (main): Likewise. 22952 * tests/data/test-abicompat/test0-fn-changed-app: Recompile this. 22953 * tests/data/test-abicompat/libtest5-fn-changed-libapp-v{0,1}.so: 22954 New new test input binaries 22955 * tests/data/test-abicompat/test5-fn-changed-app: Likewise. 22956 * tests/data/test-abicompat/test6-var-changed-app: Likewise. 22957 * tests/data/test-abicompat/libtest6-var-changed-libapp-v{0,1}.so: 22958 Likewise. 22959 * tests/data/test-abicompat/test5-fn-changed-report-0.txt: 22960 Reference output for one test above. 22961 * tests/data/test-abicompat/test6-var-changed-report-0.txt: 22962 Likewise. 22963 * tests/data/test-abicompat/test5-fn-changed-app.cc: Source file 22964 for a binary above. 22965 * tests/data/test-abicompat/test5-fn-changed-libapp-v{0,1}.{h,cc}: 22966 Likewise. 22967 * tests/data/test-abicompat/test6-var-changed-libapp-v{0,1}.{cc,h}: 22968 Likewise. 22969 * tests/data/test-abicompat/test6-var-changed-app.cc: Likewise. 22970 * tests/data/Makefile.am: Add the test related files above to the 22971 source distribution. 22972 * tests/test-abicompat.cc (in_out_spec): Add the new test input 22973 above to the list of inputs to feed to this test harness. 22974 (main): Support taking just the app and one library. 22975 * tests/data/test-read-dwarf/test{0, 1, 2.so, 3.so, 5.o, 22976 8-qualified-this-pointer.so,}.abi: Adjust for void type being 22977 really emitted now, as opposed to just being an empty type. 22978 229792015-04-01 Dodji Seketeli <dodji@redhat.com> 22980 22981 18186 - Assertion in abigail::ir::class_decl::hash::operator() 22982 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): When 22983 the size of the class is provided then the class is complete, no 22984 matter if this function called to update the class or to build it 22985 for the first time. 22986 229872015-03-31 Sinny Kumari <sinny@redhat.com> 22988 22989 Check if EM_AARCH64, EM_TILEPRO and EM_TILEGX macros are defined in elf.h 22990 * config.h.in: Generated autoheader by configure.ac 22991 for added macros 22992 * configure.ac: Defining HAVE_EM_AARCH64_MACRO, 22993 HAVE_EM_TILEPRO_MACRO and HAVE_EM_TILEGX_MACRO to check 22994 whether EM_AARCH64, EM_TILEPRO and EM_TILEGX macros are defined 22995 in elf.h or not 22996 * src/abg-dwarf-reader.cc (e_machine_to_string): Look for 22997 EM_AARCH64, EM_TILEPRO and EM_TILEGX macros only 22998 if they are defined in elf.h 22999 230002015-03-30 Dodji <dodji@ks305400.kimsufi.com> 23001 23002 PR libabigail/18180 23003 * src/abg-hash.cc (class_decl::hash::operator()(const class_decl&) 23004 const): Return zero only for class declarations that are not 23005 resolved. 23006 * tests/data/test-read-write/test20.xml: Fix the output to make a 23007 class definition to reference its declaration, when there was a 23008 forward declaration for it. 23009 230102015-03-30 Dodji Seketeli <dodji@redhat.com> 23011 23012 18179 - abidiff crashes on libcangjie 23013 * include/abg-fwd.h (lookup_class_type_in_corpus) 23014 (lookup_class_type_in_translation_unit): Declare new functions. 23015 * src/abg-ir.cc (lookup_class_type_in_translation_unit): Define 23016 new function. 23017 (get_node, convert_node_to_decl): Define new specializations for 23018 the class_decl type. 23019 * src/abg-corpus.cc (lookup_class_type_in_corpus): Define new 23020 function. 23021 * src/abg-dwarf-reader.cc 23022 (read_context::resolve_declaration_only_classes): Lookup class 23023 types specifically. 23024 230252015-03-30 Dodji Seketeli <dodji@redhat.com> 23026 23027 Forgot to initialize a data member 23028 * src/abg-reader.cc (read_context::read_context): Initialize the 23029 new m_exported_decls_builder_ data member. 23030 230312015-03-30 Dodji Seketeli <dodji@redhat.com> 23032 23033 18166 - Abidiff fails with internal on Libtirpc ABI in XML format 23034 * src/abg-reader.cc (read_context::m_exported_decls_builder_): New 23035 data member. 23036 (read_context::read_context): Initialize it. 23037 (read_context::{type_is_from_translation_unit, 23038 get_exported_decls_builder, set_exported_decls_builder, 23039 maybe_add_fn_to_exported_decls, maybe_add_fn_to_exported_decls, 23040 type_id_new_in_translation_unit}): New member functions. 23041 (read_context::clear_per_translation_unit_data): Clear id->xml 23042 node map here ... 23043 (read_context::clear_per_corpus_data): ... not here. 23044 (read_context::walk_xml_node_to_map_type_ids): Only walk the 23045 sub-tree we are asked to walk. 23046 (read_translation_unit_from_input): Cleanup. 23047 (read_corpus_from_input): Wire populating of exported declarations 23048 of the current corpus. 23049 (build_function_decl, build_var_decl): Populate exported 23050 declarations of the current corpus here. 23051 (build_type_decl, build_qualified_type_decl) 23052 (build_pointer_type_def, build_reference_type_def) 23053 (build_array_type_def, build_enum_type_decl, build_type_decl) 23054 (build_template_tparameter): Adjust assert on ID to make sure 23055 it's the first type it's being defined in the current translation 23056 unit. 23057 * tests/data/test-abidiff/test-corpus0-report0.txt: New test 23058 reference output. 23059 * tests/data/test-abidiff/test-corpus0-v{0,1}.so.abi: New test 23060 input. 23061 * tests/test-abidiff.cc (specs): Add the test inputs above to the 23062 list of inputs over which to run the test harness. 23063 (main): Support reading corpora too, as this test harness was 23064 reading just translation units before. 23065 (tests/data/Makefile.am): Add test material above to source 23066 distribution. 23067 230682015-03-19 Dodji Seketeli <dodji@redhat.com> 23069 23070 Update the CONTRIBUTING file 23071 * CONTRIBUTING: How to check out the web pages. 23072 230732015-03-19 Dodji Seketeli <dodji@redhat.com> 23074 23075 Update website documentation 23076 * doc/website/mainpage.txt: Update the web page. 23077 230782015-03-18 Dodji Seketeli <dodji@redhat.com> 23079 23080 Cleanup type canonicalizing logic 23081 * src/abg-ir.cc (type_base::get_canonical_type_for): Cleanup the 23082 logic here. Basically since we are not trying to cache the result 23083 of type hashing anymore, this can be simpler. 23084 230852015-03-18 Dodji Seketeli <dodji@redhat.com> 23086 23087 Fix redundancy propagation on node with filtered local changes 23088 *NOT* take in account the categories inherited from its children 23089 nodes. That way, it's possible to know if the *local changes* of a 23090 given node have been filtered out. 23091 * include/abg-comparison.h (diff::{get_local_category, 23092 add_to_local_category, add_to_local_and_inherited_categories, 23093 remove_from_local_category, set_local_category, 23094 is_filtered_out_wrt_non_inherited_categories, 23095 has_local_changes_to_be_reported}): Declare new member functions. 23096 * src/abg-comp-filter.cc ({harmless, harmful}_filter::{visit, 23097 visit_end}): Update local category too. 23098 * src/abg-comparison.cc (diff::priv::local_category_): Add new 23099 data member. 23100 (diff::priv::priv): Initialize it. 23101 (diff::priv::is_filtered_out): Add new member function. This is 23102 factorized out of diff::is_filtered_out(). 23103 (diff::is_filtered_out): Re-write in terms of 23104 diff::priv::is_filtered_out(). 23105 (diff::{get_local_category, add_to_local_category, 23106 add_to_local_and_inherited_categories, remove_from_local_category, 23107 set_local_category, is_filtered_out_wrt_non_inherited_categories, 23108 has_local_changes_to_be_reported}): Define new member functions. 23109 (suppression_categorization_visitor::visit_begin): Update local 23110 categories too. 23111 (redundancy_marking_visitor::visit_end): If all of the children 23112 nodes of the a diff node N are redundant and if N has filtered-out 23113 local changes, then N is redundant too. 23114 * tests/data/test-diff-filter/libtest28-redundant-and-filtered-children-nodes-v{1,2}.so: 23115 New binary test inputs. 23116 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-v{0,1}.cc: 23117 Source code for the binary test inputs above. 23118 * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-{0,1}.txt: 23119 New test output references. 23120 * tests/test-diff-filter.cc (in_out_specs): Add the test inputs 23121 above to the set of inputs this test harness has to run over. 23122 * tests/data/Makefile.am: Add the test materials above to the 23123 source distribution. 23124 231252015-03-17 Dodji Seketeli <dodji@redhat.com> 23126 23127 Various style cleanups 23128 * src/abg-hash.cc (class_decl::hash::operator()(const class_decl& 23129 t) const): Fix comment. 23130 * src/abg-ir.cc (lookup_node_in_scope): Likewise. 23131 (class_decl::add_base_specifier): Use base_spec_sptr rather than 23132 shared_ptr<base_spec>. 23133 (class non_canonicalized_subtype_detector): Fix comment. 23134 231352015-03-17 Dodji Seketeli <dodji@redhat.com> 23136 23137 Make is_global_scope() return a pointer to the global scope 23138 * include/abg-fwd.h (is_global_scope): Return a global_scope*. 23139 * src/abg-ir.cc (is_global_scope): Likewise. 23140 231412015-03-17 Dodji Seketeli <dodji@redhat.com> 23142 23143 Add a useful assert in the comparison engine 23144 * src/abg-comparison.cc (qualified_type_diff::report): Assert that 23145 if the qualified type diff node has changes to be reported and no 23146 local change, then its child node must have changes to be 23147 reported. 23148 231492015-03-17 Dodji Seketeli <dodji@redhat.com> 23150 23151 Fix diff report about non-static data members. 23152 * src/abg-comparison.cc 23153 (class_diff::priv::{get_deleted_non_static_data_members_number, 23154 get_inserted_non_static_data_members_number}): Define new member 23155 functions. 23156 (class_diff::reports): Use the new functions above. Also, add 23157 forgotten new lines where they belong. 23158 231592015-03-17 Dodji Seketeli <dodji@redhat.com> 23160 23161 Do not cache hash values in decl_base::get_hash 23162 * src/abg-ir.cc (decl_base::get_hash): Do not cache the hash 23163 value. 23164 231652015-03-17 Dodji Seketeli <dodji@redhat.com> 23166 23167 Do not miss early non-complete type resolution when it's possible 23168 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): A type 23169 that has its size defined is not non-complete. Same if it has a 23170 method or a member type. 23171 231722015-03-17 Dodji Seketeli <dodji@redhat.com> 23173 23174 Delay non-complete class type resolution up to end of corpus reading 23175 * include/abg-fwd.h (lookup_type_in_corpus): Declare new function. 23176 * src/abg-corpus.cc (lookup_type_in_corpus): Define new function 23177 here. 23178 * include/abg-ir.h (function_types_type): Declare new typedef. 23179 (translation_unit::get_canonical_function_type): Remove member function. 23180 (translation_unit::bind_function_type_life_time): Declare new 23181 member function. 23182 (classes_type): New typedef. 23183 * src/abg-ir.cc 23184 (translation_unit::priv::canonical_function_types_): Remove data 23185 member. 23186 (translation_unit::priv::function_types): New data member. 23187 (translation_unit::get_canonical_function_type): Remove this 23188 function definition. 23189 (translation_unit::bind_function_type_life_time): New function 23190 definition. 23191 (lookup_node_in_scope): Ensure that the type returned is 23192 complete. 23193 * src/abg-dwarf-reader.cc (string_classes_map): New typedef. 23194 (read_context::decl_only_classes_map_): New data member. 23195 (read_context::declaration_only_classes): New accessor. 23196 (read_context::{maybe_schedule_declaration_only_class_for_resolution, 23197 is_decl_only_class_scheduled_for_resolution, 23198 resolve_declaration_only_classes, current_elf_file_is_executable, 23199 current_elf_file_is_dso}): Define new member functions. 23200 (read_context::clear_per_translation_unit_data): Do not clear the 23201 data structures that associate DIEs to decls/types or that contain 23202 the types to canonicalize here. Rather, clear them ... 23203 (read_context::clear_per_corpus_data): ... here instead. 23204 (read_context::build_translation_unit_and_add_to_ir): Do not 23205 perform late type canonicalizing here. Rather, do it ... 23206 (read_debug_info_into_corpus): ... here instead. And before that, 23207 call read_context::clear_per_corpus_data() and the new 23208 read_context::resolve_declaration_only_classes() here. 23209 (build_class_type_and_add_to_ir): Schedule the non-complete types 23210 for resolution to complete types. Assert that base classes that 23211 are non-complete are scheduled to be completed. 23212 (build_function_decl): Do not try to canonicalize function types 23213 this early, systematically. Now, all the non-complete types needs 23214 to be completed before starting canonicalizing. So let function 23215 types go through the normal processes of deciding when to 23216 canonicalize them. But then, bind the life time of the function 23217 type to the life time of the current translation unit. 23218 (maybe_canonicalize_type): If a class type is non-complete, 23219 schedule it for late canonicalizing. 23220 * src/abg-hash.cc (class_decl::hash::operator()(const class_decl&) 23221 const): During hashing, a base class should be complete. 23222 * src/abg-reader.cc 23223 (read_context::clear_per_translation_unit_data): Do not clear 23224 id/xml node, and type maps here. Rather, clear it ... 23225 (read_context::clear_per_corpus_data): ... here instead. 23226 (read_translation_unit_from_input): Do not perform late 23227 canonicalizing here. Rather, do it ... 23228 (read_corpus_from_input): ... here. Also, call the new 23229 read_context::clear_per_corpus_data() here. 23230 (build_function_decl): Do not canonicalize function types here so 23231 early. Rather, bind the life time of the function type to the 23232 life time of the translation unit. 23233 * src/abg-writer.cc (write_translation_unit): Do not clear the 23234 type/ID map here. 23235 * tests/data/test-read-dwarf/test2.so.abi: Adjust test input. 23236 232372015-03-17 Dodji Seketeli <dodji@redhat.com> 23238 23239 Add --no-architecture option to abidw 23240 * tools/abidw.cc (options::write_architecture): New flag. 23241 (options::options): Initialize it. 23242 (display_usage): Add usage string for the new --no-architecture 23243 option. 23244 (parse_command): Parse the new --no-architecture command line 23245 option. 23246 (main): Ignore the architecture name if required by the user. 23247 232482015-03-13 Dodji Seketeli <dodji@redhat.com> 23249 23250 We shouldn't build qualified types with empty underlying type 23251 * src/abg-ir.cc (qualified_type_def::qualified_type_def): Assert 23252 that we shouldn't build qualified types with empty underlying 23253 type. 23254 232552015-03-13 Dodji Seketeli <dodji@redhat.com> 23256 23257 Add an overload for is_type() that takes naked pointers 23258 * include/abg-fwd.h (is_type): Declare new overload that takes a 23259 naked pointer. 23260 * src/abg-ir.cc (is_type): Define new overload that takes a naked 23261 pointer. 23262 232632015-03-13 Dodji Seketeli <dodji@redhat.com> 23264 23265 Declaration-only classes shouldn't have canonical types 23266 * include/abg-fwd.h (keep_type_alive): Declare new function. 23267 * src/abg-ir.cc (strip_typedef): Simplify logic. Support types 23268 that are not canonicalized. 23269 (type_base::get_canonical_type_for): For declaration-only classes, 23270 return an empty canonical class, forcing the class to be compared 23271 structurally. 23272 (keep_type_alive): Define new function. 23273 * src/abg-hash.cc ({decl_base, type_decl, scope_type_decl, 23274 qualified_type_def, pointer_type_def, reference_type_def, 23275 array_type_def, enum_type_decl, typedef_decl, 23276 class_decl::member_class_template, class_decl, type_tparameter, 23277 template_tparameter, }::hash::operator()): Do not cache the 23278 computed hash. 23279 232802015-03-13 Dodji Seketeli <dodji@redhat.com> 23281 23282 Fix redundancy categorization propagation 23283 * src/abg-comparison.cc (redundancy_marking_visitor::visit_end): 23284 Consider the cases of changes that are a filtered out. 23285 * tests/data/test-diff-filter/libtest27-redundant-and-filtered-children-nodes-v{0,1}.so: 23286 New test binaries to use as test input. 23287 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-{0,1,2}.txt: 23288 New test result baselines. 23289 * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-v{0,1}.cc: 23290 Source code for the test input binaries above. 23291 * tests/test-diff-filter.cc (in_out_spec): Add the binaries to the 23292 test inputs used for this test harness. 23293 * tests/data/Makefile.am: Add the new test material above to the 23294 distribution. 23295 232962015-03-13 Dodji Seketeli <dodji@redhat.com> 23297 23298 Fix thinko in has_virtual_mem_fn_change(). 23299 * src/abg-comp-filter.cc (has_virtual_mem_fn_change): Fix thinko. 23300 233012015-03-13 Dodji Seketeli <dodji@redhat.com> 23302 23303 From inside the comparison engine re-use IR's equality operators 23304 * include/abg-ir.h (operator==(scope_decl_sptr, scope_decl_sptr)): 23305 Declare. 23306 (operator==(type_decl_sptr, type_decl_sptr)): Likewise. 23307 (operator==(enum_type_decl_sptr, enum_type_decl_sptr)): Likewise. 23308 * src/abg-comparison.cc (diff_length_of_decl_bases) 23309 (diff_length_of_type_bases): Remove these static functions. 23310 (class_diff::has_changes): Re-use the comparison operator for 23311 class_decl_sptr. 23312 (type_decl_diff::has_changes): Re-use the comparison operator for 23313 type_decl_sptr. 23314 * src/abg-ir.cc (operator==(scope_decl_sptr, scope_decl_sptr)): 23315 Define. 23316 (operator==(type_decl_sptr, type_decl_sptr)): Likewise. 23317 (operator==(enum_type_decl_sptr, enum_type_decl_sptr)): Likewise. 23318 233192015-03-11 Dodji Seketeli <dodji@redhat.com> 23320 23321 Remove unnecessary vertical white space from diff report 23322 * src/abg-comparison.cc (class_diff::report): When reporting 23323 virtual member functions make sure to emit the newline only if one 23324 report for member function has already been emitted. 23325 233262015-03-10 Dodji Seketeli <dodji@redhat.com> 23327 23328 Cleanup array_type_def::is_infinite 23329 * src/abg-ir.cc (array_type_def::is_infinite): Style cleanup. 23330 233312015-03-10 Dodji Seketeli <dodji@redhat.com> 23332 23333 Make a function static as it oughts to be 23334 * src/abg-ir.cc (get_type_representation): Make this static. 23335 233362015-03-10 Dodji Seketeli <dodji@redhat.com> 23337 23338 Canonicalize function types 23339 * src/abg-dwarf-reader.cc (build_function_decl): Call 23340 maybe_canonicalize_type to canonicalize the function type. 23341 233422015-03-10 Dodji Seketeli <dodji@redhat.com> 23343 23344 Use more naked pointers when comparing function types 23345 * src/abg-ir.cc (equals): In the overload for function types, use 23346 more naked pointers, less smart pointers. 23347 233482015-03-10 Dodji Seketeli <dodji@redhat.com> 23349 23350 Pass a bunch of smart pointers by reference 23351 * include/abg-fwd.h (get_member_is_static, is_member_function) 23352 (get_member_function_is_ctor, set_member_function_is_ctor) 23353 (get_member_function_is_dtor, set_member_function_is_dtor) 23354 (get_member_function_is_const, set_member_function_is_const) 23355 (get_member_function_vtable_offset) 23356 (set_member_function_vtable_offset) 23357 (get_member_function_is_virtual): Declare the smart pointer 23358 parameter of these as being passed by reference. 23359 * include/abg-ir.h (get_member_access_specifier) 23360 (get_member_is_static, get_member_access_specifier) 23361 (set_member_function_is_ctor, set_member_function_is_const) 23362 (set_member_function_vtable_offset): Likewise, for these friend 23363 declarations to the decl_base type. 23364 * src/abg-ir.cc (get_member_access_specifier) 23365 (get_member_is_static, is_member_function) 23366 (get_member_function_is_ctor, set_member_function_is_ctor) 23367 (get_member_function_is_dtor, set_member_function_is_dtor) 23368 (get_member_function_is_const, set_member_function_is_const) 23369 (get_member_function_vtable_offset) 23370 (set_member_function_vtable_offset) 23371 (get_member_function_is_virtual): In these definitions, the smart 23372 pointer parameter is passed by reference. 23373 233742015-03-10 Dodji Seketeli <dodji@redhat.com> 23375 23376 Make decl_base::get_context_rel() return a naked pointer 23377 * include/abg-fwd.h (set_member_is_static): Add an overload that 23378 takes the member as a reference to a smart pointer. 23379 (set_member_function_{is_dtor, is_ctor, is_const, vtable_offset, 23380 is_virtual}): Pass the member function as a reference. 23381 (set_member_function_is_const, set_member_function_is_virtual): 23382 Pass the member function as a non-const reference. 23383 * include/abg-ir.h (decl_base::get_context_rel): Return a naked 23384 pointer. 23385 (set_member_is_static, set_member_function_is_virtual): Adjust 23386 this friend declaration. 23387 (set_member_access_specifier): Add an overload that takes a 23388 reference to the member. Pass a reference to smart pointer to the 23389 other overload. 23390 (set_member_function_is_{is_ctor,is_dtor,is_const,is_virtual,vtable_offset}): 23391 Take a non-const reference to function_decl. 23392 * src/abg-ir.cc (decl_base::get_context_rel): Likewise. 23393 (equals(const decl_base&, const decl_base&, change_kind*)): 23394 Adjust. 23395 (equals(const var_decl&, const var_decl&, change_kind*)): 23396 Likewise. 23397 (get_member_access_specifier, get_member_is_static) 23398 (set_data_member_offset, get_data_member_offset) 23399 (set_data_member_is_laid_out, get_data_member_is_laid_out) 23400 (get_member_function_is_ctor, set_member_function_is_ctor) 23401 (get_member_function_is_dtor, set_member_function_is_dtor) 23402 (get_member_function_is_const, set_member_function_is_const) 23403 (get_member_function_vtable_offset) 23404 (set_member_function_vtable_offset) 23405 (get_member_function_is_virtual, set_member_function_is_virtual): 23406 Likewise. 23407 (set_member_access_specifier): Add an overload that takes a 23408 reference to decl_base. 23409 (set_member_is_static, set_member_function_{is_dtor, is_ctor, 23410 is_const, vtable_offset, is_virtual}): Pass the member function as 23411 a reference.): Add an overload that takes the member as a 23412 reference, and write the older overload in terms of the new one. 23413 234142015-03-09 Dodji Seketeli <dodji@redhat.com> 23415 23416 Make overloads of decl_base::get_qualified_name() return a reference 23417 * incude/abg-ir.h (decl::get_{qualified_name, 23418 qualified_parent_name}): Return a reference to a string rather 23419 than a copy of a string. 23420 (qualified_type_def::get_qualified_name): Likewise. 23421 (reference_type_def::get_qualified_name): Likewise. 23422 (array_type_def::get_qualified_name): Likewise. 23423 (class enum_type_decl::enumerator): Make this is an out-of-line 23424 pimpled class implementation. 23425 (enum_type_decl::enumerator::{get, set}_enum_type): Declare new 23426 method. 23427 (enum_type_decl::enumerator::get_qualified_name): Change this so 23428 that it doesn't take the name of the enum type anymore. 23429 * src/abg-comparison.cc (enum_diff::report): Adjust for 23430 enum_type_decl::enumerator::get_qualified_name() not taking the 23431 name of the enum type anymore. 23432 * src/abg-ir.cc (decl_base::get_qualified_parent_name): Return a 23433 reference to string. 23434 (decl_base::get_qualified_name): Likewise. 23435 (decl_base::get_qualified_name(string&)): Use the new verson of 23436 decl_base::get_qualified_name() that returns a reference. 23437 ({qualified_type_def, pointer_type_def, reference_type_def, 23438 array_type_def}::get_qualified_name()): Return a string reference. 23439 ({qualified_type_def, pointer_type_def, reference_type_def, 23440 array_type_def}::get_qualified_name(string& qualified_name) 23441 const): Use the new qualified_type_def::get_qualified_name() that 23442 returns a string reference. 23443 (class enum_type_decl::priv): New type. 23444 (enum_type_decl::{get_underlying_type, get_enumerators}): Adjust. 23445 (enum_type_decl::{enumerator::enumerator, enumerator::operator==, 23446 enumerator::get_name, enumerator::get_qualified_name, 23447 enumerator::set_name, enumerator::get_value, 23448 enumerator::set_value, enumerator::get_enum_type, 23449 enumerator::set_enum_type}): Define methodes out-of-line here. 23450 234512015-02-24 Dodji Seketeli <dodji@redhat.com> 23452 23453 Harden strip_typedef 23454 * src/abg-ir.cc (strip_typedef): Consider that the underlying type 23455 can be void. 23456 234572015-02-24 Dodji Seketeli <dodji@redhat.com> 23458 23459 When reading DWARF set member type access where the type is built 23460 * include/abg-fwd.h (is_class(decl_base*)): Return a class_decl* 23461 rather than just a bool. 23462 * abg-ir.cc (is_class(decl_base*)): Return a class_decl* rather 23463 than just a bool. Simplify the implementation. 23464 * src/abg-dwarf-reader.cc 23465 (maybe_set_member_type_access_specifier): Define new static 23466 function. 23467 (build_ir_node_from_die): Remove the is_member_type flag. When 23468 building member types set their access specifier. Simplify the 23469 logic of detecting that a type is a member type; basically 23470 delegate taht to the new maybe_set_member_type_access_specifier(). 23471 (build_class_type_and_add_to_ir): Do not try to set the member 23472 type access specifiers anymore. 23473 (build_qualified_type, build_pointer_type, build_reference_type) 23474 (build_typedef_type, build_var_decl, build_function_decl): Adjust. 23475 234762015-02-24 Dodji Seketeli <dodji@redhat.com> 23477 23478 Fix enum_diff::has_changes() 23479 * src/abg-comparison.cc (enum_diff::has_changes): Just use the 23480 normal comparison operator to compare the two enums here. It's 23481 fast now. 23482 234832015-02-23 Dodji Seketeli <dodji@redhat.com> 23484 23485 Build the set of exported decls directly during DWARF loading 23486 * include/abg-ir.h ({var,function}_decl::get_id): Return a 23487 reference. 23488 * src/abg-ir.cc ({var,function}_decl::get_id): Return a reference 23489 to the string rather than copying it over. 23490 * include/abg-corpus.h (class corpus::exported_decls_builder): 23491 Declare new type. 23492 (corpus::{sort_functions, sort_variables, 23493 maybe_drop_some_exported_decls, get_exported_decls_builder}): 23494 Declare new methods. 23495 * src/abg-corpus.h (corpus::exported_decls_builder::priv): Define 23496 new type. 23497 (class symtab_build_visitor_type): Remove this type that is 23498 useless now. 23499 (corpus::exported_decls_builder::{exported_decls_builder, 23500 exported_functions, exported_variables, 23501 maybe_add_fn_to_exported_fns, maybe_add_var_to_exported_vars}): 23502 Define new functions. 23503 (corpus::priv::is_public_decl_table_built): Remove this data 23504 member. It's now useless. 23505 (corpus::priv::priv): Adjust. 23506 (corpus::priv::build_public_decl_table): Remove this member 23507 function. It's now useless. 23508 (corpus::{priv::build_unreferenced_symbols_tables, get_functions, 23509 get_variables}): No need to build the public decls table here. 23510 It's already built by the time the corpus is read from DWARF now. 23511 (corpus::{sort_functions, sort_variables, 23512 maybe_drop_some_exported_decls, get_exported_decls_builder}): 23513 Define new member functions. 23514 * src/abg-dwarf-reader.cc (read_context::exported_decls_builder): 23515 New data member. 23516 (read_context::read_context): Initialize it. 23517 (read_context::{exported_decls_builder, 23518 maybe_add_fn_to_exported_fns, maybe_add_var_to_exported_vars}): 23519 Define new member functions. 23520 (read_debug_info_into_corpus): Get the the new 23521 'exported_decls_builder' object from the corpus and stick it into 23522 the read context so the DWARF reading code can use it to build the 23523 exported decls set. When the DWARF reading is done, sort the set 23524 of exported functions and variables that was built. 23525 (build_ir_node_from_die): When a function or variable is built, 23526 consider putting it into the set of exported decls. 23527 * tools/abicompat.cc (main): Now that the exported decls is built 23528 *before* we had a chance to stick the list of symbol IDs to keep, 23529 call corpus::maybe_drop_some_exported_decls() to update the set of 23530 exported decls we should consider for the corpus. 23531 was applied to that list and the final 23532 235332015-02-22 Dodji Seketeli <dodji@redhat.com> 23534 23535 Fix canonicalizing of member types ... *AGAIN* 23536 * src/abg-dwarf-reader.cc (build_ir_node_from_die): For typedefs, 23537 we don't need to test that the current scope is a class to know 23538 that we are looking at a member type. Just looking at the 23539 is_member flag is enough. 23540 So the issue arises when for instance, we are reading a class that 23541 defines a member typedef (or enum) and uses that enum as the type of a 23542 data member. When reading that data member (before reading the 23543 definition of the typedef), we read the type of the data member; so we 23544 hit the typedef. But build_ir_node_from_die() cannot fully construct 23545 the scope of the typedef before handing off the typedef because we are 23546 currently building it! So it hands out a non-complete version of the 23547 class that is being built; 'is_member' is not set to 'true' because 23548 we are getting the type of the data member; it's not *necessarily* a 23549 member type. So we need to check !is_class_type(scope) to know if we 23550 are given a member type. I am now thinking that the "is_member" flag 23551 is actually useless. I think I'll remove it in a later patch. 23552 Anyway, this fixes 'abidiff libabigail.so libabigail.so' again. I 23553 have some stashed patches that brings it's time down to ~ 45 seconds. 23554 So we are getting close to being able to include that *ultimate* test in 23555 regression test suite. Oh well. 23556 * src/abg-dwarf-reader.cc (build_ir_node_from_die): When building 23557 typedefs, enum and memeber classes, check that the scope is a 23558 member class to detect if we are building a member type. In which 23559 case the caller is going to handle the canonicalizing of the 23560 member type *after* it's access specification has been adjusted. 23561 Otherwise, that adjustments happens after the type has been 23562 canonicalized and bad things happen at comparison type. 23563 235642015-02-21 Dodji Seketeli <dodji@redhat.com> 23565 23566 Bug 17649 Avoid endless looping on diff graph with cycles 23567 * include/abg-comp-filter.h (harm{less,ful}_filter::visit_end): 23568 Declare new methods. 23569 * include/abg-comparison.h (diff_context::maybe_apply_filters): 23570 Remove the traverse_nodes_once flag. 23571 * src/abg-comp-filter.cc (apply_filter): Force the traversing to 23572 operate in cycle avoidance mode. 23573 (harm{less,ful}_filter::visit): Update the category of the 23574 canonical node too. 23575 (harm{less,ful}_filter::visit_end): Define new method. 23576 * src/abg-comparison.cc (diff_context::maybe_apply_filters): 23577 Remove the traverse_nodes_once flag. Adjust. Simplify logic. 23578 (diff::traverse): Always call diff_node_visitor::{begin,end}. If 23579 the node has already been visited previously then do not call 23580 diff_node_visitor::visit() and do not visit the children nodes. 23581 (category_propagation_visitor::visit_end): If the node has 23582 already been visited, then propagate the category from the 23583 canonical nodes of the children nodes. 23584 (propagate_categories): Force the traversing to operate in cycle 23585 avoidance mode. 23586 235872015-02-20 Dodji Seketeli <dodji@redhat.com> 23588 23589 Add missing new line after reporting alignment changes 23590 * src/abg-comparison.cc (distinct_diff::report): After calling 23591 report_size_and_alignment_changes, one needs to add a new line if 23592 some stuff got emitted out the output stream. 23593 235942015-02-20 Dodji Seketeli <dodji@redhat.com> 23595 23596 Add type checking overloads that ease their calling from GDB 23597 * include/abg-fwd.h (is_class_type, is_pointer, is_reference_type) 23598 (is_qualified_type): Declare overloads that take naked (non-smart) 23599 pointers. 23600 * src/abg-ir.cc (is_class_type, is_pointer, is_reference_type) 23601 (is_qualified_type): Define overloads that take naked (non-smart) 23602 pointers. 23603 236042015-02-20 Dodji Seketeli <dodji@redhat.com> 23605 23606 Remove overly eager assert in distinct_diff::report 23607 * src/abg-comparison.cc (distinct_diff::report): Remove over-eager 23608 assert. 23609 236102015-02-20 Dodji Seketeli <dodji@redhat.com> 23611 23612 Factorize late canonicalizing code in the dwarf reader 23613 * src/abg-dwarf-reader.cc 23614 (read_context::{canonicalize_types_scheduled, 23615 perform_late_type_canonicalizing}): Factorize these from ... 23616 (build_translation_unit_and_add_to_ir): ... here. 23617 236182015-02-20 Dodji Seketeli <dodji@redhat.com> 23619 23620 Rename schedule_type_for_canonicalization -> schedule_type_for_late_canonicalization 23621 * src/abg-dwarf-reader.cc 23622 (read_context::schedule_type_for_late_canonicalization): Renamed 23623 read_context::schedule_type_for_canonicalization into this. Also, 23624 add some sanity checking code in there. 23625 (build_class_type_and_add_to_ir, maybe_canonicalize_type): Adjust. 23626 236272015-02-20 Dodji Seketeli <dodji@redhat.com> 23628 23629 Adjust semantics of the 'is_member' flag of build_ir_node_from_die() 23630 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Rename 23631 is_member into is_member_type. Adjust. 23632 (get_scope_for_die, build_translation_unit_and_add_to_ir) 23633 (build_namespace_decl_and_add_to_ir): Adjust. 23634 (build_class_type_and_add_to_ir): Adjust. Adjust set to false 23635 when calling build_ir_node_from_die() to build a function_decl. 23636 236372015-02-20 Dodji Seketeli <dodji@redhat.com> 23638 23639 Simplify canonicalizing handling for typedefs 23640 * src/abg-dwarf-reader.cc (build_ir_node_from_die): For typedefs, 23641 we don't need to test that the current scope is a class to know 23642 that we are looking at a member type. Just looking at the 23643 is_member flag is enough. 23644 236452015-02-20 Dodji Seketeli <dodji@redhat.com> 23646 23647 Do not miss canonicalizing opportunities on non-member class types 23648 * src/abg-dwarf-reader.cc (build_ir_node_from_die): When a class 23649 is not a member type, then it at least ought to be scheduled for 23650 late canonicalizing. 23651 236522015-02-20 Dodji Seketeli <dodji@redhat.com> 23653 23654 Fix handling of canonicalizing of member enum types 23655 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Once we've 23656 built the enum type by calling build_enum_type(), do not try to 23657 canonicalize it here if it's a member type. The calling 23658 build_class_type_and_add_to_ir() must deal with it already. 23659 236602015-02-20 Dodji Seketeli <dodji@redhat.com> 23661 23662 Stick qualified, pointer, reference and array types into the global scope 23663 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Do not 23664 consider qualified, pointer, reference and array types as member 23665 types. Only typedef, class and enum types are. 23666 (build_ir_node_from_die): Stick base, pointer, reference, 23667 qualified and array types into the global scope. 23668 236692015-02-20 Dodji Seketeli <dodji@redhat.com> 23670 23671 Avoid creating multiple versions of certain composite types 23672 * src/abg-dwarf-reader.cc (build_qualified_type) 23673 (build_pointer_type_def, build_reference_type, build_array_type) 23674 (build_typedef_type): If the composite type we are about to create 23675 was already created, just return the one that exists already. 23676 236772015-02-20 Dodji Seketeli <dodji@redhat.com> 23678 23679 Do not forget to canonicalize enum underlying type and void type 23680 * src/abg-dwarf-reader.cc (build_enum_type): Canoncialize the 23681 underlying type of the enum type. 23682 (build_ir_node_for_void_type): Canonicalize the void type. 23683 236842015-02-20 Dodji Seketeli <dodji@redhat.com> 23685 23686 Do not forget to associate DIE to the types they represent 23687 * src/abg-dwarf-reader.cc (build_type_decl, build_enum_type) 23688 (build_qualified_type, build_pointer_type_def) 23689 (build_reference_type, build_typedef_type) 23690 (build_class_type_and_add_to_ir): Take a new flag that says if the 23691 DIE is from the alternate debug info section or not. Perform the 23692 DIE->type association in these functions. Note that in 23693 build_class_type_and_add_to_ir we are now doing the DIE->type 23694 association even for declaration-only classes. And for member 23695 types, do not bother doing the association because it's already 23696 been done by build_ir_node_from_die(). 23697 (build_ir_node_from_die): Do not do the DIE->type association here 23698 anymore. Adjust to the new signature of the build_* functions 23699 above that actually build the types. 23700 237012015-02-20 Dodji Seketeli <dodji@redhat.com> 23702 23703 Clear per-TU data before reading debub info for a TU 23704 * src/abg-dwarf-reader.cc 23705 (read_context::die_type_map): New accessor for the two DIE->Type 23706 maps we have; the one of the main debug info section and the one 23707 of the alternate debug info section. 23708 (read_context::{associate_die_to_type, 23709 lookup_type_from_die_offset}): use the new die_type_map() 23710 accessor. 23711 (read_context::clear_per_translation_unit_data): Factorize this 23712 from build_translation_unit_and_add_to_ir(). Also, add code to 23713 clear the DIE->type map as well as the vectors of offsets of the 23714 types of the DIEs to canonicalize after the translation unit has 23715 been read. 23716 237172015-02-19 Dodji Seketeli <dodji@redhat.com> 23718 23719 Fix the new regression test for type canonicalizing 23720 * tests/runtestcanonicalizetypes.sh.in (binaries): Refer to 23721 abg-tools-utils, not abg-tools-utils.o; the extension is computed 23722 automatically, depending on the underlying platform. 23723 237242015-02-19 Dodji Seketeli <dodji@redhat.com> 23725 23726 Make strip_typedef() act on canonical types only 23727 * include/abg-fwd.h (is_compatible_with_class_type): Declare new 23728 function. 23729 (canonicalize): Move the declaration here, from ... 23730 * include/abg-ir.h (canonicalize): ... here. 23731 * src/abg-ir.cc (strip_typedef): Assert that the input type is 23732 canonicalized. Make sure that weak references are on 23733 canonicalized types. Make sure that the returned type is a 23734 canonical one. 23735 (canonicalize): Make this return the canonical type that it has 23736 computed. 23737 * src/abg-comp-filter.cc (type_size_changed): Use the new 23738 is_compatible_with_class_type() function, instead of 23739 is_class_type(). 23740 237412015-02-18 Dodji Seketeli <dodji@redhat.com> 23742 23743 Speed up function_decl::get_id() and var_decl::get_id() 23744 * src/abg-ir.cc (var_decl::priv::id_): New data member. 23745 (var_decl::get_id): Cache the result on the first invocation and 23746 and returns it on subsequent invocations. 23747 (function_dec::priv::id_): New data member. 23748 (function_decl::get_id): Cache the result on the first invocation 23749 and and returns it on subsequent invocations. 23750 237512015-02-18 Dodji Seketeli <dodji@redhat.com> 23752 23753 Speed up symbol version reading 23754 * src/abg-dwarf-reader.cc (find_symbol_table_section) 23755 (get_symbol_versionning_sections): Forward declare these existing 23756 static functions. 23757 (read_context::{symtab_section_, 23758 symbol_versionning_sections_loaded_, 23759 symbol_versionning_sections_found_, versym_section_ 23760 verdef_section, verneed_section}): New data members. 23761 (read_context::read_context): Initialize them. 23762 (read_context::{find_symbol_table_section, 23763 get_symbol_versionning_sections, get_version_for_symbol}): 23764 Implement a caching version of their exisiting non-caching 23765 counterpart. 23766 (read_context::lookup_elf_symbol_from_index): Use the new caching 23767 functions read_context::find_symbol_table_section and 23768 read_context::get_version_for_symbol. 23769 (read_context::load_symbol_maps): Likewise, use the new caching 23770 function read_context::find_symbol_table_section. 23771 237722015-02-17 Dodji Seketeli <dodji@redhat.com> 23773 23774 Stop traversing function/variable node when added to symbol table 23775 * src/abg-corpus.cc (symtab_build_visitor_type::visit_begin): 23776 Replace symtab_build_visitor_type::visit_end with this and return 23777 false. 23778 237792015-02-13 Dodji Seketeli <dodji@redhat.com> 23780 23781 Do not apply diff filters sub-tree not carrying changes 23782 * src/abg-comp-filter.cc ({harmless, harmful}_filter::visit): Do 23783 not try to do the categorizing on a diff sub-tree that does 23784 not carry any change. 23785 * src/abg-comparison.cc (diff_context::maybe_apply_filters): Do 23786 not bother trying to apply the filters on a diff sub-tree that 23787 does not carry any change. 23788 237892015-02-13 Dodji Seketeli <dodji@redhat.com> 23790 23791 Canonicalize types either early or late after TU reading 23792 * include/abg-fwd.h (is_class_type) 23793 (type_has_non_canonicalized_subtype): Declare new functions. 23794 (is_member_type): Remove the overload that takes a decl_base_sptr. 23795 It's superfluous. We just need the one that takes a 23796 type_base_sptr. 23797 * include/abg-ir.h (translation_unit::{is_constructed, 23798 set_is_constructed}): Add new methods. 23799 (class_decl::has_virtual_member_functions): Likewise. 23800 (class decl_base): Makes it virtually inherit ir_traversable_base. 23801 (class type_base): Make this virtually inherit traversable_base 23802 too. 23803 (type_base::canonicalize): Renamed enable_canonical_equality 23804 into this. 23805 (type_base::traverse): Declare new virtual method. 23806 (canonicalize): Renamed enable_canonical_equality into this. 23807 (scope_type_decl::traverse): Declare new virtual method. 23808 (namespace_decl::get_pretty_representation): Declare new virtual 23809 method. 23810 (function_type::traverse): Likewise. 23811 (class_decl::base_spec::traverse): Likewise. 23812 (ir_node_visitor::visit): Remove the overloads and replace each of 23813 them with a pair of ... 23814 (ir_node_visitor::{visit_begin, visit_end}): ... of these. 23815 * include/abg-traverse.h (traversable_base::visiting): New 23816 method. 23817 (traversable_base::visiting_): New data member. 23818 (traversable_base::traversable_base): New constructor. 23819 * src/abg-ir.cc ({scope_decl, type_decl, namespace_decl, 23820 qualified_type_def, pointer_type_def, reference_type_def, 23821 array_type_def, enum_type_decl, typedef_decl, var_decl, 23822 function_decl, function_decl::parameter, class_decl, 23823 class_decl::member_function_template, 23824 class_decl::member_class_template, function_tdecl, 23825 class_tdecl}::traverse): Fix this to properly set the 23826 traversable_base::visiting_ flag and to reflect the new signatures 23827 of the ir_node_visitor methods. 23828 ({type_base, scope_type_decl, function_type, 23829 class_decl::base_spec}::traverse): New method. 23830 (type_base::get_canonical_type_for): Handle the case of the type 23831 already having a canonical type. Properly hash the type using the 23832 dynamic type hasher. Look through declaration-only classes to 23833 consider the definition of the class instead. Fix logic to have a 23834 single pointer of return, to ease debugging. 23835 (canonicalize): Renamed enable_canonical_equality into this. 23836 (namespace_decl::get_pretty_representation): Define new method. 23837 (ir_node_visitor::visit): Replace each of these overloads with a 23838 pair of visit_begin/visit_end ones. 23839 (translation_unit::priv::is_constructed_): New data member. 23840 (translation_unit::priv::priv): Initialize it. 23841 (translation_unit::{is_constructed, set_is_constructed}): Define 23842 new methods. 23843 (is_member_type(const decl_base_sptr)): Remove. 23844 (is_class_type(decl_base *d)): Define new function. 23845 (class_decl::has_virtual_member_functions): Define new method. 23846 (equals(const class_decl&, const class_decl&, change_kind*)): If 23847 the containing translation unit is not constructed yet, do not 23848 take virtual member functions in account when comparing the 23849 classes. This is because when reading from DWARF, there can be 23850 DIEs that change the number of virtual member functions after the 23851 DIE of the class. So one needs to start taking virtual members 23852 into account only after the translation unit has been constructed. 23853 (class non_canonicalized_subtype_detector): Define new type. 23854 (type_has_non_canonicalized_subtype): Define new function. 23855 * src/abg-corpus.cc (symtab_build_visitor_type::visit): Renamed 23856 this into symtab_build_visitor_type::visit_end. 23857 * src/abg-dwarf-reader.cc (die_type_map_type): New typedef. 23858 (die_class_map_type): This is now a typedef on a map of 23859 Dwarf_Off/class_decl_sptr. 23860 (read_context::{die_type_map_, alternate_die_type_map_, 23861 types_to_canonicalize_, alt_types_to_canonicalize_}): New data 23862 members. 23863 (read_context::{associate_die_to_decl, 23864 associate_die_to_decl_primary}): Make these methods public. 23865 (read_context::{associate_die_to_type, 23866 lookup_type_from_die_offset, is_wip_class_die_offset, 23867 types_to_canonicalize, schedule_type_for_canonicalization}): 23868 Define new methods. 23869 (build_type_decl, build_enum_type) 23870 (build_class_type_and_add_to_ir, build_qualified_type) 23871 (build_pointer_type_def, build_reference_type, build_array_type) 23872 (build_typedef_type, build_function_decl): Do not canonicalize 23873 types here. 23874 (maybe_canonicalize_type): Define new function. 23875 (build_ir_node_from_die): Take a new flag that says if the ir node 23876 is a member type/function or not. Early-canonicalize base types. 23877 Canonicalize composite types that have only canonicalized 23878 sub-types. Schedule the other types for late canonicalizing. For 23879 class types, early canonicalize those that are non-member types, 23880 that are fully constructed and that have only canonicalized 23881 sub-types. Adjust to the new signature of build_ir_node_from_die. 23882 (get_scope_for_die, build_namespace_decl_and_add_to_ir) 23883 (build_qualified_type, build_pointer_type_def) 23884 (build_reference_type, build_array_type, build_typedef_type) 23885 (build_var_decl, build_function_decl): Adjust for the new 23886 signature of build_ir_node_from_die. 23887 (build_translation_unit_and_add_to_ir): Likewise. Perform the 23888 late canonicalizing of the types that have been scheduled for 23889 that. 23890 (build_class_type_and_add_to_ir): Return a class_decl_sptr, not a 23891 decl_base_sptr. Adjust for the new signature of 23892 build_ir_node_from_die. Early canonicalize member types that are 23893 created and added to a given class, or schedule them for late 23894 canonicalizing. 23895 * src/abg-reader.cc (class read_context::{m_wip_classes_map, 23896 m_types_to_canonicalize}): New data members. 23897 (read_context::{clear_types_to_canonicalize, 23898 clear_wip_classes_map, mark_class_as_wip, unmark_class_as_wip, 23899 is_wip_class, maybe_canonicalize_type, 23900 schedule_type_for_late_canonicalizing, 23901 perform_late_type_canonicalizing}): Add new method definitions. 23902 (read_context::clear_per_translation_unit_data): Call 23903 read_context::clear_types_to_canonicalize(). 23904 (read_translation_unit_from_input): Call 23905 read_context::perform_late_type_canonicalizing() at the end of the 23906 function. 23907 (build_function_decl): Fix the function type canonicalizing (per 23908 translation) that was already in place. Do the canonicalizing of 23909 these only when the type is fully built. Oops. This was really 23910 brokend. Also, when the function type is constructed, consider it 23911 for type canonicalizing. 23912 (build_type_decl): Early canonicalize basic types. 23913 (build_qualified_type_decl, build_pointer_type_def) 23914 (build_pointer_type_def, build_reference_type_def) 23915 (build_array_type_def, build_enum_type_decl, build_typedef_decl): 23916 Handle the canonicalizing for these composite types: either early 23917 or late. 23918 (build_class_decl): Likewise. Also, mark this class a 'being 23919 built' until it's fully built. This helps the canonicalizing code 23920 to know that it should leave a class alone until it's fully built. 23921 * tests/test-ir-walker.cc (struct name_printing_visitor): Adjust 23922 to the visitor methods naming change. 23923 * configure.ac: Generate the tests/runtestcanonicalizetypes.sh 23924 testing script from tests/runtestcanonicalizetypes.sh.in. 23925 * tests/runtestcanonicalizetypes.sh.in: Add the template for the 23926 new runtestcanonicalizetypes.sh script that test for type 23927 canonicalizing. 23928 * tests/Makefile.am: Add the new runtestcanonicalizetypes.sh 23929 regression testing script to the build system. 23930 239312015-02-18 Dodji Seketeli <dodji@redhat.com> 23932 23933 Factorize per TU data clearing in the xml-abi reader 23934 * src/abg-reader.cc 23935 (read_context::clear_per_translation_unit_data): Factorize this 23936 function out of ... 23937 (read_context::read_translation_unit_from_input): ... this one. 23938 239392015-02-13 Dodji Seketeli <dodji@redhat.com> 23940 23941 Use the deep type sptr equality operator when possible 23942 * src/abg-ir.cc (equals): On function_decl overload, use the deep 23943 sptr type equality operator when comparing types. 23944 (non_type_tparameter::operator==): Likewise. 23945 239462015-02-18 Dodji Seketeli <dodji@redhat.com> 23947 23948 Properly compare virtualness of member functions 23949 * src/abg-ir.cc (equals(const function_decl&, const 23950 function_decl&, change_kind*)): Compare virtualness of member 23951 function before comparing their vtable offsets. 23952 239532015-02-13 Dodji Seketeli <dodji@redhat.com> 23954 23955 Misc style fixes 23956 * include/abg-ir.h (reference_type_def::get_pointed_to_type): use 23957 type_base_sptr, rather than shared_ptr<type_base> 23958 (typdef_decl::get_underlying_type): Likewise. 23959 (function_decl::get_return_type): Likewise. 23960 (function_decl::set_type): Likewise. 23961 (class_decl::member_class_template::as_class_tdecl): Likewise. 23962 * src/abg-comparison.cc (compute_diff): Remove useless vertical 23963 space. 23964 (corpus_diff::traverse): Add a vertical space after this. 23965 * src/abg-dwarf-reader.cc (type_ptr_map): Remove this unused 23966 typedef. 23967 (get_version_for_symbol) 23968 (finish_member_function_reading): Fix the comments of these 23969 functions. 23970 * src/abg-reader.cc (build_function_decl): Return a 23971 function_decl_sptr rather than a shared_ptr<function_decl>. 23972 (build_qualified_type_decl) 23973 (build_pointer_type_def, build_reference_type_def) 23974 (build_array_type_def, build_typedef_decl, build_class_decl): Use 23975 the is_<someking_of_type> functions here, rather than using the 23976 dynamic cast. This increases maintainability. 23977 239782015-02-11 Dodji Seketeli <dodji@redhat.com> 23979 23980 Optimize compressed debug info reading for speed 23981 * src/abg-dwarf-reader.cc 23982 (find_last_import_unit_point_before_die): Look for the inclusion 23983 point of the partial unit in reverse topological order. 23984 239852015-02-10 Dodji Seketeli <dodji@redhat.com> 23986 23987 Share private data of class_diff nodes 23988 * src/abg-comparison.cc (class_diff::class_diff): Do not 23989 initialize the private data of class_diff here. 23990 (compute_diff): In the overload for class_diff, initialize the 23991 private data of the new instance of class_diff to the private data 23992 of its canonical instance. 23993 (redundancy_marking_visitor::visit_begin): If a node is marked 23994 redundant, do not dare visit its children. In cases of classes 23995 that have members that reference themselves, this prevents us from 23996 wrongly marking some of the data member changes as being 23997 redundant. 23998 239992015-02-10 Dodji Seketeli <dodji@redhat.com> 24000 24001 Do not crash when applying filters to a NULL diff 24002 * src/abg-comparison.cc (diff_context::maybe_apply_filters): Do 24003 not crash when called with a NULL diff. 24004 240052015-02-09 Dodji Seketeli <dodji@redhat.com> 24006 24007 Initial implementation of canonical type comparison in the IR 24008 * include/abg-ir.h (class type_base): Pimplify this class. 24009 (type_base::canonical_types_map_type): New typedef. 24010 (type_base::{get_canonical_types_map, get_canonical_type_for, 24011 get_canonical_type}): Declare new member functions. 24012 (enable_canonical_equality): Declare new function. 24013 (struct type_base::hash): Declare this functor here. 24014 * src/abg-ir.cc (): 24015 * src/abg-dwarf-reader.cc (build_type_decl, build_enum_type) 24016 (build_class_type_and_add_to_ir, build_qualified_type) 24017 (build_pointer_type_def, build_reference_type, build_array_type) 24018 (build_typedef_type, build_function_decl): Enable canonical 24019 equality for the resulting type returned by these functions. 24020 * src/abg-hash.cc (type_base::hash::operator()(const type_base&)): 24021 Adjust as this is now out-of-line. Also, add two overloads for 24022 type_base* and type_base_sptr. 24023 (struct type_base::priv): Define new type for private data of 24024 type_base. 24025 (type_base::{get_canonical_types_map, get_canonical_type_for, 24026 get_canonical_type}): Define new member functions. 24027 (enable_canonical_equality): Define new function 24028 (type_base::{type_base, set_size_in_bits, get_size_in_bits, 24029 set_alignment_in_bits, get_alignment_in_bits}): Adjust. 24030 ({type_decl, scope_type_decl, qualified_type_def, 24031 pointer_type_def, reference_type_def, array_type_def, 24032 enum_type_decl, typedef_decl, function_type, 24033 class_decl}::operator==): If the types being compared have 24034 canonical type then use them for comparison. 24035 240362015-02-07 Dodji Seketeli <dodji@redhat.com> 24037 24038 Don't walk the diff tree when there are no suppressions 24039 * src/abg-comparison.cc (apply_suppressions): Do not walk the diff 24040 tree to apply suppressions when there are no suppressions to 24041 apply. 24042 240432015-02-07 Dodji Seketeli <dodji@redhat.com> 24044 24045 Speedup some diff::has_changes() implementations 24046 * src/abg-comparison.cc ({distinct_diff, var_diff, 24047 class_diff}::has_changes): Use the hash value of the diff subjects 24048 to detect quickly if they differ. If they don't, then go the slow 24049 path of comparing the types. 24050 240512015-02-05 Dodji Seketeli <dodji@redhat.com> 24052 24053 Get out as early as possible when comparing different ABI artefacts 24054 * include/abg-ir.h (equal): Turn the last parameter of type 24055 change_kind& into a change_kind*. Do this on all the overloads' 24056 declarations. 24057 * src/abg-ir.cc (equal): Do the same for the definitions of the 24058 overloads and adapt them to report about the kind of changes makes 24059 the two ABI artifact different -- only if the change_kind pointer 24060 is non-null. That way, callers have a way to choose if they want 24061 to go the expensive route of knowing what kind of changes there 24062 are. 24063 ({decl_base, scope_decl, type_base, scope_type_decl, 24064 qualified_type_def, pointer_type_def, pointer_type_def, 24065 reference_type_def, array_type_def, enum_type_decl, typedef_decl, 24066 var_decl, function_type, function_decl, function_decl::parameter, 24067 class_decl::base_spec, class_decl}::operator==): Adjust to the new 24068 signature of equals; call it with the change_kind* parameter set 24069 to NULL. 24070 * src/abg-comparison.cc ({var_diff, pointer_diff, array_diff, 24071 reference_diff, qualified_type_diff, enum_diff, class_diff, 24072 base_diff, scope_diff, fn_parm_diff, function_decl_diff, 24073 type_decl_diff, typedef_diff}::has_local_changes): Adjust. 24074 240752015-02-05 Dodji Seketeli <dodji@redhat.com> 24076 24077 Rename diff::length() into diff::has_changes() 24078 * include/abg-comparison.h (*::has_changes): Rename the ::length() 24079 method of all the diff types that inherit the diff class into 24080 this, in the class declarations. 24081 * src/abg-comparison.cc (*::has_changes): Do the same as in the 24082 declarations, in the definitions. 24083 (diff::to_be_reported, distinct_diff::has_local_changes) 24084 (distinct_diff::report, distinct_diff::, array_diff::has_changes) 24085 (reference_diff::has_changes, qualified_type_diff::has_changes) 24086 (enum_diff::has_changes, translation_unit_diff::has_changes) 24087 (suppression_categorization_visitor::visit_end) 24088 (redundancy_marking_visitor::visit_begin): Adjust. 24089 * tests/test-diff-dwarf.cc (main): Adjust. 24090 * tools/abidiff.cc (main): Likewise. 24091 240922015-01-27 Dodji Seketeli <dodji@redhat.com> 24093 24094 Add a method to diff_context to dump a diff tree to error output 24095 * include/abg-comparison.h (diff_context::error_output_stream): 24096 Make this function const. 24097 (diff_context::{do_dump_diff_tree}): Declare new methods. 24098 * src/abg-comparison.cc (diff_context::error_output_stream): Make 24099 this function const. 24100 (diff_context::do_dump_diff_tree): Define new methods. 24101 241022015-01-27 Dodji Seketeli <dodji@redhat.com> 24103 24104 Keep children nodes of class_diff and scope_diff sorted 24105 * include/abg-comparison.h (decl_diff_base, type_diff_base): 24106 Forward declare these types. 24107 (diff_sptrs_type, decl_diff_base_sptr, decl_diff_base_sptrs_type) 24108 (type_diff_base_sptr, type_diff_base_sptrs_type) 24109 (base_diff_sptrs_type, string_type_diff_base_sptr_map) 24110 (string_decl_diff_base_sptr_map, string_diff_sptr_map): New 24111 typedefs. 24112 (changed_type_or_decl, changed_parm, changed_parms_type) 24113 (string_changed_type_or_decl_map) 24114 (unsigned_changed_type_or_decl_map, changed_type_or_decl_vector): 24115 Remove typedefs. 24116 (class_diff::changed_base): Make this return a 24117 base_diff_sptrs_type now. No more a string_base_diff_sptr_map. 24118 (class_diff::changed_member_fns): Make this return a 24119 function_decl_diff_sptrs_type, no more a 24120 string_changed_member_function_sptr_map. 24121 (class_diff::changed_types): Make this return a diff_sptrs_type, 24122 not a string_changed_type_or_decl_map anymore. 24123 (class_diff::changed_decls): Make this return a diff_sptrs_type, 24124 not a string_changed_type_or_decl_map anymore. 24125 * src/abg-comp-filter.cc (has_virtual_mem_fn_change) 24126 (has_non_virtual_mem_fn_change): Adjust. 24127 * src/abg-comparison.cc (compute_diff): For the decl_base_sptr and 24128 type_base_sptr overloads, assert that the resulting diff is 24129 non-null. 24130 (class_diff::priv::{sorted_changed_base_, 24131 sorted_changed_member_types_, sorted_subtype_changed_dm_, 24132 sorted_changed_dm_, sorted_changed_member_functions_, 24133 sorted_changed_member_class_tmpls_}): New data members. 24134 (class_diff::priv::changed_member_types_): Changed the type of 24135 this from string_changed_type_or_decl_map to string_diff_sptr_map. 24136 (class_diff::priv::changed_member_functions_): Changed the type of 24137 this from string_changed_member_function_sptr_map to 24138 string_function_decl_diff_sptr_map. 24139 (class_diff::priv::changed_member_class_tmpls_): Changed the type 24140 of this from string_changed_type_or_decl_map to 24141 string_diff_sptr_map. 24142 (class_diff::ensure_lookup_tables_populated): Adjust. Initialize 24143 the new sorted members class_diff::priv::{sorted_changed_bases_, 24144 sorted_subtype_changed_dm_, sorted_changed_dm_, 24145 sorted_changed_member_functions_, sorted_changed_member_types_}. 24146 (class_diff::priv::{member_type_has_changed, 24147 member_class_tmpl_has_changed, count_filtered_bases, 24148 count_filtered_subtype_changed_dm, count_filtered_changed_mem_fns, 24149 }): Adjust. 24150 (class_diff::chain_into_hierarchy): Adjust: The children nodes of 24151 class_diff are now laid out in a sorted way. 24152 (class_diff::{changed_bases, changed_member_fns}): Adjust. 24153 (base_diff_comp, virtual_member_function_diff_comp): New types. 24154 (sort_string_base_diff_sptr_map) 24155 (sort_string_virtual_member_function_diff_sptr_map): New static 24156 functions. 24157 (data_member_diff_comp): Renamed var_diff_comp into this. 24158 (sort_unsigned_data_member_diff_sptr_map): Renamed sort_var_diffs 24159 into this and adjust. 24160 (class_diff::report): Do not sort the nodes we are about to emit 24161 here. Just use the natural order of the nodes in their parent 24162 tree as they should now be sorted. 24163 (scope_diff::priv::{changed_types_, changed_decls_}): Change the 24164 type of these from string_changed_type_or_decl_map to 24165 string_diff_sptr_map. 24166 (scope_diff::priv::{sorted_changed_types_, 24167 sorted_changed_decls_}): New data members. 24168 (scope_diff::ensure_lookup_tables_populated): Adjust. Initialize 24169 the new scope_diff::priv::sorted_changed_{types_, decls_}. 24170 (scope_diff::chain_into_hierarchy): Adjust. The children of 24171 scope_diff are now sorted. 24172 (scope_diff::changed_{types, decls}): Return the sorted vectors of 24173 children nodes. 24174 (struct changed_type_or_decl_comp): Remove. 24175 (struct diff_comp): New type. 24176 (sort_changed_type_or_decl): Remove. 24177 (sort_string_diff_sptr_map): New static function. 24178 (scope_diff::report): Adjust. Do not sort children nodes here 24179 ourselves before reporting about them. Rather, use the natural 24180 topological order of the children as they are now sorted. 24181 (corpus_diff::priv::sorted_changed_vars_): Renamed 24182 corpus_diff::priv::changed_vars_ into this to make it more 24183 explicit that the things it holds are sorted. 24184 (corpus_diff::changed_variables_sorted): Adjust. 24185 (corpus_diff::priv::ensure_lookup_tables_populated): Likewise. 24186 (corpus_diff::priv::apply_filters_and_compute_diff_stats): 24187 Likewise. 24188 (corpus_diff::priv::categorize_redundant_changed_sub_nodes): 24189 Likewise. 24190 (corpus_diff::priv::clear_redundancy_categorization): Likewise. 24191 (corpus_diff::priv::maybe_dump_diff_tree): Likewise. 24192 (corpus_diff::report): Likewise. 24193 241942015-01-26 Dodji Seketeli <dodji@redhat.com> 24195 24196 Hand-code the string representation of GElf_Ehdr::e_machine 24197 * configure.ac: Do not check for elfutils/libebl.h and libebl.a 24198 anymore. 24199 * src/abg-dwarf-reader.cc: Do not include elfutils/libebl.h 24200 anymore. 24201 (e_machine_to_string): Define new static 24202 function. 24203 (read_context::::load_elf_architecture): Use the new 24204 e_machine_to_string() function rather than ebl_backend_name() and 24205 ebl_openbackend(). 24206 * tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt: Adjust. 24207 242082015-01-26 Dodji Seketeli <dodji@redhat.com> 24209 24210 Fix chaining of descendant node of qualified type diff node 24211 * include/abg-comparison.h 24212 (qualified_type_diff::leaf_underlying_type_diff): Declare new 24213 accessor. 24214 * src/abg-comparison.cc (get_leaf_type): Forward declare this 24215 static function. 24216 (qualified_type_diff::priv::leaf_underlying_type_diff): Define new 24217 data member. 24218 (qualified_type_diff::leaf_underlying_type_diff): Define this new 24219 accessor. 24220 (qualified_type_diff::chain_into_hierarchy): Call 24221 leaf_underlying_type_diff() here rather than 24222 underlying_type_diff(). 24223 (qualified_type_diff::report): Use leaf_underlying_type_diff() 24224 rather than re-computing the diff between the two leaf underlying 24225 type diff nodes. 24226 * libtest26-qualified-redundant-node-v{0,1}.so: New binary test 24227 input files. 24228 * tests/data/test-diff-filter/test26-qualified-redundant-node-v{0,1}.cc: 24229 Source code for the binary test inputs above. 24230 * tests/test-diff-filter.cc (int_out_spec): Add the new test input 24231 to the vector of test input data over which to run this test 24232 harness. 24233 * tests/data/test-diff-filter/test26-qualified-redundant-node-report-{0,1.txt: 24234 New test input file. 24235 * tests/data/Makefile.am: Add the new test input data to the 24236 source distribution. 24237 242382015-01-24 Dodji Seketeli <dodji@redhat.com> 24239 24240 Recognize cyclic diff tree nodes as being redundant 24241 * include/abg-comparison.h (enum visiting_kind): Rename 24242 enumerator DO_NOT_MARK_VISITED_NODES_AS_TRAVERSED into 24243 DO_NOT_MARK_VISITED_NODES_AS_VISITED. 24244 (diff_context::diff_has_been_visited): Rename 24245 diff_context::diff_has_been_traversed into this. 24246 (diff_context::mark_diff_as_visited): Rename 24247 diff_context::mark_diff_as_traversed into this. 24248 (diff_context::forget_visited_diffs): Rename 24249 diff_context::forget_traversed_diffs into this. 24250 (diff_context::forbid_visiting_a_node_twice): Rename 24251 diff_context::forbid_traversing_a_node_twice into this. 24252 (diff_context::visiting_a_node_twice_is_forbidden): Rename 24253 diff_context::traversing_a_node_twice_is_forbidden into this. 24254 (diff::is_traversing): Move this from protected to public. 24255 * src/abg-comparison.cc (diff_context::priv::visited_diff_nodes_): 24256 Rename diff_context::priv::traversed_diff_nodes_ into this. 24257 (diff_context::priv::forbid_visiting_a_node_twice_): Rename 24258 diff_context::priv::forbid_traversing_a_node_twice_ into this. 24259 (diff_context::priv::priv): Adjust. 24260 (diff_context::diff_has_been_visited): Rename 24261 diff_context::diff_has_been_traversed into this. Adjust. 24262 (diff_context::mark_diff_as_visited): Rename 24263 diff_context::mark_diff_as_traversed into this. Adjust. 24264 (diff_context::forget_visited_diffs): Rename 24265 diff_context::forget_traversed_diffs into this. Adjust. 24266 (diff_context::forbid_visiting_a_node_twice): Rename 24267 diff_context::forbid_traversing_a_node_twice into this. 24268 (diff_context::visiting_a_node_twice_is_forbidden): Rename 24269 diff_context::traversing_a_node_twice_is_forbidden into this. 24270 (diff_context::maybe_apply_filters): Adjust. 24271 (diff::end_traversing): Remove the 'mark_as_traversed' parameter 24272 of this. Remove the visited-marking code. 24273 (diff::traverse): This is the crux of the changes of this patch. 24274 Avoid traversing a node that is being traversed, but one can visit 24275 a node being visited. Also, traversing a node means visiting it 24276 and visiting its children nodes. 24277 (diff::is_filtered_out): Simplify logic for filtering redundant 24278 code. Basically all nodes that are redundant are filtered. All 24279 the complicated logic that was due when diff nodes were shared is 24280 not relevant anymore. 24281 (corpus_diff::priv::categorize_redundant_changed_sub_nodes) 24282 (propagate_categories, apply_suppressions) 24283 (diff_node_printer::diff_node_printer, print_diff_tree) 24284 (categorize_redundant_changed_sub_nodes) 24285 (clear_redundancy_categorization) 24286 (clear_redundancy_categorization): Adjust. 24287 (redundancy_marking_visitor::visit_begin): Adjust. Also, if the 24288 current diff node is already being traversed (that's a clyclic 24289 node) then mark it as redundant. 24290 * src/abg-comp-filter.cc (apply_filter): Adjust. 24291 * tests/data/test-diff-filter/test16-report-2.txt: New test input data. 24292 * tests/data/test-diff-filter/libtest25-cyclic-type-v{0,1}.so: New 24293 test input binaries. 24294 * tests/data/test-diff-filter/test25-cyclic-type-v{0,1}.cc: Source 24295 code for the test input binaries. 24296 * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: New 24297 test input data. 24298 * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: 24299 Likewise. 24300 * tests/test-diff-filter.cc (in_out_specs): Add the new test 24301 inputs above to the list of test input data over which to run this 24302 test harness. 24303 * tests/data/Makefile.am: Add the new test files above to source 24304 distribution. 24305 * tests/data/test-diff-filter/test16-report.txt: Adjust. 24306 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 24307 243082015-01-20 Dodji Seketeli <dodji@redhat.com> 24309 24310 Tighten the condition for creating a cloned function from DWARF 24311 * src/abg-dwarf-reader.cc (build_ir_node): Re-indent. Also, 24312 consider that when a DIE C refers to a DIE A via the 24313 DW_abstract_origin attribute, C represents a clone of A, only if C 24314 and A have *different* linkage names. 24315 243162015-01-19 Dodji Seketeli <dodji@redhat.com> 24317 24318 Fix the output of the array diff report 24319 * src/abg-comparison.cc (array_diff::report): Refer to the pretty 24320 representation of the array when talking about changes of the 24321 array element type. 24322 * src/abg-ir.cc (equals): In the overload for array_type, use the 24323 equality operator that knows how to handle null pointers to 24324 element type. This avoids crashes when the pointer to element 24325 type is null. 24326 * tests/data/test-diff-dwarf/test10-report.txt: Adjust. 24327 * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: 24328 Likewise. 24329 243302015-01-14 Dodji Seketeli <dodji@redhat.com> 24331 24332 Do not install the generated documentation by default 24333 * doc/manuals/Makefile.am: Do not install the generated 24334 documentation by default 24335 243362015-01-14 Dodji Seketeli <dodji@redhat.com> 24337 24338 Make sure to install html docs & gziped info on make install 24339 * doc/manuals/Makefile.am: Make sure Make sure to install html 24340 docs & gziped info on make install 24341 243422015-01-14 Dodji Seketeli <dodji@redhat.com> 24343 24344 Do not install the abinilint program 24345 * tools/Makefile.am: Add abinilint to the noinst_PROGRAMS primary. 24346 243472015-01-13 Dodji Seketeli <dodji@redhat.com> 24348 24349 Small grammar fix in a manpage title 24350 * doc/manuals/conf.py: Fix the grammar of the title of the abidiff 24351 man page. 24352 243532015-01-13 Dodji Seketeli <dodji@redhat.com> 24354 24355 Generate texinfo documentation properly 24356 * doc/manuals/Makefile.am: Generate texinfo doc, install it and 24357 uninstall it. 24358 * doc/manuals/libabigail-tools.rst: Do not use the :doc: syntax to 24359 refer to documents because it doesn't seem to work with sphinx 24360 right now. Rather, use a table of content. 24361 243622015-01-13 Dodji Seketeli <dodji@redhat.com> 24363 24364 Fix man pages installation 24365 * doc/manuals/Makefile.am: Install the man pages only if they are 24366 generated. 24367 243682015-01-13 Dodji Seketeli <dodji@redhat.com> 24369 24370 Bump the candidate version of the library to 1.0 24371 * configure.ac: Bump version to 1.0.0 24372 243732015-01-13 Dodji Seketeli <dodji@redhat.com> 24374 24375 Do not forget to install the Manpages 24376 * doc/manuals/Makefile.am: Add the man pages to the man7_MANS 24377 automake primary. 24378 243792015-01-13 Dodji Seketeli <dodji@redhat.com> 24380 24381 Adjust archive-related code for the recent addition of tools_utils::* 24382 * tests/Makefile.am: tools/libtoolsutils.la is no more. 24383 * tests/test-write-read-archive.cc (main): Adjust. 24384 * tools/abiar.cc (extract_tus_from_archive): Likewise. 24385 243862015-01-13 Dodji Seketeli <dodji@redhat.com> 24387 24388 Generate Manpages for abidiff, abidw, abilint 24389 * doc/manuals/conf.py: Define man pages for abidiff, abidw, 24390 abilint and an introductory one for libabigail. 24391 243922015-01-09 Dodji Seketeli <dodji@redhat.com> 24393 24394 Sort functions & variables diff nodes in the diff tree 24395 * include/abg-comparison.h (function_decl_diff_sptrs_type) 24396 (var_diff_sptrs_type): New typedefs. 24397 (corpus_diff::{changed_functions, changed_variables}): Declare new 24398 methods. 24399 * src/abg-comparison.cc (sort_string_function_decl_diff_sptr_map) 24400 (sort_string_var_diff_sptr_map): Forward declare these static 24401 functions there were already defined later. 24402 (struct diff_less_than_functor): Define new comparison functor. 24403 (diff::append_child_node): Sort the children diff nodes of a given 24404 diff node. 24405 (corpus_diff::priv::changed_fns_map_): Renamed the data member 24406 corpus_diff::priv::changed_fns_ into this. 24407 (corpus_diff::priv::changed_fns_): New data member that is a 24408 sorted vector of changed functions. 24409 (corpus_diff::priv::{lookup_tables_empty, clear_lookup_tables}): 24410 Adjust changed_fns_ -> changed_fns_map_ and changed_vars_ -> 24411 changed_vars_map_. 24412 (corpus_diff::priv::ensure_lookup_tables_populated): Likewise. 24413 Sort the changed functions and changed variables. 24414 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Adjust 24415 changed_fns_ -> changed_fns_map_ and changed_vars_ -> 24416 changed_vars_map_. Also, walk the changed functions and variables 24417 diff nodes in their sorted order. 24418 (corpus_diff::priv::{categorize_redundant_changed_sub_nodes, 24419 clear_redundancy_categorization, maybe_dump_diff_tree}): Walk the 24420 changed functions and variables diff nodes in their sorted order. 24421 * include/abg-ir.h 24422 (function_decl::get_pretty_representation_of_declarator): 24423 Declarenew method. 24424 * src/abg-ir.cc 24425 (function_decl::get_pretty_representation_of_declarator): Define 24426 new function. Its content got split out of ... 24427 (function_decl::get_pretty_representation): ... this one. 24428 * src/abg-comparison.cc (corpus_diff::chain_into_hierarchy): 24429 Consider the sorted the children nodes of a diff tree node. 24430 (corpus_diff::append_child_node): Keep the children nodes of a 24431 diff tree node sorted. 24432 (corpus_diff::{changed_functions, changed_variables, length, 24433 report}): Adjust. 24434 (corpus_diff::{changed_functions_sorted, 24435 changed_variables_sorted}): Define new functions. 24436 (function_comp::operator()): First compare the qualified function 24437 names along with the parameter declarations, then the rest. 24438 (sort_string_function_decl_diff_sptr_map) 24439 (sort_string_var_diff_sptr_map): Adjust. 24440 * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust. 24441 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust. 24442 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: 24443 Adjust. 24444 244452015-01-09 Dodji Seketeli <dodji@redhat.com> 24446 24447 Fix logic of function parmeters diff redundancy detection 24448 * src/abg-comparison.cc (redundancy_marking_visitor::visit_begin): 24449 For a given function parameter diff node N, we were comparing it 24450 against the other parmeter diff nodes of the function. This 24451 change ensures that we do not compare N against itself. 24452 244532015-01-09 Dodji Seketeli <dodji@redhat.com> 24454 24455 Update copyright year for tests/test-abicompat.cc 24456 * tests/test-abicompat.cc: Update copyright year. 24457 244582015-01-09 Dodji Seketeli <dodji@redhat.com> 24459 24460 Enhance the format of the diff tree dumping report 24461 * src/abg-comparison.cc (diff_node_printer::do_indent): New 24462 method. 24463 (diff_node_printer::visit): Use diff_node_printer::do_indent(). 24464 Print the addresses of the diff tree node and its canonical node. 24465 Add some vertical spaces and some indenting to make the report 24466 more readable. 24467 244682015-01-08 Dodji Seketeli <dodji@redhat.com> 24469 24470 Expose a new libabigail::tools_utils namespace 24471 * include/abg-tools-utils.h: Moved tools/abg-tools-utils.h in 24472 here. Renamed the namespace tools into tools_utils. Inject 24473 std::ostream, std::istream, std::ifstream, and std::string types 24474 into the tools_utils namespace. Adjust the function declarations 24475 accordingly. Remove the useless dirname() function declaration. 24476 * include/Makefile.am: Add abg-tools-utils.h to the list of 24477 exported headers. 24478 * src/abg-tools-utils.cc: Moved tools/abg-tools-utils.cc in here. 24479 Renamed the namespace tools into tools_utils. 24480 (get_stat): Add apidoc. 24481 (is_dir): Cleanup apidoc. 24482 (dir_name); Cleanup parameter name. 24483 (guess_file_type): Cleanup parameter type. 24484 * src/Makefile.am: Add abg-tools-utils.cc to the list of exported 24485 headers. 24486 * tools/Makefile.am: Do not build the temporary library 24487 libtoolsutils.la anymore as abg-tools-utils.{h,cc} have moved out 24488 of this directory. 24489 * tools/abicompat.cc (parse_command_line, main): Adjust for tools 24490 -> tools_utils namespace change. 24491 * tools/abidiff.cc (parse_command_line, main): Likewise. 24492 * tools/abidw.cc (parse_command_line, main): Likewise. 24493 * tools/abilint.cc (parse_command_line, main): Likewise. 24494 * tests/test-abicompat.cc (main): Adjust for tools -> tools_utils 24495 namespace change. 24496 * tests/test-abidiff.cc (main): Likewise. 24497 * tests/test-alt-dwarf-file.cc (main): Likewise. 24498 * tests/test-core-diff.cc (main): Likewise. 24499 * tests/test-diff-dwarf.cc (main): Likewise. 24500 * tests/test-diff-filter.cc (main): Likewise. 24501 * tests/test-diff-suppr.cc (main): Likewise. 24502 * tests/test-lookup-syms.cc (main): Likewise. 24503 * tests/test-read-dwarf.cc (main): Likewise. 24504 * tests/test-read-write.cc (main): Likewise. 24505 * tests/Makefile.am: Do not reference the libtoolsutils.la private 24506 library anymore. 24507 245082015-01-07 Dodji Seketeli <dodji@redhat.com> 24509 24510 Update copyright years 24511 * include/abg-comp-filter.h: Update copyright years. 24512 * include/abg-comparison.h: Likewise. 24513 * include/abg-config.h: Likewise. 24514 * include/abg-corpus.h: Likewise. 24515 * include/abg-diff-utils.h: Likewise. 24516 * include/abg-dwarf-reader.h: Likewise. 24517 * include/abg-fwd.h: Likewise. 24518 * include/abg-hash.h: Likewise. 24519 * include/abg-ini.h: Likewise. 24520 * include/abg-ir.h: Likewise. 24521 * include/abg-libxml-utils.h: Likewise. 24522 * include/abg-libzip-utils.h: Likewise. 24523 * include/abg-reader.h: Likewise. 24524 * include/abg-sptr-utils.h: Likewise. 24525 * include/abg-traverse.h: Likewise. 24526 * include/abg-viz-common.h: Likewise. 24527 * include/abg-viz-dot.h: Likewise. 24528 * include/abg-viz-svg.h: Likewise. 24529 * include/abg-writer.h: Likewise. 24530 * src/abg-comp-filter.cc: Likewise. 24531 * src/abg-comparison.cc: Likewise. 24532 * src/abg-config.cc: Likewise. 24533 * src/abg-corpus.cc: Likewise. 24534 * src/abg-diff-utils.cc: Likewise. 24535 * src/abg-dwarf-reader.cc: Likewise. 24536 * src/abg-hash.cc: Likewise. 24537 * src/abg-ini.cc: Likewise. 24538 * src/abg-ir.cc: Likewise. 24539 * src/abg-libxml-utils.cc: Likewise. 24540 * src/abg-libzip-utils.cc: Likewise. 24541 * src/abg-reader.cc: Likewise. 24542 * src/abg-traverse.cc: Likewise. 24543 * src/abg-viz-common.cc: Likewise. 24544 * src/abg-viz-dot.cc: Likewise. 24545 * src/abg-viz-svg.cc: Likewise. 24546 * src/abg-writer.cc: Likewise. 24547 * tests/print-diff-tree.cc: Likewise. 24548 * tests/test-abidiff.cc: Likewise. 24549 * tests/test-alt-dwarf-file.cc: Likewise. 24550 * tests/test-core-diff.cc: Likewise. 24551 * tests/test-diff-dwarf.cc: Likewise. 24552 * tests/test-diff-filter.cc: Likewise. 24553 * tests/test-diff-suppr.cc: Likewise. 24554 * tests/test-diff2.cc: Likewise. 24555 * tests/test-ir-walker.cc: Likewise. 24556 * tests/test-lookup-syms.cc: Likewise. 24557 * tests/test-read-dwarf.cc: Likewise. 24558 * tests/test-read-write.cc: Likewise. 24559 * tests/test-utils.cc: Likewise. 24560 * tests/test-utils.h: Likewise. 24561 * tests/test-write-read-archive.cc: Likewise. 24562 * tools/abg-tools-utils.cc: Likewise. 24563 * tools/abg-tools-utils.h: Likewise. 24564 * tools/abiar.cc: Likewise. 24565 * tools/abidiff.cc: Likewise. 24566 * tools/abidw.cc: Likewise. 24567 * tools/abilint.cc: Likewise. 24568 * tools/abisym.cc: Likewise. 24569 * tools/binilint.cc: Likewise. 24570 245712015-01-07 Dodji Seketeli <dodji@redhat.com> 24572 24573 Detect and report changes in ELF architecture 24574 * configure.ac: Detect the presence of libebl.a and add it to the 24575 list of library we depend on to build libabigail. Report when 24576 libelf.so is not found. 24577 * include/abg-comparison.h: 24578 (diff_context::show_architecture_change): Declare new accessors. 24579 (corpus_diff::architecture_changed): Declare new method. 24580 * include/abg-corpus.h (corpus::{get,set}_architecture_name): 24581 Declare new accessors. 24582 * src/abg-comparison.cc 24583 (diff_context::priv::show_architecture_change_): New data member. 24584 (diff_context::priv::priv): Initialize it. 24585 (diff_context::show_architecture_change): Define new accessors. 24586 (function_decl_diff::report): Report when the size/alignment of 24587 the function address changes. 24588 (corpus_diff::priv::architectures_equal_): New data member. 24589 (corpus_diff::priv::priv): Initialize it. 24590 (corpus_diff::priv::emit_diff_stats): Take in account changes of 24591 architecture. 24592 (corpus_diff::architecture_changed): Define new method. 24593 (corpus_diff::length): Take in account changes of architecture. 24594 (corpus_diff::report): Report about changes of architecture. 24595 (compute_diff): In the overload for corpus_diff_sptr, detect 24596 changes fo architecture. 24597 * src/abg-corpus.cc (corpus_priv::architecture_name): Define new 24598 data member. 24599 (corpus::{get,set}_architecture_name): Define new method. 24600 * src/abg-dwarf-reader.cc: Include elfutils/libebl.h to use 24601 ebl_openbackend() and ebl_backend_name() 24602 (read_context::elf_architecture_): Define new data member. 24603 (read_context::elf_architecture): Define new accessor. 24604 (read_context::{load_elf_architecture, load_remaining_elf_data}): 24605 Define new methods. 24606 (read_corpus_from_elf): Use ctxt.load_remaining_elf_data() in lieu 24607 of ctxt.load_dt_soname_and_needed. Stick the architecture into 24608 the corpus. 24609 * src/abg-reader.cc (read_corpus_from_input): Read the 24610 'architecture' XML property. 24611 * src/abg-writer.cc (write_corpus_to_native_xml): Write the 24612 'architecture' XML property. 24613 * tests/data/test-diff-dwarf/libtest-23-diff-arch-v0-32.so: New 24614 test input file. 24615 * tests/data/test-diff-dwarf/libtest-23-diff-arch-v0-64.so: 24616 Likewise. 24617 * tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt: 24618 Likewise. 24619 * tests/data/test-diff-dwarf/test-23-diff-arch-v0.cc: Source code 24620 for the binary test input files above. 24621 * tests/data/Makefile.am: Add the new test input files to the 24622 source distribution. 24623 * tests/test-diff-dwarf.cc (in_out_specs): Add the new test input 24624 data to the set of input data to run this test harness over. 24625 * tests/test-read-dwarf.cc (main): Do not take the architecture in 24626 account during comparisons. 24627 246282015-01-05 Sinny Kumari <skumari@redhat.com> 24629 24630 Include libabigail-website.doxy file in EXTRA_DIST 24631 * doc/Makefile.am: Include website/libabigail-website.doxy 24632 file in EXTRA_DIST 24633 246342015-01-06 Dodji Seketeli <dodji@redhat.com> 24635 24636 Delete ltsugar.m4 and pkg.m4 files from m4/ 24637 * m4/ltsugar.m4: Removed. 24638 * m4/pkg.m4: Likewise. 24639 246402014-12-27 Dodji Seketeli <dodji@redhat.com> 24641 24642 Enable parallel tests 24643 * configure.ac (AM_INIT_AUTOMAKE): Enable parallel tests by 24644 switching on the parallel-tests option. 24645 246462014-12-27 Dodji Seketeli <dodji@redhat.com> 24647 24648 Add a --dump-diff-tree to abidiff for debugging purposes 24649 * include/abg-comparison.h (enum visiting_kind): Add new 24650 DO_NOT_MARK_VISITED_NODES_AS_TRAVERSED enumerator. 24651 (diff_context::{default_output_stream, error_output_stream, 24652 dump_diff_tree}): Declare new accessors. 24653 (diff::end_traversing): Take a new boolean flag. 24654 (print_diff_tree): Add new overload for diff_sptr. 24655 * src/abg-comparison.cc 24656 (diff_context::priv::{default_output_stream_, 24657 error_output_stream_, dump_diff_tree_}): New data members. 24658 (priv::priv): Initialize them. 24659 (diff_context::{default_output_stream_, error_output_stream_, 24660 dump_diff_tree, dump_diff_tree}): Define new accessors. 24661 (diff::end_traversing): Take a new flag that control whether or 24662 not to mark the current diff node as having been traversed. 24663 (diff::traverse): Take in account the visiting kind carried by the 24664 visitor to determine if the visited node should be marked as being 24665 traversed. 24666 (corpus_diff::priv::maybe_dump_diff_tree): Define new member 24667 function. 24668 (corpus_diff::report): Call it. 24669 (diff_node_printer::visit): Pretty print the diff node just once. 24670 (print_diff_tree): Define a new overload for diff_sptr. 24671 * tools/abidiff.cc (options::dump_diff_tree): New data member. 24672 (options::options): Initialize it. 24673 (display_usage): Add a help string for the new --dump-diff-tree 24674 command line switch. 24675 (parse_command_line): Parse the new --dump-diff-tree command line 24676 switch. 24677 (set_diff_context_from_opts): Set the diff context according to 24678 the --dump-diff-tree presence. 24679 * doc/manuals/abidiff.rst: Add a bullet point for the new 24680 --dump-diff-tree command line switch. 24681 246822014-12-27 Dodji Seketeli <dodji@redhat.com> 24683 24684 Fix typos in the abicompat manual 24685 * doc/manuals/abicompat.rst: Fix typos. 24686 246872014-12-27 Dodji Seketeli <dodji@redhat.com> 24688 24689 Fix a typo in the abidiff manual 24690 * doc/manuals/abidiff.rst: Fix a typo. 24691 246922014-12-27 Dodji Seketeli <dodji@redhat.com> 24693 24694 Fix redundancy in abidiff manual 24695 * doc/manuals/abidiff.rst: Remove the redundant bullet point about 24696 the --drop-fn command line switch. 24697 246982014-12-26 Dodji Seketeli <dodji@redhat.com> 24699 24700 Fix the doc string of the CanonicalDiff section of the apidoc 24701 * src/abg-comparison.cc: The summary of the CanonicalDiff should 24702 not be a @par directive, otherwise it won't show up in the summary 24703 field on the html-genereated page. 24704 247052014-12-26 Dodji Seketeli <dodji@redhat.com> 24706 24707 Update doc string for new --no-redundant option of abidiff 24708 * doc/manuals/abidiff.rst: Update the documentation string for the 24709 --no-redundant option of abidiff. 24710 247112014-12-26 Dodji Seketeli <dodji@redhat.com> 24712 24713 Make abidiff *NOT* show redundant changes by default 24714 * tools/abidiff.cc (options::options): Initialize 24715 options::show_redundant_changes to false. 24716 247172014-12-26 Dodji Seketeli <dodji@redhat.com> 24718 24719 Try harder to handle pointer/reference to void 24720 * include/abg-fwd.h (type_or_void): Declare new function. 24721 * src/abg-ir.cc (type_or_void): Define it. 24722 (pointer_type_def::pointer_type_def) 24723 (reference_type_def::reference_type_def) 24724 (reference_type_def::get_qualified_name, strip_typedef): Use it to 24725 ensure that empty pointed-to-type is considered as a void type. 24726 247272014-12-26 Dodji Seketeli <dodji@redhat.com> 24728 24729 Do not mark sibling structurally identical nodes as redundant 24730 * include/abg-comparison.h (diff::parent_node): Declare new 24731 accessor. 24732 * src/abg-comparison.cc (diff::priv::parent_): New data member. 24733 (diff::priv::priv): Initialize it. 24734 (diff::parent_node): Define new accessor. 24735 (diff::append_child_node): Set the diff::priv::parent_ data member 24736 of the added child node. 24737 (redundancy_marking_visitor::visit_begin): If two (logical) 24738 sibbling nodes are structurally equivalent, do not mark them as 24739 being redundant. 24740 * tests/data/test-diff-suppr/libtest10-changed-parm-c-v0.so: New 24741 test input binary. 24742 * tests/data/test-diff-suppr/libtest10-changed-parm-c-v1.so: 24743 Likewise. 24744 * tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt: 24745 New test input data. 24746 * tests/data/test-diff-suppr/test10-changed-parm-c-v0.c: Source 24747 code for the binary input above. 24748 * tests/data/test-diff-suppr/test10-changed-parm-c-v1.c: Likewise. 24749 * tests/data/Makefile.am: Add the new test files to source 24750 distribution. 24751 * tests/test-diff-suppr.cc (in_out_specs): Add the new test input 24752 to the vector of test inputs to run this harness over. 24753 247542014-12-26 Dodji Seketeli <dodji@redhat.com> 24755 24756 Un-share diff nodes in the comparison IR 24757 * include/abg-ir.h: Prefix the doc string with "///", rather than 24758 writing it inside a /**/ comment. 24759 * include/abg-comparison.h (function_decl_diff) 24760 (function_decl_diff_sptr, fn_parm_diff, fn_parm_diff_sptr) 24761 (var_diff_sptr, base_diff, class_diff, class_diff_sptr): Move 24762 these class & typedef decls to the top of the file. 24763 (string_changed_base_map, string_changed_parm_map) 24764 (unsigned_changed_parm_map, changed_function_ptr) 24765 (string_changed_function_ptr_map): Remove these typedefs. 24766 (string_base_diff_sptr_map, string_fn_parm_diff_sptr_map) 24767 (unsigned_fn_parm_diff_sptr_map, string_var_diff_sptr_map) 24768 (unsigned_var_diff_sptr_map, string_function_decl_diff_sptr_map) 24769 (string_var_diff_ptr_map): New typedefs. 24770 (diff_context::{has_diff_for,add_diff}): Make these member 24771 functions private. 24772 (diff_context::{set_canonical_diff_for, 24773 set_or_get_canonical_diff_for}): Declare new private member 24774 functions. 24775 (diff_context::{get_canonical_diff_for, 24776 initialize_canonical_diff}): New public member functions. 24777 (diff_context::maybe_apply_filters): Set the default value of the 24778 'traverse_nodes_once' parameter to false. 24779 (compute_diff): Make the overload for class_decl_sptr friend of 24780 the diff_context class. 24781 (class diff): Make the diff_context class a friend of this one. 24782 (diff::set_canonical_diff): Declare new private member function. 24783 (diff::get_canonical_diff): Declare new public member function. 24784 (diff::children_nodes): Make this return a vector<diff_sptr>, rather 24785 than a vector<diff*>. 24786 (diff::append_child_node): Make this take a diff_sptr rather than 24787 a diff*. 24788 (class fn_parm_diff): Declare new type. 24789 (compute_diff): Declare new overload for the new 24790 function_decl::parameter_sptr. 24791 (function_decl_diff::subtype_changed_parms): Return a 24792 string_fn_parm_diff_sptr_map rather than a string_changed_parm. 24793 (function_decl_diff::children_nodes): Return a vector<diff_sptr>. 24794 (function_decl_diff::append_child_node): Take a diff_sptr. 24795 (function_decl_diff::changed_functions): Return a 24796 string_function_decl_diff_sptr_map. 24797 (function_decl_diff::changed_variables): Return a 24798 string_var_diff_sptr. 24799 (class function_decl::parameter): Make this a pimpled class. 24800 Also, make it inherit decl_base. 24801 (equals): New overload for function_decl::parameter. 24802 (struct function_decl::parameter::hash): Declare this. 24803 (ir_node_visitor::visit): Declare new overload for 24804 function_decl::parameter. 24805 * src/abg-comparison.cc: Add doc-string about the internal 24806 representation of the comparison engine and also about the concept 24807 of canonical diff of the comparison engine. 24808 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER) 24809 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER2) 24810 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER3): Consider the 24811 canonical diff when trying to know if the current node was 24812 reported earlier. 24813 (diff_context::priv::canonical_diffs): New data member. 24814 (diff_context::{get_canonical_diff_for, set_canonical_diff_for, 24815 set_or_get_canonical_diff_for, initialize_canonical_diff}): Define 24816 new member functions. 24817 (diff_context::{diff_has_been_traversed, mark_diff_as_traversed): 24818 Consider canonical diff for these tests and actions. 24819 (diff::priv::children_): Change the type of this to 24820 vector<diff_sptr>. 24821 (diff::canonical_diff_): New data member. 24822 (diff::diff): Initialize the diff::canonical_diff_ data member. 24823 (diff::begin_traversing): Mark the canonical diff node too. 24824 (diff::is_traversing): Consider the canonical diff node in this 24825 test. 24826 (diff::end_traversing): Make the canonical diff node too. Also 24827 mark the current node as having been traversed. 24828 (diff::children_nodes): Return a vector<diff_sptr> type. 24829 (diff::{get_canonical_diff, set_canonical_diff}): Define new 24830 member functions. 24831 (diff::append_child_node): Take a diff_sptr type parameter. 24832 (diff::{reported_once, currently_reporting}): Flag the canonical 24833 diff node too. And consider the canonical diff node when checking 24834 the flag. 24835 (diff::traverse): No need to mark the node as being traversed 24836 because the diff::end_traversing() function does it now. Adjust 24837 the code because diff::children_nodes() now returns 24838 vector<diff_sptr>. 24839 ({distinct_diff, var_diff, pointer_diff, array_diff, 24840 reference_diff, qualified_type_diff, enum_diff, class_diff, 24841 base_diff, scope_diff, function_decl_diff, typedef_diff, 24842 corpus_diff}::chain_into_hierarchy): Adjust to the new type that 24843 diff::append_child_node() takes. Also, take into account that the 24844 diff nodes are now un-shared. 24845 (compute_diff_for_distinct_kinds, compute_diff_for_types) 24846 (compute_diff): Do not share diff nodes anymore. Initialize the 24847 canonical diff node for the new created node. 24848 (represent): Take a var_diff_sptr rather than two var_decl_sptr. 24849 Adjust. Also take in account the fact that diff nodes are not 24850 shared anymore, and that they do have canonical diffs. 24851 (var_diff::type_diff): Make the computation of the type_diff of 24852 the var_diff be lazy. This avoids infinite (recursive) creation 24853 of diff nodes when a class diff node has a sub-type of data member 24854 that is a class diff node too. 24855 (var_diff::report): Detect redundant reporting of this kind of 24856 diff node. 24857 (class_diff::priv::changed_bases_): Change the type of this to 24858 string_base_diff_sptr_map. 24859 (class_diff::priv::subtype_changed_dm_): Change the type of this 24860 to string_var_diff_sptr_map. 24861 (class_diff::priv::changed_dm_): Change the type of this to 24862 unsigned_var_diff_sptr_map. 24863 (class_diff::priv::{count_filtered_subtype_changed_dm, 24864 count_filtered_bases}): Do not take a diff_context_sptr anymore. 24865 (class_diff::ensure_lookup_tables_populated): changed_bases_ 24866 subtype_changed_dm_ and changed_dm_ are now *NOT* shared diff 24867 nodes anymore. 24868 (class_diff::priv::base_has_changed): Adjust. 24869 (class_diff::priv::subtype_changed_dm): Adjust. 24870 (class_diff::priv::count_filtered_bases): Adjust as changed_bases_ 24871 is now a map of un-shared diff nodes. 24872 (class_diff::priv::count_filtered_subtype_changed_dm): Adjust as 24873 subtype_changed_dm_ is now a map of un-shared diff nodes. 24874 (class_diff::priv::{count_filtered_changed_mem_fns, 24875 count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns, 24876 }): Adjust for change of the default parameter value of 24877 diff_context::maybe_apply_filters(). 24878 (class_diff::~class_diff): New destructor. 24879 (class_diff::changed_bases): Return a string_base_diff_sptr_map& 24880 type. 24881 (class_diff::{inserted_data_members, deleted_data_members, 24882 changed_member_fns}): Add doc strings. 24883 (struct changed_data_member_comp): Remove. 24884 (struct var_diff_comp): New comparison functor. 24885 (sort_changed_data_members): Remove. 24886 (sort_var_diffs): Define new sorting function. 24887 (class_diff::report): Adjust. 24888 (fn_parm_diff::*): Define member types and functions of the new 24889 fn_parm_diff type. 24890 (function_decl_diff::priv::{subtype_changed_parms_, 24891 changed_parms_by_id_}): Make these take a map of fn_parm_diff_sptr 24892 nodes. 24893 (function_decl_diff::ensure_lookup_tables_populated): Adjust to 24894 the fact that priv_->subtype_changed_parms_ and 24895 priv_->priv_->changed_parms_by_id_ now are maps of un-shared 24896 fn_parm_diff_sptr nodes. 24897 (function_decl_diff::subtype_changed_parms): Adjust. 24898 (struct changed_parm_comp): Remove. 24899 (struct fn_parm_diff_comp): New comparison functor. 24900 (sort_changed_parm_map): Remove. 24901 (sort_string_fn_parm_diff_sptr_map): New sorting function. 24902 (function_decl_diff::report): Adjust. 24903 (corpus_diff::priv::children_): Change the type of this to 24904 vector<diff_sptr>. 24905 (corpus_diff::priv::changed_fns_): Changed the type of this to 24906 string_function_decl_diff_sptr_map. 24907 (corpus_diff::priv::changed_vars_): Changed the type of this to 24908 string_var_diff_sptr_map. 24909 (corpus_diff::priv::ensure_lookup_tables_populated): Adjust. 24910 (corpus_diff::priv::apply_filters_and_compute_diff_stats}): 24911 Adjust. Do not need to clear redundancy categorization anymore 24912 because the diff nodes are not shared anymore. 24913 (corpus_diff::priv::categorize_redundant_changed_sub_nodes): 24914 Adjust. 24915 (corpus_diff::priv::clear_redundancy_categorization): Adjust. 24916 (corpus_diff::changed_variables): Adjust. 24917 (struct changed_function_ptr_comp): Remove. 24918 (struct function_decl_diff_comp): New comparison functor. 24919 (sort_string_changed_function_ptr_map): Remove. 24920 (sort_string_function_decl_diff_sptr_map): Define new sorting 24921 function. 24922 (struct changed_vars_comp): Remove. 24923 (struct var_diff_sptr_comp): New comparison functor. 24924 (sort_changed_vars): Remove. 24925 (sort_string_var_diff_sptr_map): Define new sorting function. 24926 (corpus_diff::report): Adjust. 24927 (corpus_diff::traverse): Adjust. 24928 ({category_propagation_visitor, 24929 suppression_categorization_visitor}::visit_end): Adjust. 24930 (clear_redundancy_categorization): Adjust. 24931 * src/abg-hash.cc (function_decl::parameter::hash::operator): 24932 Adjust. 24933 * src/abg-ir.cc (struct function_decl::parameter::priv): Define 24934 here as part of pimpl-ifying the function_decl::parameter type. 24935 (function_decl::parameter::*): Define here the member functions as 24936 part of pimpl-ifying the function_decl::parameter type. 24937 (equals): Define the overload for function_decl::parameter here 24938 too. 24939 (ir_node_visitor::visit(function_decl::parameter*)): Define this. 24940 * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust. 24941 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust. 24942 * tests/data/test-diff-dwarf/libtest21-redundant-fn-v0.so: New 24943 test input data. 24944 * tests/data/test-diff-dwarf/libtest21-redundant-fn-v1.so: 24945 Likewise. 24946 * tests/data/test-diff-dwarf/test21-redundant-fn-v0.cc: Source 24947 code for test input binary above. 24948 * tests/data/test-diff-dwarf/test21-redundant-fn-v1.cc: Likewise. 24949 * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: New 24950 test input data. 24951 * tests/data/test-diff-dwarf/libtest22-changed-parm-c-v0.so: New 24952 test input data. 24953 * tests/data/test-diff-dwarf/libtest22-changed-parm-c-v1.so: 24954 Likewise. 24955 * tests/data/test-diff-dwarf/test22-changed-parm-c-v0.c: Source 24956 code for test input binary above. 24957 * tests/data/test-diff-dwarf/test22-changed-parm-c-v1.c: Likewise. 24958 * tests/test-diff-dwarf.cc (in_out_spec): Add the new test input 24959 data to the vector the test inputs to run this harness over. 24960 * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: New 24961 test input data. 24962 * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: 24963 Likewise. 24964 * tests/data/test-diff-suppr/libtest8-redundant-fn-v0.so: New test 24965 input binary. 24966 * tests/data/test-diff-suppr/libtest8-redundant-fn-v1.so: Likewise. 24967 * tests/data/test-diff-suppr/test8-redundant-fn-v0.cc: Source code 24968 code for binary test input above. 24969 * tests/data/test-diff-suppr/test8-redundant-fn-v1.cc: Likewise. 24970 * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: 24971 New test input data. 24972 * tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt: 24973 Likewise. 24974 * tests/data/test-diff-suppr/libtest9-changed-parm-c-v0.so: New 24975 test input binary. 24976 * tests/data/test-diff-suppr/libtest9-changed-parm-c-v1.so: New 24977 test input binary. 24978 * tests/data/test-diff-suppr/test9-changed-parm-c-v0.c: Source 24979 code for binary test input above. 24980 * tests/data/test-diff-suppr/test9-changed-parm-c-v1.c: Likewise. 24981 * tests/test-diff-suppr.cc (in_out_specs): Add the new test input 24982 data to the vector the test inputs to run this harness over. 24983 * tests/data/Makefile.am: Add the new files to the source 24984 distribution. 24985 249862014-12-26 Dodji Seketeli <dodji@redhat.com> 24987 24988 Style fix 24989 * src/abg-ir.cc (reference_type_def::get_pointed_to_type): Return 24990 a type_base_sptr. 24991 * src/abg-comparison.cc (diff::is_filtered_out): Fix a comment. 24992 249932014-12-25 Dodji Seketeli <dodji@redhat.com> 24994 24995 Fix pretty printing of pointer_diff node 24996 * src/abg-comparison.cc (pointer_diff::get_pretty_representation): 24997 Add the missing opening square bracket. 24998 249992014-12-17 Sinny Kumari <skumari@redhat.com> 25000 25001 Add new methods in corpus_diff class 25002 * include/abg-comparison.h 25003 (corpus_diff::added_unrefed_function_symbols): 25004 Declare new member function 25005 (corpus_diff::added_unrefed_variable_symbols): 25006 Declare new member function 25007 * src/abg-comparison.cc 25008 (corpus_diff::added_unrefed_function_symbols): 25009 Define new member function 25010 (corpus_diff::added_unrefed_variable_symbols): 25011 Define new member function 25012 250132014-12-15 Sinny Kumari <sinny@redhat.com> 25014 25015 Add new corpus_diff::added_variables() method 25016 * include/abg-comparison.h (corpus_diff::added_variables): 25017 Declare new member function 25018 * src/abg-comparison.cc (corpus_diff::added_variables): 25019 Define new member function 25020 250212014-12-12 Dodji Seketeli <dodji@redhat.com> 25022 25023 Extend detection of compatible types to arrays 25024 * include/abg-fwd.h (is_array_type): Renamed is_array_type_def() 25025 into this for consistency. 25026 * src/abg-comparison.cc (type_suppression::suppresses_diff): 25027 Adjust. 25028 * src/abg-dwarf-reader.cc (build_array_type): Remove useless code 25029 that was trying to read a DW_AT_byte_size attribute from the DIE 25030 of the array, but then wasn't doing anything with the value. But 25031 then if the attribute was not present, the array type wouldn't be 25032 built. 25033 * src/abg-ir.cc (strip_typedef): Strip typedefs from sub-types of 25034 array types too. 25035 (is_array_type): Rename is_array_def() to this, for consistency. 25036 (var_decl::get_pretty_representation): Adjust. 25037 * tests/data/test-diff-filter/libtest24-compatible-vars-v0.so: New 25038 test input data. 25039 * tests/data/test-diff-filter/libtest24-compatible-vars-v1.so: Likewise. 25040 * tests/data/test-diff-filter/test24-compatible-vars-report-0.txt: 25041 Likewise. 25042 * tests/data/test-diff-filter/test24-compatible-vars-v0.c: Source 25043 code for the first binary above. 25044 * tests/data/test-diff-filter/test24-compatible-vars-v1.c: Source 25045 code for the second binary above. 25046 * tests/data/Makefile.am: Add the new test input data to source 25047 distribution. 25048 * tests/test-diff-filter.cc (in_out_specs): Add the new test input 25049 data to the list of input to run this test harness over. 25050 250512014-12-12 Dodji Seketeli <dodji@redhat.com> 25052 25053 Improve the doc string for the elf_symbol::get_id_string() method 25054 * src/abg-ir.cc (elf_symbol::get_id_string): Improve doc string. 25055 Talk about the content of the id string of an elf symbol. 25056 250572014-12-11 Dodji Seketeli <dodji@redhat.com> 25058 25059 Better handle pointer-to-void in various places of the pipeline 25060 * src/abg-comparison.cc (pointer_diff::report): Handle the case of 25061 pointer to void. 25062 * src/abg-dwarf-reader.cc (build_pointer_type_def): Assert that 25063 the underlying pointer is non-null. 25064 * src/abg-ir.cc (pointer_type_def::pointer_type_def): Handle the 25065 case of pointer to void. 25066 (equals): Likewise in the overload for const pointer_type_def. 25067 (pointer_type_def::get_qualified_name): Likewise. 25068 250692014-12-11 Dodji Seketeli <dodji@redhat.com> 25070 25071 Try harder to detect a DWARF attribute pointing into alternate DWARF section 25072 * src/abg-dwarf-reader.cc 25073 (is_die_attribute_resolved_through_gnu_ref_alt): Support the case 25074 of the origin function itself having a specification function 25075 link. 25076 250772014-12-11 Dodji Seketeli <dodji@redhat.com> 25078 25079 Fix accidentally removing the scope of variables when fixing them up 25080 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 25081 During var decl fixup, remove the scope of a variable only when we 25082 are sure that we want to re-scope it. 25083 250842014-12-11 Dodji Seketeli <dodji@redhat.com> 25085 25086 Fix several aborts while diffing libdw.so 25087 * src/abg-corpus.cc 25088 (corpus::priv::build_unreferenced_symbols_tables): Fix wrong 25089 guestimation of the size of the map of unreferenced symbol table. 25090 * src/abg-dwarf-reader.cc (get_version_needed_for_versym): Honour 25091 the conditions of breaking out from walking the verneed table. 25092 250932014-12-10 Dodji Seketeli <dodji@redhat.com> 25094 25095 Temporarily disable redundant diff report elimination 25096 * src/abg-comparison.cc 25097 (diff_context::priv::priv): Show redundant changes by default. 25098 (categorize_redundancy): Do not categorize redundancy if the 25099 diff_context says that we shouldn't. 25100 * tools/abicompat.cc (options::show_redundant): New data member. 25101 (options::options): Initialize to true. 25102 (display_usage): Add new help string for new --no-redundant and 25103 --redundant options. 25104 (parse_command_line): Parse new --no-redundant and --redundant 25105 command line options. 25106 (main): Initialize the diff context with respect to the 25107 options::show_redundant property. 25108 * tools/abidiff.cc (options::options): Initialize the 25109 show_redundant_changes data member to true. 25110 (display_usage): Show new help string for the new --no-redundant 25111 command line option. 25112 (parse_command_line): Parse the new --no-redundant command line 25113 option. 25114 * tests/data/test-diff-filter/libtest23-redundant-fn-parm-change-v0.so: 25115 New test data input. 25116 * tests/data/test-diff-filter/libtest23-redundant-fn-parm-change-v1.so: 25117 Likewise. 25118 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt: 25119 Likewise. 25120 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-v0.c: 25121 Source code for the first binary above. 25122 * tests/data/test-diff-filter/test23-redundant-fn-parm-change-v1.c: 25123 Source code for the second binary above. 25124 * tests/data/Makefile.am: Add the new test data input to source 25125 distribution. 25126 * tests/test-abicompat.cc (in_out_specs): Add --no-redundant to 25127 abicompat when we don't want it to show redundant diff reports. 25128 * test-diff-filter.cc (in_out_specs): Likewise for abidiff. 25129 * test-diff-suppr.cc (in_out_specs): Likewise. 25130 251312014-12-10 Jan Engelhardt <jengelh@inai.de> 25132 25133 Fix conditional build wrt zip archives and cx11 25134 * configure.ac: remove (broken) assignment to the 25135 ENABLE_ZIP_ARCHIVE_AND_CXX11 variable 25136 * Makefile.am: replace variable assignments to 25137 ZIP_ARCHIVE_TESTS_FIRST_PART, ZIP_ARCHIVE_TESTS_SECOND_PART 25138 by ZIP_ARCHIVE_TESTS using the "+=" automake operator. 25139 Likewise for CXX11_TESTS. 25140 251412014-12-10 Dodji Seketeli <dodji@redhat.com> 25142 25143 Make determining of compatible types complete 25144 * include/abg-fwd.h (is_reference_type, is_function_type) 25145 (is_method_type): Declare new predicates. 25146 * include/abg-ir.h (class qualified_type_def): Pimpl this class. 25147 (qualified_type_def::qualified_type_def): Use the convenience 25148 type_base_sptr typedef. 25149 (qualified_type_def::{get_cv_quals, set_cv_quals}): Use the 25150 qualified_type_def::CV type rather than char. 25151 (qualified_type_def::get_underlying_type): Use the convenience 25152 type_base_sptr typedef. 25153 (pointer_type_def::pointer_type_def): Likewise. 25154 (function_decl::parameter::parameter): Add a new constructor. 25155 * src/abg-ir.cc (is_reference_type, is_function_type) 25156 (is_method_type): Define new predicates. 25157 (class qualified_type_def::priv): Define this new private type, 25158 for the purpose of Pimpl-ifying the qualified_type_def class. 25159 (qualified_type_def::{qualified_type_def, build_name, 25160 get_cv_quals_string_prefix, get_underlying_type}): Adjust for the 25161 purpose of Pimpl-ifying the qualified_type_def class. 25162 (equals): In the qualified_type_def, reference_type_def overloads, 25163 trust the fact that we have operator== overload for the 25164 type_base_sptr. This avoids crashes for when the (possible) 25165 underlying type is null. 25166 (pointer_type_def::operator==): Likewise. 25167 (strip_typedef): Make this recursively strip 25168 typedefs from sub-types. 25169 (types_are_compatible): Handle null types. 25170 (qualified_type_def::{get_cv_quals, set_cv_quals}): Handle 25171 qualified_type_def::CV rather than char. 25172 (pointer_type_def::pointer_type_def): Use the convenience 25173 type_base_sptr typedef. 25174 * include/abg-comparison.h (distinct_diff::compatible_child_diff): 25175 Declare new member function. 25176 * src/abg-comparison.cc (distinct_diff::compatible_child_diff): 25177 Define new member function. 25178 (distinct_diff::chain_into_hierarchy): 25179 Chain the compatible child diff node that might be present. 25180 (distinct_diff::report): Now when a distinct diff carries a 25181 compatible change, mention it in the report. 25182 * src/abg-comp-filter.cc (is_compatible_change): A compatible 25183 change can now involve types that are not typedefs. Only their 25184 sub-types need to be involved with typedef-ness. 25185 * tests/data/test-diff-dwarf/test{2,4,5}-report.txt: Adjust. 25186 * tests/data/test-diff-filter/libtest21-compatible-vars-v0.so: New 25187 test data input. 25188 * tests/data/test-diff-filter/libtest21-compatible-vars-v1.so: Likewise. 25189 * tests/data/test-diff-filter/test21-compatible-vars-report-0.txt Likewise. 25190 * tests/data/test-diff-filter/test21-compatible-vars-report-1.txt Likewise. 25191 * tests/data/test-diff-filter/test21-compatible-vars-v0.cc: Source 25192 code for the first data input binary above. 25193 * tests/data/test-diff-filter/test21-compatible-vars-v1.cc: Source 25194 code for the second data input binary above. 25195 * tests/data/test-diff-filter/libtest22-compatible-fns-v0.so: New 25196 test data input. 25197 * tests/data/test-diff-filter/libtest22-compatible-fns-v1.so Likewise. 25198 * tests/data/test-diff-filter/test22-compatible-fns-report-0.txt: 25199 New test data input. 25200 * tests/data/test-diff-filter/test22-compatible-fns-report-1.txt: Likewise. 25201 * tests/data/test-diff-filter/test22-compatible-fns-v0.c: Source 25202 code for the first test data input binary above. 25203 * tests/data/test-diff-filter/test22-compatible-fns-v1.c: Source 25204 code for the second test data input binary above. 25205 * tests/data/Makefile.am: Add the new test input data to source 25206 distribution. 25207 * tests/test-diff-filter.cc (in_out_specs): Add the new test data 25208 input above to the list of test data this harness has to be run 25209 over. 25210 252112014-12-09 Dodji Seketeli <dodji@redhat.com> 25212 25213 Fix classification of parameter addition in C 25214 * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): 25215 Compare the fully qualified name of the functions; not their 25216 pretty representation. 25217 * tests/data/test-diff-dwarf/libtest20-add-fn-parm-v0.so: New test 25218 data intput. 25219 * tests/data/test-diff-dwarf/libtest20-add-fn-parm-v1.so: 25220 Likewise. 25221 * tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt: 25222 Likewise. 25223 * tests/data/test-diff-dwarf/test20-add-fn-parm-v0.c: Source code 25224 for the first shared library above. 25225 * tests/data/test-diff-dwarf/test20-add-fn-parm-v1.c: Source code 25226 for the second shared library above. 25227 * tests/test-diff-dwarf.cc (in_out_specs): Add the test input data 25228 above to the list of test input the harness must run over. 25229 * Makefile.am: Add the new files above to source distribution. 25230 252312014-12-08 Dodji Seketeli <dodji@redhat.com> 25232 25233 Wire the soname check into abicompat 25234 * include/abg-comparison.h (corpus_diff::soname_changed): Declare 25235 new member function. 25236 * src/abg-comparison.cc (corpus_diff::soname_changed): Define new 25237 member function. 25238 (corpus_diff::length): Use the new corpus_diff::soname_changed() 25239 method. 25240 * tests/data/test-abicompat/libtest4-soname-changed-v0.so: New 25241 test input data. 25242 * tests/data/test-abicompat/libtest4-soname-changed-v1.so: 25243 Likewise. 25244 * tests/data/test-abicompat/test4-soname-changed-app: Likewise. 25245 * tests/data/test-abicompat/test4-soname-changed-report-0.txt: 25246 Likewise. 25247 * tests/data/test-abicompat/test4-soname-changed-app.cc: Source 25248 code for one of the binaries above. 25249 * tests/data/test-abicompat/test4-soname-changed-v0.cc: Likewise. 25250 * tests/data/test-abicompat/test4-soname-changed-v1.cc: Likewise. 25251 * tests/test-abicompat.cc (in_out_specs): Add the new test input 25252 data to the list of input data to run this harness over. 25253 (main): Take the soname change in account to determine if the 25254 change is ABI incompatible. 25255 * tests/data/Makefile.am: Add the new test input data above to source 25256 distribution. 25257 252582014-12-07 Dodji Seketeli <dodji@redhat.com> 25259 25260 Fixup messed up old runtestdiffdwarf input tests 25261 * tests/data/test-diff-dwarf/test17-non-refed-syms-report-0.txt: 25262 Add this missing reference test output. 25263 * tests/data/Makefile.am: Add the new reference test output to 25264 source distribution. 25265 * tests/data/test-diff-dwarf/test18-alias-sym-report-0.txt: Fix 25266 this output to avoid emitting symbol alias information in it. 25267 * tests/test-diff-dwarf.cc (in_out_specs): Add two missing test 25268 input data to the list of input data this harness is supposed to 25269 run over. 25270 252712014-12-07 Dodji Seketeli <dodji@redhat.com> 25272 25273 Support reading and comparing soname from ELF files 25274 * include/abg-corpus.h (corpus::{get_needed, set_needed, 25275 get_soname, set_soname}): Declare new accessors. 25276 * src/abg-corpus.cc (corpus::priv::{needed, soname}): New data 25277 members. 25278 (corpus::{get_needed, set_needed, get_soname, set_soname}): Define 25279 new accessors. 25280 (corpus::is_empty): Take dt_needed and dt_soname in account in 25281 computing empty-ness. 25282 * src/abg-dwarf-reader.cc (read_context::{dt_needed_, 25283 dt_soname_}): New data members. 25284 (read_context::{dt_needed, dt_soname}): New accessors. 25285 (read_context::load_dt_soname_and_needed): New member function. 25286 (read_corpus_from_elf): Call the new 25287 read_context::load_dt_soname_and_needed() to read the dt_soname 25288 and dt_needed tags. Set them to the corpus. 25289 * include/abg-comparison.h (diff_context::show_soname_change): 25290 Declare new accessors. 25291 * src/abg-comparison.cc (diff_context::priv::show_soname_change_): 25292 New data member. 25293 (diff_context::priv::priv): Initialize the new data member 25294 diff_context::priv::show_soname_change_. 25295 (diff_context::show_soname_change): Define new accessors. 25296 (corpus_diff::priv::sonames_equal_): New data member. 25297 (corpus_diff::priv::priv): Initialize the new data member 25298 corpus_diff::priv::sonames_equal_. 25299 (corpus_diff::length): Take the new priv_->sonames_equals_ data 25300 member in account. 25301 (corpus_diff::{report, priv::emit_diff_stats}): If the sonames 25302 changed and we are allowed to report it, then report it. 25303 (compute_diff): In the variant for corpus_diff, do not forget to 25304 compare the sonames. 25305 * src/abg-reader.cc (build_needed, read_elf_needed_from_input): 25306 Define new static functions. 25307 (read_corpus_from_input): Read the 'soname' attribute from the 25308 'abi-corpus' xml element node. 25309 * src/abg-writer.cc (write_elf_needed): Define new static 25310 function. 25311 (write_corpus_to_native_xml): Write a new 'elf-needed' xml element 25312 node that contains one xml 'dependency' element node per 25313 dependency to emit. This uses the new write_elf_needed() function 25314 above. 25315 * tests/data/test-diff-dwarf/libtest19-soname-v0.so: New test 25316 input data. 25317 * tests/data/test-diff-dwarf/libtest19-soname-v1.so: Likewise. 25318 * tests/data/test-diff-dwarf/test19-soname-report-0.txt: Likewise. 25319 * tests/data/test-diff-dwarf/test19-soname-v0.c: Source code of 25320 the first binary above. 25321 * tests/data/test-diff-dwarf/test19-soname-v1.c: Source code of 25322 the second binary above. 25323 * tests/test-diff-dwarf.cc (in_out_specs): Add the test input 25324 above to the list of test input to run this harness on. 25325 * tests/data/Makefile.am: Add the new test input data above. 25326 * tests/data/test-read-dwarf/test{0,1}.abi: Adjust. 25327 * tests/data/test-read-dwarf/test{2,3,4,6,}.so.abi: Adjust. 25328 253292014-12-07 Dodji Seketeli <dodji@redhat.com> 25330 25331 Fix some style nits in the native reader and writer 25332 * src/abg-reader.cc (read_symbol_db_from_input): Align parameter 25333 names. Fix indentation of the first line of the function. 25334 * src/abg-writer.cc (write_elf_symbols_table): Align parameter names. 25335 253362014-12-07 Dodji Seketeli <dodji@redhat.com> 25337 25338 Fix a crash while writing symbol information 25339 * src/abg-corpus.cc (corpus::{get_fun_symbol_map_sptr, 25340 get_var_symbol_map_sptr}): Make sure the symbol map is always 25341 constructed, even if it's empty. 25342 * tests/data/test-read-write/test26.xml: New test input data. 25343 * tests/test-read-write.cc (in_out_spec): Add this new test input 25344 data to the list of input data to run the harness on. 25345 (main): Support reading and writing corpus files alongside 25346 translation unit files that we were handling already. 25347 * tests/data/Makefile.am: Add the new test input data to source 25348 distribution. 25349 253502014-12-05 Dodji Seketeli <dodji@redhat.com> 25351 25352 Avoid showing ugly version info in the libabigail online manual 25353 * doc/manuals/conf.py: Update copyright mention. Do not show ugly 25354 version information. 25355 253562014-11-30 Dodji Seketeli <dodji@redhat.com> 25357 25358 Initial implementation of the abicompat tool 25359 * include/abg-comparison.h 25360 (diff_context::show_added_symbols_unreferenced_by_debug_info): 25361 Declare new accessors. 25362 (corpus_diff::{deleted_variables, 25363 deleted_unrefed_function_symbols, 25364 deleted_unrefed_variable_symbols, 25365 apply_filters_and_suppressions_before_reporting}): Declare new 25366 methods. 25367 (corpus_diff::diff_stats): Declare this new type. Actually this 25368 was previously corpus_diff::priv::diff_stats, which was a hidden 25369 internal type.. We are moving it here, in the external API so 25370 that client code can have more information about changes 25371 statistics. Change all the previously publicly accessible data 25372 members into accessor functions. 25373 * src/abg-comparison.cc (class corpus_diff::diff_stats::priv): New 25374 type. 25375 (diff_context::priv::show_added_syms_unreferenced_by_di_): New 25376 data member. 25377 (diff_context::priv::priv): Adjust. 25378 (diff_context::show_added_symbols_unreferenced_by_debug_info): 25379 Define this new method. 25380 (corpus_diff::priv::emit_diff_stats): Do not show the diff stat 25381 if the only changes is added function or variables symbols and if 25382 we were instructed to not show added symbols. 25383 (corpus_diff::priv::{diff_stats_, filters_and_suppr_applied_}): 25384 New data members. 25385 (corpus_diff::priv::priv): Initialize the 25386 filters_and_suppr_applied_ data member. 25387 (corpus_diff::priv::diff_stats): Move this type to 25388 corpus_diff::diff_stats. 25389 (corpus_diff::priv::{apply_filters_and_compute_diff_stats, 25390 emit_diff_stats}): Adjust. 25391 (corpus_diff::apply_filters_and_suppressions_before_reporting): 25392 Define new member function. 25393 (corpus_diff::report): Use the new 25394 apply_filters_and_suppressions_before_reporting() function, rather 25395 than applying the filters and suppressions by ourselves. Also 25396 adjust to the use the accessors of the new corpus_diff::diff_stats 25397 type. 25398 (corpus_diff::{deleted_variables, 25399 deleted_unrefed_function_symbols, 25400 deleted_unrefed_variable_symbols}): Define new accessors. 25401 (corpus_diff::diff_stats::{diff_stats, num_func_removed, 25402 num_func_added, num_func_changed, num_func_filtered_out, 25403 net_num_func_changed, num_vars_removed, num_vars_added, 25404 num_vars_changed, num_vars_filtered_out, net_num_vars_changed, 25405 num_func_sym_removed, num_func_syms_added, num_var_syms_removed, 25406 num_var_syms_added}): Define new member functions. 25407 * include/abg-corpus.h (corpus::{get_sym_ids_of_fns_to_keep, 25408 get_sym_ids_of_vars_to_keep}): Declare new methods. 25409 * src/abg-corpus.cc (corpus::priv::{sym_id_fns_to_keep, 25410 sym_id_vars_to_keep}): Added data members. 25411 (symtab_build_visitor_type::{unrefed_fun_symbols, 25412 unrefed_var_symbols, sym_id_fns_to_keep, sym_id_vars_to_keep}): 25413 Added new data members. 25414 (symtab_build_visitor_type::symtab_build_visitor_type): Take two 25415 additional parameters for the function and variable symbol ids to 25416 keep. 25417 (symtab_build_visitor_type::add_fn_to_wip_fns): Take the function 25418 symbols to keep in account when building the exported symbol 25419 table. 25420 (symtab_build_visitor_type::add_var_to_wip_vars): Likewise, take 25421 the variable symbols to keep in account when building the exported 25422 symbol table. 25423 (corpus::priv::build_public_decl_table): Adjust the initialization 25424 of the visitor that walks the ABI artifacts to build the exported 25425 symbol table to know take a list of function/variable symbols to 25426 keep. 25427 (corpus::priv::build_unreferenced_symbols_tables): Ensure that the 25428 public table of functions/variables is built before doing the work 25429 of this function. Also, if a list of variable/function symbols to 25430 keep is given, drop all symbols that are not in that list on the 25431 floor. 25432 (corpus::{get_sym_ids_of_fns_to_keep, 25433 get_sym_ids_of_vars_to_keep}): Define new accessors. 25434 * tools/abicompat.cc: New abicompat tool. 25435 * doc/manuals/abicompat.rst: New documentation source for 25436 abicompat. 25437 * doc/manuals/libabigail-tools.rst: Add an entry for the abicompat 25438 doc. 25439 * tests/test-abicompat.cc: New test harness for the 'abicompat' 25440 tool. 25441 * tests/Makefile.am: Build the runtestabicompat test harness and 25442 add it to the list of tests harnesses that are run by make check. 25443 * tests/data/test-abicompat/libtest0-fn-changed-libapp-v0.so: New 25444 test input. 25445 * tests/data/test-abicompat/libtest0-fn-changed-libapp-v1.so: Likewise. 25446 * tests/data/test-abicompat/test0-fn-changed-app: Likewise. 25447 * tests/data/test-abicompat/test0-fn-changed-0.suppr: Likewise 25448 * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Likewise. 25449 * tests/data/test-abicompat/test0-fn-changed-report-1.txt: Likewise. 25450 * tests/data/test-abicompat/test0-fn-changed-app.cc: Likewise. 25451 * tests/data/test-abicompat/test0-fn-changed-libapp.h: Likewise. 25452 * tests/data/test-abicompat/test0-fn-changed-libapp-v0.cc: Likewise. 25453 * tests/data/test-abicompat/test0-fn-changed-libapp-v1.cc: Likewise. 25454 * tests/data/test-abicompat/libtest1-fn-removed-v0.so: Likewise. 25455 * tests/data/test-abicompat/libtest1-fn-removed-v1.so: Likewise. 25456 * tests/data/test-abicompat/test1-fn-removed-app: Likewise. 25457 * tests/data/test-abicompat/test1-fn-removed-app.cc: Likewise. 25458 * tests/data/test-abicompat/test1-fn-removed-report-0.txt: Likewise. 25459 * tests/data/test-abicompat/test1-fn-removed-v0.cc: Likewise. 25460 * tests/data/test-abicompat/test1-fn-removed-v1.cc: Likewise. 25461 * tests/data/test-abicompat/libtest2-var-removed-v0.so: Likewise. 25462 * tests/data/test-abicompat/libtest2-var-removed-v1.so: Likewise. 25463 * tests/data/test-abicompat/test2-var-removed-app: Likewise. 25464 * tests/data/test-abicompat/test2-var-removed-app.cc: Likewise. 25465 * tests/data/test-abicompat/test2-var-removed-report-0.txt: Likewise. 25466 * tests/data/test-abicompat/test2-var-removed-v0.cc: Likewise. 25467 * tests/data/test-abicompat/test2-var-removed-v1.cc: Likewise. 25468 * tests/data/test-abicompat/libtest3-fn-removed-v0.so: Likewise. 25469 * tests/data/test-abicompat/libtest3-fn-removed-v1.so: Likewise. 25470 * tests/data/test-abicompat/test3-fn-removed-app: Likewise. 25471 * tests/data/test-abicompat/test3-fn-removed-app.cc: Likewise. 25472 * tests/data/test-abicompat/test3-fn-removed-report-0.txt: Likewise. 25473 * tests/data/test-abicompat/test3-fn-removed-v0.cc: Likewise. 25474 * tests/data/test-abicompat/test3-fn-removed-v1.cc: Likewise. 25475 * tests/data/test-abicompat/test3-fn-removed-version-script-0 Likewise.: 25476 * tests/data/test-abicompat/test3-fn-removed-version-script-1: Likewise. 25477 * tests/data/Makefile.am: Add the new test inputs above to the 25478 source distribution. 25479 254802014-11-30 Dodji Seketeli <dodji@redhat.com> 25481 25482 Support reading undefined symbols from an ELF file 25483 * include/abg-corpus.h (corpus::{set_undefined_fun_symbol_map, 25484 set_undefined_var_symbol_map, get_undefined_fun_symbol_map_sptr, 25485 get_undefined_fun_symbol_map, get_sorted_undefined_fun_symbols, 25486 get_undefined_var_symbol_map_sptr, get_undefined_var_symbol_map, 25487 get_sorted_undefined_var_symbols}): Declare new methods ... 25488 * src/abg-corpus.cc (corpus::{set_undefined_fun_symbol_map, 25489 set_undefined_var_symbol_map, get_undefined_fun_symbol_map_sptr, 25490 get_undefined_fun_symbol_map, get_sorted_undefined_fun_symbols, 25491 get_undefined_var_symbol_map_sptr, get_undefined_var_symbol_map, 25492 get_sorted_undefined_var_symbols}): ... and define them. 25493 (struct corpus::priv::{undefined_var_symbol_map, 25494 sorted_undefined_var_symbols, undefined_fun_symbol_map, 25495 sorted_undefined_fun_symbols}): New data members. 25496 * src/abg-dwarf-reader.cc (get_symbol_versionning_sections): Also 25497 return the SHT_GNU_verneed section. 25498 (get_version_needed_for_versym): New static function. 25499 (get_version_definition_for_versym): Factorize this function out 25500 of .. 25501 (get_version_for_symbol): ... this one. Take a flag that says if 25502 we want the definition version or the needed version of a symbol. 25503 Extend the implementation using the two new function 25504 get_version_needed_for_versym() and 25505 get_version_definition_for_versym() above. This function now 25506 returns the version either for a defined & exported symbol, or for 25507 an undefined symbol. 25508 (lookup_symbol_from_sysv_hash_tab) 25509 (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab): 25510 Adjust for the change of signature of get_version_for_symbol(). 25511 (read_context::{undefined_fun_syms_, undefined_var_syms_}): New 25512 data members. 25513 (read_context::lookup_elf_symbol_from_index): Adjust for 25514 invocation of the new signature of get_version_for_symbol(). 25515 (read_context::{undefined_fun_syms_sptr, undefined_fun_syms, 25516 undefined_var_syms_sptr, undefined_var_syms}): Define new methods. 25517 (read_context::load_symbol_maps): Add support for loading 25518 undefined symbols and their versions. 25519 (read_context::maybe_load_symbol_maps): Take in account the need 25520 to load undefined symbols as well. 25521 (read_corpus_from_elf): Once the undefined symbols have been read 25522 from the ELF file, stuff them into the resulting ABI corpus that 25523 has been built. 25524 255252014-11-30 Dodji Seketeli <dodji@redhat.com> 25526 25527 Show the pretty representation of deleted variables in the diff output 25528 * src/abg-comparison.cc (corpus_diff::report): Show the pretty 25529 representation of deleted variables in all cases. 25530 255312014-11-30 Dodji Seketeli <dodji@redhat.com> 25532 25533 Fix status checking in abidw 25534 * tools/abidw.cc (main): Fix successful status checking. 25535 255362014-11-30 Dodji Seketeli <dodji@redhat.com> 25537 25538 Rename elf_symbol::get_is_defined() to elf_symbol::is_defined() 25539 * include/abg-ir.h (elf_symbol::get_is_defined): Rename into 25540 elf_symbol::is_defined. 25541 (elf_symbol::set_is_defined): Rename into elf_symbol::is_defined. 25542 * src/abg-ir.cc (elf_symbol::get_is_defined): Likewise, rename 25543 this into elf_symbol::is_defined. 25544 (elf_symbol::set_is_defined): Likewise, rename this into 25545 elf_symbol::is_defined. 25546 (elf_symbol::{elf_symbol, is_public}): Adjust. 25547 * src/abg-writer.cc (write_elf_symbol): Adjust. 25548 255492014-11-30 Dodji Seketeli <dodji@redhat.com> 25550 25551 Update the copyright years of include/abg-corpus.h 25552 * include/abg-corpus.h: Update the copyright years of this file. 25553 255542014-11-20 Dodji Seketeli <dodji@redhat.com> 25555 25556 Make tests/data directory have its own Makefile 25557 * configure.ac(AC_CONFIG_FILE): Generate a new tests/data/Makefile 25558 file. 25559 * tests/Makefile.am: Link the data/ sub-directory from here. Move 25560 the EXTRA_DIST definition to ... 25561 * tests/data/Makefile.am: ... this new file here. 25562 255632014-11-20 Dodji Seketeli <dodji@redhat.com> 25564 25565 Hmh, finally EXTRA_DIST was just fine 25566 * tests/Makefile.am: Put EXTRA_DIST back. 25567 255682014-11-19 Dodji Seketeli <dodji@redhat.com> 25569 25570 Make sure we don't try to build test data 25571 * tests/Makefile.am: Replace EXTRA_DIST with noinst_DATA. 25572 255732014-11-19 Dodji Seketeli <dodji@redhat.com> 25574 25575 Fix manual documentation generation 25576 * doc/manuals/Makefile.am: Trigger the manual generation from the 25577 html-doc target. Add the source files to the distribution. Fix 25578 the clean target. 25579 255802014-11-19 Dodji Seketeli <dodji@redhat.com> 25581 25582 Fix apidoc building 25583 * doc/Makefile.am: Trigger the building frm the html-doc target. 25584 255852014-11-19 Dodji Seketeli <dodji@redhat.com> 25586 25587 Cleanup of configure.ac 25588 * configure.ac: Remove useless variables and fix a typo. 25589 255902014-11-19 Dodji Seketeli <dodji@redhat.com> 25591 25592 Add loads of forgotten test data files to source distribution 25593 * tests/Makefile.am: Add lots of test data file that were 25594 forgotten and then revealed by running make distcheck. Also fix 25595 some wrong paths to test data files. 25596 255972014-11-19 Dodji Seketeli <dodji@redhat.com> 25598 25599 Use DESTDIR in doc/manuals/Makefile.am when creating the manuals 25600 * doc/manuals/Makefile.am: Use the DESTDIR variable when 25601 addressing the destination directory of the created manuals. 25602 256032014-11-19 Dodji Seketeli <dodji@redhat.com> 25604 25605 Fix a thinko in doc/Makefile.am 25606 * apidoc-install-html-doxygen: Make sure that the directory 25607 $(DESTDIR)$(docdir) does not exist, before trying to create it. 25608 256092014-11-19 Dodji Seketeli <dodji@redhat.com> 25610 25611 Add doc/api/libabigail.doxy to source distribution 25612 * doc/Makefile.am: Add the file api/libabigail.doxy to source 25613 distribution. 25614 256152014-11-19 Dodji Seketeli <dodji@redhat.com> 25616 25617 Make the install-html target of apidoc/manual be conditional 25618 * configure.ac: add --enable-apidoc and --enable-manual. Add the 25619 two ENABLE_APIDOC and ENABLE_MANUAL automake conditional 25620 variables. Add the activation of the apidoc and manual into the 25621 final package configuration report. 25622 * doc/Makefile.am: Make the install-html, install-data-local and 25623 uninstall-local targets conditional on the ENABLE_APIDOC 25624 conditional variable. 25625 * doc/manuals/Makefile.am: Likewise, make the install-html, 25626 install-data-local and uninstall-data-local conditional on the 25627 ENABLE_MANUAL conditional variable. 25628 256292014-11-19 Dodji Seketeli <dodji@redhat.com> 25630 25631 Make the alt dwarf debug file *not* be a symlink 25632 * tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug: 25633 Make this be a real file, no more a symlink to 25634 ../../../test0-common-dwz.debug. 25635 * tests/data/test-alt-dwarf-file/test0-report.txt: Now that the 25636 file above is no more a symlink the message emitted by the test 25637 changes. It now says that the file found is the base name of the 25638 real file. So change the reference report accordingly. 25639 256402014-11-19 Dodji Seketeli <dodji@redhat.com> 25641 25642 Use the POSIX 1003.1-1988 tar format for dist tar 25643 * configure.ac: For the tar invocation made by make dist, make 25644 sure to use the POSIX 1003.1-1988 tar format that can support file 25645 names of more than 99 characters. This is useful for the 25646 test-alt-dwarf-file test that has data made of a file which patch 25647 has more than 99 characters. 25648 256492014-11-19 Dodji Seketeli <dodji@redhat.com> 25650 25651 Nested automake conditionals don't work 25652 * configure.ac (ENABLE_ZIP_ARCHIVE_AND_CXX11): Define this 25653 automake condition variable that is true if both the zip archive 25654 and c++11 features are enabled. This is important to know if the 25655 test runtestdot is going to be compiled. That test needs both 25656 c++11 and the zip archive features. 25657 * tests/Makefile.am: Do not nest automake conditional statements. 25658 It does not work. Rather, use the new 25659 ENABLE_ZIP_ARCHIVE_AND_CXX11 condition variable. 25660 256612014-11-19 Dodji Seketeli <dodji@redhat.com> 25662 25663 INSTALL file is not yet in the distribution 25664 * Makefile.am: Do not say that INSTALL file is in the distribution 25665 while it is not. 25666 256672014-11-19 Dodji Seketeli <dodji@redhat.com> 25668 25669 If c++11 is disable do not execute the runtestdot test 25670 * tests/Makefile.am: runtestdot should not be executed if c++11 is 25671 disabled. 25672 256732014-11-18 Dodji Seketeli <dodji@redhat.com> 25674 25675 make html now generates the apidoc, manual and web site 25676 * doc/Makefile.am (html-local): Make the html file generation be 25677 triggered by the html-local target, not the html target. The html 25678 target is a recursive target that calls the the html-local targets 25679 under each directory. 25680 (apidoc-html-doxygen): Rename the doc-html-doxygen target into 25681 (apidoc-install-html-doxygen): Rename doc-install-html-doxygen 25682 into this. this. 25683 (DO_HTML, DO_INSTALL_HTML): Adjust. 25684 (install-data-local): New target. 25685 * doc/manuals/Makefile.am (install-html, install-data-local): New 25686 targets. 25687 256882014-11-18 Dodji Seketeli <dodji@redhat.com> 25689 25690 Generate the manual html documentation in the proper build directory 25691 * doc/manuals/Makefile.am: Renamed doc/manuals/Makefile into this. 25692 (BUILDDIR): Make this variable point to $(builddir)/_build as 25693 opposed to just _build previously. 25694 (SOURCEDIR): New variable that points to the source dir as known 25695 by the autotools magic. 25696 (ALLSPHINXOPTS): Make the source dir refer to the new 25697 $(SOURCEDIR), rather than just '.' as previously. 25698 * configure.ac (doc/manuals/Makefile): Generate this now. 25699 * doc/Makefile.am: Link the sub-directory doc/manuals. 25700 257012014-11-18 Dodji Seketeli <dodji@redhat.com> 25702 25703 Update Makefile.am after the additions related to gen-changelog.py 25704 * Makefile.am: Add ChangeLog and COPYING-LGPLV2 to the source 25705 distribution. 25706 (update-changelog, tag-release-only tag-release): New Makefile 25707 targets. 25708 257092014-11-18 Dodji Seketeli <dodji@redhat.com> 25710 25711 Added a ChangeLog that is auto-generated by gen-changelog.py 25712 * ChangeLog: Add this auto-generated file. 25713 257142014-11-18 Dodji Seketeli <dodji@redhat.com> 25715 25716 [gen-changelog] Make subject line always come first 25717 * gen-changelog.py (process_commit): In changelog entries with an 25718 empty body, make sure the subject line comes first. 25719 257202014-11-18 Dodji Seketeli <dodji@redhat.com> 25721 25722 Try harder to remove timezone info from the date 25723 * gen-changelog.py (process_commit): The timezone shit can start 25724 either with a '+' or a '-'. 25725 257262014-11-18 Dodji Seketeli <dodji@redhat.com> 25727 25728 Not all ChangeLog file lines end up with a ':' 25729 * gen-changelog.py (process_commit): When trying to recognize the 25730 beginning of a ChangeLog entry body, do not expect a line that 25731 starts with a '*' to end with a ':' because there can be long file 25732 names that end on the next line. 25733 257342014-11-18 Dodji Seketeli <dodji@redhat.com> 25735 25736 Allow introductory text in commit log and ignore it when generating ChangeLog 25737 * gen-changelog.py (process_commit): Everything that comes between 25738 the subject line of the commit and the first \t* sequence is 25739 considered to be introductory text. Ignore it when generating the 25740 ChangeLog entry. 25741 * COMMIT-LOG-GUIDELINES: Update the commit log guidelines to 25742 reflect the fact that we can now have introductory text in the 25743 commit log. 25744 257452014-11-18 Dodji Seketeli <dodji@redhat.com> 25746 25747 Initial import of gen-changelog.py 25748 * gen-changelog.py: Copy from 25749 https://github.com/GNOME/gnet/blob/master/gen-changelog.py. 25750 License it under LGPLV v2+ after asking Edward Hervey's kind 25751 permission. Ain't Free Software really great? 25752 257532014-11-18 Dodji Seketeli <dodji@redhat.com> 25754 25755 Fix the reference to the IRC channel on the web page 25756 * doc/website/mainpage.txt: The IRC server address is 25757 irc.oftc.net, not just oftc.net. 25758 * include/abg-fwd.h: Likewise. 25759 257602014-11-10 Dodji Seketeli <dodji@redhat.com> 25761 25762 Consider enclosing template when comparing template parameters 25763 * src/abg-ir.cc (template_parameter::priv::comparison_started_): 25764 New data member. 25765 (template_parameter::priv::priv): Initialize it. 25766 (template_parameter::operator==): Compare the enclosing template 25767 too. And avoid infinite recursion. 25768 257692014-11-10 Dodji Seketeli <dodji@redhat.com> 25770 25771 Remove mention of libzip from the web page 25772 * doc/website/mainpage.txt: Remove mention of libzip from the list 25773 of dependencies. 25774 257752014-11-10 Dodji Seketeli <dodji@redhat.com> 25776 25777 Cleanup of the web page 25778 * doc/website/libabigail-website.doxy: Remove the redundant 25779 information that was appearing on the web page. 25780 * doc/website/mainpage.txt: Clean-up the text of the web page, add 25781 information for the new IRC channel #libabigail on oftc.net, 25782 re-organize the content by putting sections where we had 25783 paragraphs. Add a table of content. Also add a web form to 25784 subscribe/unsubscribe to the mailing list. 25785 257862014-11-08 Dodji Seketeli <dodji@redhat.com> 25787 25788 Sort functions by the their qualified name 25789 * src/abg-comparison.cc (function_comp::operator()): Sort the 25790 functions by only looking at their qualified name, as opposed to 25791 their return type name. 25792 257932014-11-08 Dodji Seketeli <dodji@redhat.com> 25794 25795 Remove too tight assert from de-mangling code 25796 * src/abg-ir.cc (demangle_cplus_mangled_name): The return length 25797 can be zero. That means, no de-mangling was done. 25798 257992014-11-08 Dodji Seketeli <dodji@redhat.com> 25800 25801 Sort reported changed declarations & types in a given scope 25802 * src/abg-comparison.cc (struct changed_type_or_decl_comp, struct 25803 changed_vars_comp): New comparison functors. 25804 (sort_changed_type_or_decl, sort_changed_vars): New static 25805 functions. 25806 (scope_diff::report): Use the above to sort changed declarations, 25807 and types in a given scope. 25808 (corpus_diff::report): Likewise for the changed variables. 25809 * tests/data/test-abidiff/test-struct1-report.txt: Adjust. 25810 * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: 25811 Likewise. 25812 * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: 25813 Likewise. 25814 258152014-11-08 Dodji Seketeli <dodji@redhat.com> 25816 25817 Sort elf symbols before serializing them 25818 * include/abg-corpus.h (corpus::{get_sorted_fun_symbols, 25819 get_sorted_var_symbols}): Declare new member functions. 25820 * src/abg-corpus.cc (corpus_priv::{sorted_var_symbols, 25821 sorted_fun_symbols}): New data members. 25822 (struct elf_symbol_comp_functor): Define new comparison functor. 25823 (corpus::{get_sorted_fun_symbols, get_sorted_var_symbols}): Define 25824 new member functions. 25825 * src/abg-writer.cc (write_elf_symbols_table): Take a sorted 25826 vector of symbols in parameters, rather than an unsorted map. 25827 (write_corpus_to_native_xml): Write a sorted vector of symbols, 25828 rather than an unsorted map of symbols. 25829 * tests/data/test-read-dwarf/test0.abi: Adjust. 25830 * tests/data/test-read-dwarf/test1.abi: Likewise. 25831 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 25832 * tests/data/test-read-dwarf/test3.so.abi: Likewise. 25833 * tests/data/test-read-dwarf/test6.so.abi: Likewise. 25834 258352014-11-07 Dodji Seketeli <dodji@redhat.com> 25836 25837 Fix template parameter hashing: make it know about enclosing template 25838 * include/abg-ir.h (template_parameter_sptr, template_decl_sptr) 25839 (template_decl_wptr): Declare new typedefs. 25840 (class template_decl): Make this virtually inherit decl_base and 25841 pimpl-ify it. 25842 (class template_parameter): Pimpl-ify this. Make the constructor 25843 take the enclosing template parameter. 25844 (struct template_decl::hash): Declare this here, rather than in 25845 src/abg-hash.cc 25846 (class type_tparameter, non_type_tparameter, template_tparameter) 25847 (class type_composition, function_tdecl, class_tdecl): Pimpl-ify 25848 this. 25849 * src/abg-hash.cc (template_parameter::hash::operator()): Hash the 25850 enclosing template parameter. Avoid infinite recursion due to the 25851 loop hash parameter -> hash template -> hash parameter. 25852 (template_decl::hash::operator()) Define this here, now that it's 25853 declared in abg-ir.h. Also, avoid infinite recursion here; this 25854 is complementary to what is done in the hashing for 25855 template_parameter. 25856 ({type_tparameter, template_tparameter, }::hash::operator()): 25857 Cache the calculated hash just as what is done for other types 25858 hashed. 25859 (template_decl::priv): Define this new type. 25860 (template_decl::{add_template_parameter, get_template_parameters, 25861 ~template_decl}): Define these here to pimpl-ify template_decl. 25862 (template_parameter::priv): Define this new type. 25863 (template_parameter::template_parameter): Define this here to 25864 pimpl-ify template_parameter. Note also that this now takes the 25865 enclosing template decl. 25866 (template_parameter::{get_index, get_enclosing_template_decl, 25867 get_hashing_has_started, set_hashing_has_started, operator::==}): 25868 Define these here to pimpl-ify template_parameter. 25869 (type_tparameter::priv): Define this new type. 25870 (type_tparameter::type_tparameter): Define this here to pimpl-ify 25871 type_tparameter. Also, not that this constructor now takes the 25872 enclosing template decl. 25873 (class non_type_tparameter::priv): Define new type. 25874 (non_type_tparameter::{non_type_tparameter, get_type}): Define 25875 these here to pimpl-ify non_type_tparameter. The constructor now 25876 takes the enclosing template. 25877 (template_tparameter::priv): Define new type. 25878 (template_tparameter::template_tparameter): Define this here to 25879 pimpl-ify template_tparameter. This constructor now takes the 25880 enclosing template. 25881 (class type_composition::priv): New type. 25882 (type_composition::{type_composition, get_composed_type, 25883 set_composed_type}): Define these here to pimpl-ify 25884 type_composition. The constructor now takes the enclosing 25885 template decl. 25886 (class function_tdecl::priv): Define new type. 25887 (function_tdecl::{function_tdecl, set_pattern, get_pattern, 25888 get_binding}): Define this here to pimpl-ify function_tdecl. 25889 (class class_tdecl::priv): Define this new type. 25890 (class_tdecl::class_tdecl): Define this here to pimpl-ify 25891 class_tdecl. 25892 (class_tdecl::set_pattern): Adjust to pimpl-ify. 25893 (class_tdecl::get_pattern): Define new pimpl-ified getter. 25894 * src/abg-reader.cc (build_function_tdecl, build_class_tdecl): 25895 Cleanup. Pass the enclosing template to the template parameters 25896 that are built. 25897 (build_type_tparameter, build_type_composition) 25898 (build_non_type_tparameter, build_template_tparameter) 25899 (build_template_parameter): Take the enclosing template 25900 declaration and pass it to the template parameter being created. 25901 * tests/data/test-read-write/test12.xml: Fix and Adjust. 25902 * tests/data/test-read-write/test13.xml: Likewise. 25903 259042014-11-06 Dodji Seketeli <dodji@redhat.com> 25905 25906 Style fix 25907 * include/abg-ir.h (class location): Remove useless white space. 25908 * src/abg-writer.cc (type_has_existing_id): Use type_base_sptr 25909 rather than shared_ptr<type_base>. 25910 (write_template_tparameter): Use template_tparameter_sptr rather 25911 than shared_ptr<template_tparameter>. 25912 259132014-11-05 Dodji Seketeli <dodji@redhat.com> 25914 25915 Pass -std=gnu++11 to the compiler when --enable-cxx11 for tests 25916 * tests/Makefile.am: Pass -std=gnu++11 to the compiler when 25917 --enable-cxx11 has been used. 25918 259192014-11-05 Dodji Seketeli <dodji@redhat.com> 25920 25921 Make the use of a C++-11 compiler optional 25922 * configure.ac: Define a new --enable-cxx11 switch to control the 25923 use of the C++-11 compiler. Define a WITH_CXX11 C macro and an 25924 automake ENABLE_CXX11 variable. 25925 * config.h.in: Initialize the new WITH_CXX11 C macro. 25926 * src/Makefile.am: Include the files coded in C++-11 only if the 25927 ENABLE_CXX11 automake variable is defined. 25928 * tests/Makefile.am: Likewise, build the runtestsvg test program 25929 only if C++-11 usage is enabled. 25930 * include/abg-diff-utils.h (class d_path_vec): Remove useless 25931 usage of the 'typename' keyword. 25932 * include/abg-fwd.h (is_enum_type): Renamed is_enum into this, 25933 because of a name clash with a tr1 function when not using C++-11. 25934 (is_pointer_type): Likewise, renamed is_pointer into this because 25935 of a name clash with a tr1 function when not using C++-11. 25936 * src/abg-comp-filter.cc (has_harmless_name_change): Adjust for 25937 the is_enum -> is_enum_type change. 25938 * src/abg-comparison.cc (type_suppression::suppresses_diff): 25939 Likewise. 25940 (class function_suppression::priv): Add a missing "class" keyword 25941 in friend declaration. 25942 (diff_context::diff_has_been_traversed) 25943 (diff_context::mark_diff_as_traversed): Do not use the C++-11 25944 specific type uintptr_t. 25945 * src/abg-dwarf-reader.cc (create_default_dwfl): Do not use 25946 designated initializers. Sigh. This is handy though. 25947 (expr_result::abs): Cast the argument of std::abs to avoid 25948 ambiguous call. 25949 (finish_member_function_reading): Adjust for the is_pointer -> 25950 is_pointer_type renaming. 25951 * src/abg-hash.cc (scope_decl::hash::operator) 25952 (class_decl::base_spec::hash::operator) 25953 (type_composition::hash::operator): Use std::tr1::hash string, 25954 rather than the C++-11 specific std::hash function. 25955 * src/abg-ini.cc (read_sections, write_sections): Make 25956 std::ifstream constructor take a const char* rather than a string. 25957 * src/abg-ir.cc (is_enum_type, is_pointer_type): Renamed is_enum 25958 into is_enum_type and is_pointer into is_pointer_type. 25959 * src/abg-writer.cc (write_translation_unit): Remove useless 25960 typename keyword. Make ofstream take a const char* rather than a 25961 string. 25962 (write_namespace_decl): Remove useless typename keyword. 25963 (write_corpus_to_native_xml_file): Make ofstream take a const 25964 char* rather than a string. 25965 * tests/test-abidiff.cc (main): Make ofstream take a const char* 25966 rather than a string. 25967 * tests/test-diff-dwarf.cc (main): Likewise. 25968 259692014-11-05 Dodji Seketeli <dodji@seketeli.org> 25970 25971 Remove some m4 auto-generated files from version control 25972 * m4/ltoptions.m4: Remove from version control. 25973 * m4/ltversion.m4: Remove from version control. 25974 * m4/lt~obsolete.m4: Remove from version control. 25975 259762014-11-03 Dodji Seketeli <dodji@redhat.com> 25977 25978 Add usage examples to the abidiff manual 25979 * doc/manuals/abidiff.rst: Add a usage example section along with 25980 some small and clean examples. 25981 259822014-11-01 Dodji Seketeli <dodji@redhat.com> 25983 25984 Fix the API doc string of the abigail::xml_writer namespace 25985 * src/abg-writer.cc: Fix the API doc of the xml_writer namespace. 25986 259872014-11-01 Dodji Seketeli <dodji@redhat.com> 25988 25989 Fix an apidoc typo 25990 * include/abg-comparison.h (class variable_suppression): Fix a 25991 typo in the doc string. 25992 259932014-11-01 Dodji Seketeli <dodji@redhat.com> 25994 25995 Update the manual for variable suppression concepts 25996 * doc/manuals/libabigail-concepts.rst: Add a section for variable 25997 suppression specification in the concepts part of the manual. 25998 259992014-11-01 Dodji Seketeli <dodji@redhat.com> 26000 26001 Fix some restructured text doc glitches in the fn suppression manual 26002 * doc/manuals/libabigail-concepts.rst: Fix quoting of the syntax 26003 of parameter specification string, for the function suppression 26004 concepts. 26005 260062014-11-01 Dodji Seketeli <dodji@redhat.com> 26007 26008 Cleanup the mainpage of the API doc 26009 * include/abg-fwd.h: Cleanup text of the API doc mainpage. 26010 260112014-11-01 Dodji Seketeli <dodji@redhat.com> 26012 26013 Make get_binary_load_address static 26014 * src/abg-dwarf-reader.cc (get_binary_load_address): Make this 26015 function static. 26016 260172014-11-01 Dodji Seketeli <dodji@redhat.com> 26018 26019 Initial support for variable suppressions 26020 * include/abg-comparison.h (variable_suppression_sptr) 26021 (variable_suppressions_type): New convenience typedefs. 26022 (class variable_suppression): Declare new type. 26023 * src/abg-comparison.cc (is_var_diff): New predicate. 26024 (read_variable_suppression): Define new static function. 26025 (class variable_suppression::priv): Define type for the private 26026 data of the variable_suppression type. 26027 (variable_suppression::{variable_suppression, 26028 ~variable_suppression, get_name, set_name, get_name_regex_str, 26029 set_name_regex_str, get_symbol_name, set_symbol_name, 26030 get_symbol_name_regex_str, set_symbol_name_regex_str, 26031 get_symbol_version, set_symbol_version, 26032 get_symbol_version_regex_str, set_symbol_version_regex_str, 26033 get_type_name, set_type_name, get_type_name_regex_str, 26034 set_type_name_regex_str, suppresses_diff}): Define new member 26035 functions for the variable_suppression type. 26036 * tests/data/test-diff-suppr/libtest7-var-suppr-v0.so: Add new 26037 test input. 26038 * tests/data/test-diff-suppr/libtest7-var-suppr-v1.so: Likewise. 26039 * tests/data/test-diff-suppr/test7-var-suppr-1.suppr: Likewise. 26040 * tests/data/test-diff-suppr/test7-var-suppr-2.suppr: Likewise. 26041 * tests/data/test-diff-suppr/test7-var-suppr-3.suppr: Likewise. 26042 * tests/data/test-diff-suppr/test7-var-suppr-4.suppr: Likewise. 26043 * tests/data/test-diff-suppr/test7-var-suppr-5.suppr: Likewise. 26044 * tests/data/test-diff-suppr/test7-var-suppr-6.suppr: Likewise. 26045 * tests/data/test-diff-suppr/test7-var-suppr-7.suppr: Likewise. 26046 * tests/data/test-diff-suppr/test7-var-suppr-8.suppr: Likewise. 26047 * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. 26048 * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. 26049 * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. 26050 * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. 26051 * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. 26052 * tests/data/test-diff-suppr/test7-var-suppr-report-5.txt: Likewise. 26053 * tests/data/test-diff-suppr/test7-var-suppr-report-6.txt: Likewise. 26054 * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. 26055 * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: 26056 Likewise. 26057 * tests/data/test-diff-suppr/test7-var-suppr-version-script: Likewise. 26058 * tests/data/test-diff-suppr/test7-var-suppr-v0.cc: Source code 26059 for the librairie above. 26060 * tests/data/test-diff-suppr/test7-var-suppr-v1.cc: Source code 26061 for the librairie above. 26062 * tests/Makefile.am: Add the new test input data to the source 26063 distribution. 26064 * tests/test-diff-suppr.cc: Update to make this harness to run 26065 over the new test input above. 26066 260672014-11-01 Dodji Seketeli <dodji@redhat.com> 26068 26069 Update the suppr-doc.txt file for variable suppressions 26070 * doc/suppr-doc.txt: Add the suppress_variable section example. 26071 260722014-11-01 Dodji Seketeli <dodji@redhat.com> 26073 26074 Make var_diff and function_decl_diff extend decl_diff_base 26075 * include/abg-comparison.h (class var_diff, class 26076 function_decl_diff): Make these types inherit the decl_diff_base 26077 class. This is like the fact that all kinds of diff inherit the 26078 type_diff_base class. 26079 * src/abg-comparison.cc (var_diff::var_diff) 26080 (function_decl_diff::function_decl_diff): Adjust to initialize the 26081 sub-object of decl_diff_base; 26082 (is_decl_diff): New predicate to know if a diff is about decls. 26083 (is_function_decl): New predicate to know if a diff is about 26084 function decls. 26085 (function_suppression::suppresses_diff): Adjust to use the new 26086 is_function_decl. 26087 260882014-11-01 Dodji Seketeli <dodji@redhat.com> 26089 26090 Fix logic of type suppression evaluation 26091 * include/abg-comparison.cc (type_suppression::suppresses_diff): 26092 Try to evaluate the "type_name_regexp" property only if the 26093 "type_name" is empty. 26094 260952014-11-01 Dodji Seketeli <dodji@redhat.com> 26096 26097 Remove useless functions from the comparison engine 26098 * include/abg-comparison.h (read_type_suppression): Remove this 26099 function declaration. 26100 * src/abg-comparison.cc (read_type_suppressions): Remove this 26101 static function definition. 26102 (read_function_suppressions): Remove this static function 26103 declaration. 26104 261052014-11-01 Dodji Seketeli <dodji@redhat.com> 26106 26107 Spit and polish variables presentation in diff report 26108 * src/abg-comparison.cc (corpus_diff::report): Show the full 26109 representation of the variable, rather than just its name. Also, 26110 show the new representation of the variable only if it has 26111 changed. 26112 * tests/data/test-diff-dwarf/test9-report.txt: Adjust test. 26113 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 26114 * tests/data/test-diff-filter/test15-1-report.txt: Likewise. 26115 261162014-11-01 Dodji Seketeli <dodji@redhat.com> 26117 26118 Fix various apidoc typos 26119 * include/abg-comparison.h (class function_suppression): Fix typo 26120 in the doc string. 26121 * src/abg-comparison.cc (is_type_diff, read_suppressions) 26122 (diff::reported_once, typedef_diff::report): Fix the doc string. 26123 261242014-11-01 Dodji Seketeli <dodji@redhat.com> 26125 26126 Fix regexp escaping section of manual 26127 * doc/manuals/libabigail-concepts.rst: Re-indent and fix some 26128 typos in the regexp escaping section of the manual. 26129 261302014-11-01 Dodji Seketeli <dodji@redhat.com> 26131 26132 Doxygen shouldn't extract doc for static functions or private types 26133 * doc/api/libabigail.doxy: Do not extract doc for static 26134 functions, local classes. 26135 261362014-11-01 Dodji Seketeli <dodji@redhat.com> 26137 26138 Update .gitignore 26139 * .gitignore: Ignore *~ emacs files. 26140 261412014-10-29 Dodji Seketeli <dodji@redhat.com> 26142 26143 Separate alias targets with a comma 26144 * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Separate 26145 alias targets by a comma. 26146 * tests/data/test-diff-dwarf/test18-alias-sym-v1.cc: Update test 26147 to add more than one alias to a given symbol. 26148 261492014-10-28 Dodji Seketeli <dodji@redhat.com> 26150 26151 Fix a typo in the manual about function suppressions 26152 * doc/manuals/libabigail-concepts.rst: Fix a typo. 26153 261542014-10-28 Dodji Seketeli <dodji@redhat.com> 26155 26156 Initial support for function suppressions 26157 * include/abg-comparison.h (enum visiting_kind): Change the 26158 meaning of this. It was to determine if traversal was to be done 26159 in a pre or post manner. But with the recent addition of 26160 diff_node_visitor::visit_{begin,end}() notifiers, the pre/post 26161 handling is taken care of in a different way. So now the meaning 26162 of this enum is changed to handle whether diff node children 26163 should be visited or not. So the enumerators are now 26164 DEFAULT_VISITING_KIND, and SKIP_CHILDREN_VISITING_KIND. And it's 26165 a bit-field. 26166 (operator{&,~}): Declare more bit manipulation operators for the 26167 enum visiting_kind. 26168 (function_suppression_sptr, function_suppressions_type): New 26169 typedefs. 26170 (function_suppression, function_suppression::parameter_spec): 26171 Declare new types. 26172 (read_function_suppressions): Declare new function. 26173 (diff_node_visitor::diff_node_visitor): Adjust for the enum 26174 visiting_kind change. Value-initialize the visiting_kind_ data 26175 member. 26176 * src/abg-comparison.cc (operator{&,~}): Define these operators 26177 for enum visiting_kind. 26178 (read_type_suppressions): Forward declare this static function. 26179 (read_function_suppression, read_parameter_spec_from_string): 26180 Define new static functions. 26181 (read_suppressions): Update to read function suppressions too, 26182 using the new read_function_suppression function above. 26183 (class function_suppression::parameter_spec::priv): Define new 26184 type. 26185 (function_suppression::parameter_spec::*): Define the member 26186 functions of the new function_suppression::parameter_spec type. 26187 (class function_suppression::priv): Define new type. 26188 (function_suppression::*): Define the member functions of the new 26189 function_suppression type. 26190 (diff::traverse): There is no more {PRE,POST}_VISITING_KIND 26191 enumerator. So nuke the code that was dealing with it. 26192 (redundancy_marking_visitor::skip_children_nodes_): New data 26193 member flag. 26194 (redundancy_marking_visitor::visit_begin): If the current diff 26195 node is not be reported (is filtered out), do not bother visit its 26196 children nodes for the purpose of marking redundant nodes. So use 26197 the new skip_children_nodes_ flag above to know we are in that case. 26198 (redundancy_marking_visitor::visit_end): Unset the new 26199 skip_children_nodes_ flag above when appropriate. 26200 * include/abg-fwd.h (is_function_decl): Declare new function. 26201 * include/abg-ir.h 26202 (function_type::get_parm_at_index_from_first_non_implicit_parm): 26203 Declare new member function. 26204 * src/abg-ir.cc (is_function_decl): Define new function. 26205 (function_type::get_parm_at_index_from_first_non_implicit_parm): 26206 Define new member function. 26207 * src/abg-comp-filter.cc (apply_filter): Adjust for the enum 26208 visiting_kind change. No need to set it for filters anymore 26209 * doc/suppr-doc.txt: Update examples of function suppression. 26210 * doc/manuals/libabigail-concepts.rst: Update the manual for the 26211 function suppression addition. 26212 * tests/data/test-diff-suppr/libtest5-fn-suppr-v0.so: New test input. 26213 * tests/data/test-diff-suppr/libtest5-fn-suppr-v1.so: New test input. 26214 * tests/data/test-diff-suppr/libtest6-fn-suppr-v0.so: New test input. 26215 * tests/data/test-diff-suppr/libtest6-fn-suppr-v1.so: New test input. 26216 * tests/data/test-diff-suppr/test5-fn-suppr-0.suppr: New test input. 26217 * tests/data/test-diff-suppr/test5-fn-suppr-1.suppr: New test input. 26218 * tests/data/test-diff-suppr/test5-fn-suppr-2.suppr: New test input. 26219 * tests/data/test-diff-suppr/test5-fn-suppr-3.suppr: New test input. 26220 * tests/data/test-diff-suppr/test5-fn-suppr-4.suppr: New test input. 26221 * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: New test input. 26222 * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: New test input. 26223 * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: New test input. 26224 * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: New test input. 26225 * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: New test input. 26226 * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: New test input. 26227 * tests/data/test-diff-suppr/test5-fn-suppr-v0.cc: Source code for 26228 new test input. 26229 * tests/data/test-diff-suppr/test5-fn-suppr-v1.cc: Source code for 26230 new test input. 26231 * tests/data/test-diff-suppr/test6-fn-suppr-0.suppr: New test input. 26232 * tests/data/test-diff-suppr/test6-fn-suppr-1.suppr: New test input. 26233 * tests/data/test-diff-suppr/test6-fn-suppr-2.suppr: New test input. 26234 * tests/data/test-diff-suppr/test6-fn-suppr-3.suppr: New test input. 26235 * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: New test input. 26236 * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: New test input. 26237 * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: New test input. 26238 * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: New test input. 26239 * tests/data/test-diff-suppr/test6-fn-suppr-report-4.txt: New test input. 26240 * tests/data/test-diff-suppr/test6-fn-suppr-v0.cc: Source code for 26241 new test input. 26242 * tests/data/test-diff-suppr/test6-fn-suppr-v1.cc: Source code for 26243 new test input. 26244 * tests/data/test-diff-suppr/test6-fn-suppr-version-script: New 26245 test input. 26246 * tests/Makefile.am: Add the new files above to source 26247 the distribution. 26248 * tests/test-diff-suppr.cc (in_out_specs): Add the test inputs 26249 above to the list of tests to be run by this harness. 26250 262512014-10-28 Dodji Seketeli <dodji@redhat.com> 26252 26253 Add missing virtual destructor in comparison engine code 26254 * include/abg-comparison.h (type_suppression::~type_suppression): 26255 Declare missing virtual destructor. 26256 * src/abg-comparison.cc (type_suppression::~type_suppression): 26257 Define missing virtual destructor. 26258 262592014-10-27 Dodji Seketeli <dodji@redhat.com> 26260 26261 Pimplify abigail::ir::function_type 26262 * include/abg-ir.h (function_type::priv_): Declare new data 26263 member. 26264 (function_type::<all the methods>): Move the inline methods out of 26265 line in src/abg-ir.cc. 26266 (function_type::{return_type_, parms_}): Move these ... 26267 * src/abg-ir.cc (function_type::priv::{return_type_, parms_}): 26268 ... Here. 26269 (struct function_type::priv): New type for the private data of 26270 function_type. 26271 (function_type::<all the methods>): Move the previously inline 26272 methods of function_type here. Adjust them to tap into priv_->* 26273 to get the private data members. 26274 262752014-10-27 Dodji Seketeli <dodji@redhat.com> 26276 26277 Light style fix 26278 * include/abg-ir.h (function_decl::get_type): Change the return 26279 type from shared_ptr<function_type> to function_type_sptr. 26280 262812014-10-27 Dodji Seketeli <dodji@redhat.com> 26282 26283 Allow white spaces in ini file property values 26284 * src/abg-ini.cc (read_context::char_is_property_value_char): New 26285 member function. 26286 (read_context::read_next_char): Fix typos. Allow escaping of '[' 26287 and ']'. 26288 (read_context::read_property_value): Use the new 26289 read_context::char_is_property_value_char above. 26290 262912014-10-27 Dodji Seketeli <dodji@redhat.com> 26292 26293 Fix typo in suppression specification manual 26294 * doc/manuals/libabigail-concepts.rst: Fix name -> name_regexp. 26295 262962014-10-22 Dodji Seketeli <dodji@redhat.com> 26297 26298 Support comparing symbols not referenced by debug info 26299 * doc/manuals/abidiff.rst: Adjust intro to mention that w/o debug 26300 info, abidiff now works but just report about added/removed 26301 symbols. Add documentation about the new 26302 --no-unreferenced-symbols option. 26303 * include/abg-comparison.h (string_elf_symbol_map): New typedef. 26304 (diff_context::show_symbols_unreferenced_by_debug_info): Declare 26305 new accessors. 26306 * src/abg-comparison.cc 26307 (diff_context::priv::show_syms_unreferenced_by_di_): New data 26308 member. 26309 (diff_context::priv::priv): Adjust. 26310 (diff_context::show_symbols_unreferenced_by_debug_info): Implement 26311 these accessors. 26312 (corpus_diff::priv::{unrefed_fn_syms_edit_script_, 26313 unrefed_var_syms_edit_script_, added_unrefed_fn_syms_, 26314 deleted_unrefed_fn_syms_, added_unrefed_var_syms_, 26315 deleted_unrefed_var_syms_}): New data members. 26316 (corpus_diff::priv::diff_stats::{num_func_syms_removed, 26317 num_func_syms_added, num_var_syms_removed, num_var_syms_added}): 26318 New data members. 26319 (corpus_diff::priv::diff_stats::diff_stats): Adjust. 26320 (corpus_diff::ensure_lookup_tables_populated): Populate lookup 26321 tables for added/removed symbols that are not referenced by any 26322 debug info. 26323 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Compute 26324 stats for the added/removed symbols not referenced by any debug 26325 info. 26326 (corpus_diff::priv::emit_diff_stats): Emit stats about 26327 added/removed symbols that are not referenced by any debug info. 26328 (corpus_diff::length): Adjust to take in account added/removed 26329 symbols not referenced by any debug info. 26330 (show_linkage_name_and_aliases): New static function. 26331 (corpus_diff::report): When emitting a symbol name, emit its 26332 version too, and tell if it aliases other symbols. Avoid emitted 26333 extra new lines. Report added/removed symbols not referenced by 26334 any debug info. 26335 (compute_diff): In the overload for corpus_sptr, compute the diffs 26336 for symbols not referenced by debug info. 26337 * include/abg-corpus.h 26338 (corpus::get_unreferenced_{function,variable}_symbols): Declare 26339 new member functions. 26340 * src/abg-corpus.cc (corpus_priv::{unrefed_fun_symbols, 26341 unrefed_var_symbols}): New data members. 26342 (corpus_priv::build_unreferenced_symbols_tables): Define new 26343 member function. 26344 (struct comp_elf_symbols_functor): New functor. 26345 (corpus::is_empty): Adjust to take in account added/removed 26346 symbols not referenced by debug info. 26347 (corpus::{get_unreferenced_function_symbols, 26348 corpus::get_unreferenced_variable_symbols}): Define these 26349 accessors. 26350 * include/abg-dwarf-reader.h (enum status): Transform this into 26351 bitfields. Add a STATUS_UNKNOWN value that has the value 0. 26352 (operator|(status, status), operator&(status, status)) 26353 (operator|=(status&, status), operator&=(status, status)): New 26354 bit-wise operators to manipulate instances of the status bit-field. 26355 * src/abg-dwarf-reader.cc (get_version_for_symbol): Fix this to 26356 avoid returning garbage version sometimes. 26357 (read_debug_info_into_corpus): Fix this to return a non-null but 26358 empty corpus_sptr when there is no debug info available. 26359 (operator|(status, status), operator&(status, status)) 26360 (operator|=(status&, status), operator&=(status, status)): Define 26361 these new bitwise operators to manipulate instances of the status 26362 bit-field. 26363 (read_corpus_from_elf): Now that the abigail::dwarf_reader::status 26364 is a bit-field, set it to reflect if debug info and/or symbol 26365 tables have been found. Do not bail out if debug info hasn't been 26366 found. Rather, keep going, and go look for symbols-only; this is 26367 a kind of operating in degraded mode. 26368 * include/abg-ir.h (elf_symbol::get_aliases_id_string): Add a flag 26369 that says if the current instance of elf_symbol should be included 26370 in the list of aliases or not. 26371 * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Define it. 26372 * tests/data/test-diff-dwarf/test16-syms-only-v{0,1}.o: New test 26373 input. 26374 * tools/abidiff.cc 26375 (options::show_symbols_not_referenced_by_debug_info): New data 26376 member. 26377 (options:options): Adjust. 26378 (display_usage): Add an info string for the new 26379 --no-unreferenced-symbols command line option. 26380 (parse_command_line): Parse the new --no-unreferenced-symbols 26381 command line. 26382 (set_diff_context_from_opts): Set the diff_context according to 26383 the presence of --no-unreferenced-symbols. 26384 (main): Adjust for the fact that abigail::dwarf_reader::status is 26385 now a bit-field. 26386 * tools/abilint.cc (main): Adjust for the fact that 26387 abigail::dwarf_reader::status is now a bit-field.. 26388 (): 26389 * tests/data/test-diff-dwarf/test16-syms-only-report.txt: New test 26390 reference output. 26391 * tests/data/test-diff-dwarf/test16-syms-only-v{0,1}.cc: Source code 26392 for new test input. 26393 * tests/data/test-diff-dwarf/test17-non-refed-syms-v{0,1}.o: New 26394 test input. 26395 * tests/data/test-diff-dwarf/test17-non-refed-syms-v{0,1}.cc: New 26396 source code for test input. 26397 * tests/data/test-diff-dwarf/libtest18-alias-sym-v{0,1}.so: New 26398 test input. 26399 * tests/data/test-diff-dwarf/test18-alias-sym-report-0.txt: 26400 Reference output for new test input. 26401 * tests/data/test-diff-dwarf/test18-alias-sym-v{0,1}.cc: Source 26402 code for new test input. 26403 * tests/data/test-diff-dwarf/test18-alias-sym-version-script: 26404 Source code for new test input. 26405 * tests/Makefile.am: Add the new test materials to the source 26406 distribution. 26407 * tests/test-diff-dwarf.cc(in_out_specs): Add the new input tests 26408 above to the array of tests to run by this harness. 26409 (main): Emit empty reports for empty resulting diffs. 26410 * tests/data/test-diff-dwarf/test{0,8,9,12,14-inline-report,}-report.txt: 26411 Adjust. 26412 * tests/data/test-diff-filter/test{0,01,2,4,5,7,8,9,10,12,13,15-0,15-1}-report.txt: 26413 Likewise. 26414 * tests/data/test-diff-filter/test{19-enum,20-inline,}-report-0.txt: 26415 Likewise. 26416 * tests/data/test-diff-suppr/test0-type-suppr-report-{1,2}.txt: 26417 Likewise. 26418 * tests/data/test-diff-suppr/test{1,2}-typedef-suppr-report-1.txt: 26419 Likewise. 26420 264212014-10-22 Dodji Seketeli <dodji@redhat.com> 26422 26423 Allow comparison of shared_ptr of things 26424 * include/abg-diff-utils.h: Adjust copyright years. 26425 (deep_ptr_eq_functor::operator()(const shared_ptr<T>, const 26426 shared_ptr<T>)): New comparison operator. 26427 264282014-10-17 Dodji Seketeli <dodji@redhat.com> 26429 26430 Use the "standard" equality operator when comparing variables 26431 * src/abg-comparison.cc (compute_diff): In the overload for 26432 corpus_sptr, use the diff_utils::deep_ptr_eq_functor that is used 26433 to compare functions too, rather than the ad-hoc early struct 26434 var_eq_type we were using until now. 26435 264362014-10-16 Dodji Seketeli <dodji@redhat.com> 26437 26438 Yet another fix to the DWARF method "static-ness" detection heuristic 26439 * include/abg-fwd.h (is_pointer, is_qualified_type): Declare new 26440 functions. 26441 * src/abg-ir.cc (is_pointer, is_qualified_type): Implement these 26442 new functions. 26443 * src/abg-dwarf-reader.cc (finish_member_function_reading): 26444 Sometimes, the this pointer of a non-static method can point to a 26445 *qualified* version of its containing type. I am seeing that when 26446 comparing libstdc++.so from RHEL 6.5 and RHEL 7. Take that in 26447 account when trying to detect that the first parameter of a member 26448 function is the this pointer, and thus detect that the function is 26449 a non static member function. 26450 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: 26451 New test input. 26452 * tests/data/test-read-dwarf/test8-qualified-this-pointer.so: New 26453 test input. 26454 * tests/data/test-read-dwarf/test8-qualified-this-pointer.cc: 26455 Source code of new test input. 26456 * tests/test-read-dwarf.cc: Update copyright year. 26457 (in_out_spec): Add the new test inputs to this array, so that this 26458 test harness runs on them. 26459 * tests/Makefile.am: Add the new test inputs to the source 26460 distribution. 26461 264622014-10-16 Dodji Seketeli <dodji@redhat.com> 26463 26464 Avoid infinite loops in the comparison code for classes 26465 * src/abg-ir.cc (equals): In the overload for classes, make sure 26466 to store the name of the lhs of the class and the rhs into the 26467 lhs. Also, when we bail out because we detect that there is a 26468 comparison underway, do *not* unmark the current class as not being 26469 involved in the comparison. Also, break at the first lhs virtual 26470 member function that is different from the rhs counter part. 26471 264722014-10-15 Dodji Seketeli <dodji@redhat.com> 26473 26474 Update the manual for the suppression specification initial work 26475 * doc/manuals/abidiff.rst: Add documentation for the new 26476 --suppressions command line switch. 26477 (--harmless, --harmful): Refer to the new "concepts" section 26478 below, where harmful/harmless concepts are now explained. 26479 (Notes): Move the content of the notes section where 26480 harmful/harmless concepts were explained, to the newly created 26481 'Concepts' section. 26482 * doc/manuals/index.rst: Limit the depth of the table of content 26483 to 2. Add the new libabigail-concepts.rst stuff in here. Adjust 26484 for the renaming of tools.rst to libabigail-tools.rst. 26485 * doc/manuals/libabigail-concepts.rst: New file. 26486 264872014-10-13 Dodji Seketeli <dodji@redhat.com> 26488 26489 Properly propagate {REDUNDANT, SUPPRESSED}_CATEGORY wrt local changes 26490 * src/abg-comparison.cc 26491 (suppression_categorization_visitor::visit_end): If a diff node 26492 carries local changes, then, even if all of its children node have 26493 been suppressed, this diff node shall not be categorized as 26494 suppressed by way of propagation. 26495 (redundancy_marking_visitor::visit_end): If a diff node carries 26496 local changes, then, even if all of its children nodes are 26497 redundant, this diff node shall not be categorized as being 26498 redundant by way of propagation. 26499 * tests/data/test-diff-suppr/libtest4-local-suppr-v{0,1}.so: New test 26500 inputs. 26501 * tests/data/test-diff-suppr/test4-local-suppr-0.suppr: Likewise. 26502 * tests/data/test-diff-suppr/test4-local-suppr-report-{0,1}.txt: 26503 Likewise. 26504 * tests/data/test-diff-suppr/test4-local-suppr-v{0,1}.{c,h}: 26505 Source code of the new tests inputs. 26506 * tests/Makefile.am: Add the new test material to the source 26507 distribution. 26508 * tests/test-diff-suppr.cc (in_out_spec): Run this test harness 26509 over the new test input above. 26510 265112014-10-13 Dodji Seketeli <dodji@redhat.com> 26512 26513 Gain ability know if a diff node has local changes 26514 * include/abg-comparison.h (diff::has_local_changes): Add new pure 26515 interface. 26516 ({decl_diff_base, type_diff_base, distinct_type_diff, var_diff, 26517 pointer_diff, reference_diff, array_diff, qualified_type_diff, 26518 enum_diff, class_diff, base_diff, scope_diff, function_decl_diff, 26519 type_decl_diff, typedef_diff, 26520 translation_unit_diff}::has_local_changes): Declare the 26521 implementation of the pure interface above. 26522 * src/abg-comparison.cc ({decl_diff_base, type_diff_base, 26523 distinct_type_diff, var_diff, pointer_diff, reference_diff, 26524 array_diff, qualified_type_diff, enum_diff, class_diff, base_diff, 26525 scope_diff, function_decl_diff, type_decl_diff, typedef_diff, 26526 translation_unit_diff}::has_local_changes): Define the 26527 implementation of the pure interface above. 26528 265292014-10-13 Dodji Seketeli <dodji@redhat.com> 26530 26531 Write comparison functions that hint at the kind of changes they see 26532 * include/abg-ir.h (enum change_kind): Declare new enum. 26533 (operator|(change_kind, change_kind), operator&(change_kind, 26534 change_kind), operator|=(change_kind&, change_kind)): Declare new bit-wise 26535 operators for the new enum change_kind. 26536 (equals): Declare this new comparison function for decl_base, 26537 scope_decl, type_base, type_decl, scope_type_decl, 26538 qualified_type_def, pointer_type_def, reference_type_def, 26539 array_type_def, enum_type_decl, typedef_decl, var_decl, 26540 function_decl, function_type, class_decl, and 26541 class_decl::base_spec. 26542 (class_decl::base_spec::operator(const decl_base&)): Declare new 26543 equality operator. 26544 * src/abg-ir.cc (operator|(change_kind l, change_kind r)) 26545 (operator&(change_kind l, change_kind r), operator|=(change_kind& 26546 l, change_kind r), operator&=(change_kind& l, change_kind r)): 26547 Define these new operators. 26548 (equals): Define this new comparison function for decl_base, 26549 scope_decl, type_base, type_decl, scope_type_decl, 26550 qualified_type_def, pointer_type_def, reference_type_def, 26551 array_type_def, enum_type_decl, typedef_decl, var_decl, 26552 function_decl, function_type, class_decl, and 26553 class_decl::base_spec. 26554 ({decl_base, scope_decl, type_base, type_decl, scope_type_decl, 26555 qualified_type_def, pointer_type_def, reference_type_def, 26556 array_type_def, enum_type_decl, typedef_decl, var_decl, 26557 function_decl, function_type, class_decl, 26558 class_decl::base_spec}::operator==): Re-write these comparison 26559 operators in terms of their relevant equal() functions. 26560 265612014-09-22 Dodji Seketeli <dodji@redhat.com> 26562 26563 Fix struct type kind suppression support 26564 * src/abg-comparison.cc (type_suppression::suppresses_diff): Do 26565 not crash on diff nodes that are not about struct/classes, when 26566 "type_kind = struct" has been specified. 26567 * tests/data/test-diff-suppr/test2-struct-suppr-{0,1}.suppr: New test input. 26568 * tests/data/test-diff-suppr/test2-struct-suppr-report-{0,1}.txt: 26569 Likewise. 26570 * tests/data/test-diff-suppr/test2-struct-suppr-v{0,1}.o: Likewise 26571 * tests/data/test-diff-suppr/test2-struct-suppr-v{1,0}.cc: Source code 26572 for binary test input. 26573 * tests/test-diff-suppr.cc (in_out_spec): Run this harness on the 26574 new test input above. 26575 * tests/Makefile.am: Add the new test input files to source 26576 distribution. 26577 265782014-09-22 Dodji Seketeli <dodji@redhat.com> 26579 26580 Replace is_typedef by type_kind property in type suppressions 26581 * doc/suppr-doc.txt: Add type_kind property "documentation" in the 26582 type suppression. 26583 * include/abg-comparison.h (type_suppression::type_kind): New 26584 enum. 26585 (type_suppression::{get_consider_typedefness, 26586 set_consider_typedefness, get_is_typedef, set_is_typedef}): 26587 Remove. 26588 (type_suppression::{get_consider_type_kind, 26589 set_consider_type_kind, get_type_kind, set_type_kind}): Declare 26590 new methods. 26591 * Include/abg-fwd.h (is_type_decl): Declare new function. 26592 (is_enum): Declare new overload that takes a type_base_sptr. 26593 * src/abg-comparison.cc 26594 (type_suppression::priv::{consider_typedefness_, is_typedef_}): 26595 Remove these data members. 26596 (type_suppression::priv::{consider_type_kind_, type_kind_}): New 26597 data members. 26598 (type_suppression::priv::priv): Adjust. 26599 (type_suppression::{get_consider_typedefness, 26600 set_consider_typedefness, get_is_typedef, set_is_typedef}): Remove 26601 these member functions. 26602 (type_suppression::{get_consider_type_kind, 26603 set_consider_type_kind, get_type_kind, set_type_kind}): Define 26604 these new member functions. 26605 (type_suppression::suppresses_diff): Adjust to consider the kind 26606 of types more generally than just considering typedef-ness. 26607 (read_type_kind_string): New static function. 26608 (read_type_suppression): Use the above to parse the value of the 26609 new type_kind property. Adjust the creation of the resulting 26610 type_suppression object. 26611 * src/abg-ir.cc (is_type_decl): Define new function. 26612 * tests/data/test-diff-suppr/test1-typedef-suppr-0.suppr: Adjust. 26613 * tests/data/test-diff-suppr/test1-typedef-suppr-1.suppr: Adjust. 26614 266152014-09-19 Dodji Seketeli <dodji@redhat.com> 26616 26617 Initial support for type suppressions 26618 * include/abg-comparison.h (diff_category::SUPPRESSED_CATEGORY): 26619 New enumerator. 26620 (diff_category::{SIZE_OR_OFFSET_CHANGE_CATEGORY, 26621 VIRTUAL_MEMBER_CHANGE_CATEGORY): Update the enumerator values for 26622 these. 26623 (diff::EVERYTHING_CATEGORY): Adjust. 26624 (suppression_base, type_suppression): Declare new types. 26625 (suppression_ptr, suppressions_type, type_suppression_sptr) 26626 (type_suppressions_type): New typedefs. 26627 (read_type_suppressions, read_suppressions): Declare new 26628 functions. 26629 (diff_context::{suppressions, add_suppression, add_suppressions}): 26630 Declare new methods. 26631 (diff::is_suppressed): Declare new member function. 26632 (apply_suppressions): Declare new function & overloads. 26633 * src/abg-comparison.cc (is_type_diff): Define new static 26634 function. 26635 ({suppression_base, type_suppression}::priv): Define new types. 26636 ({suppression_base, type_suppression}::*): Define the methods of the new 26637 suppression_base, type_suppressions types. 26638 (read_type_suppression, read_type_suppressions, read_suppressions) 26639 (read_type_suppressions): Define new static functions. 26640 (diff_context::priv::supprssions_): New data member. 26641 (diff_context::{suppressions, add_suppression, add_suppressions}): 26642 New methods. 26643 (diff::is_filtered_out): Consider that a diff node that is in the 26644 SUPPRESSED_CATEGORY is filtered out. 26645 (diff::is_suppressed): Define new member function. 26646 (operator<<(ostream& o, diff_category c)): Support the 26647 SUPPRESSED_CATEGORY category. 26648 (corpus_diff::report): Apply suppressions before reporting 26649 anything. 26650 (category_propagation_visitor::visit_end): Do not propagate 26651 SUPPRESSED_CATEGORY. This is just like what we do for 26652 REDUNDANT_CATEGORY. 26653 (struct suppression_categorization_visitor): New visitor. 26654 (apply_suppressions): Define function & overloads. 26655 * include/abg-ini.h (config::section::find_property): New method. 26656 (config::section): Fix end of class comment. 26657 * src/abg-ini.cc (config::section::find_property): Define new 26658 method. 26659 * tests/data/test-diff-suppr/test0-type-suppr-{0,1,2}.suppr: New 26660 test input files. 26661 * tests/data/test-diff-suppr/test0-type-suppr-report-{0,1,2,3}.txt: 26662 Likewise. 26663 * tests/data/test-diff-suppr/test0-type-suppr-v{0,1}.o: Likewise. 26664 * tests/data/test-diff-suppr/test0-type-suppr-v{0,1}.cc: Source code 26665 for new test input. 26666 * tests/data/test-diff-suppr/test1-typedef-suppr-v{0,1}.o: New test 26667 input files. 26668 * tests/data/test-diff-suppr/test1-typedef-suppr.h: Source code 26669 for new test input files. 26670 * tests/data/test-diff-suppr/test1-typedef-suppr-v{0,1}.c: Likewise 26671 * tests/data/test-diff-suppr/test1-typedef-suppr-{0,1}.suppr: New 26672 test input files. 26673 * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. 26674 * tests/data/test-diff-suppr/test1-typedef-suppr-report-1.txt: Likewise. 26675 * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. 26676 * tests/test-diff-suppr.cc: New test harness to run type suppression tests 26677 using the input files above. 26678 * tests/data/test-diff-suppr/test3-struct-suppr-0.suppr: New test input. 26679 * tests/data/test-diff-suppr/test3-struct-suppr-1.suppr: Likewise. 26680 * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. 26681 * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. 26682 * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. 26683 * tests/data/test-diff-suppr/test3-struct-suppr-v0.cc: Likewise. 26684 * tests/data/test-diff-suppr/test3-struct-suppr-v0.o: Likewise. 26685 * tests/data/test-diff-suppr/test3-struct-suppr-v1.cc: Likewise. 26686 * tests/data/test-diff-suppr/test3-struct-suppr-v1.o: Likewise. 26687 * tests/Makefile.am: Build the new runtestdiffsuppr test harness 26688 from the test-diff-filter.cc file. Add the new test files to the 26689 build system and source distribution. 26690 * tools/bidiff.cc (options::suppressions): New data member. 26691 (display_usage): Add a help string for the new 26692 --suppressions command line switch. 26693 (parse_command_line): Parse the --suppressions command line 26694 switch. 26695 (set_diff_context_from_opts): Read the suppressions provided by 26696 the --suppression command line switch and stuff them into the diff 26697 context. 26698 266992014-09-19 Dodji Seketeli <dodji@redhat.com> 26700 26701 Make all type diff types extend new type_diff_base type 26702 * include/abg-comparison.h (type_diff_base, decl_diff_base): New 26703 types. 26704 (type_diff_base_sptr): New typedef. 26705 (pointer_diff, reference_diff, array_diff, qualified_type_diff) 26706 (enum_diff, class_diff, type_decl_diff, typedef_diff): Make this 26707 extend the new type_diff_base. 26708 * src/abg-comparison.cc (type_diff_base::priv, type_diff_base): 26709 Define these new types and their methods. 26710 (pointer_diff::pointer_diff, array_diff::array_diff) 26711 (reference_diff::reference_diff) 26712 (qualified_type_diff::qualified_type_diff, enum_diff::enum_diff) 26713 (class_diff::class_diff, type_decl_diff::type_decl_diff) 26714 (typedef_diff::typedef_diff): Adjust. 26715 267162014-09-18 Dodji Seketeli <dodji@redhat.com> 26717 26718 Rename abigail::ini::config::section_vector to sections_type 26719 * include/abg-ini.h (abigail::ini::config::sections_type): Renamed 26720 section_vector into this. 26721 (config::{get_sections, set_sections, read_sections, 26722 write_sections}): Adjust. 26723 * src/abg-ini.cc (config::priv::sections_): Adjust. 26724 (config::priv::priv): Likewise. 26725 (config::{config, get_sections}): Likewise. 26726 (read_sections, read_config, write_sections): Likewise. 26727 267282014-09-08 Dodji Seketeli <dodji@redhat.com> 26729 26730 Implement the abigail::ini::config abstraction 26731 * include/abg-ini.h (config::config): Add an overload that take a 26732 path and sections. 26733 (config::{get,set}_sections): New accessors. 26734 (read_sections): Rename the previous read_config() functions into 26735 these. 26736 (read_config): Add these function declarations to really act on 26737 instances of abigail::ini::config. 26738 (write_section): Rename the previous write_config functions into 26739 these. 26740 (write_config): Add these function declarations to really act on 26741 instances of abigail::ini::config. 26742 * src/abg-ini.cc (class config::priv): Implement this. 26743 (config::{config, ~config, get_path, set_path, get_sections, 26744 set_sections}): Define these new methods. 26745 (read_sections): Rename the former read_config into this. 26746 (read_config): Add this function definitions to really act on 26747 instances of abigail::ini::config. 26748 (write_sections): Rename the former write_config into this. 26749 (write_config):: Add this function definitions to really act on 26750 instances of abigail::ini::config. 26751 * tools/binilint.cc (main): Adjust. 26752 267532014-09-05 Dodji Seketeli <dodji@redhat.com> 26754 26755 Initial support of ini-style file parsing 26756 * include/abg-ini.h: New file. 26757 * include/Makefile.am: Add include/abg-ini.h to the source 26758 distribution. 26759 * src/abg-ini.cc: New file. 26760 * src/Makefile.am: Add src/abg-ini.cc to the source distribution. 26761 * tools/binilint.cc: New testing tool. 26762 * tools/Makefile.am: Add tools/binilint.cc to the source distribution. 26763 267642014-09-03 Dodji Seketeli <dodji@redhat.com> 26765 26766 Initial examples of suppression list specifications 26767 * doc/suppr-doc.txt: New file. 26768 267692014-10-11 Dodji Seketeli <dodji@redhat.com> 26770 26771 Put IR artifacts in the abigail::ir namespace 26772 * include/abg-fwd.h: Wrap IR artifacts into abigail::ir namespace. 26773 Inject that new abigail::ir namespace into the abigail namespace. 26774 * include/abg-ir.h: Wrap IR artifacts into abigail::ir namespace. 26775 (function_decl::parameter::get_type_name): Adjust the call to 26776 abigail::get_type_name. It's now a call to 26777 abigail::ir::get_type_name. 26778 * src/abg-ir.cc: Wrap IR artifacts into abigail::ir namespace. 26779 * include/abg-traverse.h: Wrap the ir traversing artifact into the 26780 abigail::ir namespace too. 26781 * src/abg-traverse.cc: Adjust. 26782 * include/abg-corpus.h: Wrap corpus type stuff into abigail::ir. 26783 * include/abg-dwarf-reader.h: Inject namespace abigail::ir stuff 26784 into the abigail::dwarf_reader namespace. 26785 * include/abg-reader.h: Inject namespace abigail::ir stuff into 26786 the abigail::xml_reader namespace. 26787 * src/abg-reader.cc: Adjust. 26788 * include/abg-writer.h: Inject namespace abigail::ir stuff into 26789 the abigail::xml_writer namespace. 26790 * src/abg-writer.cc: Inject namespace abigail::ir stuff into 26791 abigail namespace here too. 26792 * src/abg-hash.cc: Inject the abigail::ir namespace into the 26793 abigail namespace. 26794 * tools/abg-tools-utils.cc: Adjust for the injection of 26795 abigail::function_decl. It's now abigail::ir::function_decl. 26796 267972014-10-13 Dodji Seketeli <dodji@redhat.com> 26798 26799 Misc style cleanups 26800 * src/abg-comparison.cc: ({pointer_diff, reference_diff}::length): 26801 Add some vertical spaces here. 26802 268032014-10-13 Dodji Seketeli <dodji@redhat.com> 26804 26805 constify dm_context_rel::operator== 26806 * include/abg-ir.h (dm_context_rel::operator==): Make this const. 26807 268082014-10-13 Dodji Seketeli <dodji@redhat.com> 26809 26810 A distinct_diff node has no children node 26811 * src/abg-comparison.cc (distinct_diff::chain_into_hierarchy): Do 26812 not append any children node here. 26813 268142014-10-13 Dodji Seketeli <dodji@redhat.com> 26815 26816 Remove useless redundant_filter 26817 * include/abg-comp-filter.h (class redundant_filter): Remove this 26818 now useless type declaration 26819 * src/abg-comparison.cc (filtering::redundant_filter::visit): 26820 Remove this useless member function definition. 26821 268222014-10-10 Dodji Seketeli <dodji@redhat.com> 26823 26824 Sort diff reports about function parameters by their indexes 26825 * include/abg-comparison.h (changed_parms_type): New convenience 26826 typedef. 26827 * src/abg-comparison.cc (struct changed_parm_comp): New comparison 26828 functor. 26829 (sort_changed_parm_map): New sorting function. 26830 (function_decl_diff::report): Use the new sort_changed_parm_map to 26831 sort the diffs for function parameters by their indexes. 26832 268332014-10-10 Dodji Seketeli <dodji@redhat.com> 26834 26835 Don't be too eager to use distinct_diff 26836 * src/abg-comparison.cc (try_to_diff): For this to actually 26837 select a diff kind, the two diff subject must be of type 26838 'DiffType'. 26839 (compute_diff_for_types, compute_diff_for_decls): Use 26840 distinct_diff in last resort. 26841 268422014-10-10 Dodji Seketeli <dodji@redhat.com> 26843 26844 Implement generic diff tree walking and port categorization over it 26845 * include/abg-comp-filter.h (apply_filter): Declare new overload 26846 that takes a corpus_diff_sptr ... 26847 * src/abg-comp-filter.cc (apply_filter): ... and define it. On 26848 the existing overload for diff_sptr, make sure to traverse all 26849 diff nodes, even those that have already been traversed. 26850 * include/abg-comparison.h (enum diff_category): Remove 26851 NOT_REDUNDANT_CATEGORY, add REDUNDANT_CATEGORY. 26852 (operator&=, +operator<<): Declare new operators for enum diff_category. 26853 (diff_context::{forbid_traversing_a_node_twice, 26854 traversing_a_node_twice_is_forbidden): 26855 (diff_context::categorizing_redundancy): Remove this declaration. 26856 (diff_context::maybe_apply_filters): Declare a new overload that 26857 takes a corpus_diff_sptr. And a take a new flag that says if it 26858 should visit all nodes including those that have already been 26859 visited. 26860 (diff::priv_): Make this data member protected. 26861 (diff::{begin_traversing, is_traversing, end_traversing, 26862 finish_diff_type, children_nodes, append_child_node, 26863 get_pretty_representation, chain_into_hierarchy, traverse}): 26864 Declare new member functions. 26865 (distinct_diff::{finish_diff_type, get_pretty_representation, 26866 chain_into_hierarchy}): Likewise. 26867 (distinct_diff::traverse): Remove. 26868 (pointer_diff::pointer_diff): Take the underlying type diff in 26869 parameter. 26870 (pointer_diff::{finish_diff_type, get_pretty_representation, 26871 chain_into_hierarchy}): Declare new member functions. 26872 (pointer_diff::traverse): Remove. 26873 (reference_type_def::reference_type_def): Take the underlying type 26874 diff in parameter. 26875 ({array_type_def, reference_type_def}::{finish_diff_type, 26876 get_pretty_representation, chain_into_hierarchy}): Declare new 26877 member functions. 26878 ({array_type_diff, reference_type_def}::traverse): Remove. 26879 (qualified_type_diff::qualified_type_diff): Take the underlying 26880 type diff in parameter. 26881 ({enum_diff, qualified_type_diff, class_diff}::{finish_diff_type, 26882 get_pretty_representation, chain_into_hierarchy}): Declare new 26883 member functions. 26884 ({enum_diff, qualified_type_diff, class_diff}::traverse): Remove. 26885 (is_class_diff): Declare new function. 26886 (base_diff::base_diff): Take the underlying type diff in 26887 parameter. 26888 ({scope_diff, base_diff}::{finish_diff_type, get_pretty_representation, 26889 chain_into_hierarchy}): Declare new member functions. 26890 ({scope_diff, base_diff}::traverse): Remove. 26891 (function_decl_diff::function_decl_diff): Take the return type 26892 diff as parameter. 26893 ({function_decl_diff, type_decl_diff}::{finish_diff_type, 26894 get_pretty_representation, chain_into_hierarchy}): Declare new 26895 member functions. 26896 ({function_decl_diff, type_decl_diff}::traverse): Remove. 26897 (typedef_diff::typedef_diff): Take the underlying type diff as 26898 parameter. 26899 (typedef::{finish_diff_type, get_pretty_representation, 26900 chain_into_hierarchy}): Declare new member functions. 26901 ({typedef, translation_unit_diff}::traverse): Remove member 26902 function. 26903 (corpus_diff::{finish_diff_type, children_nodes, 26904 append_child_node, changed_variables, get_pretty_representation, 26905 chain_into_hierarchy}): Declare new member functions. 26906 (class diff_node_visitor::{visit_begin, visit_end}): Declare new 26907 member functions. 26908 (propagate_categories, print_diff_tree, categorizing_redundancy) 26909 (clear_redundancy_categorization, apply_filters): New functions 26910 and function overloads. 26911 * src/abg-comparison.cc (TRY_PRE_VISIT, TRY_PRE_VISIT_CLASS_DIFF) 26912 (TRY_POST_VISIT, TRY_POST_VISIT_CLASS_DIFF) 26913 (CATEGORIZE_REDUNDANCY_FROM_CHILD_NODE) 26914 (UPDATE_REDUNDANCY_CATEGORIZATION_FROM_NODE_SUBTREE) 26915 (TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY) 26916 (TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY) 26917 (TRAVERSE_MEM_FN_DIFF_NODE_AND_PROPAGATE_CATEGORY) 26918 (ENSURE_DIFF_NODE_TRAVERSED_ONCE) 26919 (ENSURE_MEM_DIFF_NODE_TRAVERSED_ONCE): Remove these macros. 26920 Hurrah. 26921 (diff_context::priv::categorizing_redundancy_): Remove. 26922 (diff_context::priv::forbid_traversing_a_node_twice_): Add new 26923 data member. 26924 (diff_context::priv::priv): Adjust. 26925 (diff_context::{forbid_traversing_a_node_twice, 26926 traversing_a_node_twice_is_forbidden}): Define new member 26927 functions. 26928 (diff_context::maybe_apply_filters): Once filters are applied (and 26929 categories are set to the relevant diff tree nodes, run a pass 26930 over the diff tree to propagate the categories to the relevant 26931 diff tree parent nodes. Add an overload for corpus_diff_sptr. 26932 (diff_context::categorizing_redundancy): Remove member function. 26933 (diff_context::maybe_apply_filters): Define a new overload for 26934 corpus_diff_sptr 26935 (struct diff::priv::{finished_, traversing_, children_, 26936 pretty_representation_}): New data members. 26937 (diff::priv::priv): Adjust. 26938 (diff::{begin_traversing, is_traversing, end_traversing, 26939 finish_diff_type, children_nodes, append_child_node, traverse, 26940 set_category, get_pretty_representation, chain_into_hierarchy}): 26941 Define new member functions. 26942 (diff::is_filtered_out): Do not refer to NOT_REDUNDANT_CATEGORY 26943 anymore. Rather, use the new REDUNDANT_CATEGORY. 26944 ({distinct_diff, var_diff, pointer_diff, array_diff, 26945 reference_diff, qualified_type_diff, enum_diff, class_diff, 26946 base_diff, scope_diff, function_decl_diff, type_decl_diff, 26947 typedef_diff}::{get_pretty_representation, chain_into_hierarchy, 26948 finish_diff_type}): Define new member functions. 26949 ({distinct_diff, var_diff, pointer_diff, array_diff, 26950 reference_diff, qualified_type_diff, enum_diff, class_diff, 26951 base_diff, scope_diff, function_decl_diff, type_decl_diff, 26952 typedef_diff, translation_unit_diff}::traverse): Remove member 26953 functions. 26954 (operator&=, operator<<): Define new operators for diff_category. 26955 ({function_decl_diff, typedef_diff}::priv::priv): Add a new 26956 constructor. 26957 (pointer_diff::{priv::priv, pointer_diff}) 26958 (reference_diff::{priv::priv, reference_diff}) 26959 (qualified_type_diff::{priv::priv, qualified_type_diff}) 26960 (enum_diff::{priv::priv, enum_diff}, base_diff::{priv::priv, 26961 base_diff}, function_decl_diff::function_decl_diff): Take the 26962 underlying type diff in parameter. 26963 (compute_diff): Adjust the pointer_diff, reference_diff, 26964 qualified_type_diff, base_diff, function_decl_diff overloads. 26965 (class_diff::priv::{count_filtered_bases, 26966 count_filtered_subtype_changed_dm, count_filtered_changed_dm, 26967 count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns, 26968 count_filtered_deleted_mem_fns}): Adjust for the call to 26969 diff_context::maybe_apply_filters. 26970 (corpus_diff::priv::{finished_, pretty_representation_}): New data 26971 member. 26972 (corpus_diff::priv::priv): New constructor. 26973 (corpus_diff::priv::clear_redundancy_categorization): Define new 26974 member function. 26975 (corpus_diff::priv::apply_filters_and_compute_diff_stats): 26976 Adjust for call to diff_context::maybe_apply_filters. Also, call 26977 clear_redundancy_categorization at the end. 26978 (corpus_diff::priv::categorize_redundant_changed_sub_nodes): 26979 Revisit logic. 26980 (corpus_diff::{chain_into_hierarchy, finish_diff_type, 26981 children_nodes, append_child_node, changed_variables, 26982 get_pretty_representation}): Define new member functions. 26983 (corpus_diff::report): Categorize redundancy for every top level 26984 function/variable diff. 26985 (corpus_diff::traverse): Adjust to the new traversing interface. 26986 (diff_node_visitor::{visit_begin, visit_end}): Define new member 26987 functions. 26988 (struct category_propagation_visitor, struct diff_node_printer) 26989 (struct redundancy_marking_visitor, struct 26990 redundancy_clearing_visitor): New diff tree node visitors. 26991 (propagate_categories, print_diff_tree, categorize_redundancy) 26992 (clear_redundancy_categorization, apply_filters): Define new 26993 functions. 26994 * tests/Makefile.am: Add the new tests/print-diff-tree.cc to the 26995 source distribution. Build it into a tests/printdifftree binary. 26996 * tools/abidiff.cc (print_diff_tree): Add debugging functions to 26997 call from within the debugger. By default, this function and its 26998 overloads are not compiled. 26999 270002014-10-10 Dodji Seketeli <dodji@redhat.com> 27001 27002 Update copyright notice for tests/test-diff2.cc 27003 * tests/test-diff2.cc: Update copyright year. 27004 270052014-10-09 Dodji Seketeli <dodji@redhat.com> 27006 27007 Do not crash on function_decl_diff for fns that have no symbol 27008 * src/abg-comparison.cc (function_decl_diff::report): If a 27009 function decl has no associated elf symbol, do not crash while 27010 trying to report about its elf symbol aliases. 27011 270122014-10-09 Dodji Seketeli <dodji@redhat.com> 27013 27014 Avoid broken output for virtual member fns w/o symbols 27015 * src/abg-comparison.cc (represent): When a virtual member 27016 function has no associated elf symbol, do not emit garbage in lieu 27017 of the linkage name. Just emit no linkage name; 27018 * tests/data/test-abidiff/test-struct1-report.txt: Adjust. 27019 270202014-10-02 Dodji Seketeli <dodji@redhat.com> 27021 27022 Sort added/removed/changed functions reported by the comparison engine 27023 * src/abg-comparison.cc (struct function_comp, struct 27024 changed_function_ptr_comp): New comparison functors. 27025 (sort_string_function_ptr_map) 27026 (sort_string_changed_function_ptr_map): Define new static 27027 functions. 27028 (corpus_diff::report): Sort the added/removed/changed functions 27029 that are reported. 27030 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 27031 * tests/data/test-diff-filter/test01-report.txt: Adjust. 27032 * tests/data/test-diff-filter/test2-report.txt: Adjust. 27033 * tests/data/test-diff-filter/test9-report.txt: Adjust. 27034 270352014-10-02 Dodji Seketeli <dodji@redhat.com> 27036 27037 Mention virtual-ness of member function in their pretty representation 27038 * include/abg-fwd.h (get_member_function_is_virtual): Declare new 27039 overload for pointers. 27040 * src/abg-ir.cc (get_member_function_is_virtual): Define it. 27041 (function_decl::get_pretty_representation): Print virtual-ness of 27042 the function_decl being pretty printed. 27043 270442014-10-02 Dodji Seketeli <dodji@redhat.com> 27045 27046 Do not crash when reporting diffs about virtual member fns that have no symbol 27047 * src/abg-comparison.cc (represent): If a virtual member function 27048 has no symbol do not crash. 27049 270502014-10-02 Dodji Seketeli <dodji@redhat.com> 27051 27052 Fixup member functions which virtual-ness has just been set 27053 * include/abg-ir.h (fixup_virtual_member_function): Declare new 27054 function. 27055 (class_decl): Declare fixup_virtual_member_function() as a member. 27056 * src/abg-ir.cc (set_member_function_is_virtual): Ensure that the 27057 member function that has seen its virtualness set is also put 27058 correctly put in the vector of virtual member functions of its 27059 class. 27060 270612014-10-02 Dodji Seketeli <dodji@redhat.com> 27062 27063 Assert that only decls with elf symbols are part of comparison 27064 * src/abg-corpus.cc (corpus::priv::build_public_decl_table): Assert 27065 that when read from DWARF, only decls with elf symbols are part of 27066 the public decls table. 27067 270682014-10-02 Dodji Seketeli <dodji@redhat.com> 27069 27070 Emit all virtual member functions in group 27071 * src/abg-writer.cc (write_class_decl): Emit virtual member 27072 functions contiguously. 27073 270742014-10-02 Dodji Seketeli <dodji@redhat.com> 27075 27076 Always emit vtable offset for virtual member function 27077 * src/abg-writer.cc (write_voffset): Emit the vtable offset of 27078 virtual function even when the offset is zero. 27079 270802014-10-02 Dodji Seketeli <dodji@redhat.com> 27081 27082 Do not forget priv_->in_pub_sym_tab_ when copying decl_base 27083 * src/abg-ir.cc (decl_base::decl_base(const decl_base& d)): Do 27084 not forget to copy priv_->in_pub_sym_tab_. 27085 270862014-10-01 Dodji Seketeli <dodji@redhat.com> 27087 27088 Fix reading several clones of the same member function from DWARF 27089 * include/abg-fwd.h (set_member_function_is_ctor) 27090 (set_member_function_is_dtor, set_member_function_is_const) 27091 (set_member_function_vtable_offset): Declare new functions. 27092 * include/abg-ir.h (class_decl::sort_virtual_mem_fns): Declare new 27093 member function. 27094 (mem_fn_context_rel::{vtable_offset, is_constructor is_destructor, 27095 is_const}): Add these setters. 27096 (set_member_function_is_ctor, set_member_function_is_dtor) 27097 (set_member_function_is_static, set_member_function_is_const) 27098 (set_member_function_vtable_offset) 27099 (set_member_function_is_virtual): Declare these new friend 27100 function to class class_decl::method_decl. 27101 * src/abg-dwarf-reader.cc (finish_member_function_reading): Split 27102 this out from build_class_type_and_add_to_ir. Use the new setters 27103 for member functions properties introduced above. 27104 (build_class_type_and_add_to_ir): Factorize the creation of member 27105 function by using build_ir_node_from_die. Once that function has 27106 created the member function in a rather generic way, use the new 27107 finish_member_function_reading to set the remaining specific 27108 properties for member functions. 27109 (build_function_decl): When called to read additional properties 27110 of a function_decl, allow this to read and update the elf symbol 27111 properties too. This is useful for building a clone of a function 27112 that already has an elf symbol. 27113 (build_ir_node_from_die): When building a function decl, consider 27114 the case of a DIE that has both DW_AT_specification and 27115 DW_AT_abstract_origin set. That is, DW_AT_abstract_origin is set, 27116 and the origin has DW_AT_specification set. This is basically a 27117 clone of a function that implements an interface (this happens for 27118 destructors, for instance). In this case, really do the cloning 27119 of the interface implementation. If the cloned function happens 27120 to be member function, use finish_member_function_reading to read 27121 the properties relevant to its method-ness. 27122 * src/abg-ir.cc (set_member_function_is_ctor) 27123 (set_member_function_is_dtor, set_member_function_is_const) 27124 (set_member_function_vtable_offset) 27125 (class_decl::sort_virtual_mem_fns): Define new functions. 27126 (sort_virtual_member_functions): Define new static function. 27127 (struct virtual_member_function_less_than): New functor. 27128 (class_decl::add_member_function): Keep virtual member functions 27129 vector sorted. 27130 * data/test-read-dwarf/test1.abi: Adjust. Now, both the 27131 cdtor specification and all the clones that implements the 27132 different are emitted. 27133 * data/test-read-dwarf/test2.so.abi: Likewise. 27134 271352014-10-01 Dodji Seketeli <dodji@redhat.com> 27136 27137 Do not crash when comparing functions that have no symbol 27138 * src/abg-comparison.cc 27139 (class_diff::ensure_lookup_tables_populated): Just skip functions 27140 that have no ELF symbol. 27141 271422014-09-30 Dodji Seketeli <dodji@redhat.com> 27143 27144 Rename member_function_is_virtual to get_member_function_is_virtual 27145 * include/abg-fwd.h (get_member_function_is_virtual): Renamed the 27146 declaration of member_function_is_virtual into this. 27147 * src/abg-ir.cc (get_member_function_is_virtual): Likewise for its 27148 definition. 27149 * include/abg-ir.h (class decl_base): Adjust the friend function 27150 member_function_is_virtual references. 27151 * src/abg-comp-filter.cc (has_virtual_mem_fn_change) 27152 (has_non_virtual_mem_fn_change): Adjust. 27153 * src/abg-comparison.cc (represent) 27154 (SKIP_MEM_FN_IF_VIRTUALITY_DISALLOWED, class_diff::report): 27155 Likewise. 27156 * src/abg-hash.cc (class_decl::hash::operator()): Likewise. 27157 (function_decl::clone, class_decl::add_member_function): Adjust. 27158 271592014-09-30 Dodji Seketeli <dodji@redhat.com> 27160 27161 Factorize a no-op deleter for shared pointer 27162 * include/abg-sptr-utils.h (struct noop_deleter): Move this here 27163 from ... 27164 * src/abg-comparison.cc (struct noop_deleter): ... here. 27165 271662014-09-30 Dodji Seketeli <dodji@redhat.com> 27167 27168 Link manuals from the main web page 27169 * doc/website/mainpage.txt: Add a link to the manuals. 27170 271712014-09-26 Dodji Seketeli <dodji@redhat.com> 27172 27173 Initial documentation for libabigail 27174 * doc/manuals/Makefile: New file, generated by sphinx-quickstart. 27175 * doc/manuals/abidiff.rst: New manual for abidiff. 27176 * doc/manuals/abidw.rst: New manual for abidw. 27177 * doc/manuals/abilint.rst: New manual for abilint. 27178 * doc/manuals/conf.py: New configuration file generated by sphinx-quickstart. 27179 * doc/manuals/index.rst: The root of the this documentation. 27180 * doc/manuals/libabigail-overview.rst: The overview of libabigail. 27181 * doc/manuals/tools.rst: The root of the tools manuals. 27182 271832014-09-26 Dodji Seketeli <dodji@redhat.com> 27184 27185 Do not install the abisym program 27186 * tools/Makefile.am: Do not install abisym. It's really there 27187 just for testing purposes and is of almost no use for generic 27188 users. 27189 271902014-09-26 Dodji Seketeli <dodji@redhat.com> 27191 27192 Rename bi* tools to abi* tools 27193 * tests/data/test-bidiff: Rename this directory to 27194 tests/data/test-abidiff. 27195 * tests/test-bidiff.cc: Renamed this to tests/test-abidiff.cc. 27196 * tools/biar.cc: Renamed to tools/abiar.cc 27197 * tools/bidiff.cc: Renamed to tools/abidiff.cc 27198 * tools/bidw.cc: Renamed to tools/abidw.cc 27199 * tools/bilint.cc: Renamed to tools/abilint.cc 27200 * tools/bisym.cc: Renamed to tools/abisym.cc 27201 * tests/test-alt-dwarf-file.cc: Renamed references to bidw* to abidw*. 27202 * tests/test-diff-filter.cc: Renamed references to bidiff to abidiff. 27203 * tests/test-lookup-syms.cc: Renamed references to bisym to abisym. 27204 * tools/Makefile.am: Adjust. 27205 * tests/Makefile.am: Likewise. 27206 272072014-09-19 Dodji Seketeli <dodji@redhat.com> 27208 27209 Light cleanup in abg-corpus.cc 27210 * src/abg-corpus.cc 27211 (symtab_build_visitor_type::regex_fns_suppress): use 27212 sptr_utils::build_sptr, rather than building the shared_ptr of 27213 regex_t by hand. 27214 272152014-09-18 Dodji Seketeli <dodji@redhat.com> 27216 27217 Pimplify abigail::comparison::diff type 27218 * include/abg-comparison.h (diff::{priv, sptr}): New types. 27219 (diff::priv_): New member. 27220 (diff::*): Remove all the other previous data members and 27221 transform the inline member function definition into declarations 27222 only. 27223 * src/abg-comparison.cc (class diff::priv): New private data type. 27224 (diff::*): Define the previous inline member functions as 27225 out-of-line here. 27226 272272014-09-18 Dodji Seketeli <dodji@redhat.com> 27228 27229 Rename shared_ptr<regex_t> into regex_t_sptr 27230 * include/abg-sptr-utils.h (build_sptr()): Rename the return type 27231 from shared_ptr<regex_t> to regex_t_sptr. 27232 272332014-09-19 Dodji Seketeli <dodji@redhat.com> 27234 27235 Fix a comment in abg-comparison.h 27236 * include/abg-comparison.h (class base_diff): Fix comment. 27237 272382014-09-05 Dodji Seketeli <dodji@redhat.com> 27239 27240 Light style cleanup in tools/bidiff.cc 27241 * tools/bidiff.cc (display_usage): Remove useless space before '&'. 27242 272432014-09-05 Dodji Seketeli <dodji@redhat.com> 27244 27245 src/Makefile.am cleanup 27246 * src/Makefile.am: Remove the unused 'headers' variable. 27247 272482014-09-16 Dodji Seketeli <dodji@redhat.com> 27249 27250 Emit reports about not-yet categorized diff nodes 27251 * include/abg-comparison.h (NO_CHANGE_CATEGORY): Better comment 27252 this enumerator. 27253 * src/abg-comparison.cc (diff::is_filtered_out): Not-yet 27254 categorized changes are not filtered out anymore. 27255 (distinct_diff::report): Avoid extraneous new line here. 27256 272572014-09-16 Dodji Seketeli <dodji@redhat.com> 27258 27259 Better support for inline related diffs 27260 * include/abg-comparison.h 27261 (diff_category::HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY): New 27262 enumerator. 27263 (diff_category::EVERYTHING_CATEGORY): Adjust. 27264 * include/abg-ir.h (elf_symbol::get_aliases_id_string) 27265 (elf_symbol::does_alias, elf_symbols_alias) 27266 (compute_aliases_for_elf_symbol): Declare new functions ... 27267 * src/abg-ir.cc (elf_symbol::get_aliases_id_string) 27268 (elf_symbol::does_alias, elf_symbols_alias) 27269 (compute_aliases_for_elf_symbol): ... and define them. 27270 (function_decl::operator==): Take in account elf symbol aliases. 27271 * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): 27272 Define new static functions. 27273 (harmless_filter::visit): Categorize function name changes that 27274 n doesn't impact underlying elf symbols (or the fact that two 27275 symbols were aliases and are not anymore) as harmless. 27276 * src/abg-comparison.cc (function_decl_diff::report): Properly 27277 report function name changes, or symbol aliases changes for that 27278 matter. Also report inline-ness declaration changes. 27279 * src/abg-dwarf-reader.cc (die_is_declared_inline): New static 27280 function. 27281 (build_function_decl): Use the above. 27282 * tools/bidiff.cc (set_diff_context_from_opts): Add 27283 abigail::comparison::HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY into the 27284 harmless change camp. 27285 * tests/data/test-diff-dwarf/test14-inline-report.txt: New test 27286 input. 27287 * tests/data/test-diff-dwarf/test14-inline-v0.o: Likewise. 27288 * tests/data/test-diff-dwarf/test14-inline-v1.o: Likewise. 27289 * tests/data/test-diff-dwarf/test14-inline-v0.cc: Source code for 27290 test input. 27291 * tests/data/test-diff-dwarf/test14-inline-v1.cc: Source code for 27292 test input. 27293 * tests/test-diff-dwarf.cc: Run this test harness over the new 27294 input above. 27295 * tests/data/test-diff-filter/test20-inline-report-0.txt: Likewise. 27296 * tests/data/test-diff-filter/test20-inline-report-1.txt: 27297 Likewise. 27298 * tests/data/test-diff-filter/test20-inline-v0.o: New test input. 27299 * tests/data/test-diff-filter/test20-inline-v1.o: New test input. 27300 * tests/data/test-diff-filter/test20-inline-v0.cc: Source code for 27301 test input. 27302 * tests/data/test-diff-filter/test20-inline-v1.cc: Likewise. 27303 * tests/test-diff-filter.cc: Run this test harness over the new 27304 input above. 27305 273062014-09-16 Dodji Seketeli <dodji@redhat.com> 27307 27308 Better support for enum diffs 27309 * include/abg-comparison.h (changed_enumerator_type): New typedef. 27310 (diff_category::{HARMLESS_ENUM_CHANGE_CATEGORY}): New enumerator. 27311 * src/abg-comp-filter.cc (has_type_size_change) 27312 (has_enumerator_insertion, has_enumerator_removal_or_change) 27313 (has_harmful_enum_change): New functions. 27314 (harmless_filter::visit): Categorize enumerator insertions that 27315 don't change the size of the type into HARMLESS_ENUM_CHANGE_CATEGORY. 27316 (harmful_filter::visit): Categorize enumerator removal or any enum 27317 change that changes the size of the type into 27318 SIZE_OR_OFFSET_CHANGE_CATEGORY. 27319 * src/abg-comparison.cc (enumerator_value_comp) 27320 (changed_enumerator_comp): New types. 27321 (sort_enumerators, sort_changed_enumerators): New static 27322 functions. 27323 (enum_diff::report): Sort enum related reports by the value of the 27324 enumerators. 27325 * src/abg-dwarf-reader.cc (build_enum_type): Name anonymous enums 27326 as __anonymous_enum__. 27327 * tools/bidiff.cc (set_diff_context_from_opts): Add 27328 abigail::comparison::HARMLESS_ENUM_CHANGE_CATEGORY into the harmless 27329 stuff camp. 27330 * tests/data/test-diff-dwarf/test15-enum-report.txt: New test 27331 input. 27332 * tests/data/test-diff-dwarf/test15-enum-v1.o: Likewise. 27333 * tests/data/test-diff-dwarf/test15-enum-v0.o: Likewise. 27334 * tests/data/test-diff-dwarf/test15-enum-v0.cc: Source code for 27335 test input. 27336 * tests/data/test-diff-dwarf/test15-enum-v1.cc: Likewise. 27337 * tests/data/test-diff-filter/test19-enum-report-0.txt: New test input. 27338 * tests/data/test-diff-filter/test19-enum-report-1.txt: Likewise. 27339 * tests/data/test-diff-filter/test19-enum-v0.o: Likewise. 27340 * tests/data/test-diff-filter/test19-enum-v1.o: Likewise. 27341 * tests/data/test-diff-filter/test19-enum-v0.cc: Source code for 27342 test input. 27343 * tests/data/test-diff-filter/test19-enum-v1.cc: Likewise. 27344 * tests/test-diff-dwarf.cc: Run this test harness on the new test 27345 inputs above. 27346 * tests/test-diff-filter.cc: Likewise. 27347 * tests/Makefile.am: Add the new files above to the source distribution. 27348 273492014-09-16 Dodji Seketeli <dodji@redhat.com> 27350 27351 Add constness to elf_symbol::operator== 27352 * include/abg-ir.h (elf_symbol::operator==): Add a const to the 27353 declaration ... 27354 * src/abg-ir.cc (elf_symbol::operator==): ... and to the definition. 27355 273562014-09-15 Dodji Seketeli <dodji@redhat.com> 27357 27358 Misc style cleanups 27359 * src/abg-comparison.cc (ChangedDataMemberComp): Rename this to 27360 changed_data_member_comp 27361 (sort_changed_data_members): Adjust. 27362 (DataMemberComp): Rename this to data_member_comp. 27363 (sort_data_members): Adjust. 27364 273652014-09-15 Dodji Seketeli <dodji@redhat.com> 27366 27367 Constify some function parameters in abg-comp-filter.cc 27368 * src/abg-comp-filter.cc (type_size_changed): Now take const 27369 parameters. 27370 273712014-09-09 Jan Engelhardt <jengelh@inai.de> 27372 27373 Add .gitignore files. 27374 * .gitignore: Add new file. 27375 * m4/.gitignore: Likewise. 27376 * tools/.gitignore: Likewise. 27377 273782014-09-09 Jan Engelhardt <jengelh@inai.de> 27379 27380 Place -L/-l flags into *_LIBADD/*_LDADD 27381 * src/Makefile.am: -L and -l ought to be in LIBADD/LDADD because 27382 that is the only place guaranteed to be in the right spot. So add 27383 Them to libabigail_la_LIBADD. 27384 * tools/Makefile.am: Likewise. 27385 273862014-09-09 Jan Engelhardt <jengelh@inai.de> 27387 27388 Add libelf to libabigail.la's linker line 27389 * configure.ac: Check for the existence of libelf at configure 27390 time by looking at the presence of the elf_end symbol. Add the 27391 libelf to the link command line. 27392 273932014-09-09 Jan Engelhardt <jengelh@inai.de> 27394 27395 Drop hardcoded substitutions 27396 * doc/Makefile.am: Do not use @docdir@. It's indeed replaced at 27397 configure time. But there is no need for this limitation with 27398 automake, as $(docdir) is available and replaceable anytime. 27399 * src/Makefile.am: Likewise for @DEPS_LIBS@ and @DEPS_CFLAGS@. 27400 274012014-09-09 Jan Engelhardt <jengelh@inai.de> 27402 27403 Replace indirect variable assignments 27404 * configure.ac(DEVEL_CFLAGS, DEVEL_CXXFLAGS): Remove these 27405 useless variables. 27406 (CFLAGS, CXXFLAGS): Set these variables directly. 27407 * include/Makefile.am (pkginclude_HEADERS): Use this predefined 27408 variable. 27409 (publicheaders_DATA, publicheadersdir): Remove these. 27410 274112014-09-09 Jan Engelhardt <jengelh@inai.de> 27412 27413 Remove empty and autogenerated files from git repository 27414 * ChangeLog: Remove this empty file for now. It'll be added back 27415 right before the first release by automatic generation from the 27416 commit logs. 27417 * INSTALL: Remove this empty file for now. 27418 * NEWS: Remove this empty file for now. It'll be added back right 27419 before the first release. 27420 * configure.ac (AM_INIT_AUTOMAKE): As the mandatory but empty 27421 files above are being removed for now, let's put in the 'foreign' 27422 mode of automake for the moment. We'll likely remove it at 27423 release time. 27424 274252014-09-09 Jan Engelhardt <jengelh@inai.de> 27426 27427 Set automake options globally 27428 * configure.ac(AM_INIT_AUTOMAKE): Set the subdir-object option 27429 here .. 27430 * src/Makefile.am: ... not here. 27431 * tests/Makefile.am: Likewise. 27432 * tools/Makefile.am: Likewise. 27433 274342014-09-09 Jan Engelhardt <jengelh@inai.de> 27435 27436 Stash some autogenerated tools in build-aux/ 27437 * configure.ac: Reduce the pollution in the top-level directory a 27438 bit. 27439 274402014-09-10 Dodji Seketeli <dodji@redhat.com> 27441 27442 Fix memory leaks due to cycles in types ownership 27443 * include/abg-fwd.h (std::tr1::weak_ptr): Inject this type in the 27444 abigail namespace. 27445 * include/abg-ir.h: Write a memory management guideline for the IR 27446 artifacts. 27447 (Type_base_wptr, function_type_wptr) 27448 (class_decl_wptr): New typedefs. 27449 (translation_unit::get_canonical_function_type): Declare new 27450 member function. 27451 (qualified_type_def::underlying_type_) 27452 (reference_type_def::pointed_to_type_) 27453 (typedef_decl::underlying_type_, function_decl::parameter::type_) 27454 (function_type::return_type_, method_type::class_type_) 27455 (non_type_tparameter::type_, type_composition::type_): Make this a 27456 weak pointer. 27457 (qualified_type_def::get_pointed_to_type) 27458 (reference_type_def::get_pointed_to_type) 27459 (array_type::get_element_type, typedef_decl::get_underlying_type) 27460 (var_decl::get_type, function_decl::parameter::get_type) 27461 (function_type::get_return_type, method_type::get_class_type) 27462 (non_type_tparameter::get_type) 27463 (type_composition::get_composed_type): Adjust to make this return 27464 a shared pointer initialized with the content of the weak pointer. 27465 (function_decl::function_decl, method_decl::method_decl): Remove 27466 the overload that doesn't take a type. This is because now, 27467 function types need to be registered to their containing 27468 translation unit. 27469 (struct function_type::hash): Declare here. 27470 * src/abg-hash.cc (struct function_type::hash): Declare this in 27471 abg-ir.h and just define the methods here. 27472 * src/abg-ir.cc (fn_type_ptr_map): New typedef. 27473 (translation_unit::priv::canonical_types_): Remove this unused 27474 member. 27475 (translation_unit::priv::canonical_function_types_): New member. 27476 (translation_unit::get_canonical_function_type): Define this 27477 function. 27478 (array_type_def::priv::element_type_, var_decl::priv::type_) 27479 (function_decl::priv::type_): Make this a weak pointer. 27480 (qualified_type_def::get_underlying_type) 27481 (pointer_type_def::get_pointed_to_type) 27482 (reference_type_def::get_pointed_to_type) 27483 (array_type_def::get_element_type) 27484 (typedef_decl::get_underlying_type, var_decl::get_type) 27485 (function_decl::get_type): Adjust to make this return a shared 27486 pointer initialized with the content of the weak pointer. 27487 (qualified_type_def::build_name) 27488 (pointer_type_def::get_qualified_name) 27489 (reference_type_def::get_qualified_name): Adjust. 27490 (method_type::set_class_type): Cleanup the logic. 27491 (function_decl::priv::priv): Remove the overload that takes a bare 27492 pointer to a type. This should not be used now that we need the 27493 function type to registered with the translation unit. 27494 (function_decl::function_decl): Remove the overload that doesn't 27495 take a type. This is because now, function types need to be 27496 registered to their containing translation unit. 27497 * src/abg-dwarf-reader.cc (build_function_decl): Register the 27498 function type within its translation type and use its canonical 27499 version. This complies with the new memory management rules. 27500 * src/abg-reader.cc (build_function_decl): Likewise. 27501 275022014-09-10 Dodji Seketeli <dodji@redhat.com> 27503 27504 Compare class names when comparing methods 27505 * src/abg-ir.cc: 27506 275072014-09-10 Dodji Seketeli <dodji@redhat.com> 27508 27509 Slight white space fix 27510 * src/abg-hash.cc (method_type::hash::operator()(const 27511 method_type&)): White space fix. 27512 275132014-09-10 Dodji Seketeli <dodji@redhat.com> 27514 27515 Update copyright notice 27516 * include/abg-ir.h: Update year of copyright notice. 27517 275182014-07-05 Ondrej Oprala <ooprala@redhat.com> 27519 27520 Unite help output for tools 27521 * tools/biar.cc (std::ostream): Add a using directive. 27522 (display_usage): Make it take a string reference and an ostream 27523 as parameters. Use the ostream argument as an output stream 27524 instead of a hard-coded cout. 27525 Prettify output. 27526 (main): Call display_usage with new parameters. 27527 * tools/bidiff.cc (display_usage): Declare it static. 27528 Prettify output. 27529 * tools/bidw.cc (display_usage): Prettify output. 27530 * tools/bilint.cc (display_usage): Declare it static. 27531 Prettify output. 27532 * tools/bisym.cc (std::cerr): Add a using directive. 27533 (prog_name): Rename progname into this. 27534 (display_usage): Rename show_help into this. 27535 Add an ostream as a parameter. Use the ostream argument 27536 as output stream insted of a hard-coded cout. 27537 275382014-09-03 Dodji Seketeli <dodji@redhat.com> 27539 27540 Adjust copyright year 27541 * tests/test-diff-dwarf.cc: Adjust year in copyright notice. 27542 275432014-09-03 Dodji Seketeli <dodji@redhat.com> 27544 27545 Sort reported changed data members by increasing offset 27546 * include/abg-comparison.h (changed_type_or_decl_vector): New 27547 typedef. 27548 * include/abg-fwd.h (is_data_member): Change the overload that 27549 takes a decl_base_sptr to make it return the real var_decl_sptr 27550 rather than just a bool. 27551 * src/abg-comparison.cc (ChangedDataMemberComp, DataMemberComp): 27552 New comparison functors. 27553 (sort_changed_data_members, sort_data_members): Sorting functions 27554 for changed data members and data members. 27555 (class_diff::report): Sort reports for deleted, inserted and 27556 change data members by the increasing value of the offsets of said 27557 data members. 27558 * src/abg-ir.cc (is_data_member): Change the overload that takes a 27559 decl_base_sptr to make it return the real var_decl_sptr rather 27560 than just a bool. 27561 * tests/data/test-bidiff/test-struct1-report.txt: Adjust. 27562 * tests/data/test-diff-dwarf/test13-report.txt: New test input. 27563 * tests/data/test-diff-dwarf/test13-v0.cc: Source code for new 27564 test input. 27565 * tests/data/test-diff-dwarf/test13-v0.o: New test input. 27566 * tests/data/test-diff-dwarf/test13-v1.cc: Source code for new 27567 test input. 27568 * tests/data/test-diff-dwarf/test13-v1.o: New test input. 27569 * tests/Makefile.am: Add the new test inputs above to the source 27570 distribution. 27571 * tests/test-diff-dwarf.cc: Run this test harness on the new test 27572 input. 27573 275742014-09-03 Dodji Seketeli <dodji@redhat.com> 27575 27576 Do not filter out diff nodes that are only in NOT_REDUNDANT_CATEGORY 27577 * src/abg-comparison.cc (diff::is_filtered_out): If a diff not is 27578 only in the NOT_REDUNDANT_CATEGORY category consider it as not 27579 being filtered. 27580 * tests/data/test-diff-filter/test18-report.txt: New test input. 27581 * tests/data/test-diff-filter/test18-v0.cc: Source code for new 27582 test input. 27583 * tests/data/test-diff-filter/test18-v0.o: New test input. 27584 * tests/data/test-diff-filter/test18-v1.cc: Source code for new 27585 test input. 27586 * tests/data/test-diff-filter/test18-v1.o: New test input. 27587 * tests/Makefile.am: Add the new test inputs to the source distribution. 27588 * tests/test-diff-filter.cc: Run this test harness on the new test 27589 input above. 27590 275912014-09-03 Dodji Seketeli <dodji@redhat.com> 27592 27593 White space cleanup 27594 * src/abg-ir.cc (get_data_member_offset): Remove useless 27595 horizontal white space. 27596 275972014-09-03 Dodji Seketeli <dodji@redhat.com> 27598 27599 Add some comments in the comparison engine 27600 * src/abg-comparison.cc: Add a comment for the file. 27601 (struct class_diff::priv::{subtype_changed_dm_,changed_dm_}): Add 27602 comment for these data members. 27603 276042014-09-02 Dodji Seketeli <dodji@redhat.com> 27605 27606 Remove useless new line from comparison engine's report 27607 * src/abg-comparison.cc (class_diff::report): Do not emit new 27608 lines after reporting about inserted data members. 27609 * tests/data/test-bidiff/test-qual-type0-report.txt: Adjust. 27610 * tests/data/test-bidiff/test-struct0-report.txt: Adjust. 27611 * tests/data/test-bidiff/test-struct1-report.txt: Adjust. 27612 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 27613 * tests/data/test-diff-dwarf/test1-report.txt: Adjust. 27614 * tests/data/test-diff-dwarf/test3-report.txt: Adjust. 27615 * tests/data/test-diff-dwarf/test7-report.txt: Adjust. 27616 * tests/data/test-diff-filter/test0-report.txt: Adjust. 27617 * tests/data/test-diff-filter/test01-report.txt: Adjust. 27618 * tests/data/test-diff-filter/test1-report.txt: Adjust. 27619 * tests/data/test-diff-filter/test11-report.txt: Adjust. 27620 * tests/data/test-diff-filter/test14-0-report.txt: Adjust. 27621 * tests/data/test-diff-filter/test14-1-report.txt: Adjust. 27622 * tests/data/test-diff-filter/test15-0-report.txt: Adjust. 27623 * tests/data/test-diff-filter/test15-1-report.txt: Adjust. 27624 * tests/data/test-diff-filter/test16-report.txt: Adjust. 27625 * tests/data/test-diff-filter/test17-0-report.txt: Adjust. 27626 * tests/data/test-diff-filter/test17-1-report.txt: Adjust. 27627 * tests/data/test-diff-filter/test2-report.txt: Adjust. 27628 * tests/data/test-diff-filter/test3-report.txt: Adjust. 27629 * tests/data/test-diff-filter/test9-report.txt: Adjust. 27630 276312014-09-01 Dodji Seketeli <dodji@redhat.com> 27632 27633 Adjust copyright years 27634 * src/abg-corpus.cc: Adjust copyright years. 27635 * src/abg-libzip-utils.cc: Likewise. 27636 * src/abg-writer.cc: Likewise. 27637 276382014-09-01 Dodji Seketeli <dodji@redhat.com> 27639 27640 Factorize basic redundancy detection in diff report 27641 * src/abg-comparison.cc 27642 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER) 27643 (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER{2,3}): New 27644 macros. 27645 ({pointer_diff, array_diff, reference_diff, qualified_type_diff, 27646 class_diff, typedef_diff}::report): Use the new macros above. 27647 * tests/data/test-bidiff/test-qual-type0-report.txt: Adjust 27648 because type pretty representation are now always quoted. 27649 * tests/data/test-bidiff/test-struct1-report.txt: Adjust likewise. 27650 276512014-08-31 Dodji Seketeli <dodji@redhat.com> 27652 27653 Display package configuration at the end of configure 27654 * configure.ac: Display the configure of the package at the end of 27655 the configure script. 27656 276572014-08-31 Dodji Seketeli <dodji@redhat.com> 27658 27659 Make zip archive support optional 27660 * configure.ac: Support a new --enable-zip-archive option. By 27661 default its value is set to the 'auto', meaning that if libzip is 27662 installed, that turns the option on -- just like if 27663 --enable-zip-archive was called with the value 'yes'; if libzip is 27664 not installed, that turns the option off -- just like if 27665 --enable-zip-archive was called with the value 'no'. If libzip is 27666 detected, the pre-processor macro HAVE_LIBZIP is set to 1. If 27667 --enable-zip-archive is turned on, the pre-processor macro 27668 WITH_ZIP_ARCHIVE is set to 1. 27669 * config.h.in (HAVE_LIBZIP, WITH_ZIP): New define. 27670 * src/abg-corpus.cc: Include config.h. Guard the inclusion of 27671 abg-libzip-utils.h with the WITH_ZIP_ARCHIVE macro. Likewise for 27672 the use of declarations coming from abg-libzip-utils.h. 27673 * src/abg-libzip-utils.cc: Include config.h. Guard the file's 27674 content with the WITH_ZIP_ARCHIVE macro. 27675 * src/abg-reader.cc: Include config.h. Guard the inclusion of 27676 abg-libzip-utils.h with the WITH_ZIP_ARCHIVE. Likewise for the 27677 use of declarations coming from abg-libzip-utils.h. 27678 * src/abg-writer.cc: Likewise. 27679 * tests/Makefile.am: Build runtestwritereadarchive and runtestdot 27680 only if zip archives are supported. 27681 * tools/Makefile.am: The biar program is built only if 27682 zip archives are supported. 27683 * tools/bidiff.cc: Handle zip archives only if the 27684 WITH_ZIP_ARCHIVE macros is defined. 27685 * tools/bilint.cc: Likewise. 27686 276872014-08-28 Dodji Seketeli <dodji@redhat.com> 27688 27689 Tell bidiff --help, wrong options and missing argument apart 27690 * tools/bidiff.cc (options::{display_usage,missing_operand}): New 27691 data members. 27692 (options::options): Initialize them. 27693 (parse_command_line): Flag missing operands. Return false only 27694 when an option could not be parsed. Flag when the user wants us 27695 to display help. 27696 (main): Tell --help, wrong options and missing argument apart and 27697 give an appropriate message on stderr. The help string goes to 27698 stdout though. Just like what GNU diff does. 27699 277002014-08-28 Dodji Seketeli <dodji@redhat.com> 27701 27702 In bidiff, don't emit a report when the binaries have the same ABI 27703 * tools/bidiff.cc (main): For differences of zero length, do not 27704 emit any report. 27705 277062014-08-29 Dodji Seketeli <dodji@redhat.com> 27707 27708 Take variables in account in corpus changes detection 27709 * src/abg-comparison.cc (corpus_diff::length): Take changes about 27710 variables into account. 27711 277122014-08-28 Dodji Seketeli <dodji@redhat.com> 27713 27714 During redundancy marking start with the current node as non redundant 27715 * src/abg-comparison.cc (ENSURE_DIFF_NODE_TRAVERSED_ONCE): If the 27716 diff node is being traversed for the first time, mark it as being 27717 in the NOT_REDUNDANT_CATEGORY. I don't know why I was doing this 27718 only for classes and basic types. Update comments. 27719 * tests/data/test-diff-filter/test16-report.txt: New test input. 27720 * tests/data/test-diff-filter/test16-v0.cc: Source code of new 27721 test input. 27722 * tests/data/test-diff-filter/test16-v0.o: New test input. 27723 * tests/data/test-diff-filter/test16-v1.cc: Source code of new 27724 test input. 27725 * tests/data/test-diff-filter/test16-v1.o: New test input. 27726 * tests/data/test-diff-filter/test17-0-report.txt: Likewise. 27727 * tests/data/test-diff-filter/test17-1-report.txt: Likewise. 27728 * tests/data/test-diff-filter/test17-v0.cc: Source code of new 27729 test input. 27730 * tests/data/test-diff-filter/test17-v0.o: Likewise. 27731 * tests/data/test-diff-filter/test17-v1.cc: Source code of new 27732 test input. 27733 * tests/data/test-diff-filter/test17-v1.o: Likewise. 27734 * tests/Makefile.am: Add the new files to the source distribution. 27735 * tests/test-diff-filter.cc (in_out_spec): Run this test harness 27736 over the new test inputs. 27737 277382014-08-28 Dodji Seketeli <dodji@redhat.com> 27739 27740 Give anonymous struct the name "__anonymous_struct__" 27741 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Set 27742 the name of anonymous structs to '__anonymous_struct_'. 27743 277442014-08-28 Dodji Seketeli <dodji@redhat.com> 27745 27746 Style fix in the comparison engine 27747 * src/abg-comparison.cc (represent): Remove useless white space. 27748 277492014-08-27 Dodji Seketeli <dodji@redhat.com> 27750 27751 In bidiff, change --no-linkage-names to --no-linkage-name 27752 * tools/bidiff.cc (display_usage): Change--no-linkage-names -o 27753 --no-linkage-name in the help string. 27754 (parse_command_line): Adjust the command line parsing accordingly. 27755 * tests/test-diff-filter.cc (in_out_specs): Adjust. 27756 277572014-08-27 Dodji Seketeli <dodji@redhat.com> 27758 27759 In diff reports, show symbol version info in linkage names 27760 * src/abg-comparison.cc (represent, corpus_diff::report): show 27761 symbol version info in linkage name info. 27762 277632014-08-27 Dodji Seketeli <dodji@redhat.com> 27764 27765 In diff reports, fns & members add/remove at the top, changes later. 27766 * src/abg-comparison.cc (class_diff::report): Put virtual member 27767 function adding/removal/change first, then data members 27768 add/removal, then the rest (including data members changes). 27769 (corpus_diff::report): Put function adding/removal first, then 27770 function changes. Likewise for variables. 27771 * tests/data/test-bidiff/test-struct0-report.txt: Adjust. 27772 * tests/data/test-bidiff/test-struct1-report.txt: Adjust. 27773 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 27774 * tests/data/test-diff-dwarf/test1-report.txt: Adjust. 27775 * tests/data/test-diff-dwarf/test12-report.txt: Adjust. 27776 * tests/data/test-diff-dwarf/test8-report.txt: Adjust. 27777 * tests/data/test-diff-dwarf/test9-report.txt: Adjust. 27778 * tests/data/test-diff-filter/test0-report.txt: Adjust. 27779 * tests/data/test-diff-filter/test01-report.txt: Adjust. 27780 * tests/data/test-diff-filter/test1-report.txt: Adjust. 27781 * tests/data/test-diff-filter/test13-report.txt: Adjust. 27782 * tests/data/test-diff-filter/test2-report.txt: Adjust. 27783 * tests/data/test-diff-filter/test3-report.txt: Adjust. 27784 * tests/data/test-diff-filter/test9-report.txt: Adjust. 27785 277862014-08-27 Dodji Seketeli <dodji@redhat.com> 27787 27788 Consider symbol versions' public-ness during comparison 27789 * src/abg-ir.cc (elf_symbol::operator==): Rather than comparing 27790 bindings, compare public-ness here. That is, if two symbol 27791 versions' differ because one is GLOBAL and the other one is WEAK, 27792 they should still be considered equal, from an ABI standpoint. 27793 277942014-08-27 Dodji Seketeli <dodji@redhat.com> 27795 27796 Lookup proper names of symbol during determination of deleted/added decls 27797 * src/abg-comparison.cc 27798 ({class,corpus}_diff::ensure_lookup_tables_populated): Now that in the 27799 intermediate maps we store symbol *ids* rather than symbol names, 27800 make sure to really refer to symbol names for symbol lookups, 27801 rather than (wrongly) referring to symbol ids. 27802 278032014-08-26 Dodji Seketeli <dodji@redhat.com> 27804 27805 Cleanup bidiff help string some more 27806 * tools/bidiff.cc (display_usage): Add help strings for --harmless 27807 and --no-harmful. 27808 (main): Emit the help string to stdout, not stderr. 27809 278102014-08-26 Dodji Seketeli <dodji@redhat.com> 27811 27812 bidiff --no-harmless is no more 27813 * tools/bidiff.cc (display_usage): Remove the help string for the 27814 --no-harmless option that doesn't exist anymore, as it's on by 27815 default. 27816 278172014-08-26 Dodji Seketeli <dodji@redhat.com> 27818 27819 During comparison use symbol name + version as decl ID 27820 * include/abg-ir.h ({var,function}_decl::get_id): New member 27821 function declarations. 27822 * src/abg-ir.cc ({var,function}_decl::get_id): New member function 27823 definitions. 27824 * src/abg-comparison.cc 27825 (corpus_diff::priv::ensure_lookup_tables_populated): Use the 27826 ::get_id() function to get an identifier for the function or 27827 variable. 27828 * src/abg-corpus.cc (symtab_build_visitor_type::build_id): Use the 27829 get_id of the function/variable. 27830 278312014-08-26 Dodji Seketeli <dodji@redhat.com> 27832 27833 Fix access to alternate die -> decl map 27834 * src/abg-dwarf-reader.cc (read_context::alternate_die_decl_map): 27835 Return the real alternate die decl map, rather than what we was 27836 doing previously b/c of a stupid copy/paste. Oh well. 27837 278382014-08-25 Dodji Seketeli <dodji@redhat.com> 27839 27840 Take symbol versions in account when computing added/removed decls 27841 * include/abg-corpus.h 27842 (corpus::lookup_{function,variable}_symbol): Add an overload 27843 declaration that takes the version of the symbol to lookup. 27844 * src/abg-comparison.cc 27845 (corpus_diff::priv::ensure_lookup_tables_populated): So when looking 27846 up the corpora for symbols, take their versions in account. 27847 * src/abg-corpus.cc (corpus::lookup_{function,variable}_symbol): 27848 Add an overload definition that takes the version of the symbol to 27849 lookup. 27850 (symtab_build_visitor_type::build_id): New 27851 member functions. 27852 (corpus::priv::build_public_decl_table): Use the new member 27853 functions above. 27854 * src/abg-ir.cc (elf_symbol::version::operator==): Do not take the 27855 is_default flag in account when comparing two symbol versions. 27856 * libtest12-v{0,1}.so: New test input files. 27857 * libtest12-v{0,1}.c: Source code for the test input files. 27858 * test12-version-script: Version script to build the files above. 27859 * test12-report.txt: Test input file. 27860 * tests/Makefile.am: Add the new test input files above to the 27861 source distribution. 27862 * tests/test-diff-dwarf.cc (in_out_specs[]): Add an entry to this 27863 table for the new test input files. 27864 278652014-08-25 Dodji Seketeli <dodji@redhat.com> 27866 27867 Misc style cleanups 27868 * include/abg-corpus.h (corpus::lookup_function_symbol) 27869 (corpus::lookup_variable_symbol): Add the name of the function 27870 parameter in the declaration. 27871 * include/abg-ir.h (elf_symbol::version::version): Properly indent 27872 this constructor declaration. 27873 * src/abg-corpus.cc 27874 (symtab_build_visitor_type::symtab_build_visitor_type): Properly 27875 indent constructor parameters. 27876 * src/abg-ir.cc (function_decl::operator==): Fix typo in 27877 comments. 27878 278792014-08-25 Dodji Seketeli <dodji@redhat.com> 27880 27881 bidiff --harmful is not supported anymore 27882 * tools/bidiff.cc (display_usage): remove the '--harmful' line 27883 from the help string as this option is now activated by default. 27884 It's --harmless that exists now. 27885 278862014-08-22 Dodji Seketeli <dodji@redhat.com> 27887 27888 A builtin type name change is not harmless - fix that 27889 * include/abg-comp-filter.h (has_harmless_name_change): New 27890 function declaration. 27891 * include/abg-comparison.h 27892 (diff_category::DECL_NAME_CHANGE_CATEGORY): Renamed this into 27893 HARMLESS_DECL_NAME_CHANGE_CATEGORY. 27894 (diff_category::EVERYTHING_CATEGORY): Update. 27895 * include/abg-fwd.h (is_enum): New function declaration. 27896 (is_var_decl): Return the shared_ptr<var_decl> rather than a bool. 27897 (is_data_member): New overload that takes a shared_ptr<decl_base>. 27898 * src/abg-comp-filter.cc (decl_name_changed): Consider the 27899 qualified name here. 27900 (has_harmless_name_change): Define new function declaration. 27901 (harmless_filter::visit): Use the new has_harmless_name_change 27902 function. 27903 * src/abg-comparison.cc (represent) 27904 (report_name_size_and_alignment_changes, enum_diff::report) 27905 (typedef_diff::report, is_data_member): Use the new 27906 filtering::has_harmless_name_change function to simplify logic of 27907 emitting the name change related diff 27908 * tools/bidiff.cc (set_diff_context_from_opts): Adjust 27909 DECL_NAME_CHANGE_CATEGORY -> HARMLESS_DECL_NAME_CHANGE_CATEGORY. 27910 * src/abg-ir.cc (is_data_member, is_enum): New function definitions. 27911 (is_var_decl): Return the var_decl_sptr rather than just a bool. 27912 * tests/data/test-diff-filter/test13-report.txt: Adjust. 27913 * tests/data/test-diff-filter/test6-report.txt: Adjust. 27914 279152014-08-18 Ondrej Oprala <ooprala@redhat.com> 27916 27917 Support C and C++ array type. 27918 * include/abg-comparison.h (array_diff): Declare new class. 27919 (array_diff_sptr): Shared pointer to type array_diff. 27920 (compute_diff): Overload the function to take type 27921 array_diff_sptr as the first two arguments. 27922 * include/abg-fwd.h (array_type_def): Declare new class. 27923 (subrange_type): Likewise. 27924 (is_array_def): Declare new function. 27925 * include/abg-ir.h (array_type_def_sptr): Shared pointer 27926 to type array_type_def. 27927 (array_type_def): Declare new class. 27928 (ir_node_visitor::visit): Declare a new virtual function 27929 taking a pointer to type array_type_def as an argument. 27930 * src/abg-comparison.cc (compute_diff_for_types): Add 27931 try_to_diff for two instances of type array_type_def. 27932 (array_diff::priv): declare struct for holding private members 27933 of type array_diff. 27934 (array_diff::array_diff): Define constructor. 27935 (array_diff::{first,second}_array):Define new 27936 member functions. 27937 (array_diff::element_type_diff): Likewise. 27938 (array_diff::{length,report,traverse}): Likewise. 27939 (compute_diff): Define function overloaded in 27940 include/abg-comparison.h. 27941 * src/abg-dwarf-reader.cc (build_array_type): Define new 27942 function. Handle DW_TAG_array_type and DW_TAG_subrange type. 27943 (build_ir_node_from_die): Amend case DW_TAG_array_type with 27944 a call to build_array_type. 27945 * src/abg-hash.cc (array_type_def::hash): Declare new struct. 27946 (type_base::dynamic_hash::operator()): Attempt to dynamic_cast 27947 the argument to type array_type_def as well. 27948 (array_type_def::hash): Declare new struct. 27949 * src/abg-ir.cc (array_type_def::array_type_def): Define 27950 constructors. 27951 (array_type_def::priv): declare struct for holding private members 27952 of type array_type_def. 27953 (array_type_def::operator==(const decl_base&): 27954 Define new operator. 27955 (array_type_def::operator==(const type_base&): 27956 Likewise. 27957 (array_type_def::append_subrange{,s}): Define 27958 new functions. 27959 (array_type_def::{set,get}_size_in_bits): Likewise. 27960 (array_type_def::get_dimension_count): Likewise. 27961 (array_type_def::get_qualified_name): Likewise. 27962 (array_type_def::get_pretty_representation): Likewise. 27963 (array_type_def::get_subrange_representation): Likewise. 27964 (array_type_def::traverse): Likewise. 27965 (array_type_def::get_{element_type,location,subranges}): Likewise. 27966 (array_type_def::is_infinite): Likewise. 27967 (array_type_def::~array_type_def): Define destructor. 27968 (ir_node_visitor::visit): Define function, taking 27969 pointer to array_type_def as an argument. 27970 * src/abg-reader.cc (map_id_and_node): Check if node 27971 is an array. 27972 (is_array_def): Check if object is an array. 27973 (handle_element_node): Handle array_type_def as well. 27974 (build_subrange_type): Define new function. 27975 (build_array_type_def): Likewise. 27976 (build_type): Build type array_type_def as well. 27977 (build_type_composition): Likewise. 27978 (handle_array_type_def): Define new function. 27979 * src/abg-writer.cc: (write_decl): Output arrays 27980 as well. 27981 (write_member_type): Likewise. 27982 (write_type_composition): Likewise. 27983 (write_array_type_def): Define new function. 27984 * tests/data/test-diff-dwarf/test{10,11}-v{0,1}.{cc,o}: New test source 27985 files 27986 * tests/data/test-diff-dwarf/test{10,11}-report.txt: Likewise. 27987 * tests/data/test-diff-dwarf/test10-report.txt: New test input. 27988 * tests/data/test-read-dwarf/test7.cc: New test source 27989 file. 27990 * tests/data/test-read-dwarf/test7.so: New input binary 27991 to read. 27992 * tests/data/test-read-dwarf/test7.so.abi: New reference 27993 test to compare against. 27994 * tests/data/test-read-write/test25.xml: New test source 27995 file. 27996 * tests/test-diff-dwarf.cc: Adjust to launch the new test. 27997 * tests/test-read-dwarf.cc: Likewise. 27998 * tests/test-read-write.cc: Likewise. 27999 * test/Makefile.am: Add the new test inputs to the source 28000 distribution. 28001 280022014-08-19 Dodji Seketeli <dodji@redhat.com> 28003 28004 Ignore variables which type couldn't be read from DWARF 28005 * src/abg-dwarf-reader.cc (build_var_decl): Drop the var on the 28006 floor if its type couldn't be built. 28007 280082014-08-19 Dodji Seketeli <dodji@redhat.com> 28009 28010 Support TLS variables 28011 * src/abg-ir.cc (elf_symbol::is_variable): Accept TLS objects as 28012 variables too. 28013 * src/abg-dwarf-reader.cc (eval_last_constant_dwarf_sub_expr) 28014 (die_location_address): Add an output parameter to say if the 28015 resulting constant value is a tls address or not. 28016 (lookup_public_variable_symbol_from_elf): Use the proper 28017 elf_symbol::is_variable() method, rather than trying to figure out 28018 the low levels of what a variable is here. Also, cleanup the 28019 condition. 28020 (read_context::load_symbol_maps): Consider symbols of type 28021 STT_TLS, when loading symbols for variables. Also, to avoir 28022 symbols that are for versions, filter out symbols of type 28023 STT_OBJECT and with a SHN_ABS section index. 28024 (read_context::get_variable_address): If the address is for a tls 28025 variable, do no try to adjust the address to arrange for things 28026 like prelink. As that doesn't seem to affect TLS variables. 28027 (dwarf_expr_eval_context::set_tls_addr): New data member. 28028 (dwarf_expr_eval_context::dwarf_expr_eval_context): Initialize it. 28029 (dwarf_expr_eval_context::set_tls_address): New accessors. 28030 (dwarf_expr_eval_context::op_manipulates_stack): Handle 28031 DW_OP_GNU_push_tls_address, a bit like DW_OP_form_tls_address, but 28032 then, its result is a constant. Set the 28033 dwarf_expr_eval_context::set_tls_addr flag when these two OPs are 28034 run. 28035 (die_member_offset): Adjust to the new signature of 28036 eval_last_constant_dwarf_sub_expr. 28037 * tests/data/test-diff-dwarf/libtest9-v0.so: New test input. 28038 * tests/data/test-diff-dwarf/libtest9-v1.so: Likewise. 28039 * tests/data/test-diff-dwarf/test9-report.txt: Likewise 28040 * tests/data/test-diff-dwarf/test9-v0.cc: Source code for the 28041 first input. 28042 * tests/data/test-diff-dwarf/test9-v1.cc: Source code for the 28043 second input. 28044 * tests/test-diff-dwarf.cc: Run this harness on the two new inputs 28045 above. 28046 * tests/Makefile.am: Add the new inputs to the source distribution. 28047 280482014-08-18 Dodji Seketeli <dodji@redhat.com> 28049 28050 Update copyright for abg-dwarf-reader.cc 28051 * src/abg-dwarf-reader.cc: Update copyright year. 28052 280532014-08-18 Dodji Seketeli <dodji@redhat.com> 28054 28055 Make the link to the alt debug info file relative 28056 * tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug: 28057 Make this link be relative. 28058 280592014-08-15 Dodji Seketeli <dodji@redhat.com> 28060 28061 White space fix 28062 * tests/test-lookup-syms.cc: Remove useless white space. 28063 280642014-08-15 Dodji Seketeli <dodji@redhat.com> 28065 28066 Update copyright notice 28067 * tests/test-lookup-syms.cc: Update year in copyright notice. 28068 * tools/bidw.cc: Likewise. 28069 280702014-08-15 Dodji Seketeli <dodji@redhat.com> 28071 28072 Support alternate debug info sections 28073 * include/abg-dwarf-reader.h (class read_context) 28074 (typedef read_context_sptr, create_read_context) 28075 (has_alt_debug_info): Declare these. 28076 (read_corpus_from_elf): Declare new overload. 28077 * src/abg-dwarf-reader.cc (find_alt_debug_info) 28078 (is_die_attribute_resolved_through_gnu_ref_alt) 28079 (build_primary_die_parent_relations_under) 28080 (build_alternate_die_parent_relations_under): 28081 Define new static functions. 28082 (read_context::{alt_dwarf_, 28083 alt_debug_info_path_, alternate_die_decl_map_, 28084 alternate_die_parent_map_}): New data members. 28085 (read_context::{alt_dwarf, alt_debug_info_path, 28086 alternate_die_decl_map, associate_die_to_decl_primary, 28087 associate_die_to_decl_alternate, associate_die_to_decl, 28088 lookup_decl_from_die_offset_primary, 28089 lookup_decl_from_die_offset_alternate, 28090 lookup_decl_from_die_offset, alternate_die_parent_map}): New 28091 member functions. 28092 (read_context::load_debug_info): Painfully Get a handle on the 28093 alternate debug info section too. We shouldn't have to do all 28094 this work; we could use the new dwarf_getalt() function from 28095 libdw, but we cannot as we want to support supports that predate 28096 that api. When a version of elfutils gets released with that api 28097 though, we should conditionally use that instead. 28098 (build_ir_node_from_die, get_parent_die, get_scope_for_die) 28099 (build_namespace_decl_and_add_to_ir) 28100 (build_class_type_and_add_to_ir, build_qualified_type) 28101 (build_pointer_type_def, build_reference_type, build_typedef_type) 28102 (build_var_decl, build_function_decl): Take a new parameter that 28103 tells if the input DIE is from alternate debug info. Adjust their 28104 code accordingly. 28105 (die_die_attribute): Take a new output parameter that tells if the 28106 resolved DIE is from alternate debug info. Also take a new 28107 parameter that tells if the input DIE is from alternate debug info 28108 sections. 28109 (build_die_parent_relations_under): Take the DIE -> parent map to 28110 act upon. Also, add a new overload that takes a flag saying if 28111 the DIE is from alternate debug info or not, and act upon that. 28112 (build_die_parent_maps): Renamed build_die_parent_map into this 28113 and make it build DIE -> parent DIE relationship for the alternate 28114 debug info file as well. 28115 (find_last_import_unit_point_before_die, ): Adjust to use the 28116 information about if the relevant DIEs are in alternate debug info 28117 or not. 28118 (build_translation_unit_and_add_to_ir): Clear the alternate DIE -> 28119 decl map, that is per TU just as the primary DIE -> decl map. 28120 Adjust to use the information about if the relevant DIEs are in 28121 alternate debug info or not. 28122 (read_debug_info_into_corpus): Build the two DIE -> DIE parent 28123 maps (one for the primary debug info and one for the alternate 28124 debug info). 28125 (create_read_context, has_alt_debug_info): Define new public entry 28126 points. 28127 (read_corpus_from_elf): New entry point overload that takes a 28128 read_context. 28129 * tools/bidw.cc (options::{check_alt_debug_info_path, 28130 show_base_name_alt_debug_info_path}): New data members. 28131 (display_usage): Update for the two new options 28132 --check-alternate-debug-info and 28133 check-alternate-debug-info-base-name. 28134 (parse_command_line): Parse the two options above. 28135 (main) Handle the two new options above. 28136 * tests/Makefile.am: Build the new runtestaltdwarf test. Add the 28137 new data/test-alt-dwarf-file/* files to the build system. 28138 * tests/test-alt-dwarf-file.cc: New test driver. 28139 * tests/data/test-alt-dwarf-file/test0-common.cc: New test input 28140 files. 28141 * tests/data/test-alt-dwarf-file/libtest0-common.so: Likewise. 28142 * tests/data/test-alt-dwarf-file/test0.cc: Likewise. 28143 * tests/data/test-alt-dwarf-file/libtest0.so: Likewise. 28144 * tests/data/test-alt-dwarf-file/test0.h: Likewise. 28145 * tests/data/test-alt-dwarf-file/test0-common-dwz.debug: Likewise. 28146 * tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug: 28147 Likewise. 28148 * tests/data/test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug: 28149 Likewise. 28150 * tests/data/test-read-dwarf/test1.abi: Adjust. bidw doesn't emit 28151 an abstract constructor/destructor anymore. It emits just the 28152 functions matching the cdtor symbols found in the binary. 28153 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 28154 281552014-07-26 Dodji Seketeli <dodji@redhat.com> 28156 28157 Better handle corner cases of void* DWARF parsing 28158 * src/abg-dwarf-reader.cc (build_pointer_type_def): Better 28159 support cases where the underlying type of the pointer is not 28160 know. In that case, the pointer should not be created. 28161 281622014-07-20 Dodji Seketeli <dodji@redhat.com> 28163 28164 Support finding symbols with bias wrt DWARF references 28165 * src/abg-dwarf-reader.cc (get_binary_load_address): New function 28166 definition. 28167 (read_context::elf_handle): Add comment. 28168 (read_context::{dwarf_elf_handle, dwarf_is_splitted, 28169 maybe_adjust_address_for_exec_or_dyn}): New method definitions. 28170 (maybe_adjust_fn_sym_address) 28171 (maybe_adjust_var_sym_address): Move these so they become members 28172 of read_context. Also, For shared libraries and executable (that 28173 could have been e.g prelinked), consider their loading address 28174 when trying to find which symbol resides at a given place in 28175 memory. 28176 (read_context::{get_function_address, get_variable_address): 28177 Adjust. 28178 (build_translation_unit_and_add_to_ir): Fix comment. 28179 281802014-07-20 Dodji Seketeli <dodji@redhat.com> 28181 28182 Reset the scope of void_type_decl for each new translation unit 28183 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 28184 Clear the void_type_decl on new translation units. 28185 281862014-07-18 Dodji Seketeli <dodji@redhat.com> 28187 28188 Update INSTALL file 28189 * INSTALL: Adjust the copyright year information because autotools 28190 2.69 did. 28191 281922014-07-18 Dodji Seketeli <dodji@redhat.com> 28193 28194 Correctly write the name of a const reference type 28195 * src/abg-dwarf-reader.cc (maybe_strip_qualification): Define new 28196 function. 28197 (build_ir_node_from_die): Use the maybe_strip_qualification when 28198 building a qualified type. 28199 * src/abg-ir.cc (qualified_type_def::build_name): Fix the 28200 representation of the name of a reference that is const. 28201 * tests/data/test-read-dwarf/test1.abi: Adjust. 28202 * tests/data/test-diff-dwarf/test0-report.txt: Likewise. 28203 * tests/data/test-diff-dwarf/test1-report.txt: Likewise. 28204 * tests/data/test-diff-dwarf/test6-report.txt: Likewise. 28205 * tests/data/test-diff-dwarf/test7-report.txt: Likewise. 28206 * tests/data/test-diff-dwarf/test8-report.txt: Likewise. 28207 * tests/data/test-diff-filter/test0-report.txt: Likewise. 28208 * tests/data/test-diff-filter/test01-report.txt: Likewise. 28209 * tests/data/test-diff-filter/test2-report.txt: Likewise. 28210 * tests/data/test-diff-filter/test3-report.txt: Likewise. 28211 * tests/data/test-diff-filter/test9-report.txt: Likewise. 28212 * tests/data/test-diff-filter/test10-report.txt: Likewise. 28213 * tests/data/test-diff-filter/test13-report.txt: Likewise. 28214 * tests/data/test-diff-filter/test14-0-report.txt: Likewise. 28215 * tests/data/test-diff-filter/test14-1-report.txt: Likewise. 28216 282172014-07-01 Sinny Kumari <skumari@redhat.com> 28218 28219 Consider symbols with STB_GNU_UNIQUE binding as public 28220 * src/abg-ir.cc (is_public): Change in function to consider 28221 symbols with STB_GNU_UNIQUE binding as public 28222 * tests/data/test-read-dwarf/test6.cc: Test file to generate 28223 STB_GNU_UNIQUE binding symbols 28224 * tests/data/test-read-dwarf/test6.so: Test shared library having 28225 STB_GNU_UNIQUE binding symbols 28226 * tests/data/test-read-dwarf/test6.so.abi: XML file containing 28227 dwarf information from test6.so 28228 * tests/test-read-dwarf.cc (in_out_specs): Add the new test above 28229 * tests/Makefile.am: Add tests/data/test-read-dwarf/test6.cc, 28230 tests/data/test-read-dwarf/test6.so and 28231 tests/data/test-read-dwarf/test6.so.abi to the distribution 28232 282332014-07-01 Dodji Seketeli <dodji@redhat.com> 28234 28235 Add comment to test-read-write.cc 28236 * tests/test-read-write.cc: Update copyright notice and add a 28237 meaningful comment for the file. 28238 282392014-06-23 Dodji Seketeli <dodji@redhat.com> 28240 28241 Support reading void* type from DWARF 28242 * include/abg-ir.h (type_decl::get_void_type_decl): Declare new 28243 static method. 28244 * src/abg-ir.cc (type_decl::get_void_type_decl): Define it. 28245 * src/abg-dwarf-reader.cc (build_ir_node_for_void_type): Define 28246 new static function. 28247 (build_pointer_type_def): Support void* type nodes here. 28248 * tests/data/test-read-dwarf/test5.cc: Source code for new test 28249 input. 28250 * tests/data/test-read-dwarf/test5.o: New test input. 28251 * tests/data/test-read-dwarf/test5.o.abi: Likewise. 28252 * tests/Makefile.am: Add the above to the source distribution. 28253 282542014-06-23 Dodji Seketeli <dodji@redhat.com> 28255 28256 Update a comment in abg-dwarf-reader.cc 28257 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Update a 28258 comment here. 28259 282602014-06-23 Mark Wielaard <mjw@redhat.com> 28261 28262 Handle C99 restrict qualifier and DWARFv3 DW_TAG_restrict_type. 28263 * src/abg-dwarf-reader.cc (build_qualified_type): Handle 28264 DW_TAG_restrict_type by adding CV_RESTRICT. 28265 (build_ir_node_from_die): Call build_qualified_type for 28266 DW_TAG_restrict_type. 28267 * src/abg-reader.cc (build_qualified_type_decl): Handle 28268 "restrict" attribute by adding CV_RESTRICT. 28269 * src/abg-writer.cc (write_qualified_type_def): Output 28270 "restrict" attribute for CV_RESTRICT. 28271 * tests/data/test-read-dwarf/test4.c: New test file. 28272 * tests/data/test-read-dwarf/test4.so: Likewise. 28273 * tests/data/test-read-dwarf/test4.so.abi: Likewise. 28274 * tests/data/test-read-write/test24.xml: Likewise. 28275 * tests/test-read-dwarf.cc (in_out_specs): Add test4. 28276 * tests/test-read-write.cc (in_out_specs): Add test24.xml. 28277 282782014-06-23 Dodji Seketeli <dodji@seketeli.org> 28279 28280 Add subdir-objects automake option where it is needed 28281 * src/Makefile.am: Add the subdir-object automake option here. 28282 Do not specify absolute paths for the input files as Automake now 28283 takes care of that just fine. 28284 * tests/Makefile.am: Likewise. 28285 * tools/Makefile.am: Likewise. 28286 282872014-06-23 Dodji Seketeli <dodji@seketeli.org> 28288 28289 Remove autotools artifacts from the repository 28290 * config.guess: Remove from revision control system. 28291 * config.sub: Likewise. 28292 * depcomp: Likewise. 28293 * m4/libtool.m4: Likewise. 28294 * missing: Likewise. 28295 282962014-06-23 Dodji Seketeli <dodji@redhat.com> 28297 28298 Avoid reporting diff nodes that have already been reported 28299 * include/abg-comp-filter.h (class harmful_filter): Update 28300 comment. 28301 (class redundant_filter): Declare new filter. 28302 * include/abg-comparison.h (enum 28303 diff_category::NOT_REDUNDANT_CATEGORY): New category. Update the 28304 values of the other enumerators. 28305 (diff_context::{add_diff, diff_has_been_traversed}): New overloads. 28306 (diff_context::{categorizing_redundancy, show_redundant_changes}): 28307 Declare new methods. 28308 (diff_context::remove_from_category): Define new inline method. 28309 * src/abg-comparison.cc (noop_deleter::operator()): Constify the 28310 parameter. 28311 (CATEGORIZE_REDUNDANCY_FROM_CHILD_NODE) 28312 (UPDATE_REDUNDANCY_CATEGORIZATION_FROM_NODE_SUBTREE): New macros. 28313 (TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY) 28314 (TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY) 28315 (TRAVERSE_MEM_FN_DIFF_NODE_AND_PROPAGATE_CATEGORY): Use the new 28316 CATEGORIZE_REDUNDANCY_FROM_CHILD_NODE and 28317 UPDATE_REDUNDANCY_CATEGORIZATION_FROM_NODE_SUBTREE macros above. 28318 (ENSURE_DIFF_NODE_TRAVERSED_ONCE) 28319 (ENSURE_MEM_DIFF_NODE_TRAVERSED_ONCE): If the (type_decl or class) 28320 node hasn't been yet traversed, mark it as non-redundant. 28321 (diff_context::priv::categorizing_redundancy): New member. 28322 (diff_context::priv::priv): Initialize it. 28323 (diff_context::{add_diff, diff_has_been_traversed): Define new 28324 overloads. 28325 (diff_context::mark_diff_as_traversed): Intern a diff node that is 28326 marked as being traversed. 28327 (diff_context::{categorizing_redundancy, show_redundant_changes}): 28328 Define new methods. 28329 (diff::is_filtered_out): A redundant function or top-level 28330 variable is considered filtered-out. Otherwise, the new 28331 NOT_REDUNDANT_CATEGORY doesn't play any role when comparing 28332 allowed categories with the set of categories a diff node belongs 28333 to. 28334 (corpus::priv::categorize_redundant_changed_sub_nodes): Define 28335 new member function. 28336 (corpus_diff::priv::apply_filters_and_compute_diff_stats): Change 28337 this to first walk the changed functions and variables to apply 28338 filters, then categorize redundant changed functions, and then 28339 walk the changed functions and variables again to count 28340 filtered-out diff nodes. 28341 (filtering::redundant_filter::visit): Define new member function. 28342 * tools/bidiff.cc (options::show_redundant_changes): New data 28343 member. 28344 (options::options): Initialize it. 28345 (display_usage): Add help string for the --redundant command line 28346 option. 28347 (parse_command_line): Add support for the --redundant command line 28348 option. 28349 (set_diff_context_from_opts): Take the --redundant command line 28350 option in account. 28351 * tests/test-diff-filter.cc: Update this to add new test inputs. 28352 * tests/data/test-diff-filter/test14-0-report.txt: New test input. 28353 * tests/data/test-diff-filter/test14-1-report.txt: Likewise. 28354 * tests/data/test-diff-filter/test14-v0.cc: Likewise. 28355 * tests/data/test-diff-filter/test14-v0.o: Likewise. 28356 * tests/data/test-diff-filter/test14-v1.cc: Likewise. 28357 * tests/data/test-diff-filter/test14-v1.o: Likewise. 28358 * tests/data/test-diff-filter/test15-0-report.txt: Likewise. 28359 * tests/data/test-diff-filter/test15-1-report.txt: Likewise. 28360 * tests/data/test-diff-filter/test15-v0.cc: Likewise. 28361 * tests/data/test-diff-filter/test15-v0.o: Likewise. 28362 * tests/data/test-diff-filter/test15-v1.cc: Likewise. 28363 * tests/data/test-diff-filter/test15-v1.o: Likewise. 28364 * tests/Makefile.am: Add the above to the build system. 28365 283662014-06-23 Dodji Seketeli <dodji@redhat.com> 28367 28368 A name that couldn't be demangled remains the same 28369 * src/abg-ir.cc (demangle_cplus_mangled_name): When the demangler 28370 fails to demangle a name, just return the input name as-is. 28371 283722014-06-23 Dodji Seketeli <dodji@redhat.com> 28373 28374 Update copyright notice for a bunch of files 28375 * include/abg-comp-filter.h: Update copyright notice. 28376 * include/abg-comparison.h: Likewise. 28377 * src/abg-comparison.cc: Likewise. 28378 * src/abg-ir.cc: Likewise. 28379 * tools/bidiff.cc: Likewise. 28380 * tests/test-diff-filter.cc: Likewise. 28381 283822014-06-19 Sinny Kumari <skumari@redhat.com> 28383 28384 Keep symbol's multiple aliases within single attribute separated by comma 28385 * src/abg-writer.cc (write_elf_symbol_aliases): Changing function 28386 to keep multiple symbol aliases within one alias attribute 28387 * src/abg-reader.cc (build_elf_symbol_db): Changing function to read 28388 symbol's alias attribute and split if multiple alias exist with comma(,) 28389 asi a delimiter and add all aliases to main symbol 28390 * tests/data/test-read-dwarf/test3.c: Test file to generate multiple aliases 28391 * tests/data/test-read-dwarf/test3.so: Test shared library having multiple 28392 aliases of a symbol 28393 * tests/data/test-read-dwarf/test3.so.abi: XML file containing dwarf 28394 information from test3.so 28395 * tests/test-read-dwarf.cc (in_out_specs): Add the new test above 28396 * tests/Makefile.am: Add tests/data/test-read-dwarf/test3.c, 28397 tests/data/test-read-dwarf/test3.so and tests/data/test-read-dwarf/test3.so.abi 28398 to the distribution 28399 284002014-06-18 Mark Wielaard <mjw@redhat.com> 28401 28402 DW_TAG_mutable_type doesn't exist. 28403 * src/abg-dwarf-reader.cc (is_type_tag): Remove DW_TAG_mutable_type. 28404 (build_ir_node_from_die): Likewise. 28405 284062014-06-05 Dodji Seketeli <dodji@redhat.com> 28407 28408 Look at first parm type and artificial-ness to detect static-ness 28409 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): To 28410 tell if a member function is static, look if the first parm is a 28411 pointer to the type of the enclosing class, and if it's 28412 artificial. Don't bother trying to be smart by looking at the 28413 non-presence of DW_AT_object_pointer b/c that attribute wasn't 28414 emitted by GCC 4_4. 28415 284162014-06-04 Dodji Seketeli <dodji@redhat.com> 28417 28418 Harden debug info path management & better error reporting 28419 * include/abg-dwarf-reader.h (enum status): New enum. 28420 (read_corpus_from_elf): Return an instance of status above, and 28421 return the corpus by parameter. 28422 * src/abg-dwarf-reader.cc (create_default_dwfl): Add a comment 28423 about elfutils wanting the Dwfl_Callbacks::debuginfo_path to be an 28424 absolute path. 28425 (read_corpus_from_elf): Return an instance of status above, and 28426 return the corpus by parameter. 28427 * tools/abg-tools-utils.h (make_path_absolute): Declare new function. 28428 * tools/abg-tools-utils.cc (make_path_absolute): New 28429 implementation. 28430 * tools/bidiff.cc (options::di_root_path[12]): Make these be 28431 shared pointers. 28432 (parse_command_line): ensure the debug info root paths are 28433 absolute. 28434 (main): Adjust. Give meaningful errors when the debug info or 28435 symbol files couldn't be read. 28436 * tools/bidw.cc (options::di_root_path): Make this be a shared 28437 pointer. 28438 (parse_command_line): Ensure the debug info root path is absolute. 28439 (main): Adjust. Give meaningful errors when the debug info or 28440 symbol files couldn't be read. 28441 * tools/bilint.cc (options::di_root_path): Make this be a shared 28442 pointer. 28443 (parse_command_line): Ensure the debug info root path is absolute. 28444 (main): Adjust. Give meaningful errors when the debug info or 28445 symbol file couldn't be read. 28446 * tests/test-diff-dwarf.cc (main): Adjust. 28447 * tests/test-read-dwarf.cc (main): Likewise. 28448 284492014-06-02 Dodji Seketeli <dodji@redhat.com> 28450 28451 Do not choke on AR archives 28452 * tools/abg-tools-utils.h (file_type::FILE_TYPE_AR): New enumerator. 28453 * tools/abg-tools-utils.cc (guess_file_type): Recognize AR archive 28454 files. 28455 * tools/bidiff.cc (main): Support AR archives. 28456 * tools/bidw.cc (main): Likewise. 28457 * tools/bilint.cc (main): Likewise. 28458 284592014-05-30 Dodji Seketeli <dodji@redhat.com> 28460 28461 Honor linkage name showing when displaying added/removed member functions 28462 * src/abg-comparison.cc (represent): Take a diff_context. If 28463 instructed to show linkage names, show the linkage name of the 28464 member function. 28465 (class_diff::report): Adjust for the new signature of represent(). 28466 284672014-05-30 Dodji Seketeli <dodji@redhat.com> 28468 28469 Make bidiff filter output and display symbol names by default 28470 * tools/bidiff.cc (options::options): Initialize 28471 options::show_linkage_names to true and 28472 options::show_harmful_changes to false. 28473 (parse_command_line): Change --linkage-names into 28474 --no-linkage-names as the linkage names are now displayed by 28475 default. Change --no-harmless into --harmless as harmless changes 28476 are now filtered by default. 28477 (display_usage): Update help string for the --linkage-names -> 28478 --no-linkage-names and --no-harmful -> --harmful change. 28479 * tests/test-diff-filter.cc: Adjust. 28480 284812014-05-29 Dodji Seketeli <dodji@redhat.com> 28482 28483 Ensure added/removed member functions have their symbols added/removed 28484 * include/abg-comparison.h (diff_context::{set_corpora, 28485 get_first_corpus, get_second_corpus}): Declare new member 28486 functions. 28487 * src/abg-comparison.cc (diff_context::{set_corpora, 28488 get_first_corpus, get_second_corpus}): Define them. 28489 (compute_diff): In the overload for corpus_sptr stick the corpora 28490 being compared, into the diff context. 28491 (class_diff::ensure_lookup_tables_populated): If a member function 28492 is allegedly removed, check that its underlying symbol is removed 28493 from the corpus as well. Otherwise, consider that the member 28494 function hasn't been removed. Likewise, if a member function is 28495 allegedly added, check that its underlying symbol has been added 28496 to the corpus as well. Otherwise, consider that the member 28497 function hasn't been added. The symbols can now be accessed 28498 through the two corpora that are now present in the diff context. 28499 285002014-05-29 Dodji Seketeli <dodji@redhat.com> 28501 28502 Fix scope for DIEs with specification or abstract_origin attributes 28503 * src/abg-dwarf-reader.cc (get_scope_for_die): If the DIE has a 28504 DW_AT_specification or DW_AT_abstract_origin attribute, get the 28505 scope of the referred-to DIE. 28506 (build_ir_node_from_die): For a variable DIE that has a 28507 DW_AT_{specification,abstract_origin} attribute, do not add the 28508 built variable IR node to its scope because it is already in a 28509 scope. It's in a scope because that built variable is for the DIE 28510 that is referred-to by the DW_AT_{specification,abstract_origin} 28511 attribute. Likewise for member functions. Also, now, 28512 get_scope_for_die can return a class for a function DIE because 28513 get_scope_for_die now returns the *logical* scope of the DIE; that 28514 is, it follows DW_AT_{specification,abstract_origin} attributes. 28515 * tests/data/test-read-dwarf/test1.abi: Adjust. 28516 285172014-05-28 Dodji Seketeli <dodji@redhat.com> 28518 28519 Add a symbol database to the ABI Corpus & support symbol aliases 28520 * include/abg-corpus.h (corpus::{g,s}et_{fun,var}_symbol_map{_sptr}): 28521 Declare new accessors. 28522 (corpus::lookup_{variable,function}_symbol): Declare new member 28523 functions. 28524 * src/abg-corpus.cc (corpus::{g,s}et_{fun,var}_symbol_map{_sptr}): 28525 Define new accessors. 28526 (corpus::lookup_{variable,function}_symbol): Define new member 28527 functions. 28528 * include/abg-ir.h (string_elf_symbol_sptr_map_type) 28529 (string_elf_symbol_sptr_map_sptr, elf_symbols) 28530 (string_elf_symbols_map_type, string_elf_symbols_map_sptr): New 28531 convenience typedefs. 28532 (elf_symbol::{get_main_symbol, is_main_symbol, get_next_alias, 28533 has_aliases, add_alias, get_id_string, 28534 get_name_and_version_from_id, operator=}): Declare new member 28535 functions. 28536 * src/abg-ir.cc (elf_symbol::{get_main_symbol, is_main_symbol, 28537 get_next_alias, has_aliases, add_alias, get_id_string, 28538 get_name_and_version_from_id, operator=}): Define new member 28539 functions. 28540 * include/abg-reader.h (read_corpus_from_file): Take a shared 28541 pointer to corpus. 28542 * src/abg-reader.cc (read_context::{g,s}et_corpus): Define these. 28543 (build_elf_symbol_db, build_elf_symbol_from_reference) 28544 (read_symbol_db_from_input): Define new functions. 28545 (read_corpus_from_input): Adjust. Make it read symbol databases. 28546 (build_elf_symbol): Harden this. 28547 (build_{var,function}_decl): Read the symbol reference. Do not 28548 read the local symbol serialization anymore. 28549 (read_corpus_from_archive): Adjust. 28550 (read_corpus_from_file): Take a reference to a shared pointer to 28551 corpus, rather than a reference to the corpus. 28552 (read_corpus_from_native_xml): Only keep the overload that returns 28553 a corpus. Set the current context with the corpus. 28554 * src/abg-dwarf-reader.cc (addr_elf_symbol_sptr_map_type) 28555 (addr_elf_symbol_sptr_map_sptr): New convenience typedefs. 28556 (read_context::{fun_sym_addr_sym_index_map_, 28557 var_sym_addr_sym_index_map_): Remove. 28558 (read_context::{fun,var}_addr_sym_map_): New. Replace the above 28559 that got removed. 28560 (read_context::{var,fun}_syms_): New. 28561 (read_context::lookup_elf_{fn,var}_symbol_from_address): Adjust. 28562 (read_context::{fun,var}_addr_sym_map{_sptr}): New. 28563 (read_context::{fun,var}_syms{_sptr}): New. 28564 (read_context::load_symbol_maps): Replace 28565 read_context::load_symbol_addr_to_index_maps. Adjust to load all 28566 the new maps. 28567 (read_context::maybe_load_symbol_maps): New. 28568 (read_debug_info_into_corpus): Renamed build_corpus into this. 28569 Update to load symbol maps and set it to the corpus. 28570 * src/abg-writer.cc (write_context::get_fun_symbol_map): New 28571 accessor. 28572 (write_elf_symbol_aliases, write_elf_symbol_reference) 28573 (write_elf_symbols_table): Define new static functions. 28574 (write_var_decl): Write the reference to the underlying symbol of 28575 the variable. Do not write the full symbol here anymore. 28576 (write_function_decl): Likewise, write the reference to the 28577 underlying symbol of the function. Do not write the full symbol 28578 here anymore. 28579 (write_corpus_to_native_xml): Write the symbol databases at the 28580 beginning of the corpus document. 28581 * src/abg-comparison.cc 28582 (corpus_diff::priv::ensure_lookup_tables_populated): Now that the 28583 corpus has symbols, check if a the symbol of an allegedly deleted 28584 function (resp. variable) is deleted; if not, then do not report 28585 the function (resp. variable) as deleted. Similarly, check if the 28586 symbol of an allegedly added function (resp. variable) is added. 28587 if not, the do not report the function (resp. variable) as added. 28588 * tests/test-write-read-archive.cc (main): Adjust. 28589 * tools/biar.cc (extract_tus_from_archive): Likewise. 28590 * tests/data/test-diff-filter/test9-report.txt: Adjust. 28591 * tests/data/test-read-dwarf/test0.abi: Likewise. 28592 * tests/data/test-read-dwarf/test1.abi: Likewise. 28593 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 28594 285952014-05-21 Dodji Seketeli <dodji@redhat.com> 28596 28597 Rename 'symbol' in fn names to 'public decl' in abg-corpus.{cc,h} 28598 * src/abg-corpus.cc (lots of places): Rename references to 28599 'symbol' in function & variable names to 'public_decl'. 28600 286012014-05-22 Dodji Seketeli <dodji@redhat.com> 28602 28603 Support debug info files being outside the expected system directories 28604 * include/abg-dwarf-reader.h (read_corpus_from_elf): Take a 28605 debug_info_root_path parameter. 28606 src/abg-dwarf-reader.cc (create_default_dwfl): Take a 28607 debug_info_root_path. Use that to initialize the Dwfl_Callbacks 28608 structure used by dwfl_begin. 28609 (create_default_dwfl_sptr, read_corpus_from_elf): Likewise, Take a 28610 debug_info_root_path parameter. 28611 * tests/test-diff-dwarf.cc (main): Adjust. 28612 * tests/test-read-dwarf.cc (main): Likewise. 28613 * tools/bidiff.cc (options::dir_root_path[12]): New member. 28614 (options::options): Initialize it. 28615 (display_usage): Add help string for the --debug-info-dir[12] 28616 options. 28617 (parse_command_line): Handle the new --debug-info-dir[12] options. 28618 (main): Pass the debug info directories to read_corpus_from_elf. 28619 * bidw.cc (options::::di_root_path): New member. 28620 (options::options): Initialize it. 28621 (display_usage): Add help string for the new --debug-info-dir 28622 option. 28623 (parse_command_line): Handle the new --debug-info-dir. 28624 (main): Pass the debug info root path to read_corpus_from_elf. 28625 * tools/bilint.cc (options::di_root_path): New member. 28626 (options::options): Initialize it. 28627 (display_usage): Add help string for the new --debug-info-dir. 28628 (parse_command_line): Handle --debug-info-dir command line option. 28629 (main): Pass the debug info root path to read_corpus_from_elf. 28630 286312014-05-21 Dodji Seketeli <dodji@redhat.com> 28632 28633 Fix detection of destructors 28634 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Simply 28635 detect that the destructor starts with a '~'. 28636 286372014-05-21 Dodji Seketeli <dodji@redhat.com> 28638 28639 Add clone in the scope of the cloned decl they logically belong to 28640 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Do not try to 28641 add the cloned function/variable to the current scope because 28642 cloning should have added the decl into the scope of the cloned 28643 target. 28644 * src/abg-ir.cc ({var,function}_decl::clone): Insert the clone 28645 decl into the scope of the cloned decl. My understanding is that 28646 it's where they belong. 28647 * tests/data/test-read-dwarf/test1.abi: Update this to incorporate 28648 all the abstract constructors/destructors *and* their clones into 28649 the classes where they belong. 28650 * tests/data/test-read-dwarf/test1.abi: Adjust for the abstract 28651 cdtor being added to the class, as well as their cloned concrete 28652 instances. 28653 * tests/data/test-read-dwarf/test2.so.abi: Likewise. 28654 286552014-05-20 Dodji Seketeli <dodji@redhat.com> 28656 28657 Support decl cloning when seeing DW_AT_abstract_origin 28658 * include/abg-ir.h ({var,function}_decl::clone): New method. 28659 * src/abg-dwarf-reader.cc (die_die_attribute): Add a flag to avoid 28660 looking through DW_AT_abstract_origin attribute here. 28661 (build_function_decl): Set the linkage name from 28662 DW_AT_linkage_name if it's not set yet. 28663 (build_ir_node_from_die): For DW_TAG_{variable,subprogram}, when 28664 we see DW_AT_abstract_origin, clone the decl they refer to. 28665 Also, avoid dropping the DIE on the floor just because it doesn't 28666 have die_is_artificial here. 28667 * src/abg-ir.cc ({var,function}_decl::clone): Implement this. 28668 286692014-05-19 Dodji Seketeli <dodji@redhat.com> 28670 28671 Don't share types across TUs when DW_TAG_partial_unit are involved 28672 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 28673 Clear the part of the context that needs to be per TU. 28674 (build_ir_node_from_die): Assert that this should not be called 28675 for partial and imported unit because for now our practical 28676 assumption is that DIEs under partial unit are lazily read only 28677 when referenced by DIEs that are under DW_TAG_compile_unit. 28678 * tests/Makefile.am: Add the new test files to the build system. 28679 * tests/data/test-read-dwarf/test2.so.abi: Fix the reference 28680 output here to avoid sharing types across TUs, making the output 28681 valid for bilint. 28682 286832014-05-19 Dodji Seketeli <dodji@redhat.com> 28684 28685 Initial support for DW_TAG_partial_unit 28686 * src/abg-dwarf-reader.cc (read_context::cur_tu_die_): New member. 28687 (read_context::read_context): Initialize the new member. 28688 (read_context::cur_tu_die): New accessors. 28689 (find_last_import_unit_point_before_die): New static function. 28690 (get_parent_die): Take a logical current die offset parameter. If 28691 the die we want the parent for is a partial unit, then find the 28692 last DW_TAG_imported_unit that imports that partial unit before 28693 the logical current die and return the parent of that 28694 DW_TAG_imported_unit die. 28695 (get_scope_for_die): Take a logical current die offset parameter. 28696 Adjust. 28697 (build_translation_unit_and_add_to_ir): Set/unset the current 28698 translation unit DIE in the context. Adjust. 28699 (build_namespace_decl_and_add_to_ir) 28700 (build_class_type_and_add_to_ir, build_qualified_type) 28701 (build_pointer_type_def, build_reference_type, build_typedef_type) 28702 (build_var_decl, build_function_decl, build_ir_node_from_die): 28703 Take a logical current die offset parameter. Adjust. 28704 (build_corpus): Accept that we can have DIE that are not 28705 DW_TAG_compile_unit at the top level, because, well, we can now 28706 have DW_TAG_partial_unit too. 28707 * tests/data/test-read-dwarf/test2-{0,1}.cc: New test source 28708 files. 28709 * tests/data/test-read-dwarf/test2.h: Likewise. 28710 * tests/data/test-read-dwarf/test2.so: New input binary to read. 28711 * tests/data/test-read-dwarf/test2.so.abi: New reference test to 28712 compare against. 28713 * tests/test-read-dwarf.cc: Adjust to launch the new test. 28714 287152014-05-14 Dodji Seketeli <dodji@redhat.com> 28716 28717 Re-build a test input file with debug info 28718 * tests/data/test-lookup-syms/test1.so: Rebuild this with debug 28719 info. 28720 287212014-05-14 Dodji Seketeli <dodji@redhat.com> 28722 28723 Serialize and de-serialize elf symbols for var & function decls 28724 * abg-ir.h (string_to_elf_symbol_type, string_to_elf_symbol_binding): 28725 Declare new entry points. 28726 * src/abg-ir.cc (string_to_elf_symbol_type) 28727 (string_to_elf_symbol_binding): Define new entry points. 28728 * include/abg-libxml-utils.h (xml_char_sptr_to_string): Declare 28729 new entry points. 28730 * src/abg-libxml-utils.cc (xml_char_sptr_to_string): Define new 28731 entry points. 28732 * src/abg-reader.cc (read_elf_symbol_type) 28733 (read_elf_symbol_binding, build_elf_symbol): Define new static 28734 functions. 28735 (build_function_decl, build_var_decl): Use the new 28736 build_elf_symbol and set the symbol to the function. Flag the 28737 function as having a public symbol in the symbol table if the 28738 symbol is public. 28739 * src/abg-writer.cc (write_elf_symbol_type) 28740 (write_elf_symbol_binding, write_elf_symbol): Define new static 28741 functions. 28742 (write_var_decl, write_function_decl): Use the new 28743 write_elf_symbol to serialize the symbol for the decl. 28744 * tests/data/test-read-dwarf/test[01].abi: Adjust. 28745 287462014-05-14 Dodji Seketeli <dodji@redhat.com> 28747 28748 Don't crash when de-serializing an empty function parm xml node 28749 * src/abg-reader.cc (build_function_parameter): Do not crash if 28750 the xml node is NULL. 28751 287522014-05-14 Dodji Seketeli <dodji@redhat.com> 28753 28754 Fix a typo in serializing a decl_base::binding 28755 * src/abg-ir.cc (operator<<(std::ostream&, decl_base::binding)): 28756 Fix a typo here. 28757 287582014-05-14 Dodji Seketeli <dodji@redhat.com> 28759 28760 Add a help string for the --no-absolute-path option of bisym 28761 * tools/bisym.cc (show_help): Add a missing help string. 28762 287632014-05-13 Dodji Seketeli <dodji@redhat.com> 28764 28765 Do not try to use ELF hash tables in demangling lookup mode 28766 * src/abg-dwarf-reader.cc (lookup_symbol_from_elf): If in 28767 demangling mode, do not use ELF hash tables. 28768 287692014-05-13 Dodji Seketeli <dodji@redhat.com> 28770 28771 Use the proper symbol table for and set linkage_name to symbol name 28772 * src/abg-dwarf-reader.cc (find_symbol_table_section): Return the 28773 .symtab if we are looking at an executable or relocatable file and 28774 .dynsym if we are looking at a DSO. 28775 (find_symbol_table_section_index): Likewise. Implement this in 28776 terms of find_symbol_table_section. 28777 (build_{function,var}_decl): Set the linkage_name to the symbol 28778 name, if the symbol name is not empty. 28779 * tests/data/test-diff-filter/test9-report.txt: Adjust. 28780 287812014-05-13 Dodji Seketeli <dodji@redhat.com> 28782 28783 Remove redundant "'" around linkage names in diff reports 28784 * src/abg-comparison.cc (corpus_diff::report): Remove the 28785 redundant "'" from the linkage names in the diff. 28786 287872014-05-08 Dodji Seketeli <dodji@redhat.com> 28788 28789 Initial support for elf symbol (versionning) during decl comparison 28790 * include/abg-fwd.h (get_linkage_name): Remove. 28791 * include/abg-dwarf-reader.h (enum symbol_type) 28792 (enum symbol_binding): Move these into abg-ir.h. 28793 (lookup_symbol_from_elf, lookup_public_function_symbol_from_elf): 28794 Adjust. 28795 * src/abg-dwarf-reader.cc (eval_last_constant_dwarf_sub_expr): 28796 Declare this before using it. 28797 (die_address_attribute, die_location_address) 28798 (stt_to_elf_symbol_type, stb_to_elf_symbol_binding) 28799 (find_hash_table_section_index, find_symbol_table_section) 28800 (find_symbol_table_section_index, find_text_section) 28801 (find_bss_section, compare_symbol_name) 28802 (get_symbol_versionning_sections get_version_for_symbol) 28803 (lookup_symbol_from_sysv_hash_tab) 28804 (lookup_symbol_from_gnu_hash_tab, get_elf_class_size_in_bytes) 28805 (bloom_word_at, setup_gnu_ht, lookup_symbol_from_elf_hash_tab) 28806 (lookup_symbol_from_symtab, maybe_adjust_fn_sym_address) 28807 (maybe_adjust_var_sym_address): New static functions. 28808 (enum hash_table_kind): New enum. 28809 (struct gnu_ht): New struct. 28810 (read_context::var_decls_to_add_): Renamed var_decls_to_add into 28811 this. 28812 (read_context::{fun, var}_sym_addr_sym_index_map_): New member. 28813 (read_context::{lookup_symbol_from_elf, 28814 lookup_elf_symbol_from_index, lookup_elf_fn_symbol_from_address, 28815 lookup_elf_var_symbol_from_address, fun_sym_addr_sym_index_map, 28816 var_sym_addr_sym_index_map, load_symbol_addr_to_index_maps, 28817 get_function_address, get_variable_address}): New member 28818 functions. 28819 (read_context::lookup_public_{variable, 28820 function}_symbol_from_elf): Adjust. 28821 (op_pushes_constant_value): Fix a bug here. 28822 (lookup_symbol_from_elf): Adjust. Support cases where there is no 28823 elf hash table, e.g, for relocatable files. 28824 (lookup_public_function_symbol_from_elf) 28825 (lookup_public_variable_symbol_from_elf): Adjust. 28826 (build_var_decl): Allow updating the var_decl to associate it with 28827 its underlying symbol. In that case, if the linkage name is not 28828 set, set it to the symbol name. 28829 (build_function_decl): Likewise for function_decl. 28830 (operator<<(std::ostream&, symbol_type)): 28831 (operator<<(std::ostream&, symbol_binding)): Move these do 28832 abg-ir.cc. 28833 * include/abg-ir.h (class elf_symbol): Declare new class. Move 28834 enum symbol_binding and enum symbol_type (from abg-dwarf-reader.h) to 28835 elf_symbol::binding and elf_symbol::type here. 28836 (operator<<(std::ostream&, elf_symbol::type)) 28837 (operator<<(std::ostream&, elf_symbol::binding)) 28838 (operator==(const elf_symbol_sptr, const elf_symbol_sptr)): New 28839 operators. 28840 (class elf_symbol::version): Declare new class. 28841 (class var_decl): Make this pimpl, and add ... 28842 (var_decl::{g,s}et_symbol): ... new member functions. 28843 (class function_decl): Likewise, make this pimpl and add ... 28844 (function_decl::{g,s}et_symbol): ... new member functions. 28845 * src/abg-ir.cc (struct elf_symbol, elf_symbol::priv): New 28846 types. 28847 (elf_symbol::*): Lots of new members and member functions. 28848 (operator==(const elf_symbol_sptr, const elf_symbol_sptr)): New. 28849 (operator<<(std::ostream&, elf_symbol::type)): New. 28850 (operator<<(std::ostream&, elf_symbol::binding)): New. 28851 (elf_symbol::version::priv): New type. 28852 (elf_symbol::version::*): Lots of member functions. 28853 (get_linkage_name): Removed. 28854 (var_decl::priv): New type. Pimplify the thing. 28855 (var_decl::{s,g}et_symbol): New. 28856 (var_decl::operator==): Take symbols in account in the comparison. 28857 (function_decl::priv): New type. 28858 (function_decl::*): Pimplify. 28859 (function_decl::{s,g}et_symbol): New. 28860 (function_decl::operator==): Take symbols in account in the 28861 comparison. 28862 * include/abg-comparison.h (diff_context::show_linkage_name): New 28863 member function. 28864 * src/abg-comparison.cc (diff_context::priv::show_linkage_name_): 28865 New member. 28866 (diff_context::priv::priv): Initialize it. 28867 (diff_context::show_linkage_names): New member function. 28868 (corpus_diff::report): If the user used --show-linkage-names, 28869 display the linkage name after the name of the functions. Add 28870 missing "'" in the some spots. 28871 * tools/bidiff.cc (options.show_linkage_names): New member. 28872 (display_usage, parse_command_line): Support --linkage-names. 28873 * tools/bisym.cc (show_help): Add '\n' at the end of help string 28874 for --demangle. Add --no-absolute-path option. 28875 (parse_command_line): Support --no-absolute-path. 28876 (main): Adjust for symbol (versionning) support. Consider that 28877 the program successfully completed even when the symbol wasn't 28878 found. Support --no-absolute-path. 28879 * tests/data/test-lookup-syms/test0-report.txt: New. 28880 * tests/data/test-lookup-syms/test01-report.txt: New. 28881 * tests/data/test-lookup-syms/test02-report.txt: New. 28882 * tests/data/test-read-dwarf/test0.abi: Adjust. 28883 * tests/data/test-read-dwarf/test1.abi: Adjust. 28884 * tests/data/test-diff-dwarf/test7-report.txt: Adjust. 28885 * tests/data/test-diff-filter/test10-report.txt: Adjust. 28886 * tests/data/test-diff-filter/test12-report.txt: Adjust. 28887 * tests/data/test-lookup-syms/test1-[123]-report.txt: New. 28888 * tests/data/test-lookup-syms/test1.c: New. 28889 * tests/data/test-lookup-syms/test1.version-script: New. 28890 * tests/test-lookup-syms.cc: Adjust for new tests. 28891 * test/Makefile.am: Adjust makefile. 28892 288932014-05-07 Dodji Seketeli <dodji@redhat.com> 28894 28895 Rename decl_base::get_mangled_name into decl_base::get_linkage_name 28896 * include/abg-ir.h (decl_base::get_linkage_name): Renamed 28897 decl_base::get_mangled_name into this. 28898 * src/abg-comparison.cc 28899 (class_diff::ensure_lookup_tables_populated) 28900 (function_decl_diff::report, type_decl_diff::report) 28901 (corpus_diff::priv::ensure_lookup_tables_populated) 28902 (corpus_diff::report, compute_diff): Adjust. 28903 * src/abg-corpus.cc ({var_comp, func_comp}::operator()): Likewise. 28904 (corpus::priv::build_symbol_table): Likewise. 28905 * src/abg-dwarf-reader.cc (die_linkage_name): Renamed 28906 die_mangled_name into this. 28907 (die_loc_and_name, build_translation_unit_and_add_to_ir) 28908 (build_namespace_decl_and_add_to_ir, build_type_decl) 28909 (build_enum_type, build_class_type_and_add_to_ir) 28910 (build_typedef_type, build_var_decl, build_function_decl, ): Adjust. 28911 * src/abg-hash.cc (decl_base::hash::operator()): Likewise. 28912 * src/abg-ir.cc (decl_base::priv::linkage_name_): Renamed 28913 decl_base::priv::mangled_name_ into this. 28914 (decl_base::priv::priv, decl_base::{decl_base, operator==}) 28915 (get_linkage_name, typedef_decl::typedef_decl, var_decl::var_decl) 28916 (function_decl::function_decl, class_decl::base_spec::base_spec) 28917 (class_decl::method_decl::method_decl): Adjust. 28918 (decl_base::{g,s}et_linkage_name): Renamed 28919 decl_base::{g,s}et_mangled_name into this. 28920 * src/abg-writer.cc (write_decl, write_typedef_decl) 28921 (write_var_decl, write_function_decl, dump): Adjust. 28922 289232014-04-21 Dodji Seketeli <dodji@redhat.com> 28924 28925 Drop symbols not global in a symtab from corpus symtab 28926 * src/abg-corpus.cc (corpus_priv::build_symbol_table): If a 28927 function or variable symbol is not public (global or weak) and 28928 present in an elf symbol table, drop it from the corpus symbol 28929 table. As a result functions are variables (not present in the 28930 elf symbol tables) that we were previously taking in account are 28931 not dropped on the floor, leading to much less noise. 28932 * tests/data/test-diff-dwarf/test0-v0.cc: Update to avoid 28933 generating inline functions. 28934 * tests/data/test-diff-dwarf/test0-v0.o: Likewise. 28935 * tests/data/test-diff-dwarf/test0-v1.cc: Likewise. 28936 * tests/data/test-diff-dwarf/test0-v1.o: Likewise. 28937 * tests/data/test-diff-dwarf/test7-v0.o: Likewise. 28938 * tests/data/test-diff-dwarf/test7-v1.cc: Likewise. 28939 * tests/data/test-diff-dwarf/test7-v1.o: Likewise. 28940 * tests/data/test-diff-dwarf/test8-v0.cc: Likewise. 28941 * tests/data/test-diff-dwarf/test8-v0.o: Likewise. 28942 * tests/data/test-diff-dwarf/test8-v1.cc: Likewise. 28943 * tests/data/test-diff-dwarf/test8-v1.o: Likewise. 28944 * tests/data/test-diff-filter/test0-v0.cc: Likewise. 28945 * tests/data/test-diff-filter/test0-v0.o: Likewise. 28946 * tests/data/test-diff-filter/test0-v1.cc: Likewise. 28947 * tests/data/test-diff-filter/test0-v1.o: Likewise. 28948 * tests/data/test-diff-filter/test10-v0.cc: Likewise. 28949 * tests/data/test-diff-filter/test10-v0.o: Likewise. 28950 * tests/data/test-diff-filter/test10-report.txt: Likewise. 28951 * tests/data/test-diff-filter/test10-v1.o: Likewise. 28952 * tests/data/test-diff-filter/test13-v0.cc: Likewise. 28953 * tests/data/test-diff-filter/test13-v0.o: Likewise. 28954 * tests/data/test-diff-filter/test13-v1.cc: Likewise. 28955 * tests/data/test-diff-filter/test13-v1.o: Likewise. 28956 * tests/data/test-diff-filter/test2-v0.cc: Likewise. 28957 * tests/data/test-diff-filter/test2-v0.o: Likewise. 28958 * tests/data/test-diff-filter/test2-v1.cc: Likewise. 28959 * tests/data/test-diff-filter/test2-v1.o: Likewise. 28960 * tests/data/test-diff-filter/test4-v0.cc: Likewise. 28961 * tests/data/test-diff-filter/test4-v0.o: Likewise. 28962 * tests/data/test-diff-filter/test4-v1.cc: Likewise. 28963 * tests/data/test-diff-filter/test4-v1.o: Likewise. 28964 * tests/data/test-diff-filter/test9-v0.o: Likewise. 28965 * tests/data/test-diff-filter/test9-v1.cc: Likewise. 28966 * tests/data/test-diff-filter/test9-v1.o: Likewise. 28967 289682014-04-21 Dodji Seketeli <dodji@redhat.com> 28969 28970 Fix mangled name setting for static data members from DWARF 28971 * src/abg-dwarf-reader.cc (build_var_decl): Support adding 28972 properties to an existing var_decl. For now just add mangled 28973 name. 28974 (build_ir_node_from_die): Accept DW_TAG_member too. This helps 28975 for when this function is used to add additional properties to an 28976 existing DW_TAG_member representing a static data member. Then, 28977 use build_var_decl to really add the value of the additional 28978 mangled name property. 28979 289802014-04-21 Dodji Seketeli <dodji@redhat.com> 28981 28982 Always show pretty representation of variables in report 28983 * src/abg-comparison.cc (corpus_diff::report): Display the pretty 28984 representation of the variable, no matter what. 28985 289862014-04-21 Dodji Seketeli <dodji@redhat.com> 28987 28988 Set "is_in_public_symbol_table" property for vars & fns 28989 * src/abg-dwarf-reader.cc (build_var_decl, build_function_decl): 28990 Set the "is_in_public_symbol_table" property for the variable or 28991 function decl. 28992 289932014-04-21 Dodji Seketeli <dodji@redhat.com> 28994 28995 Support symbol lookups from ELF 28996 * include/abg-dwarf-reader.h (symbol_type, symbol_binding): New 28997 enums. 28998 (operator<<): Declare new overloads for the new enums above. 28999 (lookup_symbol_from_elf, lookup_public_function_symbol_from_elf): 29000 Declare new entry points. 29001 * src/abg-dwarf-reader.cc (lookup_symbol_from_elf) 29002 (lookup_public_function_symbol_from_elf) 29003 (lookup_public_variable_symbol_from_elf): Define new static 29004 functions. 29005 (read_context::elf_{module_, handle}_): New data members. 29006 (read_context::{elf_module, elf_handle}): New accessors. 29007 (read_context::load_debug_info): Store the elf module into 29008 read_context::_elf_module_. Adjust. 29009 (read_context::{lookup_symbol_from_elf, 29010 lookup_public_function_symbol_from_elf, 29011 lookup_public_variable_symbol_from_elf}): New member functions. 29012 (lookup_symbol_from_elf, lookup_public_function_symbol_from_elf) 29013 (operator<<): Define public entry points. 29014 * tools/bisym.cc: New tool to lookup a symbol in an elf file. 29015 * tools/Makefile.am: Add the bisym.cc source file to the 29016 distribution and arrange to compile it into a 'bisym' executable. 29017 * tests/test-lookup-syms.cc: New test harness. 29018 * tests/data/test-lookup-syms/test0-report.txt: New test input 29019 for the harness above. 29020 * tests/data/test-lookup-syms/test0.cc: Likewise. 29021 * tests/data/test-lookup-syms/test0.o: Likewise 29022 * tests/data/test-lookup-syms/test01-report.txt: Likewise. 29023 * tests/data/test-lookup-syms/test02-report.txt: Likewise. 29024 * tests/Makefile.am: Build the new runtestlookupsyms test and add 29025 the new files to the distribution. 29026 290272014-04-21 Dodji Seketeli <dodji@redhat.com> 29028 29029 Add corpus::{s,g}et_origin accessors 29030 * include/abg-corpus.h (enum corpus::origin): New enum. 29031 (corpus::{g,s}et_origin): New accessors. 29032 * src/abg-corpus.cc (corpus::priv::origin): New data member. 29033 (corpus::priv::is_symbol_table_built): Move this up. 29034 (corpus::priv::priv): Adjust. 29035 (corpus::{g,s}et_origin): Define accessors. 29036 * src/abg-dwarf-reader.cc (read_corpus_from_elf): Set the corpus 29037 origin. Also set the path. Oops. 29038 * src/abg-reader.cc (read_corpus_from_input) 29039 (read_corpus_from_archive): Set the corpus origin. 29040 290412014-04-21 Dodji Seketeli <dodji@redhat.com> 29042 29043 Add a get_linkage_name function. 29044 * include/abg-fwd.h (is_at_global_scope): Declare a new overload. 29045 (get_linkage_name): Declare ... 29046 * src/abg-ir.cc (get_linkage_name): ... these new entry points. 29047 (is_at_global_scope): Define these new overloads useful for the 29048 new get_linkage_name. 29049 290502014-04-21 Dodji Seketeli <dodji@redhat.com> 29051 29052 Pimplify decl_base and add decl_base::{s,g}et_is_in_public_symbol_table 29053 * include/abg-ir.h (struct decl_base::priv): New pimpl type. 29054 (decl_base::priv_): New pimpl. 29055 (decl_base::{hashing_started, peek_hash_value, 29056 peek_qualified_name, set_qualified_name}): Declare new protected 29057 methods. 29058 (decl_base::{get_context_rel, set_qualified_name, get_location, 29059 set_location, set_name, set_mangled_name, get_visibility, 29060 set_visibility}): Move these out-of-line. 29061 (decl_base::{g,s}et_is_public_symbol_table): 29062 (class_decl::hashing_started): Remove this as we now have 29063 decl_base::hashing_started. 29064 (decl_base::{hash_, hashing_started, location_, context_, name_, 29065 qualified_parent_name_, qualified_name_, mangled_name_, 29066 visibility_}): Move all these members into the new ... 29067 * src/abg-ir.cc (struct decl_base::priv): ... pimpl type. 29068 (decl_base::decl_base): Move these out-of-line here. Adjust the 29069 other overloads. 29070 (decl_base::{hashing_started, peek_hash_value, 29071 peek_qualified_name, set_qualified_name}): Define these new 29072 protected methods. 29073 (decl_base::{get_context_rel, set_context_rel, get_location, 29074 set_location, set_name, get_mangled_name, set_mangled_name, 29075 get_visibility, set_visibility}): Define these out-of-line here. 29076 (decl_base::{get_hash, set_hash, get_scope, 29077 get_qualified_parent_name, get_qualified_name, operator==, 29078 set_scope}): Adjust. 29079 (qualified_type_def::get_qualified_name): Likewise. 29080 (pointer_type_def::get_qualified_name): Likewise. 29081 (reference_type_def::get_qualified_name): Likewise. 29082 (var_decl::set_scope): Likewise. 29083 (class_decl::base_spec): Likewise. 29084 (class_decl::method_decl::set_scope): Likewise. 29085 (decl_base::{g,s}et_is_in_public_symbol_table): Define new accessors. 29086 * src/abg-hash.cc ({decl_base, type_decl, scope_decl, 29087 scope_type_decl, qualified_type_def, pointer_type_def, 29088 reference_type_def, enum_type_decl, typedef_decl, var_decl, 29089 class_decl}::hash::operator): Adjust. 29090 290912014-04-17 Dodji Seketeli <dodji@redhat.com> 29092 29093 Categorize base class changes as SIZE_OR_OFFSET_CHANGE_CATEGORY 29094 * include/abg-comparison.h (class_diff::{deleted, inserted, 29095 changed}_bases): Declare new member functions ... 29096 * src/abg-comparison.cc ((class_diff::{deleted, inserted, 29097 changed}_bases)): ... and define them. 29098 * src/abg-comp-filter.cc (base_classes_added_or_removed): Define 29099 new static functions. 29100 (harmless_filter): Categorize base classes added or removed. 29101 * tests/data/test-diff-dwarf/test8-report.txt: New test input. 29102 * tests/data/test-diff-dwarf/test8-v0.cc: Likewise. 29103 * tests/data/test-diff-dwarf/test8-v0.o: Likewise. 29104 * tests/data/test-diff-dwarf/test8-v1.cc: Likewise. 29105 * tests/data/test-diff-dwarf/test8-v1.o: Likewise. 29106 * tests/data/test-diff-filter/test13-report.txt: New test input. 29107 * tests/data/test-diff-filter/test13-v0.cc: Likewise. 29108 * tests/data/test-diff-filter/test13-v0.o: Likewise. 29109 * tests/data/test-diff-filter/test13-v1.cc: Likewise. 29110 * tests/data/test-diff-filter/test13-v1.o: Likewise. 29111 * tests/Makefile.am: Add the new files above to the source distribution. 29112 * tests/test-diff-dwarf.cc: Use the new relevant input above to 29113 run more tests. 29114 * tests/test-diff-filter.cc: Likewise. 29115 291162014-04-17 Dodji Seketeli <dodji@redhat.com> 29117 29118 Fix class diff reporting issues for base classes 29119 * src/abg-comparison.cc (class_diff::report): For base classes, 29120 report their pretty representation. Do not try to report a the 29121 diff of a changed base class that got filtered out. Avoid 29122 emitting too many vertical white spaces. 29123 291242014-04-17 Dodji Seketeli <dodji@redhat.com> 29125 29126 Simplify SIZE_OR_OFFSET_CHANGE_CATEGORY categorizing 29127 * src/abg-comp-filter.cc (harmful_filter::visit): Now that 29128 type_size_changed is correctly geared to not be fulled by 29129 decl-only classes, there is no need for its caller to handle that 29130 case. And data_member_offset_changed ain't affected by decl-only 29131 classes anyway. So the code is now much simpler. 29132 291332014-04-17 Dodji Seketeli <dodji@redhat.com> 29134 29135 Fix API doc for static_data_member_type_size_changed 29136 * src/abg-comp-filter.cc (static_data_member_type_size_changed): 29137 Fix API doc comment. 29138 291392014-04-17 Dodji Seketeli <dodji@redhat.com> 29140 29141 Don't blindly drop DIEs defined in the scope of a function 29142 * src/abg-dwarf-reader.cc (get_scope_for_die): Do not drop a DIE 29143 on the floor just because it is in the scope of a function. We 29144 were dropping a function parameter because its type is a typedef 29145 defined right before the parameter, in the scope of the function. 29146 Urgh. So with this change, that function parameter is not dropped 29147 anymore. I have seen that happening in a DWARF generated by GCC 29148 4.7.1 on libstdc++.so. Hard to come up with a regression test 29149 case for this one. 29150 291512014-04-17 Dodji Seketeli <dodji@redhat.com> 29152 29153 Useless code killing 29154 * src/abg-comparison.cc (decls_equal::operator()(const decls_type, 29155 const decls_type)): Kill dead code. Note that there is a proper 29156 equality operator for decl_base_sptr already. 29157 291582014-04-17 Dodji Seketeli <dodji@redhat.com> 29159 29160 File static data member changes in STATIC_DATA_MEMBER_CHANGE_CATEGORY 29161 * include/abg-comparison.h 29162 (diff_category::STATIC_DATA_MEMBER_CHANGE_CATEGORY): New category. 29163 (diff_category::EVERYTHING_CATEGORY): Update 29164 * src/abg-comp-filter.cc (static_data_member_type_size_changed) 29165 (static_data_member_added_or_removed): Define new static 29166 functions. 29167 (harmless_filter::visit): Categorize changes to static data 29168 members as STATIC_DATA_MEMBER_CHANGE_CATEGORY. 29169 * tools/bidiff.cc (set_diff_context_from_opts): 29170 STATIC_DATA_MEMBER_CHANGE_CATEGORY is falls into the harmless 29171 group. 29172 * tests/data/test-diff-filter/test12-report.txt: New test input. 29173 * tests/data/test-diff-filter/test12-v0.cc: Likewise. 29174 * tests/data/test-diff-filter/test12-v0.o: Likewise. 29175 * tests/data/test-diff-filter/test12-v1.cc: Likewise. 29176 * tests/data/test-diff-filter/test12-v1.o: Likewise. 29177 * tools/bidiff.cc: Run this test with the additional input data 29178 above. 29179 * tests/Makefile.am: Adjust. 29180 291812014-04-17 Dodji Seketeli <dodji@redhat.com> 29182 29183 Fix typo in comments 29184 * include/abg-comparison.h 29185 (diff_category::NON_VIRT_MEM_FUN_CHANGE_CATEGORY): Fix typo in 29186 comments. 29187 291882014-04-17 Dodji Seketeli <dodji@redhat.com> 29189 29190 Only non-static data member changes are SIZE_OR_OFFSET_CHANGE_CATEGORY 29191 * src/abg-comp-filter.cc 29192 (non_static_data_member_type_size_changed): Renamed 29193 data_member_offset_changed into this. Make sure the test detects 29194 changes on *non-static* data members only. 29195 (non_static_data_member_added_or_removed): Likewise for 29196 data_member_offset_changed that got renamed into this. 29197 (harmful_filter::visit): Adjust. 29198 291992014-04-17 Dodji Seketeli <dodji@redhat.com> 29200 29201 Fix comments in categorization code 29202 * src/abg-comp-filter.cc (data_member_added_or_removed): Fix 29203 comments. 29204 292052014-04-16 Dodji Seketeli <dodji@redhat.com> 29206 29207 Really detect static-ness of data members. Oops. 29208 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Let's 29209 consider that a data member being not laid out (i.e, not having a 29210 data_member_location) is is a static data member. Otherwise, we 29211 were not detecting static data members at all. Well we were only 29212 inferring their presence from seeing the static variable 29213 definition later on. That means we were missing most of the 29214 static variables. Woops. 29215 * src/abg-comparison.cc 29216 (corpus_diff::priv::ensure_lookup_tables_populated): Now that we 29217 are really seeing static data members, let's be prepare to the 29218 fact that we can the same static data member being declared 29219 several times in a corpus. 29220 * tests/data/test-diff-dwarf/test7-report.txt: New test input file. 29221 * tests/data/test-diff-dwarf/test7-v0.cc: Likewise. 29222 * tests/data/test-diff-dwarf/test7-v0.o: Likewise. 29223 * tests/data/test-diff-dwarf/test7-v1.cc: Likewise. 29224 * tests/data/test-diff-dwarf/test7-v1.o: Likewise. 29225 * tests/test-diff-dwarf.cc: Update this to consume the new test 29226 input files. 29227 * tests/Makefile.am: Update this to add the missing test files to 29228 the source distribution. 29229 292302014-04-16 Dodji Seketeli <dodji@redhat.com> 29231 29232 Add dumping routines for declaration location 29233 * include/abg-fwd.h (get_global_scope()): New overload for const 29234 decl_base&. Move the other overloads up in the file. 29235 (get_translation_unit): Add an overload for decl_base&. Constify 29236 the others. 29237 (dump_decl_location): Declare new functions. 29238 * src/abg-ir.cc (get_global_scope): Define the overload for const 29239 decl_base&. Write the other overloads in terms of this one. 29240 (get_translation_unit): Likewise, define the overload for const 29241 decl_base&. Write the other overloads in terms of this one. 29242 (dump_decl_location): Define these new overloads. 29243 292442014-04-16 Dodji Seketeli <dodji@redhat.com> 29245 29246 Fix dumping function to make them use generic ostream 29247 * src/abg-writer.cc (dump(const decl_base_sptr, std::ostream&)): 29248 Do not dump the content to cerr here. Rather dump to the output 29249 stream given in parameter. Oops. 29250 (dump(const translation_unit&, std::ostream&)): Likewise. 29251 292522014-04-16 Dodji Seketeli <dodji@redhat.com> 29253 29254 Misc style fixes 29255 * src/abg-ir.cc (get_translation_unit): Remove useless vertical 29256 white space. 29257 (is_global_scope): Add missing API doc. 29258 292592014-04-16 Dodji Seketeli <dodji@redhat.com> 29260 29261 A virt mem fn deleted and added to the same offset is not harmful 29262 * src/abg-comp-filter.cc (has_virtual_mem_fn_change): A virtual 29263 member that gets deleted and added back again to the same vtable 29264 offset is not considered as being a virtual member function change 29265 suitable for VIRTUAL_MEMBER_CHANGE_CATEGORY. Likewise for a 29266 function sub-type change not involving a change in the vtable 29267 offset. 29268 292692014-04-16 Dodji Seketeli <dodji@redhat.com> 29270 29271 Do not categorize size/offset changes when a decl-only class is involved 29272 * src/abg-comp-filter.cc (there_is_a_decl_only_class) 29273 (diff_involves_decl_only_class): New static functions. 29274 (type_size_changed, data_member_added_or_removed) 29275 (has_virtual_mem_fn_change, has_non_virtual_mem_fn_change): Bail 29276 out if one of the types involved is a decl-only class. 29277 292782014-04-16 Dodji Seketeli <dodji@redhat.com> 29279 29280 Work around "mangled name vanishing from one version of mem fn decl" bug 29281 * src/abg-comparison.cc 29282 (class_diff::ensure_lookup_tables_populated): If the first version 29283 of the member function decl doesn't have a mangled name while the 29284 second has it, try the lookups using the pretty representation of 29285 the function. 29286 292872014-04-16 Dodji Seketeli <dodji@redhat.com> 29288 29289 Do not try to represent the offset for a static data member 29290 * src/abg-comparison.cc (represent_data_member(var_decl_sptr, 29291 ostream&)): If the data member is static, do not try to represent 29292 its offset. 29293 292942014-04-16 Dodji Seketeli <dodji@redhat.com> 29295 29296 A static data member shouldn't be checked for having been laid out 29297 * src/abg-comparison.cc (represent_data_member(var_decl_sptr, 29298 ostream&)): If the data member is static do not check for it 29299 having been laid out. 29300 293012014-04-16 Dodji Seketeli <dodji@redhat.com> 29302 29303 Prefix pretty representation of static data members with 'static' 29304 * src/abg-ir.cc (var_decl::get_pretty_representation): Prefix 29305 pretty representation of static data members with 'static'. 29306 293072014-04-16 Dodji Seketeli <dodji@redhat.com> 29308 29309 Provide a robust way of getting the size of a qualified type 29310 * include/abg-ir.h (qualified_type_def::get_size_in_bits): Declare 29311 new member function ... 29312 * src/abg-ir.cc (qualified_type_def::get_size_in_bits): ... and 29313 define it. Keep in mind that some times the size of the 29314 underlying type can change between the moment the qualified type 29315 is created and the end of its life time. That is because a 29316 subsequent DIE (from DWARF) can alter the size of the underlying 29317 type. This overload allows the user to always query the size of 29318 the underlying type and keep the size of the qualified type in 29319 sync with it. 29320 293212014-04-16 Dodji Seketeli <dodji@redhat.com> 29322 29323 Add an assert to the pointer diff reporting code 29324 * src/abg-comparison.cc (pointer_diff::report): If the pointer 29325 diff node is deemed to be reported then the underlying diff node 29326 should be reported as well. 29327 293282014-04-16 Dodji Seketeli <dodji@redhat.com> 29329 29330 Little style adjustment in diff node categorization code 29331 * src/abg-comp-filter.cc (harmful_filter::visit): Factorize the 29332 categorization into SIZE_OR_OFFSET_CHANGE_CATEGORY for data member 29333 adding or removal and for data member type size change. 29334 293352014-04-15 Dodji Seketeli <dodji@redhat.com> 29336 29337 If a diff node is in NO_CHANGE_CATEGORY do not report it anymore 29338 * src/abg-comparison.cc (diff::is_filtered_out): Now that we seem 29339 to be flagging every changes to a class into a category, we do not 29340 need to dive into reporting a diff not that is categorized as 29341 NO_CHANGE_CATEGORY anymore. So let's have the implementation that 29342 one would expect for this function. 29343 293442014-04-15 Dodji Seketeli <dodji@redhat.com> 29345 29346 Categorize changes to virt mem fncts as VIRTUAL_MEMBER_CHANGE_CATEGORY 29347 * src/abg-comp-filter.cc (has_virtual_mem_fn_change): New static 29348 function. 29349 (harmful_filter): Categorize changes to virtual member functions 29350 into VIRTUAL_MEMBER_CHANGE_CATEGORY. 29351 * src/abg-comparison.cc 29352 (class_diff::priv::count_filtered_changed_dm): Move this up, right 29353 after class_diff::priv::count_filtered_subtype_changed_dm. 29354 (SKIP_MEM_FN_IF_VIRTUALITY_DISALLOWED): New macro. 29355 (class_diff::priv::count_filtered_{changed, inserted, 29356 deleted}_mem_fns): Modify these to properly take member function 29357 virtual-ness in account. 29358 293592014-04-15 Dodji Seketeli <dodji@redhat.com> 29360 29361 Do not hash non-virtual member functions when hashing a class 29362 * src/abg-hash.cc (class_decl::hash::operator): Do not hash 29363 non-virtual member functions. 29364 293652014-04-15 Dodji Seketeli <dodji@redhat.com> 29366 29367 Fix a missing new line in the reports 29368 * src/abg-comparison.cc (represent(class_decl::method_decl_sptr, 29369 ostream&)): Add a missing new line. 29370 * tests/data/test-bidiff/test-struct1-report.txt: Adjust. 29371 293722014-04-14 Dodji Seketeli <dodji@redhat.com> 29373 29374 Add more pretty printing facilities 29375 * include/abg-comparison.h (get_pretty_representation(diff*)): 29376 Declare new function. 29377 * include/abg-fwd.h (get_pretty_representation): Declare functions 29378 for decl_base*, type_base*, decl_base_sptr and type_base_sptr. 29379 * src/abg-comparison.cc (get_pretty_representation): Implement 29380 this for diff*. 29381 * src/abg-ir.cc (get_pretty_representation): Define 29382 implementations for decl_base*, type_base*, decl_base_sptr and 29383 type_base_sptr. 29384 293852014-04-14 Dodji Seketeli <dodji@redhat.com> 29386 29387 Don't compare non-virtual member functions in class comparison 29388 * src/abg-comparison.cc 29389 (class_diff::ensure_lookup_tables_populated): Use the virtual 29390 member functions here, not the member functions in general. 29391 (compute_diff): Consider virtual member functions only, not 29392 non-virtual ones. 29393 * src/abg-ir.cc (class_decl::operator==): Do not compare 29394 non-virtual member functions. Only compare virtual member 29395 functions. 29396 * tests/data/test-bidiff/test-struct1-report.txt: New test input. 29397 * tests/data/test-diff-dwarf/test0-report.txt: New test input. 29398 * tests/data/test-diff-filter/test0-report.txt: New test input. 29399 * tests/data/test-diff-filter/test01-report.txt: New test input. 29400 * tests/data/test-diff-filter/test10-report.txt: New test input. 29401 * tests/data/test-diff-filter/test11-report.txt: New test input. 29402 * tests/data/test-diff-filter/test2-report.txt: New test input. 29403 * tests/data/test-diff-filter/test9-report.txt: New test input. 29404 294052014-04-14 Dodji Seketeli <dodji@redhat.com> 29406 29407 Recognize virtual member functions better and store them appart 29408 * include/abg-fwd.h (set_member_function_is_virtual): Declare new 29409 function. 29410 * include/abg-ir.h (class class_decl): Declare 29411 set_member_function_is_virtual and member_function_is_virtual as 29412 friends of class_decl. 29413 (class_decl::add_member_function): Take an is_virtual flag. 29414 (class_decl::get_num_virtual_functions): Remove. 29415 (class_decl::get_virtual_mem_fns): New member function. 29416 (mem_fn_context_rel::is_virtual_): New member. 29417 (mem_fn_context_rel::mem_fn_context_rel): Adjust to initialize the 29418 new is_virtual_ member. 29419 (mem_fn_context_rel::is_virtual): New member functions. 29420 * src/abg-comparison.cc (represent): Adjust. 29421 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Adjust. 29422 * src/abg-ir.cc (member_function_is_virtual): Change this to use 29423 mem_fn_context_rel::is_virtual. 29424 (set_member_function_is_virtual): Define this new function. 29425 (class_decl::priv::virtual_mem_fns_): New member to hold virtual 29426 member functions. 29427 (class_decl::get_virtual_mem_fns): Implement this member function. 29428 (class_decl::get_num_virtual_functions): Remove. 29429 (class_decl::add_member_function): Take a new is_virtual flag. 29430 Add virtual member functions to 29431 class_decl::priv::virtual_mem_fns_. 29432 * src/abg-reader.cc (build_class_decl): Adjust. 29433 294342014-04-13 Dodji Seketeli <dodji@redhat.com> 29435 29436 Filter non-virtual member fns insertions/deletions from class changes 29437 * include/abg-fwd.h (member_function_is_virtual): Declare new 29438 function. 29439 * include/abg-comparison.h 29440 (diff_category::{NON_VIRT_MEM_FUN_CHANGE_CATEGORY, 29441 VIRTUAL_MEMBER_CHANGE_CATEGORY}): New enumerators. 29442 (diff_category::EVERYTHING_CATEGORY): Adjust. 29443 (class_diff::{changed, deleted, inserted}_member_fns): Declare new 29444 member functions. 29445 * src/abg-comp-filter.cc (data_member_added_or_removed): Add 29446 missing comments. 29447 (has_non_virtual_mem_fn_change): New static predicate function. 29448 (harmless_filter::visit): Categorize non-virtual member function 29449 changes in a diff into NON_VIRT_MEM_FUN_CHANGE_CATEGORY. 29450 * src/abg-comparison.cc 29451 (TRAVERSE_MEM_FN_DIFF_NODE_AND_PROPAGATE_CATEGORY): New macro. 29452 (report_mem_header): Count filtered functions for added/deleted 29453 functions as well. 29454 (class_diff::priv::count_filtered_changed_mem_fns): Renamed 29455 priv::count_filtered_member_functions into this. Filter out 29456 changes to non-virtual member functions here. 29457 (class_diff::priv::count_filtered_{inserted, deleted}_mem_fns): 29458 New member functions. 29459 (class_diff::{deleted, inserted, changed}_member_fns): Define new 29460 member functions. 29461 (class_diff::report): Adjust count for filtered inserted/deleted 29462 member functions. Do not report NON_VIRT_MEM_FUN_CHANGE_CATEGORY 29463 if it's disallowed. 29464 (class_diff::traverse): Propagate only 29465 VIRTUAL_MEMBER_CHANGE_CATEGORY from member functions to their 29466 enclosing class. 29467 * src/abg-ir.cc (member_function_is_virtual): Define new 29468 functions. 29469 * tools/bidiff.cc (set_diff_context_from_opts): Adjust to add 29470 NON_VIRT_MEM_FUN_CHANGE_CATEGORY into the harmless group and 29471 VIRTUAL_MEMBER_CHANGE_CATEGORY into the harmful one. 29472 * tests/data/test-diff-filter/test0-report.txt: New test input. 29473 * tests/data/test-diff-filter/test10-report.txt: Likewise. 29474 * tests/data/test-diff-filter/test10-v0.cc: Likewise. 29475 * tests/data/test-diff-filter/test10-v0.o: Likewise. 29476 * tests/data/test-diff-filter/test10-v1.cc: Likewise. 29477 * tests/data/test-diff-filter/test10-v1.o: Likewise. 29478 * tests/data/test-diff-filter/test11-report.txt: Likewise. 29479 * tests/data/test-diff-filter/test11-v0.cc: Likewise. 29480 * tests/data/test-diff-filter/test11-v0.o: Likewise. 29481 * tests/data/test-diff-filter/test11-v1.cc: Likewise. 29482 * tests/data/test-diff-filter/test11-v1.o: Likewise. 29483 * tests/data/test-diff-filter/test2-report.txt: Likewise. 29484 * tests/data/test-diff-filter/test9-report.txt: Likewise. 29485 * tests/data/test-diff-filter/test9-v0.cc: Likewise. 29486 * tests/data/test-diff-filter/test9-v0.o: Likewise. 29487 * tests/data/test-diff-filter/test9-v1.cc: Likewise. 29488 * tests/data/test-diff-filter/test9-v1.o: Likewise. 29489 * tests/test-diff-filter.cc: Consume the test input above to run 29490 more tests. 29491 294922014-04-13 Dodji Seketeli <dodji@redhat.com> 29493 29494 Make class_decl pimpl and harden comparison infloop prevention 29495 * include/abg-ir.h (class_decl::{priv}): New private data member. 29496 (class_decl::{get_is_declaration_only, set_is_declaration_only, 29497 is_struct, get_definition_of_declaration, get_earlier_declaration, 29498 add_base_specifier, get_base_specifiers, get_member_types, 29499 get_data_members, get_member_functions, 29500 get_member_function_templates, get_member_class_templates}): Move 29501 these methods out-of-line. 29502 (class_decl::{comparison_started_, 29503 declaration_,is_declaration_only_, definition_of_declaration, 29504 is_struct_, bases_, member_types_, data_members_, 29505 member_functions_, member_function_template, 29506 member_class_templates_}): Move these data members into the pimpl 29507 in ... 29508 * src/abg-ir.cc 29509 (class_decl::priv::{declaration_,is_declaration_only_, 29510 definition_of_declaration, is_struct_, bases_, member_types_, 29511 data_members_, member_functions_, member_function_template, 29512 member_class_templates_}): ... here. 29513 (class_decl::priv::classes_being_compared_): New data member. 29514 (class_decl::priv::priv): Initialize the data members. 29515 (class_decl::priv::{mark_as_being_compared, 29516 unmark_as_being_compared, comparison_started): New methods. 29517 (class_decl::{get_is_declaration_only, set_is_declaration_only, 29518 is_struct, get_definition_of_declaration, add_base_specifier, 29519 get_base_specifiers, get_member_types, get_data_members, 29520 get_member_functions, get_member_function_templates, 29521 get_member_class_templates}): Move these out-of-line in here. 29522 (class_decl::{class_decl, set_definition_of_declaration, 29523 set_earlier_declaration, insert_member_type, add_member_type, 29524 add_data_member, add_member_function, 29525 add_member_function_template, add_member_class_template, 29526 has_no_base_nor_member}): Adjust. 29527 (class_decl::operator==): Harden inf-loop prevention during class 29528 comparison using the new priv::mark/unmark_as_being_compared() 29529 functions. Now comparison of a class really compares member 29530 functions again. And it is *slooow*. I should probably change 29531 this to compare only virtual member functions. But at least this 29532 should be correct and robust for now. 29533 * tests/data/test-diff-filter/test0-report.txt: Adjust. 29534 * test01-report.txt: Adjust. 29535 295362014-04-11 Dodji Seketeli <dodji@redhat.com> 29537 29538 Remove the parent member of the diff node 29539 * include/abg-comparison.h (diff::parent_): Remove. 29540 (diff::diff): Adjust. 29541 (diff::{get, set}_parent): Remove. 29542 * src/abg-comp-filter.cc (harmless_filter::visit): Remove category 29543 propagation to the parent. 29544 295452014-04-11 Dodji Seketeli <dodji@redhat.com> 29546 29547 Update the decl_base copy constructor for forgotten members 29548 * src/abg-ir.cc (decl_base::decl_base): Copy forgotten decl_base 29549 members hashing_started_, qualified_parent_name_, qualified_name_. 29550 295512014-04-11 Dodji Seketeli <dodji@redhat.com> 29552 29553 Comment fix in filtering code 29554 * src/abg-comp-filter.cc (harmful_filter::visit): Fix comment 29555 typos. 29556 295572014-04-11 Dodji Seketeli <dodji@redhat.com> 29558 29559 Put data member type size changes in SIZE_OR_OFFSET_CHANGE_CATEGORY 29560 * src/abg-comp-filter.cc (type_size_changed): New overload for 29561 type_base_sptr. 29562 (data_member_type_size_changed): New predicate. 29563 (harmful_filter::visit): Use the new predicate to categorize data 29564 member type size changes into the SIZE_OR_OFFSET_CHANGE_CATEGORY. 29565 295662014-04-11 Dodji Seketeli <dodji@redhat.com> 29567 29568 Represent a removed+added data member at a given offset as changed 29569 * include/abg-fwd.h (get_data_member_offset): Declare new overload for 29570 decl_base_sptr. 29571 * include/abg-comparison.h (unsigned_decl_base_sptr_map) 29572 (unsigned_changed_type_or_decl_map): New typedefs. 29573 * src/abg-ir.cc (get_data_member_offset): Define new overload for decl_base_sptr. 29574 * src/abg-comparison.cc (diff_kind::subtype_change_kind): New 29575 enumerator for a change about a type or sub-type of a member of a 29576 structure/enum. 29577 (report_mem_header): Handle the new enumerator above. 29578 (class_diff::priv::{deleted_dm_by_offset_, inserted_dm_by_offset_, 29579 changed_dm_}): New data members. 29580 (class_diff::priv::subtype_changed_dm_): Renamed 29581 class_diff::priv::changed_data_members_ into this. 29582 (class_diff::priv::subtype_changed_dm): Renamed 29583 class_diff::priv::data_member_has_changed into this. Adjust. 29584 (class_diff::count_filtered_subtype_changed_dm): Renamed 29585 count_filtered_data_members into this. Adjust. 29586 (class_diff::priv::count_filtered_changed_dm): New member 29587 function. 29588 (class_diff::lookup_tables_empty): Adjust. 29589 (class_diff::ensure_lookup_tables_populated): Adjust. Detect when 29590 a data member is deleted and added back to offset N, and be 29591 prepared to present that as a change of data member at offset N. 29592 (class_diff::report): Adjust. Report data members of a given 29593 offset that have changed. 29594 * tests/data/test-diff-dwarf/test6-report.txt: New reference 29595 report for new test input. 29596 * tests/data/test-diff-dwarf/test6-v0.cc: Source code for new test 29597 input binary. 29598 * tests/data/test-diff-dwarf/test6-v0.o: New test input binary. 29599 * tests/data/test-diff-dwarf/test6-v1.cc: Source code for new test 29600 input binary. 29601 * tests/data/test-diff-dwarf/test6-v1.o: New test input binary. 29602 * tests/test-diff-dwarf.cc: Adjust to include the new test inputs above. 29603 296042014-04-11 Dodji Seketeli <dodji@redhat.com> 29605 29606 Unmark class_diff node as being traversed once traversal is finished 29607 * src/abg-comparison.cc (class_diff:traverse): Unmark class_diff 29608 node as being traversed once traversal is finished 29609 296102014-04-11 Dodji Seketeli <dodji@redhat.com> 29611 29612 Do not use the parent diff node link for category propagation 29613 * src/abg-comparison.cc (class_diff::traverse): Use the new 29614 TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY macro to propagate 29615 categorization from the children diff nodes to the current one for 29616 bases, data members and member functions. 29617 (scope_diff::traverse): Likewise, use the 29618 TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY to propagate 29619 categorization from the children diff nodes to the current one. 29620 296212014-04-11 Dodji Seketeli <dodji@redhat.com> 29622 29623 Ensure that each diff node is traversed just once 29624 * include/abg-comparison.cc (pointer_map): New typedef. 29625 (diff_context::{has_diff_for}): New overload for diff*. 29626 (diff_context::{diff_has_been_traversed, mark_diff_as_traversed, 29627 forget_traversed_diffs}): Declare new methods. 29628 * src/abg-comparison.cc (ENSURE_DIFF_NODE_TRAVERSED_ONCE) 29629 (ENSURE_MEM_DIFF_NODE_TRAVERSED_ONCE): Define new macros. 29630 (diff_context::priv::traversed_diff_nodes_): New data member. 29631 (diff_context::has_diff_for): New overload for diff* 29632 (diff_context::{diff_has_been_traversed, mark_diff_as_traversed, 29633 forget_traversed_diffs}): Define new member functions. 29634 (diff_context::maybe_apply_filters): Forget the traversed diffs 29635 before applying a filter. 29636 ({distinct_diff, var_diff, pointer_diff, reference_diff, 29637 qualified_type_diff, enum_diff, class_diff, base_diff, scope_diff, 29638 function_decl_diff, type_decl_diff, typedef_diff, 29639 translation_unit_diff}::traverse): Ensure that the diff node is 29640 traversed only once. 29641 296422014-04-11 Dodji Seketeli <dodji@redhat.com> 29643 29644 Factorize diff sub-tree traversal and category propagation code 29645 * src/abg-comparison.cc 29646 (TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY) 29647 (TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY): New macros. 29648 ({distinct_diff, pointer_diff, reference_diff, 29649 qualified_type_diff, enum_diff, base_diff, function_decl_diff, 29650 typedef_diff}::traverse): Use the new macro above in lieu of the 29651 duplicated sub-tree traversal code in there. 29652 296532014-04-11 Dodji Seketeli <dodji@redhat.com> 29654 29655 Style fixes in the diff nodes traversing code 29656 * src/abg-comparison.cc (TRY_{PRE, PRO}_VISIT, TRY_{PRE, 29657 PRO}_VISIT_CLASS_DIFF, ): Add a white space. 29658 296592014-04-10 Dodji Seketeli <dodji@redhat.com> 29660 29661 Supporting reporting data member name change 29662 * src/abg-comparison.cc (represent): Support reporting data member 29663 name change. 29664 296652014-04-10 Dodji Seketeli <dodji@redhat.com> 29666 29667 Consider added/removed data members as changing size or offset 29668 * src/abg-comp-filter.cc (data_member_added_or_removed): New 29669 static function. 29670 (harmless_filter::visit): Re-organize logic. Categorize data 29671 member addition/removal into SIZE_OR_OFFSET_CHANGE_CATEGORY. 29672 296732014-04-10 Dodji Seketeli <dodji@redhat.com> 29674 29675 Add missing comment 29676 * src/abg-ir.cc (non_type_tparameter::get_hash): Add missing api doc. 29677 296782014-04-09 Dodji Seketeli <dodji@redhat.com> 29679 29680 Fix and add missing hashing through the virtual decl_base::get_hash 29681 * include/abg-ir.h (struct {scope_decl, non_type_tparameter, 29682 type_composition, class_decl}::hash): Declare hashers. 29683 ({scope_decl, var_decl, non_type_tparameter, type_composition, 29684 class_decl}::get_hash): Provide new overloads of the get_hash. 29685 * src/abg-hash.cc ({type_decl, scope_type_decl, 29686 qualified_type_def, pointer_type_def, reference_type_def, 29687 enum_type_decl, typedef_decl, var_decl, 29688 function_decl}::hash::operator()): If the hash is being 29689 calculated, do not use the not-yet fully calculated hash value. 29690 Rather, calculate the hash, cache it and return the value. 29691 ({class_decl, non_type_tparameter}::hash::operator()): Moved the 29692 {class_decl, non_type_tparameter}::hash declaration out of here 29693 and stick it in include/abg-ir.h. Keep the definition of the 29694 hashing operators here though. 29695 (type_composition::hash::operator()): New operator definition. 29696 * src/abg-ir.cc ({scope_decl, var_decl, class_decl, 29697 non_type_tparameter, type_composition}::get_hash): Define new 29698 virtual overload. 29699 297002014-04-08 Dodji Seketeli <dodji@redhat.com> 29701 29702 Fix mis-hashing of base specifiers and function_decl during comparison 29703 * include/abg-ir.h (function_decl::get_hash): Declare new virtual 29704 overload. 29705 * src/abg-hash.cc (class_decl::base_spec::hash::operator()): 29706 Properly hash the base specifier so that it doesn't collide with 29707 hashing a class. 29708 * src/abg-ir.cc (decl_base::get_hash): Abort if we detect a 29709 missing overload for this; 29710 (function_decl::get_hash() const): Implement this missing 29711 overload, allowing using the virtual decl_base::get_hash for 29712 function_decl. 29713 297142014-04-08 Dodji Seketeli <dodji@redhat.com> 29715 29716 Properly place opening quote and add missing closing quote in report 29717 * src/abg-comparison.cc (corpus_diff::report): Move the [{A,D}] 29718 marker before the opening quote. And add a closing quote. 29719 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 29720 * tests/data/test-diff-filter/test0-report.txt: Adjust. 29721 * tests/data/test-diff-filter/test01-report.txt: Adjust. 29722 * tests/data/test-diff-filter/test2-report.txt: Adjust. 29723 297242014-04-08 Dodji Seketeli <dodji@redhat.com> 29725 29726 Drive-by indentation fix 29727 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Fix 29728 indentation. 29729 297302014-04-08 Dodji Seketeli <dodji@redhat.com> 29731 29732 Drop ABI artifacts that are local to a function 29733 * src/abg-dwarf-reader.cc (get_scope_for_die): If the parent die 29734 is DW_TAG_subprogram then just drop the whole thing on the floor. 29735 (build_ir_node_from_die): When the scope is NULL, just drop the 29736 whole thing on the floor. 29737 297382014-04-08 Dodji Seketeli <dodji@redhat.com> 29739 29740 Fix the static data member recognition hack 29741 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): 29742 When trying to recognize the global var_decl as being definition 29743 variables for static data members, lookup the declaration for the 29744 data member in the relevant class. If found, then just flag the 29745 var_decl for the data member as being static; no need to add a 29746 var_decl as data member in that case, that would duplicate the 29747 data member. 29748 297492014-04-08 Dodji Seketeli <dodji@redhat.com> 29750 29751 Fix looking up a node inside a class 29752 * src/abg-ir.cc (lookup_node_in_scope): Do not forget to actually 29753 look at the class members. Sigh. 29754 297552014-04-07 Dodji Seketeli <dodji@redhat.com> 29756 29757 Work around old dwarf producers forgetting mangled names for functions 29758 * src/abg-comparison.cc 29759 (corpus_diff::priv::ensure_lookup_tables_populated): If lookup 29760 using mangled name for a deleted function yields nada, try the 29761 lookup with the pretty representation for the function. 29762 297632014-04-07 Dodji Seketeli <dodji@redhat.com> 29764 29765 Make type_base::get_{size,alignment}_in_bits virtual 29766 * include/abg-ir.h (type_base::get_{size,alignment}_in_bits): Make 29767 this virtual. 29768 (typedef_decl::get_{size,alignment}_in_bits): Add new member 29769 functions. Get the size,alignment from the underlying type and 29770 update the current size/alignment if they differ. Keep in mind 29771 that the size of an underlying class_decl can change over its 29772 lifetime, given how the dwarf reader reads the type information, 29773 i.e, there can be a DIE for a class type with no size information 29774 that will lead to the creation of a class_decl with size zero. 29775 Later during the DWARF reading process, another DIE will 29776 supplement the type information, adding size information to that 29777 class_decl. In between, a typedef_decl might have been created 29778 with the first version of the class_decl that has a zero size. I 29779 guess this should be extended to the other type constructs that 29780 have an underlying type (qualified types, references and pointers). 29781 297822014-04-07 Dodji Seketeli <dodji@redhat.com> 29783 29784 Look through typedefs when setting SIZE_OR_OFFSET_CHANGE_CATEGORY 29785 * include/abg-fwd.h (is_class_type): Declare new functions. 29786 * src/abg-comp-filter.cc (harmful_filter::visit): Use the above to 29787 convert a type into a class. 29788 * src/abg-ir.cc (is_class_type): Define the new function. 29789 297902014-04-06 Dodji Seketeli <dodji@redhat.com> 29791 29792 Add a new DECL_NAME_CHANGE_CATEGORY change category 29793 * include/abg-comparison.h (enum 29794 diff_category::DECL_NAME_CHANGE_CATEGORY): New enumerator. 29795 * src/abg-comparison.cc (report_name_size_and_alignment_changes) 29796 ({enum, typedef}_diff::report): Adjust to avoid emitting name 29797 change report if the DECL_NAME_CHANGE_CATEGORY category of change 29798 is currently disallowed. 29799 * abg-comp-filter.cc (decl_name_changed): New static function. 29800 (harmless_filter::visit): Detect that the decl name changed and 29801 put the current diff node (and its parents) into the 29802 DECL_NAME_CHANGE_CATEGORY category. 29803 * tools/bidiff.cc (set_diff_context_from_opts): Set the new 29804 DECL_NAME_CHANGE_CATEGORY category into the harmless_changes group 29805 of categories. 29806 * tests/data/test-diff-filter/test6-report.txt: New test input file. 29807 * tests/data/test-diff-filter/test6-v0.cc: Likewise. 29808 * tests/data/test-diff-filter/test6-v0.o: Likewise. 29809 * tests/data/test-diff-filter/test6-v1.cc: Likewise. 29810 * tests/data/test-diff-filter/test6-v1.o: Likewise. 29811 * tests/data/test-diff-filter/test7-report.txt: Likewise. 29812 * tests/data/test-diff-filter/test7-v0.cc: Likewise. 29813 * tests/data/test-diff-filter/test7-v0.o: Likewise. 29814 * tests/data/test-diff-filter/test7-v1.cc: Likewise. 29815 * tests/data/test-diff-filter/test7-v1.o: Likewise. 29816 * tests/test-diff-filter.cc: Take the new inputs above to run new tests. 29817 * tests/Makefile.am: Add the new files above to the distribution. 29818 298192014-04-05 Dodji Seketeli <dodji@redhat.com> 29820 29821 Emit qualified name for typedefs 29822 * src/abg-comparison.cc (typedef_diff::report): Emit qualified 29823 names for typedefs in diff reports about typedef name changes. 29824 298252014-04-05 Dodji Seketeli <dodji@redhat.com> 29826 29827 Fix indentation in distinct type diff report 29828 * src/abg-comparison.cc (distinct_diff::report): Do not forget to 29829 change line. 29830 298312014-04-05 Dodji Seketeli <dodji@redhat.com> 29832 29833 Really compare return types for function types 29834 * src/abg-ir.cc (compare_function_types): Compare return types, 29835 unless this is a method and the return type is the same type as 29836 the containing class type. 29837 * tests/data/test-diff-dwarf/test5-report.txt: Reference report 29838 for the comparison of the two input binaries below. 29839 * tests/data/test-diff-dwarf/test5-v0.cc: Source code for the 29840 input binary below. 29841 * tests/data/test-diff-dwarf/test5-v0.o: Test input binary. 29842 * tests/data/test-diff-dwarf/test5-v1.cc: Source code for the 29843 input binary below. 29844 * tests/data/test-diff-dwarf/test5-v1.o: Test input binary. 29845 298462014-04-05 Dodji Seketeli <dodji@redhat.com> 29847 29848 Add missing tests for previous commits 29849 * tests/data/test-diff-dwarf/test4-report.txt: Adjust. 29850 * tests/test-diff-dwarf.cc: Run tests for 29851 data/test-diff-dwarf/test3-report.txt" and 29852 data/test-diff-dwarf/test4-report.txt. 29853 298542014-04-05 Dodji Seketeli <dodji@redhat.com> 29855 29856 Categorize through compatible distinct type diffs 29857 * src/abg-comparison.cc (report_size_and_alignment_changes): Split 29858 this static function out of ... 29859 (report_name_size_and_alignment_changes): ... this one. 29860 (distinct_diff::report): If the typedef-stripped variants of the 29861 diff subjects are of the same kind, display their diff. 29862 Otherwise, tell explicitly is the distinct type diff involves a 29863 type size change. 29864 (distinct_diff::traverse): If the typedef-stripped variants of the 29865 diff subjects are of the same kind, traverse that underlying diff 29866 sub-tree and propagate the categorizing possibly resulting from 29867 that traversal. 29868 * tests/data/test-diff-dwarf/test4-v0.o: New test input binary. 29869 * tests/data/test-diff-dwarf/test4-v0.cc: Source code for the 29870 input binary above. 29871 * tests/data/test-diff-dwarf/test4-v1.o: New test input binary. 29872 * tests/data/test-diff-dwarf/test4-v1.cc: Source code for the 29873 input binary above. 29874 * tests/data/test-diff-dwarf/test4-report.txt: Reference report 29875 for the difference between the two binaries above. 29876 * tests/data/test-diff-filter/test5-v0.o: New test input binary. 29877 * tests/data/test-diff-filter/test5-v0.cc: Source code for the 29878 input binary above. 29879 * tests/data/test-diff-filter/test5-v1.o: New test input binary. 29880 * tests/data/test-diff-filter/test5-v1.cc: Source code for the 29881 input binary above. 29882 * tests/data/test-diff-filter/test5-report.txt: Reference report 29883 for the difference between the two binaries above. 29884 * tests/test-diff-filter.cc: Adjust to produce a filtered diff for 29885 the two input binaries above. 29886 * tests/Makefile.am: Adjust to add missing test files to the 29887 distribution. 29888 298892014-04-04 Dodji Seketeli <dodji@redhat.com> 29890 29891 Slight run-by fixes 29892 * src/abg-comparison.cc 29893 (corpus_diff::priv::apply_filters_and_compute_diff_stats) 29894 (corpus_diff::report): Use compute_diff for types which it has an 29895 overload rather than going through the compute_diff_for_decls that 29896 would use dynamic casting. 29897 298982014-04-04 Dodji Seketeli <dodji@redhat.com> 29899 29900 Do not hook type diff nodes to a parent 29901 * abg/comparison.cc (var_diff::var_diff): Do not set parent node 29902 for the type diff of the var_diff. 29903 (var_diff::traverse): Handle category propagation from the 29904 type diff node to the var_diff node. 29905 (pointer_diff::underlying_type_diff) 29906 (reference_diff::underlying_type_diff) 29907 (qualified_type_diff::underlying_type_diff, enum_diff::enum_diff) 29908 (base_diff::get_underlying_class_diff) 29909 (typedef_diff::underlying_type_diff): Do not set the parent node 29910 here. 29911 ({pointer_diff, reference_diff, qualified_type, enum_diff, 29912 class_diff, base_diff, function_decl_diff, 29913 typedef_diff}::traverse): Handle category propagation here. 29914 * tests/data/test-diff-filter/test4-v0.o: New input binary. 29915 * tests/data/test-diff-filter/test4-v0.cc: Source code for the 29916 input binary above. 29917 * tests/data/test-diff-filter/test4-v1.o: New input binary. 29918 * tests/data/test-diff-filter/test4-v1.cc: Source code for the 29919 input binary above. 29920 * tests/data/test-diff-filter/test4-report.txt: Reference diff 29921 report for the input binaries above. 29922 * tests/test-diff-filter.cc:: Run bidiff --no-harmless on the 29923 binaries above. 29924 299252014-04-04 Dodji Seketeli <dodji@redhat.com> 29926 29927 Fix off-by one comparison bug in comparing function parameters 29928 * src/abg-comparison.cc 29929 (function_decl_diff::ensure_lookup_tables_populated): Function 29930 parameters that are diff'ed start at the first non-implicit 29931 parameter, not at the first parameter. Oops. 29932 * tests/data/test-diff-dwarf/test3-v0.o: New test input binary. 29933 * tests/data/test-diff-dwarf/test3-v0.cc: Source code for the 29934 binary above. 29935 * tests/data/test-diff-dwarf/test3-v1.o: New test input binary. 29936 * tests/data/test-diff-dwarf/test3-v1.cc: Source code for the 29937 binary above. 29938 * tests/data/test-diff-dwarf/test3-report.txt: Reference report 29939 for the diff of the new test inputs. 29940 * tests/test-diff-dwarf.cc: Use the test inputs above to run new 29941 tests. 29942 299432014-04-03 Dodji Seketeli <dodji@redhat.com> 29944 29945 Do not forget parm sub-type changes as opposed to parm changes 29946 * src/abg-comparison.cc 29947 (function_decl_diff::ensure_lookup_tables_populated): A parm 29948 change is valid only when the added parm has a different name from 29949 the removed parm. Both have the same index, of course. In that 29950 case, do not try to remove the corresponding parm sub-type change. 29951 * tests/data/test-bidiff/test-enum0-report.txt: Adjust. 29952 * tests/data/test-bidiff/test-enum1-report.txt: Adjust. 29953 * tests/data/test-bidiff/test-qual-type0-report.txt: Adjust. 29954 * tests/data/test-bidiff/test-struct0-report.txt: Adjust. 29955 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 29956 * tests/data/test-diff-dwarf/test1-report.txt: Adjust. 29957 * tests/data/test-diff-filter/test0-report.txt: Adjust. 29958 * tests/data/test-diff-filter/test01-report.txt: Adjust. 29959 * tests/data/test-diff-filter/test1-report.txt: Adjust. 29960 * tests/data/test-diff-filter/test2-report.txt: Adjust. 29961 * tests/data/test-diff-filter/test3-report.txt: Adjust. 29962 299632014-04-03 Dodji Seketeli <dodji@redhat.com> 29964 29965 Remove useless white space 29966 * src/abg-ir.cc (look_through_decl_only_class): Remove useless 29967 white space. 29968 299692014-04-02 Dodji Seketeli <dodji@redhat.com> 29970 29971 Use mangled name for decl comparison when it's present 29972 * src/abg-ir.cc (decl_base::operator==(const decl_base& other) 29973 const): Use the mangled name of the decl in priority. 29974 * src/abg-hash.cc (struct decl_base::hash::operator()): Likewise. 29975 * src/abg-comparison.cc (function_decl_diff::report): Do not 29976 report a function name change if it doesn't involve a mangled name 29977 change. This might change when we start dealing with templates. 29978 299792014-04-02 Dodji Seketeli <dodji@redhat.com> 29980 29981 A change involving a decl-only class is not SIZE_OR_OFFSET_CHANGE_CATEGORY 29982 * src/abg-comp-filter.cc (harmful_filter::visit): If a size change 29983 involves a decl-only class, it certainly shouldn't trigger putting 29984 the sub-tree into the SIZE_OR_OFFSET_CHANGE_CATEGORY category. 29985 299862014-04-02 Dodji Seketeli <dodji@redhat.com> 29987 29988 Fix heuristics to detect function static-ness for DWARF < 3 29989 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Make 29990 the heuristics work for functions with no parameters. 29991 299922014-04-02 Dodji Seketeli <dodji@redhat.com> 29993 29994 Avoid emitting local filtered-out changes in more spots 29995 * src/abg-comparison.cc (maybe_report_diff_for_member): Take the 29996 diff_context in parameter. Use that to check if local changes of 29997 category ACCESS_CHANGE_CATEGORY are filtered-out and do not report 29998 the change in that case. 29999 ({var_diff, enum_diff, class_diff, base_diff, 30000 function_decl_diff}::report): Adjust. 30001 300022014-04-02 Dodji Seketeli <dodji@redhat.com> 30003 30004 Add a COMPATIBLE_TYPE_CHANGE_CATEGORY to bidiff --no-harmless 30005 * include/abg-comparison.h 30006 (diff_category::COMPATIBLE_TYPE_CHANGE_CATEGORY): New enumerator. 30007 (operator|=(diff_category&, diff_category)): New declaration. 30008 * include/abg-fwd.h (is_typedef, strip_typedef) 30009 (types_are_compatible): New declarations. 30010 * include/abg-ir.h (operator==(const decl_base_sptr, const 30011 decl_base_sptr)): Added the consts here. 30012 (operator==(const type_base_sptr, const type_base_sptr)): New 30013 declaration. 30014 * src/abg-comp-filter.cc (is_compatible_change): New static 30015 function. 30016 (harmless_filter::visit): Detect compatible changes and add the 30017 sub-tree into the new COMPATIBLE_TYPE_CHANGE_CATEGORY if 30018 applicable. Cleanup the logic. 30019 * src/abg-comparison.cc (operator|=(diff_category&, 30020 diff_category)): Define new function. 30021 (operator==(const decl_base_sptr l, const decl_base_sptr r)): Add 30022 consts. 30023 (operator==(const type_base_sptr l, const type_base_sptr r)): 30024 Define new operator. 30025 (is_typedef, strip_typedef, types_are_compatible): New function 30026 definitions. 30027 * tests/data/test-diff-filter/test3-report.txt: New test report 30028 reference. 30029 * tests/data/test-diff-filter/test3-v0.cc: Source code for new 30030 test input. 30031 * tests/data/test-diff-filter/test3-v0.o: New test input. 30032 * tests/data/test-diff-filter/test3-v1.cc: Source code for new 30033 test input. 30034 * tests/data/test-diff-filter/test3-v1.o: New test input. 30035 * tests/test-diff-filter.cc: Adjust to consume the new tests 30036 inputs above. 30037 * tools/bidiff.cc: Add the new COMPATIBLE_TYPE_CHANGE_CATEGORY 30038 into the --harmless group. 30039 300402014-04-01 Dodji Seketeli <dodji@redhat.com> 30041 30042 Don't emit local filtered-out changes 30043 * src/abg-comparison.cc (represent): For var_decl, do not emit 30044 filtered-out local size/offset/access changes. 30045 (report_name_size_and_alignment_changes): Take the diff context. 30046 Do not report filtered-out local size/offset changes. 30047 ({var_diff, enum_diff, class_diff, type_decl_diff}::report): 30048 Adjust. 30049 * test0-report.txt: Adjust. 30050 * test01-report.txt: New reference report for the same inputs 30051 test0-v{1,0}.o, but called without the --no-harmless command line. 30052 * tests/data/test-diff-filter/test2-v0.cc: Source code for new test input. 30053 * tests/data/test-diff-filter/test2-v1.cc: Likewise. 30054 * tests/data/test-diff-filter/test2-v0.o: New test input. 30055 * tests/data/test-diff-filter/test2-v1.o: Likewise. 30056 * tests/data/test-diff-filter/test2-report.txt: Reference report 30057 for new test input. 30058 * tests/test-diff-filter.cc: Consume the test inputs above. 30059 * tests/Makefile.am: Add the new test inputs above to the 30060 distribution. 30061 300622014-04-01 Dodji Seketeli <dodji@redhat.com> 30063 30064 Compact & intuitive reporting for changed function parameters 30065 * include/abg-comparison.h (unsigned_changed_parm_map) 30066 (unsigned_parm_map): New typedefs. 30067 * src/abg-comparison.cc 30068 (function_decl_diff::subtype_changed_parms): Renamed this from 30069 changed_parms. 30070 (function_decl_diff::priv::subtype_changed_parms_}): Renamed this 30071 from changed_parms_; 30072 (function_decl_diff::priv::{deleted_parms_by_id_, 30073 added_parms_by_id_, changed_parms_by_id_}): New members. 30074 (function_decl_diff::ensure_lookup_tables_populated): Update the 30075 new priv::changed_parms_by_id_ member to contain the parameters 30076 that got changed, as opposed to the subtype_changed_parms_ member 30077 that contain parameters that got a sub-type change. The other 30078 priv::*_by_id_ members are helpers for this. Update them too. 30079 (function_decl_diff::subtype_changed_parms): Renamed this from 30080 ::changed_parms. 30081 (function_decl_diff::report): Report separately about parameters 30082 having a sub-type change, and parameters that got changed. Note 30083 that in both cases, the change is necessarily to a compatible 30084 type. 30085 * data/test-diff-dwarf/test2-v0.cc: New test file. 30086 * data/test-diff-dwarf/test2-v0.o: Likewise. 30087 * data/test-diff-dwarf/test2-v1.cc: Likewise. 30088 * data/test-diff-dwarf/test2-v1.o: Likewise. 30089 * data/test-diff-dwarf/test2-report.txt: Likewise. 30090 * tests/Makefile.am: Add the new test files above to the 30091 distribution. 30092 * tests/test-diff-dwarf.cc: Consume the input files above to 30093 actually perform a regression test. 30094 300952014-03-31 Dodji Seketeli <dodji@redhat.com> 30096 30097 Fix thinko class_diff traversing. 30098 * src/abg-comparison.cc (class_diff::traverse): Fix thinking in 30099 introduced by commit "6709478 Fix infinite loop when traversing 30100 classes and their members" 30101 * tests/data/test-diff-filter/test1-v{0,1}.o: New test binary input files. 30102 * tests/data/test-diff-filter/test1-v{0,1}.cc: Source code for the 30103 above. 30104 * tests/data/test-diff-filter/test1-report.txt: Reference report 30105 for the diffing of the two binary input files above. 30106 * tests/test-diff-filter.cc: Make the test run on the new input above. 30107 * tests/Makefile.am: Add the new material to the distribution. 30108 301092014-03-31 Dodji Seketeli <dodji@redhat.com> 30110 30111 Add forgotten test output adjustment 30112 * tests/data/test-diff-filter/test0-report.txt: Adjust for the 30113 commit "a8d5284 Fix diff report indentation issue" 30114 * tests/data/test-diff-dwarf/test{0,1}-report.txt: Likewise. 30115 301162014-03-31 Dodji Seketeli <dodji@redhat.com> 30117 30118 Add forgotten source file for binary test input 30119 * tests/data/test-diff-dwarf/test1-v0.cc: New file. 30120 * tests/data/test-diff-dwarf/test1-v1.cc: Likewise. 30121 301222014-03-31 Dodji Seketeli <dodji@redhat.com> 30123 30124 Fix diff report indentation issue 30125 * abg-comparison.cc (corpus_diff::report): Indent the details of 30126 function changes. 30127 301282014-03-31 Dodji Seketeli <dodji@redhat.com> 30129 30130 Fix infinite loop when traversing classes and their members 30131 * src/abg-comparison.cc (TRY_{PRE,POST}_VISIT_CLASS_DIFF): New 30132 macros. 30133 (class_diff::priv::traversing_): New flag. 30134 (class_diff::priv::priv): New constructor to initialize the new 30135 flag above. 30136 (class_diff::traversing): Do not traverse the diff again if it's 30137 being traversed already. 30138 301392014-03-31 Dodji Seketeli <dodji@redhat.com> 30140 30141 Fix access_changed and data_member_offset_changed predicates 30142 * src/abg-comp-filter.cc (access_changed) 30143 (data_member_offset_changed): Fix detection of membership. 30144 301452014-03-29 Dodji Seketeli <dodji@redhat.com> 30146 30147 Take filtering in account in diff stats & better categorizing 30148 * include/abg-comparison.h 30149 (diff_category::ACCESS_CHANGE_CATEGORY): Renamed 30150 ACCESS_CHANGED_CATEGORY into this. 30151 (diff_category::SIZE_OR_OFFSET_CHANGE_CATEGORY): Renamed 30152 SIZE_CHANGED_CATEGORY into this. Changed its semantics to 30153 incorporate offset changes as well. 30154 * src/abg-comparison.cc (struct noop_deleter): Move this up. 30155 (represent): Do not report filtered out data members. 30156 (report_mem_header): Add a new num_filtered parameter to take 30157 filtered-out members in account in members report headers. 30158 Adjust. 30159 (class_diff::priv::{count_filtered_bases, 30160 count_filtered_data_members, count_filtered_member_functions}): 30161 New member functions. When a member is filtered, do not report 30162 it all. 30163 ({enum_diff, class_diff}::report): Adjust. Take filtered members 30164 into account in headers. 30165 (corpus_diff::priv::apply_filters_and_compute_diff_stats): New 30166 member function. 30167 (corpus_diff::priv::emit_diff_stats): Renamed 30168 emit_corpus_diff_stats into this. Change it to take the stats in 30169 parameter. 30170 (corpus_diff::report): Adjust to re-use the above. Filter 30171 varibles as well. Take the filtered functions & variables in 30172 account in the stats. Do not report filtered-out functions & 30173 variables at all. 30174 * src/abg-comp-filter.cc (type_size_changed, access_changed) 30175 (data_member_offset_changed): New predicates. 30176 ({harmless, harmful}_filter::visit): Adjust to use the new 30177 predicates above. Update the harmful variant for the new 30178 SIZE_OR_OFFSET_CHANGE_CATEGORY category. 30179 * tools/bidiff.cc (set_diff_context_from_opts): Adjust for the 30180 categories name changes. 30181 * tests/data/test-diff-filter/test0-report.txt: New test input. 30182 * tests/data/test-diff-filter/test0-v0.cc: Likewise. 30183 * tests/data/test-diff-filter/test0-v0.o: Likewise. 30184 * tests/data/test-diff-filter/test0-v1.cc: Likewise. 30185 * tests/data/test-diff-filter/test0-v1.o: Likewise. 30186 * tests/test-diff-filter.cc: New test harness. 30187 * tests/Makefile.am: Add the new test files above to the 30188 distribution. 30189 301902014-03-29 Dodji Seketeli <dodji@redhat.com> 30191 30192 Fix var_diff length determination 30193 * src/abg-comparison.cc (var_diff::length): Just compare the two 30194 diff subjects. 30195 301962014-03-29 Dodji Seketeli <dodji@redhat.com> 30197 30198 Fix typos in the test-diff-dwarf.cc source code 30199 * tests/test-diff-dwarf.cc: Fix various typos. 30200 302012014-03-27 Dodji Seketeli <dodji@redhat.com> 30202 30203 Initial implementation of diff tree node filtering 30204 * include/abg-comp-filter.h: New file. 30205 * include/Makefile.am: Add the new include/abg-comp-filter.h to 30206 the source distribution. 30207 * include/abg-comparison.h (enum visiting_kind, diff_category): New enums. 30208 (operator|): Declare new operator declaration for the new 30209 visiting_kind enum. 30210 (operator{|,^,&,~}): Declare new operator decl for the new 30211 diff_category enum. 30212 (diff_context::{get_allowed_category, set_allowed_category, 30213 switch_categories_on, switch_categories_off, diff_filters, 30214 add_diff_filter, maybe_apply_filters}): Declare new member functions. 30215 (diff::{parent_, category_}): New members. 30216 (diff::diff): Adjust. 30217 (diff::{get_parent, set_parent, get_category, add_to_category, 30218 is_filtered_out, to_be_reported}): New members. 30219 (diff_node_visitor::{get_visiting_kind, set_visiting_kind}): New 30220 members. 30221 (diff_node_visitor::visit): Add a new flag to saying if the 30222 visitor is being called in post or pre children traversing mode. 30223 * src/abg-comparison.cc (operator|): Declare new operator 30224 declaration for the new visiting_kind enum. 30225 (operator{|,^,&,~}): Declare new operator decl for the new 30226 diff_category enum. 30227 (diff_context::priv::{allowed_category_, filters_}): New members. 30228 (diff_context::diff_context): Add all known filters. 30229 (diff_context::{get_allowed_category, set_allowed_category, 30230 switch_categories_on, switch_categories_off, diff_filters, 30231 add_diff_filter, maybe_apply_filters}): Define new member 30232 functions. 30233 (diff::{is_filtered_out, to_be_reported}): Define new members. 30234 (*::report): Use the new diff::to_be_reported function. 30235 (*::traverse): Adjust for pre/post visiting. 30236 (var_diff::var_diff): Chain the type diff node to its parent. 30237 ({pointer_diff, reference_diff, qualified_type_diff, 30238 typedef_diff}::underlying_type_diff): Chain the underlying type 30239 diff node to its parent. 30240 (enum_diff::enum_diff): Likewise. 30241 (base_diff::underlying_class_diff): Likewise. 30242 ({class_diff, corpus_diff}::report): Do not report changed 30243 (member) functions that have been filtered out. Rather report 30244 that they have been filtered out. 30245 ({function_decl_diff, class_diff}::traverse): Chain underlying 30246 type diff nodes to their parent. 30247 (diff_node_visitor::visit): Add a new flag to saying if the 30248 visitor is being called in post or pre children traversing mode. 30249 Make sure to call the default diff::visit overload. 30250 * src/abg-comp-filter.cc: New file. 30251 * src/Makefile.am: Add the new abg-comp-filter.cc to the source 30252 distribution. 30253 * tools/bidiff.cc (options::show_harm{ful,less}_changes): New 30254 members. 30255 (display_usage): Add usage strings for --no-harmless and 30256 --no-harmful options. 30257 (parse_command_line): Parse --no-harmless and --no-harmful command 30258 line options. 30259 (set_diff_context_from_opts): Populate the diff context 30260 accordingly. 30261 302622014-03-26 Dodji Seketeli <dodji@redhat.com> 30263 30264 Add missing headers double inclusion guards 30265 * include/abg-comparison.h: Add a missing double inclusion guard. 30266 * include/abg-diff-utils.h: Likewise. 30267 302682014-03-26 Dodji Seketeli <dodji@redhat.com> 30269 30270 Add a missing apostrophe to access reporting 30271 * src/abg-comparison.cc (represent): For member var_decls, add a 30272 missing apostrophe after the access. 30273 * tests/data/test-diff-dwarf/test0-report.txt: Update test report. 30274 302752014-03-21 Dodji Seketeli <dodji@redhat.com> 30276 30277 Fix diff emptiness detection for function_decl_diff nodes 30278 * src/abg-comparison.cc (function_decl_diff::length): Just compare 30279 the two functions here, damit. 30280 * tests/data/test-diff-dwarf/test0-report.txt: Adjust. 30281 302822014-03-21 Dodji Seketeli <dodji@redhat.com> 30283 30284 Fixlets in the bidiff regression testing harness 30285 * tests/test-bidiff.cc (main): Fix a typo. Fix the path to the 30286 output path. 30287 302882014-03-21 Dodji Seketeli <dodji@redhat.com> 30289 30290 Initial regression test for dwarf diffing 30291 * tests/test-diff-dwarf.cc: New dwarf diffing regression test 30292 harness. 30293 * tests/data/test-diff-dwarf/test0-report.txt: New test input. 30294 * tests/data/test-diff-dwarf/test0-v0.cc: Likewise. 30295 * tests/data/test-diff-dwarf/test0-v0.o: Likewise. 30296 * tests/data/test-diff-dwarf/test0-v1.cc: Likewise. 30297 * tests/data/test-diff-dwarf/test0-v1.o: Likewise. 30298 * tests/Makefile.am: Add the new test inputs from 30299 tests/test-diff-dwarf.cc and tests/data/test-diff-dwarf/* to 30300 the build system. 30301 303022014-03-21 Dodji Seketeli <dodji@redhat.com> 30303 30304 Rename test-walker.cc into test-ir-walker.cc 30305 * tests/test-ir-walker.cc: Renamed test-walker.cc into this. 30306 * tests/Makefile.am: Adjust. The generated binary is now testirwalker. 30307 303082014-03-21 Dodji Seketeli <dodji@redhat.com> 30309 30310 Initial diff tree traversal infrastructure 30311 * include/abg-comparison.h (struct diff_traversable_base, struct 30312 diff_node_visitor): New type. 30313 (class diff): Extends the new diff_traversable_base. 30314 ({diff, distinct_diff, var_diff, pointer_diff, reference_diff, 30315 qualified_type_diff, enum_diff, class_diff, base_diff, scope_diff, 30316 function_decl_diff, type_decl_diff, typedef_diff, 30317 translation_unit_diff, corpus_diff}::traverse): New methods. 30318 (function_decl_diff::return_type_diff): New accessor. Renamed 30319 return_diff into this. 30320 (translation_unit_diff::{first, second}_translation_unit): New 30321 accessors. 30322 (corpus_diff::{deleted, added, changed}_functions): New accessors. 30323 * src/abg-comparison.cc ({distinct_diff, var_diff, 30324 pointer_diff, reference_diff, qualified_type_diff, enum_diff, 30325 class_diff, base_diff, scope_diff, function_decl_diff, 30326 type_decl_diff, typedef_diff, translation_unit_diff, 30327 corpus_diff}::traverse): New function implementations. 30328 (maybe_report_diff_for_member): Renamed 30329 maybe_report_diff_for_class_members into this. 30330 (var_diff::report): Adjust. 30331 (struct translation_unit_diff::priv): New private type. 30332 (translation_unit_diff::translation_unit_diff): Instantiate the 30333 new priv_ member. 30334 (translation_unit_diff::{first,second}_translation_unit): New 30335 accessors. 30336 (corpus_diff::{deleted, added, changed}_functions): New function 30337 implementations. 30338 (diff_node_visitor::visit): New function implementations. 30339 303402014-03-19 Dodji Seketeli <dodji@redhat.com> 30341 30342 Make tree walking preemptive 30343 * include/abg-traverse.h (traversable_base::traversable): Change 30344 the signature of this to return a boolean. 30345 * include/abg-ir.h (ir_traversable_base::traverse): Change the 30346 signature of this to return a boolean. 30347 (*::traverse): Adjust. 30348 (ir_node_visitor::visit): Change the signature of this to return a 30349 boolean. 30350 * src/abg-corpus.cc (symtab_build_visitor_type::visit): Adjust. 30351 * src/abg-ir.cc (::traverse): Adjust. 30352 * tests/test-walker.cc (name_printing_visitor::visit): Adjust. 30353 303542014-03-26 Jonathan Wakely <jwakely@redhat.com> 30355 30356 Fix comment typos 30357 * include/abg-diff-utils.h (compute_diff): Fix typo in apidoc 30358 comment. 30359 303602014-03-24 Dodji Seketeli <dodji@redhat.com> 30361 30362 Follow DW_AT_abstract_origin and add missing mangled name 30363 * src/abg-dwarf-reader.cc (build_function_decl): Change signature 30364 to take function_decl to which one shall add properties that got 30365 added by subsequent DIEs later. 30366 (build_class_type_and_add_to_ir): Adjust. 30367 (build_function_decl): Allow adding new properties to an existing 30368 function_decl. Add the mangled name in particular. 30369 * tests/data/test-read-dwarf/test1.abi: Update test. 30370 303712014-03-20 Dodji Seketeli <dodji@redhat.com> 30372 30373 Fix destructor naming. 30374 * src/abg-ir.cc (function_decl::get_pretty_representation): In 30375 DWARF at least, the destructor function name already contains the 30376 '~'. No need to add it. 30377 303782014-03-20 Dodji Seketeli <dodji@redhat.com> 30379 30380 Better static function determination heuristic 30381 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Better 30382 heuristic. 30383 303842014-03-20 Dodji Seketeli <dodji@redhat.com> 30385 30386 Dynamically wire class_decl::base_spec hashing 30387 * include/abg-ir.h (decl_base::get_hash): Make this virtual. 30388 (class_decl::base_spec::get_hash): Declare a new virtual overload. 30389 * src/abg-ir.cc (class_decl::base_spec::get_hash): Define. 30390 303912014-03-20 Dodji Seketeli <dodji@redhat.com> 30392 30393 Slight indentation fix in the diff report 30394 * src/abg-comparison.cc (class_diff::report): Indentation fix for 30395 member function changes report. 30396 303972014-03-20 Dodji Seketeli <dodji@redhat.com> 30398 30399 Get rid of class_decl::member_function 30400 * include/abg-fwd.h (is_member_function) 30401 (get_member_function_is_{ctor,dtor,const}) 30402 (get_member_function_vtable_offset): New function declarations. 30403 * include/abg-ir.h (class_decl::member_function): Remove. 30404 (class_decl::member_functions): Adjust. This is now just a vector 30405 of method_decl_sptr. 30406 (class_decl::add_member_function): Remove the overload taking 30407 class_decl::member_function. Adjust the other overload to take a 30408 method_decl_sptr. 30409 (class mem_fn_context_rel): New class. 30410 (class_decl::method_decl::set_scope): New virtual overload. 30411 (class_decl::member_function): Remove. 30412 (operator==): Remove the overload taking a 30413 class_decl::member_function. 30414 (class_decl::member_function::hash): Remove. 30415 (ir_node_visitor::visit): Remove the overload taking a 30416 class_decl::member_function. 30417 * include/abg-comparison.h (changed_member_function_sptr) 30418 (string_member_function_sptr_map): Adjust. 30419 * src/abg-comparison.cc (represent): Adjust the overload taking a 30420 class_decl::member_function to take a class_decl::method_decl. 30421 (class_diff::{report, ensure_lookup_tables_populated}): Adjust. 30422 * src/abg-corpus.cc (symtab_build_visitor_type::visit): Remove the 30423 overload taking a class_decl::member_function. 30424 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 30425 Adjust. 30426 * src/abg-hash.cc (decl_base::hash::operator()): Use the fully 30427 qualified name of the decl in the hash, to increase the likelihood 30428 of avoiding hash collisions. 30429 (method_type::hash::operator()): Likewise. 30430 (function_decl::hash::operator()): Take member functions in 30431 account. 30432 (class_decl::member_function::hash::operator()): Remove. 30433 (class_decl::hash::operator()): Adjust. 30434 (type_base::dynamic_hash::operator()): Adjust. 30435 * src/abg-ir.cc (is_member_function) 30436 (get_member_function_is_{ctor,dtor,const}) 30437 (get_member_function_vtable_offset): New function definitions. 30438 (function_decl::get_pretty_representation): Adjust. 30439 (function_decl::operator): Take member functions in account here. 30440 (class_decl::insert_member_decl): Adjust. 30441 (mem_fn_context_rel::~mem_fn_context_rel): New definition. 30442 (class_decl::member_function::*): Remove. 30443 (class_decl::method_decl::set_scope): New definition. 30444 (class_decl::get_num_virtual_functions): Adjust. 30445 (class_decl::add_member_function): Remove overload taking a 30446 class_decl::member_function. Define a new overload taking a 30447 class_decl::method_decl. 30448 (ir_node_visitor::visit): Remove the overload taking a 30449 class_decl::member_function. 30450 * src/abg-reader.cc (build_class_decl): Adjust. 30451 * src/abg-writer.cc (write_voffset, write_class_decl): Adjust. 30452 304532014-03-19 Dodji Seketeli <dodji@redhat.com> 30454 30455 Get rid of class_decl::data_member 30456 * include/abg-fwd.h (has_scope): Delete the overloads for 30457 type_base. 30458 (get_member_is_static): Add an overload for decl_base*. 30459 ({is,get,set}_data_member,{get_,set}_data_member_is_laid_out) 30460 ({get,set}_data_member_offset): New access declarations. 30461 * include/abg-ir.h (class context_rel): Move up. 30462 (decl_base::set_context_rel): New definition. 30463 (class dm_context_rel): New type. 30464 (decl_base::hash_as_member): Remove. 30465 (var_decl::set_scope): Declare new virtual member. 30466 (class_decl::data_member): Remove. 30467 (ir_node_visitor::visit): Remove the overload for 30468 class_decl::data_member. 30469 (represent_data_member): Remove the represent overload for 30470 class_decl::data_member into this. Make it take a var_decl. 30471 (represent): Change the overload that takes two 30472 class_decl::data_member take two var_decl. And adjust it. 30473 (class_diff::report): Adjust. 30474 * src/abg-corpus.cc (symtab_build_visitor_type::visit): Remove the 30475 overload that takes a class_decl::data_member*. Adjust the 30476 overload that takes a var_decl to recognize (static) data members. 30477 * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir) 30478 (build_class_type_and_add_to_ir, build_ir_node_from_die): 30479 Adjust. 30480 * src/abg-hash.cc (var_decl::hash::operator()): Adjust. 30481 (class_decl::data_member::hash::operator()): Remove. 30482 (decl_base::hash::operator()): Take the context relationship in 30483 account here. 30484 (decl_base::hash_as_member::operator()): Remove. 30485 ({enum_type_decl,typedef_decl}::hash::operator()): Adjust. 30486 (class_decl::member_function::hash::operator()): Adjust. 30487 (type_base::dynamic_hash::operator()): Adjust. 30488 * src/abg-ir.cc (dm_context_rel::~dm_context_rel): New definition. 30489 (has_scope): Remove overload for type_base. 30490 (get_member_is_static): New overload for decl_base*. 30491 (is_data_member): New function definition. 30492 ({get,set}_data_member_{offset,is_laid_out}): Define new 30493 accessors. 30494 (var_decl::set_scope): Define new member function. Make this set 30495 a dm_context_rel as the context relationship. 30496 (var_decl::operator==): Adjust to take in account the new data 30497 member relationship. 30498 (class_decl::class_decl): Adjust. 30499 (class_decl::insert_member_decl): Adjust. 30500 (class_decl::add_data_member): Remove the overload for 30501 class_decl::data_member. 30502 (class_decl::add_data_member): Adjust the overload for var_decl. 30503 (operator==): Remove overload for class_decl::data_member*. 30504 (class_decl::data_member::operator==): Likewise. 30505 (ir_node_visitor::visit): Remove overload for 30506 class_decl::data_member. 30507 * src/abg-writer.cc (write_layout_offset, write_class_decl): 30508 Adjust. 30509 * tests/data/test-read-write/test20.xml: Adjust. 30510 305112014-03-18 Dodji Seketeli <dodji@redhat.com> 30512 30513 Better base class diff reporting 30514 * include/abg-comparison.h (class base_diff): New. 30515 * include/abg-ir.h (function_decl::get_first_non_implicit_parm): 30516 New member function. 30517 (function_type::get_first_non_implicit_parm): Likewise. 30518 * src/abg-comparison.cc (base_has_changed): Change parm to take 30519 class_decl::base_spec_sptr. 30520 (class_diff::ensure_lookup_tables_populated): Compare the base 30521 specs not just the base classes. 30522 (class_diff::report): Adjust. Report sub-type changes in the 30523 member functions. 30524 (base_diff::*): Define member functions. 30525 (compute_diff): Define an overload for base_diff_sptr. 30526 * src/abg-hash.cc ({function_type, 30527 method_type}::hash::operator()): Do not hash the implicit parm of 30528 member functions. 30529 (class_decl::hash::operator()): Do not hash member types. 30530 * src/abg-ir.cc (decl_base::decl_base): Initialize the 30531 hashing_started_ member that got moved here from class_decl. 30532 (decl_base::get_hash): Do not set the hash if it's being set b/c 30533 we are in a class_decl. 30534 (decl_base::operator==) Do not compare hashes for now. Two decls 30535 can have different hashes and compare equal; think about an 30536 incomplete type foo, that compares equal with a complete foo. 30537 Their hashes will be different though. So for now, just avoid 30538 comparing these. 30539 (compare_function_types): Avoid comparing the implicit parameter 30540 for member functions. 30541 ({function, method}_type::get_first_non_implicit_parm): New 30542 definition. 30543 * tests/data/test-read-write/test20.xml: Update. 30544 305452014-03-13 Dodji Seketeli <dodji@redhat.com> 30546 30547 Do not report change in typedef underlying type is there is none 30548 * src/abg-comparison.cc (typedef_diff::report): Do not forget to 30549 check the length of the diff of the underlying type before sending 30550 its diff report down the wire. 30551 305522014-03-13 Dodji Seketeli <dodji@redhat.com> 30553 30554 Avoid hashing a access & static-ness of member types twice 30555 * src/abg-hash.cc (class_decl::hash::operator()): Do hash the 30556 'member' part of the member types here, it has been hashed 30557 already. 30558 305592014-03-13 Dodji Seketeli <dodji@redhat.com> 30560 30561 Set class {size,loc} when adding members to a decl-only class 30562 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Do not 30563 forget to set class size and location when adding members to a 30564 declaration-only class, turning it into a definition class. 30565 305662014-03-13 Dodji Seketeli <dodji@redhat.com> 30567 30568 Use the same representation for member and non-member types 30569 * include/abg-fwd.h (is_at_class_scope): Add new oveloads. 30570 (as_non_member_type, as_non_member_class_decl): Remove. 30571 (has_scope, is_member_decl, is_member_type): New function 30572 declarations. (get_member_is_static, set_member_is_static): 30573 Likewise. * include/abg-ir.h (enum access_specifier): Move to 30574 the abigail:: namespace, from ... 30575 (class_decl::access_specifier): ... here. (class 30576 context_rel): New type. (decl_base::hash_as_member): New 30577 hasher. (decl_base::context_): Change the type of this to 30578 context_rel_sptr. (decl_base::get_context_rel): New protected 30579 getter. (decl_base::get_scope): Move this out-of-line. 30580 (class_decl::member_type): Remove. 30581 (class_decl::member_types): Adjust this typedef. 30582 (class_decl::{insert,add}_member_type): Make these take a 30583 type_base_sptr now. (class_decl::add_member_type): Change the 30584 overload that returned a member_type to return a 30585 type_base_sptr. (get_member_access_specifier, 30586 set_member_access_specifier): New function declarations. * 30587 include/abg-comparison.h (class member_type_diff): Remove. 30588 (compute_diff): Remove the overload for member_type_diff. * 30589 src/abg-comparison.cc (compute_diff_for_types): Adjust for the 30590 removal of class_decl::member_type. 30591 (maybe_report_diff_for_class_members): New static function. 30592 (report_name_size_and_alignment_changes): Do not report a name 30593 change just because of a struct -> class change. ({var_diff, 30594 enum_diff, function_decl_diff}::report): Use the new 30595 maybe_report_diff_for_class_members. (class_diff::report): 30596 Adjust for the removal of class_decl::member_type. Use the 30597 new maybe_report_diff_for_class_members. (class member_diff): 30598 Remove. * src/abg-dwarf-reader.cc (die_access_specifier) 30599 (get_scope_for_die, build_translation_unit_and_add_to_ir) 30600 (build_class_type_and_add_to_ir, build_function_decl) 30601 (build_ir_node_from_die): Adjust. * abg-hash.cc (struct 30602 decl_base::hash_as_member): Define. ({scope_type_decl, 30603 enum_type_decl, typedef_decl}::hash::operator()): Use the 30604 decl_base::hash_as_member. 30605 * src/abg-ir.cc (decl_base::decl_base): Adjust. 30606 (decl_base::get_scope): New out-of-line getter. 30607 (decl_base::{operator==, set_scope): Adjust. 30608 (has_scope, is_member_decl, is_member_type) 30609 (get_member_access_specifier, set_member_access_specifier) 30610 (get_member_is_static, set_member_is_static, is_at_class_scope): 30611 New function definitions. 30612 (as_non_member_type, as_non_member_class_decl): Remove. 30613 (get_node_name): Adjust. 30614 (class_decl::{class_decl, set_earlier_declaration, 30615 insert_member_decl, insert_member_type, add_member_type): 30616 Likewise. 30617 (class_decl::member_type::*) Remove. 30618 * src/abg-reader.cc (read_access, build_qualified_type_decl) 30619 (build_reference_type_def, build_typedef_decl) 30620 (build_class_decl): Adjust. 30621 * src/abg-writer.cc (write_access, write_member_type) 30622 (write_class_decl): Likewise. 30623 306242014-03-12 Dodji Seketeli <dodji@redhat.com> 30625 30626 Avoid more static_casts in the (comparison) code 30627 * src/abg-ir.cc (class_decl::insert_member_type, operator==): 30628 Remove static_casts. 30629 (class_decl::member_type::operator==): Likewise. 30630 (class_decl::member_class_template::operator==): Likewise. 30631 306322014-03-12 Dodji Seketeli <dodji@redhat.com> 30633 30634 Allow adding members to decl-only classes making them defined classes 30635 * include/abg-fwd.h (lookup_type_in_scope) 30636 (lookup_var_decl_in_scope): New declarations. 30637 * include/abg-ir.h (class_decl::get_is_declaration_only): Rename 30638 is_declaration_only on this. 30639 (class_decl::set_is_declaration_only): 30640 * src/abg-comparison.cc (try_to_diff<class_decl>) 30641 (class_diff::ensure_lookup_tables_populated) 30642 (scope_diff::ensure_lookup_tables_populated): Update for the 30643 get_is_declaration_only renaming. 30644 * src/abg-dwarf-reader.cc (get_scope_for_die): Likewize. 30645 (build_class_type_and_add_to_ir): Make sure that a member type or 30646 data member is not already present in the class before adding it. 30647 Also, if a decl-only class gets a data member, it's not a 30648 decl-only class anymore. 30649 * src/abg-hash.cc (class_decl::hash::operator()): Update for the 30650 get_is_declaration_only renaming. 30651 * src/abg-ir.cc (scope_decl::find_iterator_for_member) 30652 (look_through_decl_only_class): Likewise. 30653 (lookup_type_in_scope, lookup_var_decl_in_scope, get_node_name) 30654 (convert_node_to_decl, lookup_node_in_scope) 30655 (lookup_type_in_scope): New definitions. 30656 (class_decl::{set_definition_of_declaration, 30657 set_earlier_declaration, operator==}): Update for the 30658 get_is_declaration_only renaming. 30659 * src/abg-reader.cc (build_class_decl): Likewise. 30660 * src/abg-writer.cc (write_class_is_declaration_only): Likewise. 30661 306622014-03-12 Jonathan Wakely <jwakely@redhat.com> 30663 30664 Fixed typos in abg-diff-utils.h 30665 * include/abg-diff-utils.h (compute_diff): Fix typos in the API 30666 doc. 30667 306682014-03-11 Dodji Seketeli <dodji@redhat.com> 30669 30670 Initialize a variable 30671 * tools/bilint.cc (main): Initialize the 'r' variable. 30672 306732014-03-11 Dodji Seketeli <dodji@redhat.com> 30674 30675 Do not declare classes before defining them anymore 30676 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Do not 30677 declare classes before defining them because both the declaration 30678 and the definition now compare equal. 30679 * tests/data/test-read-dwarf/test1.abi: Update test. 30680 * tests/data/test-read-write/test20.xml: Likewise. 30681 306822014-03-11 Dodji Seketeli <dodji@redhat.com> 30683 30684 Little style fix 30685 * src/abg-comparison.cc (class_diff::report): Slight style fix. 30686 306872014-03-10 Dodji Seketeli <dodji@redhat.com> 30688 30689 Better support for decl-only classes in diffing and comparison 30690 * include/abg-fwd.h (look_through_decl_only_class): New function 30691 declaration. 30692 * src/abg-comparison.cc (class_diff::length): Just compare the two 30693 classes. 30694 (compute_diff): Look through the two classes if they are 30695 decl-only, and use their declaration for the diffing. 30696 * src/abg-ir.cc (look_through_decl_only_class): Define this new 30697 entry point. 30698 (class_decl::set_definition_of_declaration): Allow setting a 30699 definition that is itself a declaration-only. 30700 * src/abg-writer.cc (write_class_decl): Declaration-only can now 30701 have members, namely member types. 30702 307032014-03-10 Dodji Seketeli <dodji@redhat.com> 30704 30705 Fix comparison wrt hash number 30706 * src/abg-ir.cc (decl_base::operator==): Do not consider empty 30707 hashes. 30708 (class_decl::operator==): Better support for comparing decl-only 30709 classes against non-decl-only classes. 30710 307112014-03-10 Dodji Seketeli <dodji@redhat.com> 30712 30713 Better support of class DIEs with DW_AT_specification 30714 * src/abg-dwarf-reader.cc (get_scope_for_die): The definition of a 30715 declaration-only class can be NULL. Do not look through in that 30716 case. 30717 (build_class_type_and_add_to_ir): Support adding class members to 30718 an existing class. 30719 (build_ir_node_from_die): If a class DIE has a DW_AT_specification, 30720 get the specification DIE, get its matching IR node and add the 30721 current members of the current DIE to that IR node. 30722 307232014-03-10 Dodji Seketeli <dodji@redhat.com> 30724 30725 Tell struct and class apart 30726 * include/abg-ir.h (class_decl::is_struct_): New member. 30727 (class_decl::class_decl): Take an additional is_struct member. 30728 (class_decl::is_struct): New getter. 30729 * src/abg-ir.cc (class_decl::class_decl): Initialize the new 30730 is_struct_ data member. 30731 (class_decl::get_pretty_representation): Tell struct and class 30732 apart. 30733 * abg-reader.cc (read_is_struct): New static function. 30734 (build_class_decl): Capture the struct-ness of the class. 30735 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 30736 Likewise. 30737 * src/abg-writer.cc (write_is_struct): New static function. 30738 (write_class_decl): Write the struct-ness of the class. 30739 * tests/data/test-read-dwarf/test1.abi: Update test. 30740 307412014-03-06 Dodji Seketeli <dodji@redhat.com> 30742 30743 Fix typedef_diff emptyness detection 30744 * src/abg-comparison.cc (typedef_diff::length): Do not mask away the 30745 dynamic type of the typedef_decl before the comparison. 30746 307472014-02-28 Dodji Seketeli <dodji@redhat.com> 30748 30749 Add --drop/--keep options to bidiff 30750 * include/abg-sptr-utils.h: New file. 30751 * include/Makefile.am: Add abg-sptr-utils. to the build system. 30752 * include/abg-libxml-utils.h (reader_sptr, xml_char_sptr): Remove 30753 these typedefs as there are now in abg-sptr-utils. 30754 (build_sptr): Likewise for this template and its specializations 30755 declarations. 30756 * src/abg-libxml-utils.cc (sptr_utils::build_sptr): Mode the 30757 definition of the specializations for xmlTextReader and xmlChar 30758 into the sptr_utils namespace. 30759 * include/abg-corpus.h 30760 (corpus::{get_regex_patterns_of_fns_to_suppress, 30761 get_regex_patterns_of_vars_to_suppress, 30762 get_regex_patterns_of_fns_to_keep, 30763 get_regex_patterns_of_vars_to_keep}): Declare new member 30764 functions. 30765 * src/abg-comparison.cc (sptr_utils::regex_t_deleter): Define new 30766 functor. 30767 (build_sptr) Define new specialization for regex_t. 30768 (struct array_deleter): Remove unused functor. 30769 (corpus::priv::regex_patterns_{fns,vars}_to_{suppress,keep}): New data 30770 members. 30771 (symtab_build_visitor_type::regex_patterns_{fns,vars}_to_{suppress,keep}): 30772 Likewise. 30773 (symtab_build_visitor_type::r_{fns,vars}_{suppress,keep})): 30774 Likewise. 30775 (symtab_build_visitor_type::symtab_build_visitor_type): Update the 30776 signature of this constructor to take regex patterns for functions 30777 and variables to suppress and to keep. Also, initialize the data 30778 members from these new parameters. 30779 (symtab_build_visitor_type::regex_{fns,vars}_{suppress,keep}): New 30780 member functions. 30781 (symtab_build_visitor_type::{add_fn_to_wip_fns, 30782 add_var_to_wip_vars}): Likewise. 30783 (symtab_build_visitor_type::visit) Use either add_fn_to_wip_fns or 30784 add_var_to_wip_vars depending on the overload of the visit() 30785 member. 30786 (corpus::priv::build_symbol_table): Update for the change of the 30787 symtab_build_visitor_type constructor signature. 30788 (corpus::get_regex_patterns_of_{fns,vars}_to_{suppress,keep}): 30789 Define new member functions. 30790 * tools/bidiff.cc (options::{drop,keep}_{fn,var}_regex_patterns}): 30791 New data member. 30792 (display_usage): Add help strings for --drop, --drop-fn, 30793 --drop-var, --keep, --keep-fn, --keep-var 30794 (parse_command_line): Parse the command lines above. 30795 (set_corpus_keep_drop_regex_patterns): Define new static function. 30796 (main): Use the new set_corpus_keep_drop_regex_patterns. 30797 307982014-02-28 Dodji Seketeli <dodji@redhat.com> 30799 30800 Style fix in the dwarf reader 30801 * src/abg-dwarf-reader.cc (die_is_public_decl): Rename 30802 is_public_decl into this. 30803 (die_is_declaration_only): Rename is_declaration_only into this. 30804 (build_class_type_and_add_to_ir, build_var_decl) 30805 (build_function_decl): Adjust for the renames above. 30806 308072014-02-28 Dodji Seketeli <dodji@redhat.com> 30808 30809 Skip artificial (member) functions from DWARF 30810 * src/abg-dwarf-reader.cc (die_is_artificial): New static 30811 function. 30812 (build_class_type_and_add_to_ir, build_ir_node_from_die): Use the 30813 die_is_artificial function to test if the function DIE is 30814 artificial and then skip it. 30815 308162014-02-28 Dodji Seketeli <dodji@redhat.com> 30817 30818 Fix function parameter addition/deletion/change detection 30819 * include/abg-ir.h (function_decl::parameter::get_name_id): 30820 Declare new entry point. 30821 * src/abg-comparison.cc 30822 (function_decl_diff::ensure_lookup_tables_populated): Use the new 30823 function_decl::parameter::get_name_id() for the unique name of the 30824 parameter. Also, fix a little logic error: if a parm is deleted 30825 and inserted, in all cases, consider it as not deleted. 30826 308272014-02-28 Dodji Seketeli <dodji@redhat.com> 30828 30829 Add a --stat option to bidiff 30830 * include/abg-comparison.h (diff_context::show_stats_only): 30831 Declare new accessors. 30832 * src/abg-comparison.cc 30833 (diff_context::priv::show_stats_only_): New member. 30834 (diff_context::show_stats_only): Define new accessors. 30835 (corpus_diff::report): If showing stats only, quit right after 30836 showing the summary. 30837 * tools/bidiff.cc (options::show_stats_only): New data member. 30838 (options::options): Initialize the new data member. 30839 (display_usage): Add help string for --stat. 30840 (parse_command_line): Parse the --stat option. 30841 (set_diff_context_from_opts): Update to set the show_stats_only 30842 onto the context. Cleanup the logic to make it more compact. 30843 308442014-02-28 Dodji Seketeli <dodji@redhat.com> 30845 30846 Report about functions of different names 30847 * src/abg-comparison.cc (function_decl_diff::report): Consider the 30848 case of functions with different names. This doesn't happen in 30849 the current pipeline b/c they just show up as deleted/added 30850 functions so the function reporter doesn't see them as they have 30851 been already reported by now. 30852 308532014-02-28 Dodji Seketeli <dodji@redhat.com> 30854 30855 Fix length calculation for type diffs. 30856 * src/abg-comparison.cc (diff_length_of_type_bases): Fix stupid 30857 harmful thinko here. 30858 308592014-02-28 Dodji Seketeli <dodji@redhat.com> 30860 30861 Fix calculation of the length of distinct_diff 30862 * src/abg-comparison.cc (distinct_diff::length): Also perform a 30863 deep comparison here. 30864 308652014-02-28 Dodji Seketeli <dodji@redhat.com> 30866 30867 Fix diff length calculation for typedef diffs 30868 * src/abg-comparison.cc (typedef_diff::length): Just use 30869 comparison for this. 30870 308712014-02-28 Dodji Seketeli <dodji@redhat.com> 30872 30873 Fix layout of diff summary 30874 * src/abg-comparison.cc 30875 (corpus_diff::priv::emit_corpus_diff_stats): Remove useless 30876 vertical and horizontal white spaces. 30877 308782014-02-28 Dodji Seketeli <dodji@redhat.com> 30879 30880 Fix indentation of pieces of class diff report 30881 * src/abg-comparison.cc (represent, class_diff::report): Fix 30882 indentation. 30883 308842014-02-28 Dodji Seketeli <dodji@redhat.com> 30885 30886 Fix detection of entities of different kinds for diff purposes 30887 * src/abg-comparison.cc 30888 (distinct_diff::entities_are_of_distinct_kinds): Consider two NULL 30889 decls are distinct types for the purpose of diffing. This is just 30890 a shortcut to avoid creating a null_diff type for now. But then, 30891 stop considering same pointers as different. This was a bug. 30892 308932014-02-28 Dodji Seketeli <dodji@redhat.com> 30894 30895 Constify function_decl::parameter::get_type_pretty_representation() 30896 * include/abg-ir.h 30897 (function_decl::parameter::get_type_pretty_representation): This 30898 is now const. 30899 309002014-02-28 Dodji Seketeli <dodji@redhat.com> 30901 30902 Improve API doc for the location machinery 30903 * include/abg-ir.h (class location): Improve doc. 30904 (decl_base::{get,set}_location): Likewise. 30905 309062014-02-26 Dodji Seketeli <dodji@redhat.com> 30907 30908 Remove useless dynamic cast 30909 * src/abg-ir.cc (class_decl::insert_member_decl): Remove useless 30910 dynamic cast from here. 30911 309122014-02-26 Dodji Seketeli <dodji@redhat.com> 30913 30914 Insert reference, pointers and qual types at their declaration point 30915 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Insert 30916 reference, pointers and qualified types at the point where we see 30917 them, in their scope, rather than under the scope of their 30918 underlying type. This is because their might be first declared as 30919 member types and we don't want to loose that information. 30920 309212014-02-24 Dodji Seketeli <dodji@redhat.com> 30922 30923 Fix documentation for the diff_utils namespace 30924 * include/abg-diff-utils.h (namespace diff_utils): Add comment. 30925 (compute_diff): Update comments for some overloads where they were 30926 missing. 30927 309282014-02-21 Dodji Seketeli <dodji@redhat.com> 30929 30930 Misc style fixes 30931 * src/abg-comparison.cc 30932 (class_diff::ensure_lookup_tables_populated): use 30933 as_non_member_class_decl rather that complicated casting. 30934 src/abg-ir.cc (var_decl::get_pretty_representation): Use 30935 get_type_declaration rather than casting. 30936 309372014-02-21 Dodji Seketeli <dodji@redhat.com> 30938 30939 Fix a glitch in member data diff reporting 30940 * src/abg-comparison.cc (represent): Do not forget the "'" around 30941 the access specifier. 30942 309432014-02-21 Dodji Seketeli <dodji@redhat.com> 30944 30945 Proper support for diffing member types 30946 * include/abg-comparison.h (class member_type_diff): New class. 30947 (member_type_diff_sptr): New convenience typedef. 30948 (compute_diff): New overload for member_type_diff. 30949 * src/abg-comparison.cc (struct member_type_diff::priv): New 30950 definition. 30951 (member_type_diff::{first_member_type, second_member_type, 30952 underlying_type_diff, length}): New member function definitions. 30953 (compute_diff): New definition for member type diffs. 30954 (compute_diff_for_types): Support diffing 30955 member types. 30956 (class_diff::report): Do not use strip member types now that we 30957 can properly diff them. 30958 309592014-02-21 Dodji Seketeli <dodji@redhat.com> 30960 30961 Fix the support for printing cv-qualified names 30962 * include/abg-ir.h (decl_base::{location_, name_, 30963 qualified_parent_name_, qualified_name_}): Make these data members 30964 protected rather than private. 30965 (decl_base::get_qualified_parent_name): Declare new member 30966 functions. 30967 (decl_base::get_qualified_name): Make the core overload virtual. 30968 Simplify the other overload that calls the core one. 30969 (qualified_type_def::build_name): Declare new protected helper 30970 function. 30971 (qualified_type_def::{get_cv_quals_string_prefix, 30972 get_qualified_name}): Declare new functions. 30973 (pointer_type_def::{get_qualified_name}}): Likewise. 30974 (class_decl::member_type::get_qualified_name): Likewise. 30975 * src/abg-ir.cc (decl_base::get_qualified_parent_name): New 30976 definition. 30977 (decl_base::get_name): Make this out-of-line. 30978 (decl_base::get_qualified_name): The signature of this got 30979 simplified. Make it use the new get_qualified_parent_name. 30980 (qualified_type_def::{build_name, get_qualified_name, 30981 get_cv_quals_string_prefix}): New definitions. 30982 (qualified_type_def::qualified_type_def): Update the constructor 30983 to use the new build_name function above. 30984 (pointer_type_def::get_qualified_name): New definitions. 30985 (reference_type_def::get_qualified_name): Likewise. 30986 (class_decl::member_type::get_qualified_name): Likewise. 30987 309882014-02-21 Dodji Seketeli <dodji@redhat.com> 30989 30990 Misc style fix 30991 * src/abg-comparison.cc (represent): Remove useless curly braces 30992 and vertical spaces. 30993 309942014-02-21 Dodji Seketeli <dodji@redhat.com> 30995 30996 Support DW_AT_specification on class/struct DIEs 30997 * src/abg-dwarf-reader.cc (build_ir_node_from_die): Support 30998 DW_AT_specification on DW_TAG_{class,structure}type. 30999 310002014-02-21 Dodji Seketeli <dodji@redhat.com> 31001 31002 Avoid comparing member types and class templates 31003 * src/abg-comparison.h (compute_diff): For class_decl_sptr, do not 31004 compare member types and member class templates. This adds a lots 31005 of noise that is not necessarily useful for now. 31006 * tests/data/test-bidiff/test-qual-type0-report.txt: Update tests. 31007 * tests/data/test-bidiff/test-struct0-report.txt: Likewise. 31008 * tests/data/test-bidiff/test-struct1-report.txt: Likewise. 31009 310102014-02-21 Dodji Seketeli <dodji@redhat.com> 31011 31012 Fix the report of added/removed function parameters 31013 * src/abg-comparison.cc 31014 (function_decl_diff::priv::{inserted_parms_, removed_parms_}): 31015 Remove these. 31016 (function_decl_diff::ensure_lookup_tables_populated): Fix thinko. 31017 Avoid using the members removed above. Use one less loop to 31018 update the changed params. 31019 (function_decl_diff::report): Avoid using the removed_parms_ 31020 data member that was removed above. 31021 310222014-02-21 Dodji Seketeli <dodji@redhat.com> 31023 31024 Put the setter of access specifiers in class_decl::member_base 31025 * include/abg-ir.h 31026 (class_decl::member_base::set_access_specifier): Put the setter 31027 for access specifier here, where it belongs ... 31028 (class_decl::member_type::set_access_specifier): ... not here. 31029 310302014-02-21 Dodji Seketeli <dodji@redhat.com> 31031 31032 First approach to avoid duplication of IR nodes for forward-declared classes 31033 * src/abg-dwarf-reader.cc (is_declaration_only): Put this back (I 31034 removed it earlier). 31035 (build_class_type_and_add_to_ir): If the class is a 31036 declaration-only (a forward declaration), do not add a new 31037 declaration only IR node. 31038 310392014-02-21 Dodji Seketeli <dodji@redhat.com> 31040 31041 Do not forget to set the indexes of fn parms 31042 * include/abg-ir.h (function_type::function_type): In the 31043 constructor that takes a vector of parms, walk the vector and set 31044 the indexes of the parms. 31045 310462014-02-19 Dodji Seketeli <dodji@redhat.com> 31047 31048 Misc diff reporting output cleanup 31049 * src/abg-comparison.cc (function_decl_diff::report): Do not talk 31050 about changed function anymore. Rather, say that some indirect 31051 sub-types changed in the function. 31052 310532014-02-19 Dodji Seketeli <dodji@redhat.com> 31054 31055 Do not forget some member types/functions we built IR nodes for 31056 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 31057 Associate the member type IR node to the offset of the die of the 31058 member type. 31059 (build_ir_node_from_die): For a DW_TAG_subprogram DIE that has a 31060 DW_AT_specification pointing to another subprogram DIE, associate 31061 the offset of this DIE to the IR node of that other DIE. 31062 310632014-02-19 Dodji Seketeli <dodji@redhat.com> 31064 31065 Better support of static member variables 31066 * include/abg-fwd.h (fqn_to_components) 31067 (lookup_type_in_translation_unit, demangle_cplus_mangled_name): 31068 Declare new public entry points 31069 * src/abg-comparison.cc (corpus_diff::report): Report stuff about 31070 global variables using their mangled name, and demangle them. If 31071 there is no mangled name for the variable, then use its pretty 31072 representation. 31073 (compute_diff): For the corpus overload, compare global variables 31074 using their mangled name, if its available; otherwise, fall back 31075 to using their pretty representation. 31076 * src/abg-corpus.cc (var_comp::operator()(const var_decl*, 31077 const_var_decl*)): Compare variables using their mangled name in 31078 priority. If it's not available then use their pretty 31079 representation. 31080 * src/abg-dwarf-reader.cc 31081 (read_context::var_decls_to_re_add_to_tree): New accessor. 31082 (build_translation_unit_and_add_to_ir): If there is what appears 31083 to be a definition of a static member variable variable -- this is 31084 in case this definition lacks the DW_AT_specification attribute 31085 that links it to the DW_TAG_member or DW_TAG_variable DIE that is 31086 a child of the right class/structure DIE -- that is not at the 31087 right place in the DIE tree, remove it from the its current place 31088 in the tree and try to hang it off of the right DIE. To do this, 31089 de-mangle its mangled name, look at what is supposed to be the 31090 parent class name, look it up in the translation unit IR, and if 31091 found, stick the variable IR node in there, as a static member 31092 variable. If not found, then bad luck. 31093 (build_class_type_and_add_to_ir): Do not try to see if a member 31094 variable is static here as the way I was doing it was unreliable. 31095 Build the data member node directly w/o going through building a 31096 variable node first. Register the data member in the die offset 31097 -> IR node map. 31098 (build_ir_node_from_die): When seeing DW_TAG_variable, look for a 31099 DW_AT_specification attribute. If there is one, then it points to 31100 a the DIE of a data member and means that data member is static. 31101 Flag the IR node of that data member as static thus. Update the 31102 die offset -> IR node map. If there is no DW_AT_specification 31103 attribute or if it doesn't point to a data member DIE, schedule 31104 this variable tag for a stage when after the whole IR is built for 31105 the translation unit, the variable's mangled named is inspected, 31106 its hypothetical parent struct/class is looked up and the variable 31107 IR node is put into the node of the right struct/class IR node. 31108 * src/abg-ir.cc (enum lookup_entity_kind): New. 31109 (fqn_to_components, iterator, lookup_type_in_translation_unit) 31110 (lookup_node_in_translation_unit, lookup_type_in_translation_unit) 31111 (demangle_cplus_mangled_name): New function definitions. 31112 311132014-02-19 Dodji Seketeli <dodji@redhat.com> 31114 31115 Shorten an accessor name in the DWARF reader 31116 * src/abg-dwarf-reader.cc (read_context::cur_tu): Rename 31117 read_context::current_translation_unit into this. 31118 (read_context::current_scope, die_location) 31119 (build_translation_unit_and_add_to_ir, build_enum_type) 31120 (build_function_decl): Adjust wrt the change above. 31121 311222014-02-19 Dodji Seketeli <dodji@redhat.com> 31123 31124 Unset decl scope when removing the decl from its scope 31125 * src/abg-ir.cc (remove_decl_from_scope): Unset the scope of the 31126 decl. 31127 311282014-02-19 Dodji Seketeli <dodji@redhat.com> 31129 31130 Support adding data member from var_decl 31131 * src/abg-ir.cc (class_decl::insert_member_decl): Support taking 31132 a var_decl. 31133 (class_decl::add_data_member): Do not insert a data member twice. 31134 311352014-02-19 Dodji Seketeli <dodji@redhat.com> 31136 31137 Fix qualified type pretty printing 31138 * src/abg-ir.cc (qualified_type_def::qualified_type_def): Remove 31139 useless white space. 31140 311412014-02-19 Dodji Seketeli <dodji@redhat.com> 31142 31143 Add class_decl::member_base::set_is_static() accessor 31144 * include/abg-ir.h (class_decl::member_base::get_is_static): 31145 Rename is_static into get_is_static. 31146 (class_decl::member_base::set_is_static): New accessor. 31147 * src/abg-comparison.cc (represent): Adjust for 31148 class_decl::member_base::is_static -> get_is_static. 31149 * src/abg-corpus.cc (symtab_build_visitor_type::visit): Likewise. 31150 src/abg-hash.cc (class_decl::member_function::hash::operator()): 31151 Likewise. 31152 * src/abg-ir.cc (class_decl::member_base::operator==): Likewise. 31153 * src/abg-writer.cc (write_class_decl): Likewise. 31154 311552014-02-13 Dodji Seketeli <dodji@redhat.com> 31156 31157 Fixes needed to diff libstdc++ v4_4 against master 31158 * src/abg-comparison.cc 31159 (class_diff::ensure_lookup_tables_populated): Support several 31160 instances of the same member function being deleted. That can 31161 happen when the same member function was present in the initial 31162 class several times. Yeah, I've seen that in dwarf. 31163 * src/abg-corpus.cc (corpus::priv::build_symbol_table): Do not add 31164 the same variable (identified by its mangled name) twice in the 31165 variable symbol table. 31166 311672014-02-13 Dodji Seketeli <dodji@redhat.com> 31168 31169 Fix wrong deleted functions count when diffing corpora 31170 * src/abg-comparison.cc 31171 (corpus_diff::priv::ensure_lookup_tables_populated): If a function 31172 has changed, deleted it from the list the removed functions. 31173 311742014-02-13 Dodji Seketeli <dodji@redhat.com> 31175 31176 Several fixes needed to read libstdc++.so 31177 * src/abg-reader.cc (read_context::map_id_and_node): Allow 31178 duplicated class and basic type declarations. 31179 (build_type_decl): Allow duplicated type decls. 31180 (build_qualified_type_decl, build_pointer_type_def) 31181 (build_reference_type_def): As there can be several distinct 31182 duplicated types, compare them by value. 31183 (build_class_decl): There can be duplicated class decls. 31184 * src/abg-writer.cc (write_enum_type_decl): The name of the enum 31185 needs to be xml-escaped. 31186 311872014-02-12 Dodji Seketeli <dodji@redhat.com> 31188 31189 qualified, pointer and reference types can be member types 31190 * src/abg-reader.cc (build_qualified_type_decl) 31191 (build_pointer_type_def, build_reference_type_def): Consider that 31192 these types can be member types. 31193 311942014-02-12 Dodji Seketeli <dodji@redhat.com> 31195 31196 Consider two typedefs with different names to be different 31197 * src/abg-ir.cc (typedef_decl::operator==): Consider two typedefs 31198 with different names to be different. 31199 312002014-02-12 Dodji Seketeli <dodji@redhat.com> 31201 31202 Really Avoid trying to build IR nodes for non-public functions 31203 * src/abg-dwarf-reader.cc (build_ir_node_from_die): For the 31204 DW_TAG_subprogram case, bail out early if the current function is 31205 non-public. 31206 312072014-02-12 Dodji Seketeli <dodji@redhat.com> 31208 31209 Add --{changed,deleted,added}-{fns,vars} options to bidiff 31210 * include/abg-comparison.h 31211 (diff_context::{show_{deleted,changed_added}_{fns,vars}}): Declare 31212 new accessors. 31213 (corpus_diff::context): Declare new getter. 31214 * src/abg-comparison.cc 31215 (diff_context::{show_{deleted,changed_added}_{fns,vars}}): Define 31216 these new accessors. 31217 (corpus_diff::priv::emit_corpus_diff_stats): Define new function. 31218 (corpus_diff::context()): Define new getter. 31219 (corpus_diff::report): Use the new 31220 corpus_diff::priv::emit_corpus_diff_stats to emit diff stats at 31221 the beginning of the report. Conditionalise emitting the 31222 different parts of the reports (changed,deleted,added stuff) on 31223 the values of the new properties that were just added. 31224 * tools/bidiff.cc 31225 (options::{show_{deleted,changed,added}_{fns,vars}): New 31226 properties. 31227 (display_usage, parse_command_line): Update for the newly added 31228 --{changed,deleted,added}-{fns,vars} command line options. 31229 (set_diff_context_from_opts): Define new static function. 31230 (main): Create a diff context, initialize it from the options 31231 (using set_diff_context_from_opts) and pass it to compute_diff. 31232 312332014-02-11 Dodji Seketeli <dodji@redhat.com> 31234 31235 Add --show-symtabs to bidiff 31236 * tools/bidiff.cc (display_usage): Update usage string. 31237 (parse_command_line): Recognize the --show-symtab cmdline option. 31238 (display_symtabs): New static function. 31239 (main): Call the new display_symtabs. 31240 312412014-02-11 Dodji Seketeli <dodji@redhat.com> 31242 31243 Harden class_decl node traversal code 31244 * src/abg-ir.cc (class_decl::traverse): Add a few asserts here and there. 31245 312462014-02-11 Dodji Seketeli <dodji@redhat.com> 31247 31248 Fix the pretty representation for member functions 31249 * src/abg-ir.cc (function_decl::get_pretty_representation): Fix 31250 this to properly display the representation of member functions. 31251 * tests/data/test-bidiff/test-enum0-report.txt: Update this. 31252 * tests/data/test-bidiff/test-enum1-report.txt: Likewise. 31253 * tests/data/test-bidiff/test-qual-type0-report.txt: Likewise. 31254 * tests/data/test-bidiff/test-struct0-report.txt: Likewise. 31255 * tests/data/test-bidiff/test-struct1-report.txt: Likewise. 31256 312572014-02-11 Dodji Seketeli <dodji@redhat.com> 31258 31259 Do not forget to traverse member types 31260 * include/abg-ir.h (class_decl::member_type::traverse): Declare new virtual 31261 function. 31262 (ir_node_visitor::visit): Declare new virtual function 31263 * src/abg-ir.cc (class_decl::member_type::traverse): Implement the 31264 traversal of a member type. 31265 (ir_node_visitor::visit): Provide a default implementation for the 31266 visitor of member type. 31267 312682014-02-11 Dodji Seketeli <dodji@redhat.com> 31269 31270 From DWARD, avoid adding IR nodes for member functions twice 31271 * include/abg-fwd.h (as_non_member_class_decl): Declare new overload. 31272 * src/abg-ir.cc (as_non_member_class_decl): Define new overload. 31273 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Add 31274 member functions to the DIE -> IR Node map. 31275 (build_ir_node_from_die): Assert that DW_TAG_subprogram cannot be 31276 for a member function here because getting the scope of the member 31277 function would have constructed the entire class that contains it, 31278 including the member function. Then, calling 31279 build_ir_node_from_die for the DIE of the member function would 31280 find the already IR Node in the DIE -> IR Node map. 31281 312822014-02-11 Dodji Seketeli <dodji@redhat.com> 31283 31284 Fix access specifiers value 31285 * include/abg-ir.h (class_decl::enum access_specifier): Give the enumerators 31286 the same values as what the DWARF spec says. 31287 312882014-02-10 Dodji Seketeli <dodji@redhat.com> 31289 31290 Misc diff report cleanups 31291 * include/abg-ir.h (function_decl::parameter::get_type_name): Add 31292 comment. 31293 (function_decl::parameter::get_type_pretty_representation): New 31294 member fn. 31295 * src/abg-comparison.cc (represent): When representing changed 31296 members, use their pretty representation. 31297 (function_decl_diff::{ensure_lookup_tables_populated, report}): Use the 31298 pretty representation of parameters type. 31299 (typedef_diff::report): Enclose the underlying type in "'". 31300 (corpus_diff::report): Add proper spacing. 31301 313022014-02-10 Dodji Seketeli <dodji@redhat.com> 31303 31304 Re-organize the output of diffing two corpora 31305 * src/abg-comparison.cc (corpus_diff::report): Emit 31306 information about the number of added/removed/changed 31307 functions. If the report is big, prefix any added 31308 function with '[A]' deleted function with '[B]'. Also, 31309 fix indentation. 31310 313112014-02-10 Dodji Seketeli <dodji@redhat.com> 31312 31313 Support diffing entities of different kinds. 31314 * include/abg-comparison.h (class distinct_diff): Declare new 31315 type. 31316 (compute_diff_for_distinct_kinds): Declare new function. 31317 * src/abg-comparison.cc (distinct_diff::{distinct_diff, first, 31318 second, entities_are_of_distinct_kinds, length, report}): Define 31319 new member functions. 31320 (compute_diff_for_distinct_kinds, try_to_diff_distinct_kinds): 31321 Define new function. 31322 (compute_diff_for_types, compute_diff_for_decls): Support diffing 31323 entities of different kinds. 31324 313252014-02-10 Dodji Seketeli <dodji@redhat.com> 31326 31327 Avoid recursive comparison on class_decl & perform some optimizations 31328 * src/abg-ir.cc (class_decl::operator==(const decl_base& other) 31329 const): Bail out early in case of recursive comparison, or if type 31330 hashes are different. Do not try to compute qualified name unless 31331 it's really necessary. The optimizations part of this change were 31332 hinted by profiling. 31333 313342014-02-10 Dodji Seketeli <dodji@redhat.com> 31335 31336 Handle the DIE for a fn that has a 'specification' attribute 31337 * src/abg-dwarf-reader.cc (build_ir_node_from_die): For the 31338 DW_TAG_subprogram case, if the function has a DW_AT_specification 31339 attribute, build the IR node for the specification DIE instead. 31340 313412014-02-10 Dodji Seketeli <dodji@redhat.com> 31342 31343 Add an assert in the dwarf reader 31344 * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): 31345 Assert that the result of build_function_decl on a member function 31346 is a method_decl. 31347 313482014-02-10 Dodji Seketeli <dodji@redhat.com> 31349 31350 Do not forget that build_ir_node_from_die can return member types 31351 * src/abg-dwarf-reader.cc (get_scope_for_die): Handle member class 31352 types. 31353 (build_function_decl): Likewise. 31354 313552014-02-10 Dodji Seketeli <dodji@redhat.com> 31356 31357 A member function can have an empty mangled name 31358 * src/abg-comparison.cc 31359 (class_diff::ensure_lookup_tables_populated): If a member function 31360 has an empty mangling name, use its pretty representation. 31361 313622014-02-10 Dodji Seketeli <dodji@redhat.com> 31363 31364 Remove too eager asserts 31365 * src/abg-comparison.cc 31366 (class_diff::ensure_lookup_tables_populated): Do not assert that 31367 the same member type cannot be deleted/inserted twice. It 31368 actually can for, pointers, references, typedefs, etc. 31369 313702014-02-10 Dodji Seketeli <dodji@redhat.com> 31371 31372 Fix some new line handling in diff reports 31373 * src/abg-comparison.cc (represent): Remove extra new line after 31374 reporting virtual function number. 31375 (class_diff::report): Do not forget to emit a new line between two 31376 inserted functions. 31377 313782014-02-10 Dodji Seketeli <dodji@redhat.com> 31379 31380 Perform the diff of changed functions and variables in the right order 31381 * src/abg-comparison.cc 31382 (corpus_diff::priv::ensure_lookup_tables_populated): In a changed 31383 function or variable, do not mix up the new and old value. 31384 313852014-02-10 Dodji Seketeli <dodji@redhat.com> 31386 31387 Fix typo in report 31388 * src/abg-comparison.cc (reference_diff::report): Fix typo 31389 refereneced -> referenced. 31390 313912014-02-10 Dodji Seketeli <dodji@redhat.com> 31392 31393 Fix various crashes 31394 * src/abg-comparison.cc (decls_equal::operator()(const decls_type, 31395 const decls_type) const): Do not crash when of the decl_types is 31396 NULL. 31397 ({pointer_diff, reference_diff, enum_diff}::length): Avoid 31398 crashing if the underlying type is NULL. 31399 * abg-ir.cc (function_decl::get_pretty_representation): Avoid 31400 crashing on member functions with empty parameter set. 31401 signed-off-by: Dodji Seketeli <dodji@redhat.com> 31402 314032014-02-10 Dodji Seketeli <dodji@redhat.com> 31404 31405 More optimizations hinted by profiling 31406 * include/abg-ir.h (decl_base::qualified_name_): New member. 31407 (decl_base::get_qualified_name): Cache the qualified name. 31408 (decl_base::get_type): Return a reference on the shared pointer. 31409 (method_type::get_class_type): Likewise. 31410 (class_decl::get_definition_of_declaration): Likewise. 31411 (class_decl::member_type::get_underlying_type): Likewise. 31412 (class_decl::base_spec::get_base_class): Likewise. 31413 * src/abg-ir.cc (decl_base::get_qualified_name): Implement the 31414 caching. 31415 (class_decl::member_type::get_qualified_name): Return a reference 31416 on the shared pointer. 31417 314182014-02-10 Dodji Seketeli <dodji@redhat.com> 31419 31420 Avoid crashing when getting function parm type name 31421 * include/abg-ir.h (function_decl::parameter::get_type_name): New 31422 member function. 31423 * src/abg-comparison.cc 31424 (function_decl_diff::ensure_lookup_tables_populated): Use the new 31425 member function above. 31426 314272014-02-10 Dodji Seketeli <dodji@redhat.com> 31428 31429 Small optimization hinted by profiling 31430 * include/abg-diff-utils.h (d_path_vec::max_d): Avoid using member 31431 functions. This is relevant only when compiling w/o optimization. 31432 314332014-02-10 Dodji Seketeli <dodji@redhat.com> 31434 31435 Fix allocation of diff_utils::d_path_vec 31436 * include/abg-diff-utils.h (d_path_vec::d_path_vec): Do not 31437 forget to allocate enough data for reverse vectors as well. The 31438 comment of the constructor is accurate. 31439 314402014-02-07 Dodji Seketeli <dodji@redhat.com> 31441 31442 Misc style fixes 31443 * include/abg-hash.h (combine_hashes): Remove trailing white 31444 spaces. 31445 * include/abg-ir.h (class function_decl): Add end-of-class 31446 comment. 31447 (struct type_base::cached_hash): Fix comment. 31448 * src/abg-comparison.cc: Remove useless new line. 31449 * src/abg-corpus.cc: Likewise. 31450 * src/abg-writer.cc: Likewise. 31451 314522014-02-07 Dodji Seketeli <dodji@redhat.com> 31453 31454 Support looking through decl-only classes and update diff reports accordingly 31455 * include/abg-comparison.h (class diff_context): New class. 31456 (class diff::{ctxt_, reported_once_, currently_reporting_}): New 31457 data members. 31458 (diff::diff): Initialize the new data members above. 31459 (diff::{context, currently_reporting, reported_once}): New 31460 accessors. 31461 (compute_diff, var_diff::var_diff, pointer_diff::pointer_diff) 31462 (reference_diff::reference_diff, qualified_type_diff) 31463 (enum_diff:enum_diff, class_diff::class_diff) 31464 (scope_diff::scope_diff, function_decl_diff::function_decl_diff) 31465 (type_decl_diff::type_decl_diff, typedef_diff::typedef_diff) 31466 (translation_unit_diff::translation_unit_diff, corpus_diff::corpus_diff): 31467 Take an additional pointer to diff_context. 31468 * abg-comparison.cc (diff_context::{has_diff_for, 31469 has_diff_for_types, add_diff}): New methods. 31470 (try_to_diff, compute_diff_for_types, compute_diff_for_decls) 31471 (represent): Take an additional pointer to 31472 diff_context in argument. In the later function, do not re-report 31473 a diff if it has already been reported, or if it's being reported 31474 already. 31475 (var_diff::var_diff, pointer_diff::pointer_diff) 31476 (reference_diff::reference_diff) 31477 (qualified_type_diff::qualified_type_diff, enum_diff::enum_diff) 31478 (class_diff::class_diff, scope_diff::scope_diff) 31479 (function_decl_diff::function_decl_diff, type_decl::type_decl) 31480 (typedef_diff::typedef_diff) 31481 (translation_unit_diff::translation_unit_diff) 31482 (corpus_diff::corpus_diff): Take an additional pointer to 31483 diff_context in argument. 31484 ({pointer_diff, qualified_type_diff, 31485 reference_type_diff}::report): do not re-report a diff about the 31486 underlying type if it has already been reported, or if it's being 31487 reported already. 31488 (enum_diff::report): Fix this to properly use the populated lookup 31489 tables. 31490 (compute_diff): take an additional pointer to diff_context in 31491 argument. For the var_decl, pointer_diff reference_type_diff, 31492 qualified_type_diff enum_diff, scope_diff, function_decl_diff, 31493 type_decl_diff and typedef_diff overloads, do not re-build a diff 31494 object, if one exits already. Otherwise, record the new diff 31495 object created so that it can be re-used later. 31496 (enum_diff::ensure_lookup_tables_populated): Fix logic to avoid 31497 one loop. 31498 (class_decl::priv::{deleted_member_functions_, 31499 inserted_member_functions_, changed_member_function_}): New 31500 members to support reporting about member functions changes. 31501 (class_decl::{lookup_tables_empty, clear_lookup_tables, length): 31502 Update for the new additions above. 31503 (class_decl::ensure_lookup_tables_populated): Likewise. Fix to 31504 properly use the lookup tables and also avoid a going through 31505 several loops to compute the changed members. 31506 (class_decl::report): Flip a switch to make the beginning and end 31507 of the reporting, in the context. Also, do not try to report 31508 again, if we were already reporting this diff. Fix quite some 31509 spots to properly use the lookup tables. 31510 (scope_diff::ensure_lookup_tables_populated): Skip decl-only 31511 classes during comparison. Fix some thinkos. Fix logic to avoid a 31512 loop. 31513 (scope_diff::report): Adjust to pass a context to 31514 compute_diff_for_types. 31515 (function_decl_diff::ensure_lookup_tables_populated): Fix logic to 31516 avoid a loop. 31517 (function_decl_diff::report): Adjust call to 31518 compute_diff_for_types to pass the context. 31519 (typedef::report): Avoid re-reporting the diff of the underlying 31520 types, if we are already reporting it. 31521 (corpus_diff::priv::ensure_lookup_tables_populated): Use the 31522 pretty representation of the function rather than its name to key 31523 the maps of deleted and added functions. Fix logic to avoid going 31524 through an additional loop for the changed functions. 31525 (corpus_diff::report): Add a title for removed/added/changed 31526 functions. Fix indentation for added/removed/changed functions. 31527 * include/abg-ir.h (class_decl::comparison_started_): New member 31528 * src/abg-dwarf-reader.cc (is_public_decl): Style fix. 31529 (is_declaration_only_): New static function. 31530 (build_class_type_and_add_to_ir): Create decl-only classes (IR) for 31531 classes flagged as declaration-only in the DWARF. 31532 * src/abg-hash.cc (class_decl::hash::operator()): Do not forget to 31533 include the "is_declaration_only" flag into the hashing. 31534 * src/abg-ir.cc (class_decl::operator==): Look through decl-only 31535 classes to get their definitions and compare the definitions 31536 instead. Avoid comparing member types and fns if the comparison 31537 of this type has already started. 31538 * src/abg-reader.cc (build_class_decl): Set the definition of a 31539 declaration, when we see it. 31540 * tests/data/test-bidiff/test-qual-type0-report.txt: Update. 31541 * tests/data/test-bidiff/test-struct0-report.txt: Likewise. 31542 * tests/data/test-bidiff/test-struct1-report.txt: Likewise. 31543 signed-off-by: Dodji Seketeli <dodji@redhat.com> 31544 315452014-02-07 Dodji Seketeli <dodji@redhat.com> 31546 31547 Support reading *.bi input with duplicated qualified type ids. 31548 * src/abg-reader.cc (read_context::map_id_and_node): Support 31549 qualified types with duplicated ids. 31550 315512014-02-07 Dodji Seketeli <dodji@redhat.com> 31552 31553 Fix comparison of member types 31554 * src/abg-ir.cc (class_decl::member_type::operator==): Compare the 31555 underlying type of the member type. 31556 315572014-02-07 Dodji Seketeli <dodji@redhat.com> 31558 31559 Avoid duplicated entries in the symbol tables of the corpus 31560 * include/abg-ir.h ({var_decl, function_decl}::ptr_equal): New 31561 equality functor for pointers to var_decl and function_decl. 31562 ({function_decl, var_decl}::hash): Make these hashing functors 31563 public. 31564 * include/abg-hash.cc (struct var_decl::hash, struct 31565 function_decl::hash): Remove these from here. There are now in 31566 the public abg-ir.h. 31567 ({var_decl, function_decl}::hash::operator()): Define these here. 31568 * src/abg-corpus.cc (symtab_build_visitor_type::{fns_map, 31569 fn_is_in_map, add_fn_to_map, vars_map, var_is_in_map, 31570 add_var_to_map}): New accessors. 31571 (corpus::priv::build_symbol_table): Avoid duplicated entries in 31572 variables and functions symbols tables. 31573 315742014-02-07 Dodji Seketeli <dodji@redhat.com> 31575 31576 Ease debugging of abigail::diff_utils::compute_diff 31577 * include/abg-diff-utils.h (compute_diff): Add asserts on for the 31578 length of the shortest edit script during the divide and conquer 31579 part of the diff algorithm. 31580 315812014-02-07 Dodji Seketeli <dodji@redhat.com> 31582 31583 Fix further reaching reverse path calculation in core diff algo 31584 * include/abg-diff-utils.h (end_of_frr_d_path_in_k_plus_delta): 31585 Favour moving left when the two abscissas at the previous steps 31586 are equal. 31587 (compute_diff): Update the length of the shortest edit script when 31588 the size of one of the inputs is zero. 31589 * tests/test-core-diff.cc (in_out_spec): Add a new input to diff 31590 two sequences for regression testing. 31591 * tests/data/test-core-diff/report13.txt: New reference for 31592 the comparison of the new regression test above. 31593 315942014-02-07 Dodji Seketeli <dodji@redhat.com> 31595 31596 Add debugging facilities for core diffing issues 31597 * include/abg-ir.h (fns_to_str): Declare new fn. 31598 * src/abg-ir.cc (get_next_string, fn_to_str, fns_to_str): New 31599 static functions. 31600 (fns_to_str): Define new fn. 31601 * tools/abg-tools-utils.cc (dump_functions_as_string) 31602 (dump_function_names, compare_functions): New functions. 31603 316042014-01-20 Dodji Seketeli <dodji@redhat.com> 31605 31606 Fix apidoc comment 31607 * src/abg-ir.cc (decl_base::operator==): Fix comment. 31608 316092014-01-20 Dodji Seketeli <dodji@redhat.com> 31610 31611 Fix bilint outputting for translation units & corpus 31612 * tools/bilint.cc (main): Fix logic. 31613 316142014-01-20 Dodji Seketeli <dodji@redhat.com> 31615 31616 Remove debugging assertion when diffing 31617 * include/abg-diff-utils.h (d_path_vec::at): Do not check for 31618 bounds. 31619 316202014-01-20 Dodji Seketeli <dodji@redhat.com> 31621 31622 Do not use exceptions in dynamic_cast 31623 * src/abg-ir.cc (class_decl::member_function::operator==) 31624 (class_decl::member_function::operator==): Do not use the 31625 exception path for dynamic casting. This was near the top of many 31626 profiles. 31627 316282014-01-20 Dodji Seketeli <dodji@redhat.com> 31629 31630 Just add decls sequentially when reading from DWARF 31631 * src/abg-dwarf-reader.cc (insert_decl_into_ir_under_scope) 31632 (build_namespace_decl_and_add_to_ir, build_enum_type) 31633 (build_class_type_and_add_to_ir, build_ir_node_from_die) 31634 (build_ir_node_from_die): Remove. 31635 * tests/data/test-read-dwarf/test0.abi: Update because now type 31636 IDs can be used before they are defined. 31637 * tests/data/test-read-dwarf/test1.abi: Likewise. 31638 316392014-01-17 Dodji Seketeli <dodji@redhat.com> 31640 31641 Misc Doxygen API doc fixes 31642 * include/abg-comparison.h: Various doxygen api doc string fixes. 31643 * include/abg-diff-utils.h: Likewise. 31644 * include/abg-dwarf-reader.h: Likewise. 31645 * include/abg-ir.h: Likewise. 31646 * include/abg-reader.h: Likewise. 31647 * include/abg-writer.h: Likewise. 31648 * src/abg-comparison.cc: Likewise. 31649 * src/abg-corpus.cc: Likewise. 31650 * src/abg-dwarf-reader.cc: Likewise. 31651 * src/abg-ir.cc: Likewise. 31652 * src/abg-libxml-utils.cc: Likewise. 31653 * src/abg-reader.cc: Likewise. 31654 * src/abg-writer.cc: Likewise. 31655 316562014-01-17 Dodji Seketeli <dodji@redhat.com> 31657 31658 Fix bilint --noout, add --diff option 31659 * tools/bilint.cc (options::options): Initialize ... 31660 (options::{diff, bidiff}): ... new members. 31661 (display_usage): Update the display usage string for --diff & 31662 --bidiff options. 31663 (parse_command_line): Support the --diff and --bidiff options. 31664 (main): Require the --diff option to actually diff the emitted 31665 output with input. Make --noout really work for when reading 31666 from dwarf. 31667 316682014-01-17 Dodji Seketeli <dodji@redhat.com> 31669 31670 Read .abi files with types used before being defined & lots of fixes 31671 * src/abg-reader.cc (read_context::m_decls_stack): Make this is a 31672 std::deque, rather than a std::stack. 31673 (read_context::{get_id_xml_node_map, 31674 clear_id_xml_node_map, get_xml_node_decl_map, 31675 map_xml_node_to_decl, get_decl_for_xml_node, 31676 clear_xml_node_decl_map, map_id_and_node, get_xml_node_from_id, 31677 get_scope_for_node, build_or_get_type_decl}): New member 31678 functions. 31679 (read_context::{get_cur_decl, push_decl, pop_decl}): Update this 31680 now that the decl stack uses a std::deque. 31681 (read_context::clear_decls_stack): New. 31682 (read_context::get_translation_unit): Use the first decl of the 31683 decl stack, that is most certainly the global scope of the current 31684 translation unit, to get the translation unit. 31685 (read_context::key_type_decl): Take a new flag to force the 31686 re-keying; that is set an id to a new type, even if the id was 31687 already set to a type. 31688 (read_context::push_and_key_type_decl): Assert that a type must 31689 have a declaration. 31690 (handle_*): Make these return the decl_base_sptr resulting from 31691 the parsing of the xml node, rather than just a bool. 31692 (walk_xml_node_to_map_type_ids): New static function. 31693 (read_translation_unit_from_input): Read the abi-instr xml 31694 sub-tree once, just to build an id->xml node map. That way, when a 31695 declaration needs a type what is not yet defined, it can just get 31696 its XML node, build the type from it and use it. Do not forget to 31697 advance the xml reader cursor when the reading of the 'abi-instr' 31698 sub-tree is read. Clear all the new maps we have used for the 31699 current translation unit. 31700 (handle_element_node): Cleanup logic. 31701 (build_namespace_decl): Update the new xml node -> decl map, and 31702 use it to avoid building the same namespace twice. 31703 (build_function_parameter): Do not even try to get the type of a 31704 variadic parameter. 31705 (build_function_decl, build_var_decl): Support types that are defined later. 31706 (build_type_decl): Do not build the same type twice. But there 31707 can be several 'unnamed-enum-underlying-type' node. In that case 31708 just return the previous one. 31709 (build_qualified_type_decl, build_pointer_type_def) 31710 (build_reference_type_def, build_enum_type_decl) 31711 (build_typedef_decl): Support underlying type defined later. 31712 (build_class_decl): Support declaration-only related cases where 31713 we can have several xml nodes with the same id. Update the new 31714 xml node -> IR node maps. Fix member type adding. 31715 (build_type_tparameter, build_non_type_tparameter) 31716 (build_template_tparameter): Support used types defined later. 31717 317182014-01-17 Dodji Seketeli <dodji@redhat.com> 31719 31720 Fix member class template creation 31721 * src/abg-ir.cc (class_decl::add_member_class_template): Do not 31722 forget the scope of the member class template itself. 31723 317242014-01-17 Dodji Seketeli <dodji@redhat.com> 31725 31726 Avoid endless loop in unescape_xml_string 31727 * src/abg-libxml-utils.cc (unescape_xml_string): Avoid and endless 31728 loop for strings containing an '&' but that are not pre-defined 31729 entities. 31730 317312014-01-17 Dodji Seketeli <dodji@redhat.com> 31732 31733 Fix a potential crash 31734 * src/abg-ir.cc (decl_base::get_qualified_name): Do not crash if 31735 the scope is empty. 31736 317372014-01-17 Dodji Seketeli <dodji@redhat.com> 31738 31739 Do not loose the member type information when reading them from DWARF 31740 * include/abg-ir.h (class_decl::declaration_): Make this be a 31741 decl_base_sptr so that it can actually be a 31742 class_decl::member_type which underlying type is a class decl. 31743 (class_decl::{set, get}_earlier_declaration): Take or return a 31744 decl_base_sptr rather than a class_decl_sptr. 31745 * src/abg-ir.cc (class_decl::set_earlier_declaration): Take a 31746 decl_base_sptr rather than a class_decl_sptr. 31747 * src/abg-dwarf-reader.cc (die_class_map_type): Make this map take 31748 decl_base_sptr rather than a class_decl_sptr. 31749 (build_class_type_and_add_to_ir): If the class being currently 31750 built is a member class, do not loose that information after it 31751 has been added to its scope. Also, base types and types of member 31752 variables can be member types and should retain that information. 31753 (build_qualified_type): Likewise, the underlying type of a 31754 qualified type shouldn't loose the information about its 31755 potentially being a member type. 31756 (build_pointer_type_def, build_reference_type, build_typedef_type) 31757 (build_var_decl, build_function_decl): Likewise. 31758 317592014-01-17 Dodji Seketeli <dodji@redhat.com> 31760 31761 Fix hashing of member types 31762 * include/abg-ir.h (class_decl::{member_function_template, 31763 member_class_template}): Make these inherit from decl_base, to 31764 comply with class_decl::member_type. 31765 (class_decl_base_spec::{base_spec, member_type, member_function, 31766 member_function_template, member_class_template}::hash): Declare 31767 these hashing functors in the header here. 31768 (class_decl::{member_base, member_type, data_member, 31769 member_function, member_function_template, 31770 member_class_template}::hash::operator()): define these out of 31771 line here. 31772 (type_base::dynamic_hash::operator()): Update this to hash member 31773 things. 31774 * src/abg-writer.cc (write_qualified_type_def) 31775 (write_pointer_type_def, write_class_decl) 31776 (write_reference_type_def, write_enum_type_decl): Add an overload 31777 that takes the type ID to use in the serialization. 31778 (write_member_type): New implementation. 31779 317802014-01-17 Dodji Seketeli <dodji@redhat.com> 31781 31782 A Member class can also be a scope for other decls in DWARF 31783 * include/abg-fwd.h (as_non_member_class_decl): Declare ... 31784 * src/abg-ir.cc (as_non_member_class_decl): ... this new function. 31785 * include/abg-ir.h (class class_decl::member_type): Add more 31786 comments about member types. 31787 * src/abg-dwarf-reader.cc (get_scope_for_die): Use the new 31788 as_non_member_class_decl here. 31789 317902014-01-17 Dodji Seketeli <dodji@redhat.com> 31791 31792 Misc style fixes 31793 * include/abg-ir.h (location_manager::_Impl): Rename this type 31794 into priv. 31795 * src/abg-ir.cc b/src/abg-ir.cc (location_manager::_Impl): 31796 Likewise. 31797 (location_manager::location_manager): Update for the renaming 31798 above. 31799 * src/abg-reader.cc (build_type_decl): Remove useless white space. 31800 (build_enum_type_decl, build_class_decl): Use the _sptr typedef in 31801 the return type. 31802 318032014-01-14 Dodji Seketeli <dodji@redhat.com> 31804 31805 Update namespace comments 31806 * src/abg-dwarf-reader.cc (namespace dwarf_reader): Add apidoc comment. 31807 * src/abg-reader.cc (namespace xml_reader): Update apidoc comment. 31808 318092014-01-14 Dodji Seketeli <dodji@redhat.com> 31810 31811 Expand 'abi-instr' XML element nodes during de-serialization 31812 * src/abg-reader.cc (update_read_context) 31813 (update_depth_info_of_read_context): Remove. 31814 (read_context::{pop_scope, pop_scope_or_abort): New. 31815 (read_context::{push_decl_to_current_scope, 31816 push_and_key_type_decl}): Remove the overloads that take the 31817 'update_depth_info' boolean. 31818 (build_namespace_decl): New static function. 31819 (build_function_decl, build_var_decl, build_type_decl) 31820 (build_qualified_type_decl, build_pointer_type_def) 31821 (build_reference_type_def, build_enum_type_decl, build_type_decl) 31822 (build_class_decl, build_function_tdecl, build_class_tdecl) 31823 (build_type_tparameter, build_type_composition) 31824 (build_non_type_tparameter, build_template_tparameter) 31825 (build_template_parameter, build_type): Remove the 31826 'update_depth_info' boolean from parameters. 31827 (handle_element_node): Renamed handle_element into this. Take an 31828 xml node and a boolean to add the resulting IR node to the IR. 31829 (handle_type_decl, handle_namespace_decl) 31830 (handle_qualified_type_decl, handle_pointer_type_def) 31831 (handle_reference_type_def, handle_enum_type_decl) 31832 (handle_typedef_decl, handle_var_decl, handle_function_decl) 31833 (handle_class_decl, handle_function_tdecl, handle_class_tdecl): 31834 Take an xml node and a boolean to add the resulting IR node to the 31835 IR. 31836 (advance_cursor): No more need to call update_read_context. 31837 (read_translation_unit_from_input): Expand the 'abi-instr' node 31838 into memory so that we walk its XML nodes and build the IR nodes 31839 from them. 31840 (read_location): Remove the overload that was using the xml reader. 31841 (): 31842 318432014-01-14 Dodji Seketeli <dodji@redhat.com> 31844 31845 Misc style fixes 31846 * src/abg-reader.cc (read_context::{get_cur_decl, pop_decl}): Return 31847 decl_base_sptr rather than shared_ptr<decl_base>. 31848 (read_context::push_decl): Take a decl_base_sptr rather than 31849 shared_ptr<decl_base>. 31850 318512014-01-14 Dodji Seketeli <dodji@redhat.com> 31852 31853 Fix apidoc markup 31854 * include/abg-comparison.h (class var_diff): @ref var_decls -> 31855 @ref var_decl. 31856 * src/abg-comparison.cc (function_decl_diff::first_function_decl): 31857 @Return -> @return. 31858 318592014-01-14 Jonathan Wakely <jwakely@redhat.com> 31860 31861 Fix checkout & build instructions 31862 * CONTRIBUTING: Fix Git repository url. 31863 * doc/website/mainpage.txt: Add elfutils into the dependencies 31864 list and fix the repository directory name. Also use autoreconf 31865 -i. 31866 * include/abg-fwd.h: Fix Git repository URL. 31867 318682014-01-13 Dodji Seketeli <dodji@redhat.com> 31869 31870 Tweak dwarf reading test to detect more namespace linking-fu 31871 * tests/data/test-read-dwarf/test0.cc: Define a member function 31872 out-of-line, outside of its namespace. 31873 * tests/data/test-read-dwarf/test0.abi: Update the .abi file. 31874 * tests/data/test-read-dwarf/test0: Update the resulting binary. 31875 318762014-01-13 Dodji Seketeli <dodji@redhat.com> 31877 31878 Add asserts to detect type id mis-management in native format 31879 * read_translation_unit_from_input 31880 (read_translation_unit_from_input): Abort when an element could 31881 not be handled. 31882 (build_function_parameter, build_type_decl, qualified_type_def) 31883 (build_pointer_type_def, build_reference_type_def) 31884 (build_enum_type_decl, build_typedef_decl, build_class_decl) 31885 (build_type_tparameter, build_template_tparameter) 31886 (handle_qualified_type_decl, handle_pointer_type_def) 31887 (handle_reference_type_def, handle_typedef_decl): 31888 Abort when a referred-to type is not found or if a type is defined twice. 31889 318902014-01-13 Dodji Seketeli <dodji@redhat.com> 31891 31892 Misc style fixes 31893 * src/abg-hash.cc 31894 (class_decl::member_function_template::hash::operator()): Remove 31895 useless vertical space. 31896 * src/abg-ir.cc (class_decl::class_decl): Properly indent. 31897 * src/abg-writer.cc (fn_tmpl_shared_ptr_map) 31898 (class_tmpl_shared_ptr_map): Properly indent these typedefs. 31899 319002014-01-13 Dodji Seketeli <dodji@redhat.com> 31901 31902 Optimize comparison & underlying type accessing 31903 * include/abg-ir.h (qualified_type::get_underlying_type) 31904 (pointer_type_def::get_pointed_to_type) 31905 (reference_type_def::get_pointed_to_type) 31906 (typedef_decl::get_underlying_type): Avoid triggering refcount 31907 counter increasing/decreasing here, by returning a reference to 31908 the underlying type. This showed up high on a profile. 31909 ({scope_decl, type_decl, scope_type_decl, namespace_decl, 31910 qualified_type_def, pointer_type_def, reference_type_def, 31911 enum_type_decl, typedef_decl, var_decl, class_decl}::operator==): 31912 Avoid taking the exception-using path of dynamic_cast. This 31913 showed up very high on a profile. 31914 319152014-01-13 Dodji Seketeli <dodji@redhat.com> 31916 31917 Fix reading/writing native xml corpus files 31918 * src/abg-reader.cc (read_context::clear_type_map): New member 31919 function. 31920 (read_translation_unit_from_input): Read up to the next element 31921 node if we are not on an element node already. Clear the type 31922 map. Realize that we might be on the next 'abi-instr' node upon 31923 completion. 31924 (read_corpus_from_input): Read up to the next element node if we 31925 are not on an element node already. It must be an "abi-corpus" 31926 node. THen Advance to the next 'abi-instr' element node before 31927 handing it to read_translation_unit_from_input. 31928 * src/abg-writer.cc (write_context::clear_type_id_map): New member 31929 function. 31930 (write_translation_unit): Call it. 31931 * tools/abg-tools-utils.cc (guess_file_type): Read enough bytes to 31932 detect abi-corpus files magic bytes. 31933 * tools/bilint.cc (main): Do not write the corpus file to the 31934 output stream if --noout has been provided. 31935 319362014-01-13 Dodji Seketeli <dodji@redhat.com> 31937 31938 Escape xml pre-defined entities in native (de-)serialization. 31939 * include/abg-libxml-utils.h (escape_xml_string) 31940 (unescape_xml_string): Declare new functions. 31941 * src/abg-libxml-utils.cc (escape_xml_string) 31942 (unescape_xml_string): Define them. 31943 * src/abg-reader.cc (build_function_decl, build_var_decl) 31944 (build_type_decl, build_enum_type_decl, build_class_decl) 31945 (build_type_tparameter, build_non_type_tparameter) 31946 (build_template_tparameter, handle_namespace_decl) 31947 (handle_typedef_decl): Use unescape_xml_string. 31948 * src/abg-writer.cc (write_type_decl, write_function_decl) 31949 (write_class_decl, write_type_tparameter) 31950 (write_non_type_tparameter, write_template_tparameter): Use 31951 escape_xml_string. 31952 319532014-01-13 Dodji Seketeli <dodji@redhat.com> 31954 31955 Implement hash caching 31956 * include/abg-ir.h (decl_base::hash_): New member. 31957 (decl_base::{g,s}et_hash): New accessors. 31958 (type_base_::cached_hash): Forward-declare new hasher. 31959 (struct type_ptr_equal): New equality predicate. 31960 (type_shared_ptr_equal::operator()): Do not forget to test pointer 31961 equality. 31962 (type_base::cached_hash): Declare new hasher. 31963 * src/abg-hash.cc ({decl_base, type_decl, scope_type_decl, 31964 qualified_type_def, pointer_type_def, reference_type_def, 31965 enum_type_decl, typedef_decl, var_decl, function_decl, 31966 function_decl::parameter, class_decl::data_member, 31967 class_decl::member_function, class_decl, }::hash::operator()): 31968 Implement caching. 31969 (type_base::cached_hash::operator()(const type_base*)): Define. 31970 (type_base::cached_hash::operator() (const type_base_sptr): 31971 Define. 31972 * src/abg-ir.cc (type_ptr_map): Make this map use 31973 type_base::cached_hash instead of type_base::ptr_hash now. 31974 (decl_base::decl_base): Initialize the new 31975 decl_base::hash_. member. 31976 (decl_base::{s,g}et_hash): Define. 31977 (decl_base::operator==(const decl_base& other)): Take the hash in 31978 account to speed up inequality detection. 31979 * src/abg-writer.cc (type_ptr_map): Renamed type_shared_ptr_map 31980 into this. Make it use type_base::cached_hash and type_ptr_equal 31981 instead of type_base::shared_ptr_hash and type_shared_ptr_equal. 31982 (get_id_for_type): Add overload for type_base*. Re-write the 31983 previous overload in terms of this one. 31984 (write_context::m_type_id_map): Use type_ptr_map as the type for 31985 this. 31986 319872014-01-13 Dodji Seketeli <dodji@redhat.com> 31988 31989 Do not canonicalize types anymore; it's slow and luckily not needed 31990 * src/abg-ir.h (translation_unit::canonicalize_type): Remove. 31991 * src/abg-dwarf-reader.cc (canonicalize_and_add_type_to_ir) 31992 (canonicalize_and_insert_type_into_ir) 31993 (canonicalize_and_insert_type_into_ir_under_scope): Remove. 31994 (build_enum_type, build_class_type, build_ir_node_from_die): 31995 Update for removal of type canonicalization. 31996 * src/abg-ir.cc (translation_unit::canonicalize_type): Remove. 31997 319982014-01-13 Dodji Seketeli <dodji@redhat.com> 31999 32000 Fix class scope setting & member type de-serializing from dwarf 32001 * include/abg-fwd.h (add_decl_to_scope, insert_decl_into_scope): 32002 return the decl added to the scope. 32003 (as_non_member_type, get_type_declaration): Declare new entry 32004 points. 32005 * include/abg-ir.h (class decl_base::insert_decl_into_scope): 32006 Update this friend declaration. 32007 (class scope_decl, class_decl): Update the friend add_decl_to_scope 32008 declaration. 32009 (scope_decl::add_member_decl): Return the added decl. 32010 (class_decl_sptr): Move this typedef befoer the class_decl class 32011 declaration. 32012 (class_decl::definition_of_declaration_): New member. 32013 (class_decl::{set_definition_of_declaration, 32014 get_definition_of_declaration}): New accessors. 32015 (class_decl::add_member_decl): Return the added member. 32016 (class_decl::insert_member_type): New member. 32017 (class_decl::member_base::access_specifier): Make this protected. 32018 (class_decl::member_type): Make this inherit from type_vase. 32019 (class_decl::member_type::type_): Remove this member. 32020 (class_decl::member_type::as_type): Remove this accessor. 32021 (class_decl::member_type::operator==(const type_base&)): New. 32022 (class_decl::member_type::operator shared_ptr<type_base>() const): 32023 Remove. 32024 (class_decl::member_type::get_underlying_type): New. 32025 (class_decl::member_type::operator==(const member_type&) const): 32026 New. 32027 * src/abg-comparison.cc 32028 (class_diff::{ensure_lookup_tables_populated, report}): Adjust for 32029 the removal of class_decl::member_type::as_type. 32030 * src/abg-dwarf-reader.cc (scope_stack_type): Change this as a 32031 typedef to stack<scope_decl*>. 32032 (current_scope): Change return type from scope_decl_sptr to 32033 scope_decl*. 32034 (insert_decl_into_scope): New. 32035 (build_namespace_decl_and_add_to_ir): Use insert_decl_into_scope 32036 in lieu of add_decl_to_scope. 32037 (build_class_type_and_add_to_ir): likewise. Link a class 32038 definition to its declaration. Push the current scope on the 32039 scope stack. Use as_non_member_type. Fix setting member types. 32040 (get_scope_for_die): Look through declaration-only classe to get 32041 its definition. 32042 (build_qualified_type, build_pointer_type_def) 32043 (build_reference_type, build_typedef_type, build_var_decl) 32044 (build_function_decl): Use as_non_member_type. 32045 (build_ir_node_from_die): Fix member variable & function adding. 32046 * src/abg-ir.cc (scope_decl::{add_member_decl, 32047 insert_member_decl}): Return the added member. 32048 (add_decl_to_scope): Likewise. 32049 (insert_decl_into_scope): Likewise. 32050 (get_top_most_scope_under): Fix logic. 32051 (get_type_declaration): New overload that return a decl_base*. 32052 (as_non_member_type): New definition. 32053 (class_decl::{get_definition_of_declaration, 32054 set_definition_of_declaration, insert_member_decl}): Likewise. 32055 (class_decl::add_member_decl): Re-write in terms of 32056 class::insert_member_decl. 32057 (class_decl::insert_member_type): New definition. 32058 (class_decl::add_member_type): Re-write in terms of 32059 class_decl::insert_member_type. 32060 (class_decl::remove_member_type): Update for the 32061 class_decl::member_type::as_type removal. 32062 (class_decl::{add_data_member, add_member_function, 32063 add_member_function_template, add_member_class_template}): Call 32064 scope_decl::add_member_decl. 32065 (class_decl::member_type::member_type): Update as the type now 32066 virtually inherits from type_base. 32067 (class_decl::member_type::{set,get}_access_specifier): New 32068 definitions. 32069 (class_decl::member_type::get_underlying_type): Likewise. 32070 (class_decl::member_type::set_scope): Update wrt 32071 class_decl::member_type::as_type -> get_underlying_type rename. 32072 (class_decl::member_type::operator==(const decl_base& other)): 32073 There is no more class_decl::member_type::as_type. 32074 (class_decl::member_type::operator==(const type_base& other)): 32075 New. 32076 (class_decl::member_type::get_pretty_representation): Update wrt 32077 class_decl::member_type::as_type -> get_underlying_type rename. 32078 * src/abg-reader.cc (build_class_decl): New that add 32079 add_member_decl adds even member types, no need to add it 32080 explicitly anymore. 32081 320822014-01-07 Dodji Seketeli <dodji@redhat.com> 32083 32084 Add regression tests for dwarf reading 32085 * tests/test-read-dwarf.cc: New dwarf reading regression test. 32086 * tests/data/test-read-dwarf/test0: New test input. 32087 * data/test-read-dwarf/test0: Likewise. 32088 * data/test-read-dwarf/test0.abi: Likewise. 32089 * data/test-read-dwarf/test0.cc: Likewise. 32090 * data/test-read-dwarf/test1: Likewise. 32091 * data/test-read-dwarf/test1.abi: Likewise. 32092 * data/test-read-dwarf/test1.cc: Likewise. 32093 * tests/Makefile.am: Build the new tests/test-read-dwarf.cc file. 32094 320952014-01-07 Dodji Seketeli <dodji@redhat.com> 32096 32097 Remove useless dependencies in tests/Makefile.am 32098 * tests/Makefile.am: Remove useless *_DEPENDENCIES variables. 32099 321002014-01-07 Dodji Seketeli <dodji@redhat.com> 32101 32102 Support new 'abi-corpus' native XML format (.abi) 32103 * include/abg-reader.h (read_corpus_from_native_xml) 32104 (read_corpus_from_native_xml_file): Declare new entry points. 32105 * include/abg-writer.h (write_corpus_to_native_xml) 32106 (write_corpus_to_native_xml_file): Likewise. 32107 * src/abg-reader.cc (read_translation_unit_from_input): Renamed 32108 read_input into this. Support new 'path' attribute for 32109 'abi-instr' XML element. 32110 (read_corpus_from_input): New static function. 32111 (read_translation_unit_from_file) 32112 (read_translation_unit_from_buffer) 32113 (read_translation_unit_from_istream): Update wrt read_input -> 32114 read_translation_unit_from_input. 32115 (read_corpus_from_native_xml, read_corpus_from_native_xml) 32116 (read_corpus_from_native_xml_file): Define new entry points. 32117 * src/abg-writer.cc (write_translation_unit): Write 'path' 32118 attribute into the 'abi-instr' xml element. 32119 (write_corpus_to_native_xml, write_corpus_to_native_xml_file): 32120 Define new entry points. 32121 * tools/abg-tools-utils.h (file_type::{FILE_TYPE_XML_CORPUS, 32122 FILE_TYPE_ZIP_CORPUS}): New enumerators. 32123 * tools/abg-tools-utils.cc (guess_file_type): Support detection of 32124 the new xml file format containing a document root 'abi-corpus' 32125 root element. 32126 * tools/bidiff.cc (main): Support diffing xml corpus-es and zip 32127 corpus-es. 32128 * tools/bidw.cc (main): Recognize elf files before reading them. 32129 * tools/bilint.cc (main): Support reading xml/zip corpus-es too. 32130 * tests/data/test-read-write/test[0-23].xml: Update 'path' 32131 attribute. 32132 321332014-01-07 Dodji Seketeli <dodji@redhat.com> 32134 32135 Misc style fixes 32136 * include/abg-writer.h (write_translation_unit): Re-indent parms. 32137 * src/abg-writer.cc (write_translation_unit): Likewise. 32138 * test/test-read-write.cc (main): Fix white space. 32139 321402014-01-06 Dodji Seketeli <dodji@redhat.com> 32141 32142 Fix global variables diff reporting in corpus-es 32143 * src/abg-comparison.cc 32144 (corpus_diff::priv::ensure_lookup_tables_populated): Fix a wrong 32145 assert, resulting from a copy paste typo. 32146 321472014-01-06 Dodji Seketeli <dodji@redhat.com> 32148 32149 Add support for global variables in corpus diffing 32150 * include/abg-comparison.h (string_var_ptr_map, changed_var_ptr) 32151 (string_changed_var_ptr_map): New convenience typedefs. 32152 * src/abg-comparison.cc 32153 (corpus_diff::priv::{deleted_vars_,added_vars_,changed_vars_}): 32154 New members. 32155 (corpus_diff::priv::{lookup_tables_empty, clear_lookup_tables}): 32156 Update wrt the new variables related lookup tables. 32157 (corpus_diff::ensure_lookup_tables_populated): Update to populate 32158 variables related lookup tables. 32159 (corpus_diff::report): Update to display added/removed/changed 32160 variables. 32161 321622014-01-06 Dodji Seketeli <dodji@redhat.com> 32163 32164 Misc style fixlets 32165 * include/abg-comparison.h (changed_function_ptr): Fix comment. 32166 * src/abg-comparison.cc (corpus_diff::report): Likewise. 32167 * src/abg-corpus.cc (corpus::is_empty): Likewise. 32168 321692013-12-23 Dodji Seketeli <dodji@redhat.com> 32170 32171 Initial support for diffing ABI corpus files 32172 * include/abg-comparison.h (string_function_ptr_map) 32173 (changed_function_ptr, string_changed_function_ptr_map) 32174 (corpus_diff_sptr): New convenience typedefs. 32175 (translation_unit_diff): Add comments. 32176 (class corpus_diff): New type. 32177 (compute_diff): New overload for corpus_diff. 32178 * include/abg-corpus.h (corpus::{functions, variables}): New 32179 typedefs. 32180 (corpus::{operator==, get_functions, get_variables}): New members. 32181 * include/abg-diff-utils.h (struct deep_ptr_eq_functor): New 32182 functor. 32183 * include/abg-ir.h (translation_unit::operator==): New member 32184 equality operator. 32185 * src/abg-comparison.cc (struct corpus_diff::priv): New private 32186 struct holding the private members of corpus_diff. 32187 (corpus_diff::priv::{lookup_tables_empty, clear_lookup_tables, 32188 ensure_lookup_tables_populated}): Define new private member functions. 32189 (corpus_diff::{corpus_diff, first_corpus, second_corpus, 32190 function_changes, variable_changes, length, report}): New public members. 32191 (struct noop_deleter): New struct. 32192 (compute_diff): New implementation for corpus_diff. 32193 * src/abg-corpus.cc (struct corpus::priv): Renamed corpus::impl 32194 into this. Add new fns, vars and is_symbol_table_built data 32195 members. 32196 (corpus::priv::build_symbol_table): New member function. 32197 (class symtab_build_visitor_type): New visitor type to build the 32198 symbol table. 32199 (struct func_comp, struct var_comp): New comparison functors. 32200 (corpus::priv::build_symbol_table): Define new member function. 32201 (corpus::{corpus, add, get_translation_units, operator==, 32202 get_functions, get_variables}): Define new members. 32203 * src/abg-ir.cc (translation_unit::operator==): Define new member 32204 equality operator. 32205 (operator==(translation_unit_sptr l, translation_unit_sptr r)): 32206 Define new equality operator. 32207 * tools/abg-tools-utils.h (enum file_type): New enum. 32208 (guess_file_type): Declare new function. 32209 * tools/abg-tools-utils.cc (guess_file_type): define new function. 32210 * tools/bidiff.cc (main): Guess the type of the files given in 32211 input and support elf files reading and diffing. 32212 322132013-12-23 Dodji Seketeli <dodji@redhat.com> 32214 32215 Generalize use of equality operator in core diff algorithms 32216 * include/abg-diff-utils.h (struct default_eq_functor): New 32217 equality functor. 32218 (end_of_fr_d_path_in_k, end_of_frr_d_path_in_k_plus_delta): Add a 32219 new equality functor template parameter and document it. Use it 32220 to compare the elements of the sequences given in argument. 32221 (compute_middle_snake, ses_len, compute_diff): Add a new equality 32222 functor template parameter and document it. Adjust call to 32223 end_of_frr_d_path_in_k_plus_delta, end_of_fr_d_path_in_k and 32224 compute_middle_snake. 32225 (ses_len, compute_diff): Add a new overload that uses a 32226 default_eq_functor as comparison functor, to avoid breaking 32227 existing client code. 32228 * src/abg-diff-utils.cc (compute_middle_snake): Adjust the call to 32229 the compute_middle_snake. 32230 322312013-12-23 Dodji Seketeli <dodji@redhat.com> 32232 32233 Change ir node visitor interface work on pointer to nodes 32234 * include/abg-ir.h (ir_traversable_base): New type to be the base 32235 of IR nodes that are to be traversed. Extends traversable_base. 32236 Its ir_traversable_base::traversable() method takes an 32237 ir_node_visitor&. 32238 (ir_node_visitor::visit): Change these virtual overloads to take 32239 pointers to IR nodes, rather than references. This will be useful 32240 to e.g, store these IR nodes in containers on the side for some 32241 algorithms to work. That is going to be useful later to, 32242 e.g. build symbol tables on the side, using the visitor interface. 32243 (class decl_base): Make this inherit ir_traversable_base. 32244 * src/abg-ir.cc (*::traverse): Adjust comments and the call the 32245 ir_node_visitor::visit call. Use the ir_traversable_base type 32246 rather than traversable_base. 32247 (ir_traversable_base::traverse): Define. 32248 (ir_node_visitor::visit): Change these overloads to take pointers 32249 rather than reference to ir nodes. 32250 * tests/test-walker.cc (name_printing_visitor::visit): Adjust to 32251 take pointers rather than references. 32252 322532013-12-23 Dodji Seketeli <dodji@redhat.com> 32254 32255 Do not forget to read function parms 32256 * src/abg-dwarf-reader.cc (build_function_decl): Do not forget the 32257 the function parameters. Oops. 32258 322592013-12-20 Dodji Seketeli <dodji@redhat.com> 32260 32261 Support reading member functions and member types from DWARF 32262 * include/abg-ir.h (method_type_sptr): New convenience typedef. 32263 * src/abg-dwarf-reader.cc (read_context::{dwarf_version, 32264 die_wip_classes_map}): New accessors. 32265 (die_is_virtual): Rename is_virtual into this. 32266 (is_type_tag, is_type_die, die_virtual_function_index): Define new 32267 static functions. 32268 (die_member_offset): Fix comment. 32269 (get_scope_for_die): Take the read context as argument. 32270 (canonicalize_and_add_type_to_ir): Likewise. On NULL scope, get 32271 the current translation unit from the read context. 32272 (canonicalize_and_insert_type_into_ir_under_scope): Handle NULL 32273 context. 32274 (build_function_decl): Support creating method_decls from here 32275 when necessary. 32276 (build_class_type_and_add_to_ir): Rename build_class_type into 32277 this. Handle adding the class to the IR and to the relevant maps. 32278 During the creation of the class, arrange for 32279 build_ir_node_from_die on the current DIE to return a 32280 declaration-only class, representing the declaration for the class 32281 that is being constructed. This breaks circular dependencies 32282 induced by decls/types that refer to the class being built, before 32283 the class is fully built and has a (logical) type ID. Once the 32284 class is created, make it refer to the class declaration that was 32285 previously handed for the requests to the class DIE. Now requests 32286 to the class DIE will just yield the newly built class. Add 32287 support for member functions and member types. 32288 (build_corpus): Support reading the dwarf version and stick it 32289 into the context. 32290 (build_ir_node_from_die): Adjust for change in 32291 canonicalize_and_add_type_to_ir and build_class_type signature 32292 change. 32293 * src/abg-ir.cc (class_decl::method_decl::get_type): Support 32294 returning NULL type. 32295 322962013-12-20 Dodji Seketeli <dodji@redhat.com> 32297 32298 Don't crash in get_global_scope on empty decls 32299 * src/abg-ir.cc (get_global_scope): Don't crash when given a NULL 32300 decl. 32301 323022013-12-20 Dodji Seketeli <dodji@redhat.com> 32303 32304 Make decl_base::set_scope virtual, to work on class_decl::member_type 32305 * include/abg-ir.h (decl_base::set_scope): Make this virtual. 32306 (class_decl::member_type::set_scope): Declare an overload here. 32307 * src/abg-ir.cc (class_decl::member_type::set_scope): Define new 32308 overload. Make this set the scope of the underlying type of the 32309 member type as well. 32310 323112013-12-20 Dodji Seketeli <dodji@redhat.com> 32312 32313 Support artificial parameters 32314 * include/abg-ir.h (function_decl::parameter::{get, 32315 set}_artificial): Add new accessors for an "artificial" flag. 32316 * src/abg-reader.cc (build_function_parameter): Support reading 32317 the artificial parameter flag. 32318 * src/abg-writer.cc (write_function_decl): Support writing the 32319 artificial parameter flag. 32320 323212013-12-19 Dodji Seketeli <dodji@redhat.com> 32322 32323 Initial support for reading struct/class 32324 * src/abg-dwarf-reader.cc (enum virtuality): New enum. 32325 (class expr_result, struct dwarf_expr_eval_context): New types. 32326 (die_size_in_bits) 32327 (die_access_specifier, die_virtuality, is_virtual) 32328 (die_location_expr, op_pushes_constant_value) 32329 (op_pushes_non_constant_value, op_manipulates_stack) 32330 (op_is_arith_logic, op_is_control_flow) 32331 (eval_last_constant_dwarf_sub_expr, die_member_offset) 32332 (build_class_type): New static functions. 32333 (build_ir_node_from_die<DW_TAG_{class, structure}_type>): Support 32334 creating IR node for class and struct by calling the new 32335 build_class_type. 32336 323372013-12-19 Dodji Seketeli <dodji@redhat.com> 32338 32339 Slight style fix 32340 * src/abg-dwarf-reader.cc (build_qualified_type): Fix indentation. 32341 323422013-12-19 Dodji Seketeli <dodji@redhat.com> 32343 32344 Be more forgiving when parsing xml from stdin 32345 * src/abg-libxml-utils.cc (xml_istream_input_read): Return the 32346 byte read count even when the stream seems to be borked. In that 32347 case it should be zero. 32348 323492013-12-19 Dodji Seketeli <dodji@redhat.com> 32350 32351 Don't crash if building pointer/reference yields NULL 32352 * src/abg-dwarf-reader.cc 32353 (build_ir_node_from_die<DW_TAG_pointer_type) 32354 (DW_TAG_rvalue{0,1}_reference_type>): Do not crash if building the 32355 IR node for the underlying type yields NULL. 32356 323572013-12-19 Dodji Seketeli <dodji@redhat.com> 32358 32359 Use dwarf_attr_integrate() rather than dwarf_attr() 32360 * src/abg-dwarf-reader.cc (die_string_attribute) 32361 (die_unsigned_constant_attribute, die_signed_constant_attribute) 32362 (die_flag_attribute, die_die_attribute): Use dwarf_attr_integrate 32363 rather than dwarf_attr to look through DW_AT_abstract_origin. 32364 323652013-12-14 Dodji Seketeli <dodji@redhat.com> 32366 32367 Support enums 32368 * src/abg-dwarf-reader.cc (build_enum_type): New function. 32369 (build_ir_node_from_die): Call the new build_enum_type here to 32370 Handle DW_TAG_enumeration_type DIEs. 32371 323722013-12-14 Dodji Seketeli <dodji@redhat.com> 32373 32374 Build & use a DIE -> parent map to avoid emitting useless types 32375 * include/abg-ir.h (translation_unit::{mark_type_as_used, 32376 prune_unused_types}): Remove these declarations. 32377 * src/abg-ir.cc (translation_unit::priv::used_types_): Remove. 32378 (class subtype_marking_visitor): Likewise. 32379 (translation_unit::{mark_type_as_used, prune_unused_types): 32380 Likewise. 32381 (get_top_most_scope_under): Fix logic and add comment. 32382 * src/abg-dwarf-reader.cc (die_tu_map_type, offset_offset_map): 32383 New convenience typedefs. 32384 (read_context::{die_tu_map_, die_parent_map_}): New context 32385 members. 32386 (read_context::{die_tu_map, die_parent_map}): New accessors. 32387 (build_ir_node_from_die): New overload that takes the scope of the 32388 ir node in parameter. 32389 (die_signed_constant_attribute): Un-comment this. 32390 (build_die_parent_relations_under, build_die_parent_map) 32391 (get_parent_die, get_scope_for_die): New static functions. 32392 (build_translation_unit_and_add_to_ir): Renamed 32393 build_translation_unit into this. Populate the new 32394 read_context::die_tu_map() here. 32395 (canonicalize_and_add_type_to_ir) 32396 (canonicalize_and_insert_type_into_ir) 32397 (canonicalize_and_insert_type_into_ir_under_scope): Move these 32398 overloads over the top of the file. 32399 (build_namespace_decl_and_add_to_ir): Fix this by adding the 32400 namespace to the IR scope of the DIE (using the new 32401 get_scope_for_die()). Update the read_context::die_decl_map() 32402 map. 32403 (build_function_decl): Support functions that return void. Also, 32404 skip parameters that don't have type set. 32405 (build_corpus): Walk all the DIEs to build a DIE -> parent map. 32406 Adjust for the rename to build_translation_unit_and_add_to_ir. 32407 (build_ir_node_from_die): Add a scope parm. Adjust back to 32408 building IR nodes only for public decls, unless the 32409 'called_from_public_decl' flag is set. Adjust to stick the resulting 32410 IR node into the scope given in parameter. 32411 324122013-12-14 Dodji Seketeli <dodji@redhat.com> 32413 32414 Mark sub-types as part of general type marking 32415 * src/abg-ir.cc (subtype_marking_visitor): New visitor. 32416 (translation_unit::mark_type_as_used): When marking a composite 32417 type as used, mark its sub-types as well. 32418 324192013-12-14 Dodji Seketeli <dodji@redhat.com> 32420 32421 Add missing virtual keywords for traverse() method 32422 * include/abg-ir.h ({translation_unit, decl_base, scope_decl, 32423 type_decl, namespace_decl, qualified_type_decl, pointer_type_def, 32424 reference_type_def, enum_type_decl, typedef_decl, var_decl, 32425 function_tdecl, class_decl, class_decl::data_member, 32426 class_decl::member_function, class_decl::member_function_template, 32427 class_decl::member_class_template}::traverse): Add a virtual 32428 keyword at least to "document" that this method is virtual -- and 32429 thus remind the user that it overrides the 32430 traversable_base::traverse(). 32431 324322013-12-14 Dodji Seketeli <dodji@redhat.com> 32433 32434 Add a is_type overload 32435 * include/abg-fwd.h (is_type): Declare new overload that takes a 32436 type reference. 32437 * src/abg-ir.cc (is_type): Define. 32438 324392013-12-13 Dodji Seketeli <dodji@redhat.com> 32440 32441 Prune types that are not ref'ed by public decls 32442 * include/abg-fwd.h (remove_decl_from_scope): Declare new 32443 function. 32444 * include/abg-ir.h (type_base_sptr, decl_base_sptr): Move these 32445 convenience typedef before the translation_unit declaration. 32446 (translation_unit::{mark_type_as_used, prune_unused_types}): 32447 Declare new methods. 32448 (decl_base::remove_member_decl): Likewise. 32449 (class_decl::{remove_member_decl, remove_member_type): Likewise. 32450 * src/abg-dwarf-reader.cc (die_decl_map_type): Change this map 32451 type so that the value is now a DIE offset, rather than a DIE. 32452 This is because many times the lifetime of DIEs is shorter than 32453 the one of the reader_context. Also, the die offset uniquely 32454 designates a physical DIE even if several different instances of 32455 logical DIE might point to it. 32456 (struct die_hash): Remove this as it's useless now that we store 32457 DIE offsets in the map. 32458 (build_translation_unit): Call build_ir_node_from_die w/o setting 32459 the called_from_public_decl flag. Prune the types that are not 32460 used by any public decls. 32461 (build_namespace_decl_and_add_to_ir): all build_ir_node_from_die 32462 w/o setting the called_from_public_decl flag. 32463 (build_ir_node_from_die): Change the only_public_decl flag into a 32464 called_from_public_decl flag. Mark types used by public decls as 32465 such. Adjust for the parm changes of build_qualified_type 32466 build_pointer_type_def, build_reference_type, and 32467 build_typedef_type. 32468 (build_qualified_type, build_pointer_type_def) 32469 (build_reference_type, build_typedef_type): Take a new 32470 called_from_public_decl. Pass it to build_ir_node_from_die. 32471 (build_var_decl): Call build_ir_node_from_die with the 32472 called_from_public_decl flag set to true to flag the types 32473 referenced by this variable as being used. 32474 (build_function_decl): Take a called_from_public_decl flag as 32475 well, as this function can now call build_function_decl itself to 32476 build a function decl out of the value of the DW_AT_specification 32477 attribute, for DIEs representing function definitions. Also, flag 32478 the types referenced by public functions are being used. 32479 * src/abg-ir.cc (translation_unit::priv::used_types_): New map for 32480 the used types. 32481 (translation_unit::{mark_type_as_used, prune_unused_types}): 32482 Define new methods. 32483 (scope_decl::remove_member_decl): Likewise. 32484 (remove_decl_from_scope): Define new function. 32485 (class_decl::{remove_member_decl, remove_member_type}): Define new 32486 methods. 32487 324882013-12-12 Dodji Seketeli <dodji@redhat.com> 32489 32490 Support reading namespaces 32491 * include/abg-fwd.h (get_global_scope): Return a const 32492 global_scope. Add a new overload that takes a naked pointer as 32493 parm. 32494 (insert_decl_into_scope, get_top_most_scope_under): Declare new 32495 entry points. 32496 * include/abg-ir.h (class decl_base, class scope_decl): Add 32497 insert_decl_into_scope as a friend of these classes. 32498 (scope_decl::{insert_decl_into_scope, find_iterator_for_member}): 32499 Declare new member. 32500 (scope_decl::get_member_decls): New non-const overload. 32501 * src/abg-dwarf-reader.cc (build_translation_unit): Remove the 32502 "recurse" parameter. Adjust the call to build_ir_node_from_die to 32503 read just public decls that are at namespace scope. Anything else 32504 should be dropped unless it's needed to emitting the public 32505 namespace-level decls. 32506 (build_namespace_decl_and_add_to_ir) 32507 (canonicalize_and_insert_type_into_ir): Define new static 32508 functions. 32509 (build_corpus): Adjust ad build_translation_unit doesn't have the 32510 "recurse" parameter anymore. 32511 (canonicalize_and_add_type_to_ir): Make this static. Fix 32512 comments. 32513 (build_ir_node_from_die): Take a new "only_public_decl" 32514 parameter. For DW_TAG_base_type case, use the new 32515 canonicalize_and_insert_type_into_ir to insert the type at the 32516 right place in the global scope making sure it is seen before the 32517 current scope. For pointer, references and qualified types, use 32518 canonicalize_and_insert_type_into_ir to add the type at the same 32519 scope as its underlying type. Handle DW_TAG_{namespace,module} 32520 using the new build_namespace_decl_and_add_to_ir function. Add 32521 some vertical spaces and some assertions. 32522 * src/abg-ir.cc (scope_decl::add_member_decl): Use scope_decl_sptr 32523 typedef. 32524 (scope_decl::{insert_member_decl,find_iterator_for_member}): 32525 Define new methods. 32526 (insert_decl_into_scope, get_top_most_scope_under): Define new 32527 functions. 32528 (get_global_scope): Constify the return type. 32529 (get_translation_unit): Adjust as get_global_scope now returns a 32530 const. 32531 * src/abg-reader.cc (get_translation_unit): Likewise. 32532 325332013-12-12 Dodji Seketeli <dodji@redhat.com> 32534 32535 Fix function_decl::parameter::operator== 32536 * include/abg-ir.h (function_decl::parameter::operator==): Support 32537 empty type, e.g, in presence of a variadic parameter. 32538 325392013-12-12 Dodji Seketeli <dodji@redhat.com> 32540 32541 Misc style fixes 32542 * include/abg-ir.h (decl_base::set_visibility): Remove useless 32543 white space. 32544 (class scope_decl): Remove useless white space. 32545 (scope_decl::add_member_decl): Use decl_base_sptr convenience 32546 typedef. 32547 (global_scope_sptr, namespace_decl_sptr): New convenience typedef. 32548 (class global_scope): Remove useless white space. 32549 325502013-12-11 Dodji Seketeli <dodji@redhat.com> 32551 32552 Misc style fixes 32553 * src/abg-dwarf-reader.cc (die_string_attribute, is_public_decl) 32554 (build_translation_unit, build_ir_node_from_die): Fix comments. 32555 (die_unsigned_constant_attribute, die_signed_constant_attribute) 32556 (die_loc_and_name): Align parms. 32557 325582013-12-11 Dodji Seketeli <dodji@redhat.com> 32559 32560 Support typedef types 32561 * src/abg-dwarf-reader.cc (build_typedef_type): Define new static 32562 function. 32563 (canonicalize_and_add_type_to_ir): Do not crash on NULL input 32564 type. Also, add a new overload for smart pointer on scope. 32565 (build_ir_node_from_die): For DW_TAG_base_type case, adjust as 32566 canonicalize_and_add_type_to_ir now takes smart pointers on 32567 scopes. Support the DW_TAG_typedef case by calling the new 32568 build_typedef_type. 32569 325702013-12-11 Dodji Seketeli <dodji@redhat.com> 32571 32572 Support reference types 32573 * src/abg-dwarf-reader.cc (build_pointer_type_def): Do not forget 32574 to get the proper size of the pointer type. 32575 (build_reference_type): Define new static function. 32576 (build_ir_node_from_die): Call build_reference_type for the 32577 DW_TAG_reference_type and DW_TAG_rvalue_reference_type cases. 32578 325792013-12-11 Dodji Seketeli <dodji@redhat.com> 32580 32581 Support pointer types 32582 * include/abg-fwd.h (get_translation_unit, get_global_scope): 32583 Declare new overloads that act on a naked pointer to decl_base. 32584 * src/abg-dwarf-reader.cc (build_pointer_type_def): Define new 32585 static function. 32586 (canonicalize_and_add_type_to_ir): Take a naked pointer to 32587 scope_decl rather than a smart pointer. 32588 (build_ir_node_from_die): For DW_TAG_base_type, adjust. Support 32589 DW_TAG_pointer_type case. For DW_TAG_{const,volatile}_type case, 32590 make sure the qualified type is in the same scope as its 32591 underlying type. 32592 * src/abg-ir.cc (get_global_scope, get_translation_unit): Define 32593 new overloads that acts on a naked decl_base. 32594 325952013-12-11 Dodji Seketeli <dodji@redhat.com> 32596 32597 Support qualified types 32598 * src/abg-dwarf-reader.cc (build_qualified_type) 32599 (canonicalize_and_add_type_to_ir): Define new static functions. 32600 (build_ir_node_from_die): In the DW_TAG_base_type case, use the 32601 new canonicalize_and_add_type_to_ir which is a factorization of 32602 this code. In the DW_TAG_{const,volatile}_type, use the new 32603 build_qualified_type and canonicalize_and_add_type_to_ir 32604 functions. 32605 326062013-12-11 Dodji Seketeli <dodji@redhat.com> 32607 32608 Support reading public functions from DWARF 32609 * src/abg-dwarf-reader.cc (read_context::dwarf_): New member. 32610 (read_context::load_debug_info): Move the content of 32611 load_debug_info_from_elf here. 32612 (read_context::dwarf): New accessor for the dwarf_ member above. 32613 (die_flag_attribute, die_loc_and_name, is_public_decl) 32614 (build_function_decl): New static functions. 32615 (die_location): Do not try to create a location object when the 32616 location has empty file or empty line number. 32617 (build_translation_unit): Take a new address_size parameter. 32618 (build_type_decl): Really take a context parameter. Use the new 32619 die_loc_and_name() here. 32620 (build_var_decl): Skip non-public vars. 32621 (build_corpus): Use dwarf_nextcu instead of dwfl_nextcu, so that 32622 we can get the address_size used in the current CU. Note that for 32623 this we are getting the Dwarf* pointer from the context thanks to 32624 the new read_context::dwarf() getter. Adjust the call to 32625 build_translation_unit to pass it the new address_size. 32626 (build_ir_node_from_die): Shorten lines a little bit. Call the 32627 new build_function_decl to support reading DW_TAG_subprogram DIEs. 32628 (read_corpus_from_elf): Adjust to create the read context earlier 32629 and use its read_context::load_debug_info method to load the debug 32630 info. 32631 326322013-12-11 Dodji Seketeli <dodji@redhat.com> 32633 32634 Make bilint read input from stdin 32635 * include/abg-libxml-utils.h (new_reader_from_istream): Declare 32636 new public entry point. 32637 * src/abg-libxml-utils.cc (xml_istream_input_read) 32638 (xml_istream_input_close): New static functions. 32639 (new_reader_from_istream): Define new public input function. 32640 * include/abg-reader.h (read_translation_unit_from_istream): 32641 Declare new entry points. 32642 * src/abg-reader.cc (read_translation_unit_from_istream): Define 32643 new entry points. 32644 * tools/bilint.cc (options::{read_from_stdin, noout}): New 32645 members. 32646 (display_usage): Document --stdin and --noout. 32647 (parse_command_line): Adjust to consider that no option on the 32648 command line means reading from stdin, just like --stdin. Support 32649 the --noout option as well. 32650 (main): Support Read the abi instr from stdin; in that case, what 32651 was read is just serialized back to stdout, unless --noout was 32652 supplied. 32653 326542013-12-11 Dodji Seketeli <dodji@redhat.com> 32655 32656 Support the "address-size" attribute for <abi-instr> elements 32657 * include/abg-ir.h (translation_unit::translation_unit): Take an 32658 address_size parameter. 32659 (translation_unit::{get_address_size, set_address_size}): New 32660 accessors. 32661 * src/abg-ir.cc (translation_unit::priv::address_size_): New 32662 private member. 32663 (translation_unit::translation_unit): Take an address_size 32664 parameter. 32665 (translation_unit::{get_address_size, set_address_size}): Define 32666 these new methods. 32667 * src/abg-reader.cc (read_input): Read the "address-size" 32668 attribute from the abi-instr element. 32669 * src/abg-writer.cc (write_translation_unit): Write the 32670 "address-size" attribute. 32671 * tests/data/test-read-write/test23.xml: New test input. 32672 * tests/test-read-write.cc (in_out_specs): Add the new test above 32673 to the list of files to read and write back. 32674 326752013-12-11 Dodji Seketeli <dodji@redhat.com> 32676 32677 Support variadic arguments in function decls 32678 * src/abg-reader.cc (build_function_parameter): Support reading 32679 the "is-variadic" attribute. 32680 * src/abg-writer.cc (write_function_decl): Support writing the 32681 "is-variadic" attribute. 32682 * tests/data/test-read-write/test22.xml: New test input. 32683 * tests/test-read-write.cc (in_out_specs): Add the new test to the 32684 list of files to read and write back. 32685 326862013-12-07 Dodji Seketeli <dodji@redhat.com> 32687 32688 Initial support of reading an ABI Corpus from DWARF 32689 * configure.ac: Check the presence of libdw.so and 32690 elfutils/libdwfl.h headers from elfutils and define the necessary 32691 linking flags. 32692 * include/abg-dwarf-reader.h: New header file 32693 * include/Makefile.am: Add the new header file to the source 32694 distribution. 32695 * src/abg-dwarf-reader.cc:: New file. 32696 * src/Makefile.am: Add the new file to the source distribution. 32697 * include/abg-fwd.h (dump): Add declarations for several overloads 32698 to allow dumping to a given output stream. 32699 * include/abg-ir.h (class translation_unit): Use a pimpl idiom for 32700 this now. 32701 (translation_unit::canonicalize_type): Declare new method. 32702 * src/abg-ir.cc (struct translation_unit::priv): New private type 32703 for the pimpl idiom for translation_unit. 32704 (translation_unit::{translation_unit, get_global_scope, get_path, 32705 set_path, get_loc_mgr}): Adjust for pimpl idiom. 32706 (translation_unit::canonicalize_type): Define this new method and 32707 one overload. 32708 * src/abg-writer.cc (dump): Define several overloads to dump IR 32709 nodes to given output streams. 32710 * tools/bidw.cc: New file for the new bidw tool. 32711 * tools/Makefile.am: Define rules to build the new bidw tools. 32712 327132013-12-07 Dodji Seketeli <dodji@redhat.com> 32714 32715 Pass a string by reference rather than by value 32716 * tools/bilint.cc (display_usage): Pass program name by reference. 32717 327182013-12-07 Dodji Seketeli <dodji@redhat.com> 32719 32720 Misc style fixes 32721 * src/abg-ir.cc (location_manager::location_manager) 32722 (translation_unit::{is_empty, traverse, ~translation_unit): Remove 32723 useless vertical white spaces. 32724 * tools/bilint.cc (parse_command_line): Fix indentation. 32725 327262013-12-04 Dodji Seketeli <dodji@redhat.com> 32727 32728 Prepare serialization API for multiple backends 32729 * include/abg-reader.h: New file with abigail::xml_reader APIs. 32730 * include/abg-writer.h: New file with abigail::xml_writer APIs. 32731 * include/Makefile.am: Add the new files above to the source 32732 distribution. 32733 * src/abg-reader.cc: Update top-file comments. 32734 (namespace xml_reader): Rename namespace 32735 reader into this. 32736 (read_to_translation_unit, read_corpus_from_archive): New static 32737 functions. 32738 (read_translation_unit_from_file) 32739 (read_translation_unit_from_file, read_corpus_from_file): New 32740 entry points. 32741 (struct array_deleter): New functor. 32742 (translation_unit::read): Remove this. 32743 * src/abg-writer.cc: Update top file comments. 32744 (namespace xml_writer): Rename namespace 32745 writer into this. 32746 (struct archive_write_ctxt): New internal type. 32747 (create_archive_write_context, write_translation_unit_to_archive) 32748 (write_translation_unit, write_corpus_to_archive): New low level 32749 static functions overloads. 32750 (write_corpus_to_archive, write_translation_unit): Public higher 32751 level overloads. 32752 (translation_unit::write): Remove. 32753 (dump): Update for new xml_writer namespace. 32754 * include/abg-ir.h (translation_unit::{read, write}): Remove these 32755 serialization methods. 32756 * include/abg-corpus.h (corpus_sptr): New convenience typedef. 32757 (corpus::{read, write}): Remove these methods. 32758 * src/abg-corpus.cc (corpus::{read, write}) 32759 (corpus::impl::{serialized_tus, archive}): Remove these members. 32760 (corpus::impl::{get_archive, close_archive, write_tu_to_archive, 32761 read_to_translation_unit}): Remove these methods. 32762 * tests/test-bidiff.cc (main): Update for usage of the new 32763 xml_reader API. 32764 * tests/test-read-write.cc (main): Likewise. Update for the usage 32765 of the new xml_writer API, too. 32766 * tests/test-walker.cc (main): Update for the usage of the new 32767 xml_reader API. 32768 * tests/test-write-read-archive.cc (main): Likewise. And for the 32769 xml_writer API, too. 32770 * tools/biar.cc (add_tus_to_archive, extract_tus_from_archive): Likewise. 32771 * tools/bidiff.cc (main): Likewise, for xml_reader APIs. 32772 * tools/bilint.cc (main): Likewise, for xml_writer APIs, too. 32773 327742013-11-29 Dodji Seketeli <dodji@redhat.com> 32775 32776 Add support for bidiff regression testing 32777 * tests/data/test-bidiff/test-enum0-v0.cc.bi: New input file. 32778 * tests/data/test-bidiff/test-enum0-v1.cc.bi: Likewise. 32779 * tests/data/test-bidiff/test-enum0-report.diff: Likewise. 32780 * tests/data/test-bidiff/test-enum1-v0.cc.bi: Likewise. 32781 * tests/data/test-bidiff/test-enum1-v1.cc.bi: Likewise. 32782 * tests/data/test-bidiff/test-enum1-report.txt: Likewise. 32783 * tests/data/test-bidiff/test-qual-type0-v0.cc.bi: Likewise. 32784 * tests/data/test-bidiff/test-qual-type0-v1.cc.bi: Likewise. 32785 * tests/data/test-bidiff/test-qual-type0-report.txt: Likewise. 32786 * tests/data/test-bidiff/test-struct0-v0.cc.bi: Likewise. 32787 * tests/data/test-bidiff/test-struct0-v1.cc.bi: Likewise. 32788 * tests/data/test-bidiff/test-struct0-report.txt: Likewise. 32789 * tests/data/test-bidiff/test-struct1-v0.cc.bi: Likewise. 32790 * tests/data/test-bidiff/test-struct1-v1.cc.bi: Likewise. 32791 * tests/data/test-bidiff/test-struct1-report.txt: Likewise. 32792 * tests/data/test-bidiff/test-var0-v0.cc.bi: Likewise. 32793 * tests/data/test-bidiff/test-var0-v1.cc.bi: Likewise. 32794 * tests/data/test-bidiff/test-var0-report.txt: Likewise. 32795 * tests/test-bidiff.cc: New file. 32796 * tests/Makefile.am: Build the new runtestbidiff regression test 32797 and add the above to the source distribution. 32798 327992013-11-29 Dodji Seketeli <dodji@redhat.com> 32800 32801 Add missing test inputs to source distribution 32802 * tests/Makefile.am (data/test-read-write/test{17, 18, 19, 20, 32803 21}.xml): Add these test input files to the source distribution. 32804 328052013-11-28 Dodji Seketeli <dodji@redhat.com> 32806 32807 Add diff support for var_decl 32808 * include/abg-comparison.h (class var_diff): New declaration. 32809 (var_diff_sptr): New convenience typedef. 32810 (compute_diff): New overloads for var_diff, decl_base and 32811 type_base. 32812 * src/abg-comparison.cc (try_to_diff): Renamed try_to_diff_types 32813 into this. 32814 (compute_diff_for_types): Adjust for the try_to_diff_types 32815 renaming. Fix comments. 32816 (compute_diff_for_decls): Re-use try_to_diff. Update for 32817 var_decl. 32818 (compute_diff): Define overloads for decl_base, type_base and 32819 var_decl. 32820 (diff_length_of_decl_bases, diff_length_of_type_bases): New static 32821 help functions. 32822 (report_name_size_and_alignment_changes): Renamed 32823 report_size_and_alignment_changes into this. Make it report name 32824 changes as well. 32825 (var_diff::priv): New struct. 32826 (var_diff::{var_diff, first_var, second_var, type_diff, length, 32827 report}): Define methods. 32828 ({qualified_type_diff, enum_diff, class_diff, scope_diff, 32829 function_decl_diff}::report): Do not report 32830 anything if the diff is empty. 32831 (type_decl_diff::length): Fix this. 32832 (type_decl_diff::report): Adjust for renaming to 32833 report_name_size_and_alignment_changes. 32834 328352013-11-28 Dodji Seketeli <dodji@redhat.com> 32836 32837 Add enum_type_decl::get_pretty_representation() 32838 * include/abg-ir.h (enum_type_decl::get_pretty_representation): 32839 Declare new virtual method override. 32840 * src/abg-ir.cc (enum_type_decl::get_pretty_representation): 32841 Define it. 32842 328432013-11-28 Dodji Seketeli <dodji@redhat.com> 32844 32845 Change return type of abigail::is_type() 32846 * include/abg-fwd.h (is_type): Change the return type from bool to 32847 type_base_sptr. 32848 328492013-11-27 Dodji Seketeli <dodji@redhat.com> 32850 32851 Support diff for enum_type_decl 32852 * include/abg-ir.h (enum_type_decl_sptr): New typedef. 32853 (enum_type_decl::enumerator::enumerator): Make default constructor 32854 public so that enumerators can be stored in vectors. Maybe I 32855 should have made stored pointers to enumerators instead ... 32856 (enum_type_decl::enumerator::get_qualified_name): Define new 32857 method. 32858 * include/abg-comparison.h (string_enumerator_map) 32859 (changed_enumerator, string_changed_enumerator_map) 32860 (enum_diff_sptr): New convenience typedefs. 32861 (class enum_diff): Declare new class. 32862 (compute_diff): New overload for enum_type_decl. 32863 * src/abg-comparison.cc (enum diff_kind, report_mem_header): Move 32864 these at the beginning of the file. 32865 (struct enum_diff::priv): Define this. 32866 (enum_diff::{clear_lookup_tables, lookup_tables_empty, 32867 ensure_lookup_tables_populated, enum_diff, first_enum, 32868 second_enum, underlying_type_diff, deleted_enumerators, 32869 inserted_enumerators, changed_enumerators, length, report}): 32870 Define these new methods. 32871 (compute_diff): New overload for enum_diff. 32872 (compute_diff_for_types): Add support enum_type_decl here. 32873 328742013-11-27 Dodji Seketeli <dodji@redhat.com> 32875 32876 Fix equality operator for enum_type_decl 32877 * src/abg-ir.cc (enum_type_decl::operator==(const type_base& o)): 32878 This was comparing just the decl_base and type_base part of the 32879 enum. Now re-use the enum_type_decl::operator==(const decl_base) 32880 that compares the entirety of the types. 32881 328822013-11-27 Dodji Seketeli <dodji@redhat.com> 32883 32884 Fix indentation and wording of some existing diff reports 32885 * src/abg-comparison.cc (class_diff::report): Fix report wording. 32886 Change indentation space from 4 white spaces to two. 32887 (scope_diff::report): Fix logic indentation generation. 32888 328892013-11-26 Dodji Seketeli <dodji@redhat.com> 32890 32891 Change enum_type_decl::enumerators from a list to a vector 32892 * include/abg-ir.h (enum_type_decl::enumerators): Change this from 32893 a list to a vector. 32894 * src/abg-hash.cc (enum_type_decl::hash::operator()): Use the 32895 typedef enum_type_decl::enumerators rather than std::list<blah>. 32896 * src/abg-ir.cc (enum_type_decl::get_enumerators): Use 32897 the enum_type_decl::enumerators typedef. 32898 (enum_type_decl::operator==): Likewise. 32899 * src/abg-reader.cc (build_enum_type_decl): Likewise. 32900 * src/abg-writer.cc (write_enum_type_decl): Likewise. 32901 329022013-11-25 Dodji Seketeli <dodji@redhat.com> 32903 32904 Fix thinko in qualified_type_diff::length 32905 * src/abg-comparison.cc (qualified_type_diff::length): Fix thinko. 32906 329072013-11-25 Dodji Seketeli <dodji@redhat.com> 32908 32909 Support diff between qualified types 32910 * include/abg-ir.h (qualified_type_def_sptr): Declare new typedef. 32911 (class qualified_type_def): Add comment at the end. 32912 (operator<<(std::ostream&, qualified_type_def::CV)): Declare new 32913 streaming operator. 32914 * src/abg-ir.cc (operator<<(std::ostream&, 32915 qualified_type_def::CV)): Define this new streaming operator. 32916 * include/abg-comparison.h (class qualified_type): Declare new 32917 class. 32918 (compute_diff): Declare new overload for qualified_type_def_sptr. 32919 * src/abg-comparison.cc (struct qualified_type_diff::priv): Define 32920 new type. 32921 (qualified_type_diff::{qualified_type_diff, first_qualified_type, 32922 second_qualified_type, underlying_type_diff, length}): 32923 Define new methods. 32924 (get_leaf_type): Define new static function. 32925 (compute_diff): Define overload for qualified_type_def_sptr. 32926 (compute_diff_for_types): Add support for 32927 diffing qualified_type_def here. 32928 329292013-11-25 Dodji Seketeli <dodji@redhat.com> 32930 32931 Cleanup header of changes of underlying types of pointers/references 32932 * src/abg-comparison.cc ({pointer_diff, reference_diff}::report): 32933 Unify header of changes in the referenced type. 32934 * src/abg-ir.cc (decl_base::get_pretty_representation): By 32935 default, do not prefix types with "type ", for consistency sake. 32936 329372013-11-25 Dodji Seketeli <dodji@redhat.com> 32938 32939 Ensure diff types can only be created by compute_diff 32940 * include/abg-comparison.h (diff::diff): Make constructor 32941 protected. 32942 (pointer_diff::pointer_diff): Likewise. 32943 (pointer_diff::{first_pointer, second_pointer}): Constify the 32944 return type. 32945 (compute_diff): Make this a friend of class pointer_diff. 32946 (reference_diff::reference_diff): Make this constructor protected. 32947 (compute_diff): Make this a friend of class reference_diff. 32948 (class_diff::class_diff): Make this constructor protected. 32949 (compute_diff): Make this a friend of class class_diff. 32950 (scope_diff::scope_diff): Make this constructor protected. 32951 (compute_diff): Make this a friend of class scope_diff. 32952 (function_decl_diff::function_decl_diff): Make this constructor 32953 protected. 32954 (type_decl_diff::type_decl_diff): Likewise. 32955 (typedef_diff::typedef_diff): Likewise. 32956 (translation_unit_diff::translation_unit_diff): Likewise. 32957 (compute_diff): Make this a friend of class translation_unit_diff. 32958 * src/abg-comparison.cc (pointer_diff::{first_pointer, 32959 second_pointer}): Constify return type. 32960 329612013-11-21 Dodji Seketeli <dodji@redhat.com> 32962 32963 Add size/alignment info to class diff report 32964 * src/abg-comparison.cc (represent): Move these static overloads 32965 to the beginning of the file. 32966 (report_size_and_alignment_changes): New function. It has been 32967 factorized out of ... 32968 (type_decl_diff::report): ... this. 32969 (class_diff::report): Use the new 32970 report_size_and_alignment_changes to report size/alignment info 32971 for classes. 32972 329732013-11-21 Dodji Seketeli <dodji@redhat.com> 32974 32975 Style fix 32976 * src/abg-comparison.cc (class_diff::report): Rename first_class 32977 into first and second_class into second. 32978 329792013-11-21 Dodji Seketeli <dodji@redhat.com> 32980 32981 Misc diff reporting nits 32982 * include/abg-ir.h (type_decl::get_pretty_representation): New 32983 overload. 32984 * abg-ir.cc (type_decl::get_pretty_representation): Implement it. 32985 * src/abg-comparison.cc (represent, class_diff::report): Quote the 32986 pretty representation of abi artifacts in the report. 32987 (type_decl_diff::report): Better wording to express type_decl 32988 change. 32989 329902013-11-20 Dodji Seketeli <dodji@redhat.com> 32991 32992 Support reporting changed data member in class 32993 * include/abg-ir.h (operator<<(std::ostream&, decl_base::binding)) 32994 (operator<<(std::ostream&, class_decl::access_specifier)): Declare 32995 new streaming operators. 32996 (class_decl::member_type::get_pretty_representation): New virtual 32997 overload. 32998 * src/abg-ir.cc (operator<<(std::ostream&, decl_base::binding)): 32999 (operator<<(std::ostream&, class_decl::access_specifier)): Define 33000 new streaming operators. 33001 (class_decl::member_type::get_pretty_representation): Define new method. 33002 * src/abg-comparison.cc (represent): Make the existing overloads 33003 end by a newline. Add a new overload that represents the changes 33004 that happened a given data member. 33005 (enum diff_kind): New. 33006 (report_mem_header): Renamed report_num_dels_or_ins into this. 33007 Make it support introducing changed members as well as 33008 deletions/insertions. 33009 (class_diff::report): Adjust for the report_num_dels_or_ins -> 33010 report_mem_header change. Use the new represent() overload to 33011 report about changed data members. Adjust logic now that 33012 represent() emits a newline at its end. Also adjust logic as far 33013 as representing base classes and member types changes is 33014 concerned. 33015 (type_decl_diff::report): Remove useless white space. 33016 330172013-11-20 Dodji Seketeli <dodji@redhat.com> 33018 33019 Ensure that *::report adds just one empty line to its content 33020 * include/abg-comparison.h (diff::report): Add a comment saying 33021 that each the diff::report interface must leave one empty line at 33022 the end of the report. 33023 * src/abg-comparison.cc ({pointer_diff, reference_diff, 33024 class_diff, scope_diff, function_decl_diff, type_decl_diff, 33025 typedef_diff}::report): Leave just one 33026 empty line after content. 33027 330282013-11-20 Dodji Seketeli <dodji@redhat.com> 33029 33030 Various doxygen doc additions and fixes 33031 * include/abg-comparison.h: Lots of doc string additions & fixes, 33032 especially for typedefs. 33033 * include/abg-ir.h: Likewise. 33034 * src/abg-comparison.cc: Likewise. 33035 * src/abg-ir.cc: Likewise. 33036 330372013-11-20 Dodji Seketeli <dodji@redhat.com> 33038 33039 Better support changed base classes and member types 33040 * include/abg-comparison.h (class_diff::{clear_lookup_tables, 33041 lookup_tables_empty, ensure_lookup_tables_populated}): Declare new 33042 methods. 33043 (compute_diff): Make this a friend of class_diff. 33044 * src/abg-comparison.cc (class_diff::priv::{deleted_bases_, 33045 inserted_bases_, changed_bases_, deleted_member_types_, 33046 inserted_member_types_, changed_member_types_, 33047 deleted_data_members_, inserted_data_members_, 33048 changed_data_members_, deleted_member_class_tmpls_, 33049 inserted_member_class_tmpls_, changed_member_class_tmpls_}): 33050 Define new members. 33051 (class_diff::priv::{base_has_changed, member_type_has_changed, 33052 data_member_has_changed}): Declare and define new methods. 33053 (class_diff::{clear_lookup_tables, lookup_tables_empty, 33054 ensure_lookup_tables_populated}): Define new methods. 33055 (class_diff::report): Detect and report when a base class or a 33056 member type has changed, as opposed to just saying that it has 33057 been removed and inserted. Fix the rest of the function to avoid 33058 emitting useless vertical space and avoid saying that the class 33059 has "zero" insertion/deletion of a given kind of member. 33060 (scope_diff::report): avoid saying that the scope has "zero" 33061 insertion/deletion of a given kind of member. Avoid useless 33062 vertical spaces. 33063 (type_decl_diff::report): Avoid useless vertical spaces. 33064 330652013-11-19 Dodji Seketeli <dodji@redhat.com> 33066 33067 Add bilint tool to validate bi files somewhat. 33068 * tools/bilint.cc: New file. 33069 * tools/Makefile.am: Build and install the new file above. 33070 330712013-11-19 Dodji Seketeli <dodji@redhat.com> 33072 33073 Add diff support for typedef_decl and type_decl 33074 * include/abg-ir.h (operator<<(std::ostream&, 33075 decl_base::visibility)): Declare new streaming operator. 33076 * src/abg-ir.cc (operator<<(std::ostream&, 33077 decl_base::visibility)): Define it. 33078 (type_decl::{operator==, get_pretty_representation}): Likewise, 33079 define these new overloads. 33080 (decl_base::{operator==, get_pretty_representation}): New overloads. 33081 * include/abg-comparison.h (type_decl_diff type_decl_diff_sptr, 33082 typedef_diff, typedef_diff_sptr): Declare new classes and 33083 typedefs. 33084 * src/abg-comparison.cc (type_decl_diff::{type_decl_diff, 33085 first_type_decl, second_type_decl, length, report}): New methods 33086 definitions. 33087 (compute_diff): New function definition that takes pointers of 33088 type_decl. 33089 (typedef_diff::{typedef_diff, first_typedef_decl, 33090 second_typedef_decl, underlying_type_diff, length, report}): New 33091 methods. 33092 (compute_diff): New function definition that takes pointers of 33093 typedef_decl. 33094 (try_to_diff_types): New template function, factorized out of ... 33095 (compute_diff_for_types): ... this. Add support diffing type_decl 33096 and typedef_decl. 33097 (pointer_diff::report): Fix indentation of emitted report. 33098 * tools/bidiff.cc (parse_command_line): Fix style. 33099 331002013-11-19 Dodji Seketeli <dodji@redhat.com> 33101 33102 Avoid missing member types while reading bi files 33103 * include/abg-fwd.h (get_type_declaration): Declare function. 33104 * include/abg-ir.h (class decl_base): Add class_decl as a friend. 33105 This to be able to call decl_base::set_scope from class_decl. 33106 (scope_decl::add_member_decl): Make this virtual protected, so 33107 that it can be called (virtually) from e.g, class_decl. 33108 (type_decl_sptr, typedef_decl_sptr): New convenience typedefs. 33109 (class_decl::add_member_decl): New virtual overload for 33110 scope_decl::add_member_decl. 33111 (class_decl::{add_member_type, add_data_member, 33112 add_member_function}): New overloads. 33113 * src/abg-ir.cc (add_decl_to_scope): Benign style cleanup. 33114 (get_type_declaration): Define new function. 33115 (class_decl::add_member_decl): New method. 33116 (class_decl::add_member_type): Avoid silently added a new member 33117 type when that member type has already been (perhaps 33118 inadvertently) added to a scope already. Rather, put a strict 33119 assert in place there. Also add a new overload that constructs 33120 the member type out of a classic type and adds it to the class. 33121 (class_decl::{add_data_member, add_member_function}): Likewise. 33122 (class_decl::{add_member_function_template, 33123 add_member_class_template}): Avoid silently added a new member 33124 template when that template has already been (perhaps 33125 inadvertently) added to a scope already. Rather, put a strict 33126 assert in place there. 33127 * src/abg-reader.cc (push_decl_to_current_scope): Take a an extra 33128 flag saying if the current decl should be added to the current 33129 scope as well (in addition to being pushed onto the stack of 33130 scopes maintained in the reader context). 33131 (push_and_key_type_decl): Likewise, take that extra flag and pass 33132 it to push_decl_to_current_scope. 33133 (build_function_decl, build_var_decl, build_type_decl) 33134 (build_qualified_type_decl, build_pointer_type_def) 33135 (build_reference_type_def, build_enum_type_decl, build_typedef_decl) 33136 (build_function_tdecl, build_class_tdecl): Likewise. 33137 (build_class_decl): Likewise. When building member data, types, 33138 and functions, make sure /not/ to add the data, type of function to 33139 the current scope before adding it to the class_decl. This was 33140 making the member not being added to the class because it already 33141 had a scope. 33142 (build_type_tparameter, build_type_composition) 33143 (build_non_type_tparameter, build_template_tparameter) 33144 (build_type): Adjust to add the template parm to the current scope 33145 explicitly, like previously. 33146 (handle_type_decl): Use build_type_decl function. Add the 33147 type_decl to the current scope, like previously. 33148 (handle_namespace_decl, handle_qualified_type_decl) 33149 (handle_pointer_type_def, handle_reference_type_def) 33150 (handle_enum_type_decl, handle_typedef_decl, handle_var_decl) 33151 (handle_function_decl, handle_class_decl, handle_function_tdecl) 33152 (handle_class_tdecl): Adjust to add the decl to the current scope, 33153 like previously. 33154 * tests/data/test-read-write/test21.xml: New test input with 33155 member type(def). 33156 331572013-10-24 Dodji Seketeli <dodji@redhat.com> 33158 33159 Avoid tabs and add const/virtual/offsets to class member diff reports 33160 * include/abg-ir.h (class_decl::get_num_virtual_functions): New 33161 declaration. 33162 * src/abg-ir.cc (class_decl::get_num_virtual_functions): New 33163 definition. 33164 (function_decl::get_pretty_representation): Represent 33165 destructors and const member functions. 33166 * src/abg-writer.cc (write_cdtor_const_static): Take a new bool 33167 parm for constness and serialize it. 33168 (write_class_decl): Serialize member functions & function template 33169 const-ness. 33170 * src/abg-reader.cc (read_cdtor_const): Read the "const" xml 33171 attribute, rather than "is_const". 33172 331732013-10-24 Dodji Seketeli <dodji@redhat.com> 33174 33175 Fix num insertions reporting in member functions 33176 * src/abg-comparison.cc (class_diff::report): Fix num insertions 33177 reporting. 33178 331792013-10-24 Dodji Seketeli <dodji@redhat.com> 33180 33181 Serialize vtable offset for virtual functions 33182 * include/abg-ir.h 33183 (class_decl::member_function::get_vtable_offset): Renamed 33184 class_decl::member_function::get_vtable_offset_in_bits into this. 33185 The offset is an index into a table; it's not a value in bits. 33186 * src/abg-hash.cc (class_decl::member_function::hash): Update wrt 33187 function name change above. 33188 * src/abg-ir.cc (class_decl::member_function::operator==): 33189 Likewise. 33190 * src/abg-reader.cc (build_class_decl): Rename the attribute 33191 vtable-offset-in-bits into vtable-offset. 33192 * src/abg-writer.cc (write_voffset): New function. 33193 (write_class_decl): Use the new write_voffset. Cleanup. 33194 331952013-10-24 Dodji Seketeli <dodji@redhat.com> 33196 33197 White space and style fixes 33198 * include/abg-ir.h (class_decl::member_function::member_function): 33199 Align function parameters. 33200 * src/abg-ir.cc (type_decl::operator==): Remove useless white spaces 33201 332022013-10-24 Dodji Seketeli <dodji@redhat.com> 33203 33204 Do not report added/removed type_decls 33205 * src/abg-comparison.cc (scope_diff::report): Do not report 33206 added/removed type_decls. 33207 332082013-10-24 Dodji Seketeli <dodji@redhat.com> 33209 33210 Fix string representation for variables and methods 33211 * src/abg-ir.cc (var_decl::get_pretty_representation): Don't use 33212 the pretty representation for the type of the variable; just use 33213 its qualified name. 33214 (method_type::set_class_type): I wonder what I was thinking when 33215 setting the first parameter's type to being the type of the 33216 class. Remove this. 33217 (function_decl::get_pretty_representation): Use the "method " 33218 prefix for methods. Avoid printing the first parameter of 33219 methods. Use the qualified name of the parameter type, rather 33220 than its pretty representation. 33221 * src/abg-writer.cc (write_class_decl): Do not skip the first 33222 function parameter when serializing the method. 33223 332242013-10-24 Dodji Seketeli <dodji@redhat.com> 33225 33226 Support reporting removed types/decls 33227 * include/abg-comparison.h (scope_diff::{removed_types, 33228 removed_decls, added_types, added_decls}): New accessor methods 33229 declarations. 33230 * src/abg-comparison.cc (scope_diff::{removed_types, 33231 removed_decls, added_types, added_decls}): New accessor methods 33232 definitions. 33233 (scope_diff::report): Report removed & added types/decls. 33234 332352013-10-24 Dodji Seketeli <dodji@redhat.com> 33236 33237 Fix erratic reporting of changed types & decls in scopes 33238 * src/abg-comparison.cc 33239 (scope_diff::ensure_lookup_tables_populated): A changed type/decl 33240 is not only one that has been both deleted and inserted (as is a 33241 type/decl with a given name N has been deleted and a type/decl 33242 with that same name N has been inserted), but we must also ensure 33243 that both inserted and deleted type/decl are not the same. 33244 Otherwise, it might has been a type/decl that has been shuffled 33245 around. 33246 332472013-10-24 Dodji Seketeli <dodji@redhat.com> 33248 33249 Fix some class & scope diff reports formatting glitchs 33250 * src/abg-comparison.cc (class_diff::report): Quote data members. 33251 (scope_diff::report): Simplify how we report changed types. Avoid 33252 unnecessary vertical spaces. 33253 332542013-10-24 Dodji Seketeli <dodji@redhat.com> 33255 33256 Pretty representation for variables and types by default 33257 * include/abg-ir.h (var_decl::get_pretty_representation): New 33258 method declaration. 33259 * src/abg-ir.cc (decl_base::get_pretty_representation): Prefix 33260 types with the "type " string. 33261 (var_decl::get_pretty_representation): New method definition. 33262 332632013-10-24 Dodji Seketeli <dodji@redhat.com> 33264 33265 Re-write middle snakes management in core diff algorithms 33266 * include/abg-diff-utils.h (point::set): New overload.. 33267 (point::{add, operator<, operator>, operator<=, operator>=}): New 33268 methods. 33269 (point::operator!=): Constify. 33270 (point::operator==): Constify. Cleanup. 33271 (point::operator=): Keep emptiness. 33272 (class snake): New class definition 33273 (d_path_vec::{over_bounds, offset}): New methods. 33274 (d_path_vec::check_index_against_bound): Don't take a bound 33275 parameter anymore. Use the new over_bound method above. Fix up 33276 error reporting. 33277 (d_path_vec::d_path_vec): Fix d_path_vec size allocation. 33278 (d_path_vec::operator[]): Use the d_path_vec::at method to check 33279 all accesses against the bounds. This is slower, but at least we 33280 can expect to have something that is more robust. We can remove 33281 the bound checking later when we are sure the code has been tested 33282 enough. Also use the new offset() method. 33283 (d_path_vec::at): Take long long. 33284 (ends_of_furthest_d_paths_overlap): Constify input parameters. 33285 (end_of_fr_d_path_in_k, end_of_frr_d_path_in_k_plus_delta): Take 33286 an instance of the new snake in parameter, rather than a bare end 33287 point that wasn't carrying enough information about the snake. 33288 Record the snake which consists of up to four points: a begin 33289 point, an intermediate point, a diagonal start point and an end 33290 point. Return that snake upon successful completion. 33291 (compute_middle_snake): Take an instance of snake, rather than the 33292 two points that were supposed to represent a snake and with which 33293 we were loosing information before. Revisit/simplify the logic of 33294 this function; this literally goes forward or in reverse, gets the 33295 resulting snake returned by the end_of_fr_d_path_in_k and 33296 end_of_frr_d_path_in_k_plus_delta functions, detect if these snakes 33297 overlap and just return the current snake. Much simpler. The 33298 caller now gets a snake, which has much more information than the 33299 previous snake approximation made of just two points. Bonus 33300 point, this follows almost to the word, what the paper says. 33301 (maybe_record_match_point, find_snake_start_point): Remove these 33302 as there are not used by compute_middle_snake anymore. 33303 (print_snake, ses_len): Update these to take/handle a snake. 33304 (snake_end_points): New declaration. 33305 (compute_diff): When we are getting an empty first sequence, this 33306 means that we are inserting the second sequence *before* the 33307 beginning of the first sequence; keep this information by setting 33308 the insertion point index to -1, rather than zero. Update this to 33309 get/handle snakes, rather than free points vaguely representing 33310 snakes. Now that compute_middle_snake returns real snakes, handle 33311 the information we are getting. Basically for edit scripts of 33312 length equal to 1, as the snake carries all the necessary 33313 information about the non-diagonal edge (as well as the diagonal 33314 edges), we (can) now precisely update the current edit script (as 33315 well as the longest common sub-sequence). For edit scripts of 33316 length greater than 1, better at which points to divide the 33317 problem and consequently, at which points to conquer it back -- 33318 better following The Paper to the letter. 33319 (display_edit_script): Update this for the use of instances of 33320 snake. 33321 * src/abg-diff-utils.cc (ends_of_furthest_d_paths_overlap): Update 33322 for constification of inputs. 33323 (snake_end_points): Define new function. 33324 (compute_middle_snake): Adapt for the taking an instance of snake. 33325 * tests/test-diff2.cc (main): Update for using instances of snake. 33326 * tests/test-core-diff.cc: Add new tests. 33327 * tests/data/test-core-diff/report0.txt: Update for output 33328 adaptation. 33329 * tests/data/test-core-diff/report6.txt: Likewise. 33330 * tests/data/test-core-diff/report7.txt: Likewise. 33331 * tests/data/test-core-diff/report8.txt: New test data. 33332 * tests/data/test-core-diff/report9.txt: Likewise. 33333 * tests/data/test-core-diff/report10.txt: Likewise. 33334 * tests/data/test-core-diff/report11.txt: Likewise. 33335 * tests/data/test-core-diff/report12.txt: Likewise. 33336 * tests/data/test-core-diff/report3.txt: Likewise. 33337 333382013-10-19 Dodji Seketeli <dodji@redhat.com> 33339 33340 Support diff/reporting for functions & better diff/report in general 33341 * include/abg-ir.h ({decl_base, class_decl, 33342 function_decl}::get_pretty_representation): New virtual member to 33343 get a pretty string name for decls & types. 33344 (class_decl::parameter): Add an index to the parameter type. 33345 (class_decl::parameter::parameter): Update the constructor for the 33346 change above. 33347 (class_decl::parameter::{get_index, set_index}): Accessors for the 33348 new index. 33349 (class_decl::parameter::operator==): Take in account the index. 33350 (function_type::append_parameter): Set the index of the parameter 33351 here. 33352 * include/abg-fwd.h (get_type_name): New declaration. 33353 * src/abg-ir.cc (get_type_name): New definition. 33354 ({decl_base, function_decl, 33355 class_decl}::get_pretty_representation): New implementations. 33356 (method_type::set_class_type): Update this to set function 33357 parameter's index by default. 33358 (function_decl::append_parameters): Use the append_parameter 33359 method from function_type. 33360 * include/abg-comparison.h (class function_decl_diff): New type 33361 declaration. 33362 * src/abg-comparison.cc (compute_diff_for_decls, compute_diff): 33363 New definitions. 33364 ({pointer_diff, class_diff, scope_diff}::report): Use the new 33365 get_pretty_representation. Output a prettier report. 33366 (function_decl_diff::priv): New type. 33367 (function_decl_diff::{deleted_parameter_at, inserted_parameter_at, 33368 ensure_lookup_tables_populated, function_decl_diff, 33369 first_function_decl, second_function_decl, changed_parms, 33370 removed_parms, added_parms, length, report}): New member function 33371 definitions. 33372 * src/abg-hash.cc (function_decl::parameter::hash): Update this to 33373 take the index in account. 33374 333752013-10-19 Dodji Seketeli <dodji@redhat.com> 33376 33377 Misc style & white space fixes 33378 * include/abg-fwd.h (is_global_scope, is_at_global_scope) 33379 (is_at_class_scope, is_at_template_scope, is_template_parameter) 33380 (is_type, is_var_decl, is_template_parm_composition_type) 33381 (is_template_decl, is_function_template_pattern) 33382 (add_decl_to_scope, get_global_scope, get_translation_unit): 33383 Remove parameter names from declarations. 33384 * include/abg-ir.h (decl_base::set_location): Remove useless white 33385 space. 33386 (struct type_shared_ptr_equal): Fix comment filling. 33387 333882013-10-16 Dodji Seketeli <dodji@redhat.com> 33389 33390 Avoid useless hashing during serialization 33391 * src/abg-writer.cc (write_context::get_id_for_type): Avoid the 33392 useless hashing incurred by the [] operator on the map, when we 33393 already have the value we want. 33394 333952013-10-16 Dodji Seketeli <dodji@redhat.com> 33396 33397 Add more IR nodes dumping routines 33398 * include/abg-fwd.h (dump): Declare 4 overloads for the dumping 33399 routines. 33400 * include/abg-ir.h (var_decl_sptr): New typedef. 33401 * src/abg-writer.cc (dump(const decl_base_sptr)): Add comments. 33402 (dump(const type_base_sptr)): New dumping routines. 33403 (dump(const var_decl_sptr)): Likewise. 33404 334052013-10-16 Dodji Seketeli <dodji@redhat.com> 33406 33407 Fix IR node comparison bugs 33408 * include/abg-ir.h (type_shared_ptr_equal::operator()): Fix thinko 33409 in checking for the boolean value of the pointers to types. 33410 * src/abg-ir.cc (type_decl::operator==(const decl_base&)): Do not 33411 forget to compare the decl_base part of the type too. 33412 (type_decl::operator==(const type_base&)): To ease maintenance, 33413 re-use the equality operator that takes a decl_base. 33414 (scope_type_decl::operator==(const type_base&)): Likewise. 33415 (qualified_type_def::operator==(const type_base&)): Likewise. 33416 (compare_function_types): New sub-routine to compare function 33417 types. It fixes an infinite recursion when comparing two methods 33418 of the same class. 33419 (function_type::operator==(const type_base&)): Use the new 33420 compare_function_types function. 33421 (class_decl::operator==(const decl_base&)): Fix a thinko in the 33422 first test of the function. Use a dedicated scope for each class 33423 section comparison; that way, there won't be any chance to misuse 33424 the variables pertaining to a different section. Fix the member 33425 function sections; we were mistakenly using the variables for the 33426 *data* section there. 33427 (class_decl::operator==(const type_base&)): Re-use the operator 33428 that takes a decl_base. 33429 (class_decl::operator==(const class_decl&)): Don't remove 33430 const-ness during the static cast. 33431 (class_decl::member_function::operator==(const member_function&)): 33432 Do not remove the reference from the static cast. 33433 (class_decl::member_class_template::operator==(const 33434 member_base&)): Likewise. 33435 (type_tparameter::operator==(const template_parameter&)): 33436 Likewise. 33437 (template_tparameter::operator==(const template_parameter&)): 33438 Likewise. 33439 (function_tdecl::operator==(const template_decl&)): Likewise. 33440 (class_tdecl::operator==(const template_decl&)): Likewise. 33441 (class_tdecl::operator==(const class_tdecl&)): Likewise. 33442 * tests/data/test-read-write/test12.xml: Update this because the 33443 test now correctly considers two type template parameters at the 33444 same index as being equivalent. 33445 * tests/data/test-read-write/test13.xml: Likewise. 33446 334472013-10-16 Dodji Seketeli <dodji@redhat.com> 33448 33449 On going white space cleanups 33450 * include/abg-ir.h: Remove useless white spaces. 33451 * src/abg-ir.cc: Likewise. 33452 * src/abg-reader.cc: Likewise. 33453 * src/abg-writer.cc: Likewise. 33454 334552013-10-15 Dodji Seketeli <dodji@redhat.com> 33456 33457 Finish reporting about class_diff 33458 * src/abg-comparison.cc (report_num_dels_or_ins): Factorize out 33459 the header of each of inserted/deleted parts of the class into 33460 this new function. 33461 (class_diff::report): Use the new report_num_dels_or_ins. Cleanup 33462 the code. Add support for reporting about member functions, 33463 member function templates and member class templates. 33464 334652013-10-15 Dodji Seketeli <dodji@redhat.com> 33466 33467 White space cleanup in abg-ir.h 33468 * include/abg-ir.h 33469 (class_decl::member_function_template::member_function_template): 33470 Remove useless white space. 33471 334722013-10-15 Dodji Seketeli <dodji@redhat.com> 33473 33474 Progress on diffing pointers, references and classes 33475 * include/abg-comparison.h (diff::{first_subject,second_subject): Changed 33476 first_scope/second_scope into these; so that this diff class now works on 33477 stuff that are not scope. Changed the type of these to 33478 decl_base_sptr 33479 (diff::diff): Update for the change above. 33480 (diff::{length, report}): New virtual pure methods. 33481 (class pointer_diff, reference_diff): New classes declarations. 33482 (compute_diff): New overloads for the new classes above. Make the 33483 existing overloads take shared_pointers instead of references. 33484 Also make them return shared pointers of the computed diff, rather 33485 than just populating diff references passed in parameter. 33486 (class class_diff): Renamed class class_decl_diff into this. 33487 (report_changes): Change these functions into member functions. 33488 * src/abg-comparison.cc (compute_diff_for_types): New static 33489 function. 33490 (pointer_diff::pointer_diff, pointer_diff::first_pointer) 33491 (pointer_diff::second_pointer, pointer_diff::length) 33492 (pointer_diff::underlying_type_diff) 33493 (pointer_diff::underlying_type_diff, pointer_diff::report) 33494 (pointer_diff::report, compute_diff) 33495 (reference_diff::reference_diff, reference_diff::first_reference) 33496 (reference_diff::second_reference) 33497 (reference_diff::underlying_type_diff) 33498 (reference_diff::underlying_type_diff, reference_diff::length) 33499 (reference_diff::report, compute_diff): New functions. 33500 (class_diff::class_diff, class_diff::length) 33501 (class_diff::first_class_decl, class_diff::second_class_decl) 33502 (class_diff::base_changes, class_diff::base_changes) 33503 (class_diff::member_types_changes) 33504 (class_diff::member_types_changes) 33505 (class_diff::data_members_changes) 33506 (class_diff::data_members_changes, class_diff::member_fns_changes) 33507 (class_diff::member_fns_changes) 33508 (class_diff::member_fn_tmpls_changes) 33509 (class_diff::member_class_tmpls_changes) 33510 Update wrt class_decl_diff -> class_diff renaming. 33511 (class_diff::report): Make the report function be a member 33512 function. Add an indentation parameter. Add support for member 33513 types and data members. 33514 (compute_diff): New overload for class_decl_sptr. 33515 (scope_diff::first_scope, scope_diff::second_scope) 33516 (scope_diff::length, scope_diff::report): New member functions. 33517 (scope_diff::{deleted_member_at, inserted_member_at}): Update wrt 33518 first_scope -> first_subject change. 33519 (compute_diff): New overload for scope_decl_sptr. 33520 (translation_unit_diff::report): Change the report function into 33521 this member function. 33522 (compute_diff): Change the overload for translation_unit to take a 33523 translation_unit_sptr rather than a reference. 33524 * tools/bidiff.cc (main): Update this wrt the change of the 33525 signature of compute_diff. 33526 335272013-10-15 Dodji Seketeli <dodji@redhat.com> 33528 33529 Fix construction of class_decl::member_type 33530 * include/abg-ir.h (class_decl::member_type::member_type): Remove 33531 inline body from here. 33532 * src/abg-ir.cc (class_decl::member_type::member_type): Move 33533 implementation here. Also, properly set the name of the the 33534 member_type at construction time. 33535 335362013-10-15 Dodji Seketeli <dodji@redhat.com> 33537 33538 Few typedef additions to abg-ir.h 33539 * include/abg-ir.h (pointer_type_def_sptr) 33540 (reference_type_def_sptr): New typedefs. 33541 335422013-10-11 Dodji Seketeli <dodji@redhat.com> 33543 33544 Add debugging routines for decl_base_sptr and translation_unit 33545 * src/abg-writer.cc (dump): Add two version of this; on for 33546 decl_base_sptr, one for translation_unit&. 33547 335482013-10-11 Dodji Seketeli <dodji@redhat.com> 33549 33550 Initial implementation of tu diffing & bidiff cmd line program 33551 * include/abg-comparison.h (class translation_unit_diff): New type. 33552 (compute_diff): Make this take class_decl&, rather than 33553 class_decl_sptr. Add new overloads for scope_decl& and 33554 translation_unit&. 33555 (report_changes): New overload for scope_diff& and 33556 translation_unit&. 33557 * src/abg-comparison.cc (struct class_decl_diff::priv): New type. 33558 (class class_decl_diff): Add comments to methods. 33559 (class translation_unit_diff): Implement methods. 33560 (compute_diff, report_changes): Implement the new overloads. 33561 (scope_diff::ensure_lookup_tables_populated): Fix a thinko here. 33562 * src/abg-ir.cc (is_var_decl): Add new predicate. 33563 * tools/abg-tools-utils.h (file_exists, is_regular_file) 33564 (check_file): Declare new functions. 33565 * tools/abg-tools-utils.cc (get_stat, file_exists, check_file) 33566 (is_regular_file): Define new functions. 33567 (is_dir): Use the new get_stat. 33568 * tools/bidiff.cc: New file. 33569 * tools/Makefile.am: Add tools/bidiff.cc to the build system; make it 33570 produce the bidiff tool. 33571 335722013-10-10 Dodji Seketeli <dodji@redhat.com> 33573 33574 Fix inheritance of operator== on decl_base and type_base 33575 * include/abg-ir.h (*lots of descendants of decl_base, type_decl) 33576 (template_decl, class_decl::member_base): Replace the previous classical 33577 *::operator==(*&) with an overload of decl_base::operator==(const 33578 decl_base&), type_base::operator==(const type_base), 33579 template_decl::operator==(const template_decl&) or 33580 class_decl::member_base::operator==(const 33581 class_decl::member_base&). This makes the descendant operator be 33582 the one called when a comparison involves references the parent 33583 class. 33584 * src/abg-ir.cc: Write the implementation of the above. Remove 33585 the useless static_casts from the previous operator== code. 33586 335872013-10-10 Dodji Seketeli <dodji@redhat.com> 33588 33589 On going misc white spaces and style fixes 33590 * include/abg-ir.h: Add author. Remove many useless white 33591 spaces. Add missing end-of-class comments. Move function 33592 declaration comments from here to their definition point. 33593 * include/abg-fwd.h: Remove useless indentation. Also move 33594 doxygen comments to *definition* points in src/abg-ir.cc. 33595 * src/abg-ir.cc: Remove many useless white spaces. Move comments 33596 from declaration points to here. 33597 335982013-10-06 Dodji Seketeli <dodji@redhat.com> 33599 33600 Fix middle snake determination & ses len computation for d == 1 33601 * include/abg-diff-utils.h (compute_middle_snake): After the 33602 overlap determination happened, finding the middle snake can 33603 require keep on building the current path until the "end". The 33604 end meaning reaching the max of D. And that max is (M + N)/2 + 1. 33605 In the extreme cases were middle snake was on the very last step 33606 (M + N) + 1, we were not finding the middle snake. Fix this. 33607 (compute_diff): When d == 1 and the first edge on the edit graph 33608 is a non-diagonal edge and when a_base != a_begin, we were failing 33609 to properly initialize x,y to find that non-diagonal edge. Also 33610 we were failing to correctly compute the size of the sequence. 33611 Fix these. 33612 * tests/test-core-diff.cc: Add a new regression test for the two 33613 cases above. 33614 * tests/data/test-core-diff/report7.txt: New reference data for 33615 the new regression test. 33616 336172013-10-05 Dodji Seketeli <dodji@redhat.com> 33618 33619 Initial un-debugged implementation of scope diffing 33620 * include/abg-comparison.h (class scope_diff): New type. 33621 (compute_diff(scope_decl_sptr, scope_decl_sptr, scope_diff)): New 33622 declaration. 33623 (report_changes): New declaration. 33624 * src/abg-comparison.cc (struct scope_diff::priv): Define. 33625 (scope_diff::{clear_lookup_tables, lookup_tables_empty, 33626 ensure_lookup_tables_populated, scope_diff, member_changes, 33627 deleted_member_at, inserted_member_at, changed_types, 33628 changed_decls}): Define these new member functions. 33629 (compute_diff): Define. 33630 * include/abg-ir.h (decl_base_sptr): New typedef. 33631 (operator==(decl_base_sptr, decl_base_sptr)): Declare new 33632 operator. 33633 * src/abg-ir.cc (operator==(decl_base_sptr, decl_base_sptr)): 33634 Define. 33635 (scope_decl::{operator==, traverse}): Adjust for using vectors to 33636 store scope members now, rather than lists. 33637 (scope_decl::{declarations, scopes}): Make these types be vector. 33638 This makes the members of a scopes be vector, rather than lists. 33639 This enables them to be diffed. 33640 336412013-10-05 Dodji Seketeli <dodji@redhat.com> 33642 33643 Simplify & cleanup compute_diff core api 33644 * include/abg-diff-utils.h (insertion::inserted_): Changed the 33645 type of this from vector<int> to vector<unsigned>. 33646 (insertion::{insertion, inserted_indexes}): Adjust. 33647 (compute_diff): Add two new simpler overloads. Implement them in 33648 term of the former more complex overload. 33649 (compute_lcs): Adjust for the vector<int> -> vector<unsigned> 33650 change. 33651 * src/abg-diff-utils.cc (compute_lcs, compute_ses): Adjust for the 33652 compute_diff change above. 33653 * src/abg-comparison.cc (compute_diff, report_changes): Adjust for 33654 the compute_diff & vector<unsigned> changes above.. 33655 336562013-10-05 Dodji Seketeli <dodji@redhat.com> 33657 33658 Misc white space, style and comments cleanup 33659 * include/abg-ir.h (class scope_decl): Add end of class comment. 33660 (class type_base): Add a _sptr typedef and end of class comment. 33661 * src/abg-ir.cc (operator==(class_decl_sptr, class_decl_sptr)): 33662 Fix comment. 33663 336642013-10-04 Dodji Seketeli <dodji@redhat.com> 33665 33666 Un-debugged initial implementation of class diffing. 33667 * include/abg-ir.h (decl_base::get_qualified_name): New 33668 declaration. 33669 (class_decl::{base_specs, member_types, data_members, 33670 member_functions, member_function_templates, 33671 member_class_templates}): Make all these containers be vectors, 33672 rather than list. This makes these containers (like 33673 class_decl::base_specs, class_decl::member_types, etc) be suitable 33674 to be used by the core diffing algorithms to diff their content. 33675 (operator==(class_decl_sptr, class_decl_sptr)) 33676 (operator==(class_decl::member_type_sptr, class_decl::member_type_sptr)) 33677 (operator==(class_decl::base_spec_sptr, 33678 class_decl::base_spec_sptr)) 33679 (operator==(class_decl::data_member_sptr, 33680 class_decl::data_member_sptr)) 33681 (operator==(class_decl::member_function_sptr, 33682 class_decl::member_function_sptr)) 33683 (operator==(class_decl::member_function_template_sptr, 33684 class_decl::member_function_template_sptr)) 33685 (operator==(class_decl::member_class_template_sptr, 33686 class_decl::member_class_template_sptr)): Declare 33687 these new equality operators. These are to be used by the core 33688 diffing algorithms when comparing two vectors of shared pointers 33689 of members of class_decls. 33690 * src/abg-ir.cc (decl_base::get_qualified_name): Define. 33691 (class_decl::class_decl, class_decl::operator==(class_decl&)): Adjust for the 33692 containers type change to a vector. 33693 (operator==(class_decl_sptr, class_decl_sptr)) 33694 (operator==(class_decl::member_type_sptr, class_decl::member_type_sptr)) 33695 (operator==(class_decl::base_spec_sptr, 33696 class_decl::base_spec_sptr)) 33697 (operator==(class_decl::data_member_sptr, 33698 class_decl::data_member_sptr)) 33699 (operator==(class_decl::member_function_sptr, 33700 class_decl::member_function_sptr)) 33701 (operator==(class_decl::member_function_template_sptr, 33702 class_decl::member_function_template_sptr)) 33703 (operator==(class_decl::member_class_template_sptr, 33704 class_decl::member_class_template_sptr)): Define 33705 these. 33706 * include/abg-comparison.h (diff::scope_): Remove 33707 (diff::{first_scope_, second_scope_}): New members. 33708 (class_decl_diff::class_decl_diff): Pass the new scopes to this 33709 constructor. 33710 (class_decl_diff::{first_class_decl, second_class_decl}) 33711 (report_changes): New declarations. 33712 * src/abg-comparison.cc (class_decl_diff::class_decl_diff): Update 33713 as per the declaration. 33714 (class_decl_diff::{first_class_decl, second_class_decl}): Define 33715 as per the declaration. 33716 (compute_diff): Initial implementation for this. 33717 (report_changes): Define. 33718 337192013-10-04 Dodji Seketeli <dodji@redhat.com> 33720 33721 Change the diff::changes_type back to just edit_script 33722 * include/abg-comparison.h (diff::changes_type): 33723 Remove this typedef. 33724 (class_decl_diff::data_members_changes): Rename 33725 class_decl_diff::data_member_changes into this. 33726 (class_decl_diff::member_fn_tmpls_changes): Renamed 33727 class_decl_diff::member_fn_tmpl_changes into this. 33728 (class_decl_diff::member_class_tmpls_changes): Renamed 33729 class_decl_diff::member_class_tmpl_changes into this. 33730 (class_decl_diff::{base_changes, member_types_changes, 33731 data_members_changes, member_fns_changes, member_fn_tmpls_changes, 33732 member_fn_tmpls_changes, member_class_tmpls_changes}): Adjust 33733 these declarations for the use of edit_script. 33734 * src/abg-comparison.cc (class_decl_diff::priv::*): Likewise. 33735 (class_decl_diff::{base_changes, member_types_changes, 33736 data_members_changes, member_fns_changes, member_fn_tmpls_changes, 33737 member_fn_tmpls_changes, member_class_tmpls_changes}): Adjust 33738 these definitions for the above. 33739 337402013-10-04 Dodji Seketeli <dodji@redhat.com> 33741 33742 Misc white space, style and comment fixes 33743 * include/abg-ir.h: Lots of useless white space removals and 33744 comments adding. 33745 (class class_decl::member_base): Fix comment. 33746 * src/abg-hash.cc: Lots of useless white space removals too. 33747 * src/abg-ir.cc: Remove useless white space too. 33748 337492013-10-04 Dodji Seketeli <dodji@redhat.com> 33750 33751 Fix middle snake determination 33752 * include/abg-diff-utils.h (point::{operator!=,operator==}): New 33753 operators. 33754 (end_of_fr_d_path_in_k, end_of_frr_d_path_in_k_plus_delta): Allow 33755 the initial point (-1,-1) that is not a point addressing elements 33756 of the input sequences, but that is the starting point of the 33757 forward paths and the ending point of reverse paths in the "Linear 33758 Refinement" of the algorithm. 33759 (is_match_point, maybe_record_match_point) 33760 (find_snake_start_point): New functions. 33761 (find_last_snake_in_path): Remove this. It's not used anymore. 33762 (compute_middle_snake): Allow checking for overlapping paths even 33763 on points that are outside of the edit graph boundaries. Once the 33764 overlap is detected, if a non-empty snake has been seen already, 33765 report it as the middle snake. Otherwise, keep building the path 33766 until the end and report the last snake encountered as the middle 33767 snake. Add comments. 33768 (compute_diff): For the d == 1 case, fix the logic of the finding 33769 the non-diagonal edge. Fix typos. Add comments. 33770 (display_edit_script): Fix report glitches. 33771 * tests/data/test-core-diff/report3.txt: Update as per the report 33772 glitch above. 33773 * tests/data/test-core-diff/report4.txt: Likewise. 33774 * tests/data/test-core-diff/report5.txt: Likewise. 33775 * tests/data/test-core-diff/report6.txt: New reference report for 33776 a new test. 33777 * tests/test-core-diff.cc: Add a new test for negative delta. 33778 337792013-10-03 Dodji Seketeli <dodji@redhat.com> 33780 33781 Initial regression test facility for core diff algorithms 33782 * tests/data/test-core-diff/report0.txt: New test reference data. 33783 * tests/data/test-core-diff/report1.txt: Likewise. 33784 * tests/data/test-core-diff/report2.txt: Likewise. 33785 * tests/data/test-core-diff/report3.txt: Likewise. 33786 * tests/data/test-core-diff/report4.txt: Likewise. 33787 * tests/data/test-core-diff/report5.txt: Likewise. 33788 * tests/test-core-diff.cc: New regression test program. 33789 * tests/Makefile.am: Add these new files to the build system. 33790 337912013-10-02 Dodji Seketeli <dodji@redhat.com> 33792 33793 Initial command line testing facility for core diff algorithms 33794 * tests/test-diff2.cc: New command line testing facility. 33795 * tests/Makefile.am: Add this to the build system. 33796 337972013-10-02 Dodji Seketeli <dodji@redhat.com> 33798 33799 Fix core diff algorithms for negative deltas 33800 * diff2.h (point::point): New copy constructor. 33801 (point::{operator+=, operator=}): Use point::set. 33802 (point::{operator--, operator++,}): New operators. 33803 (d_path_vec::{a_size_, b_size_}): New members. 33804 (d_path_vec::max_d_): Remove this member. 33805 (d_path_vec::max_d): Compute this, now that max_d_ was removed. 33806 (point_is_valid_in_graph): Declare this new function. 33807 (end_of_fr_d_path_in_k, ): Return 33808 a bool when the end of furthest reaching past found is within the 33809 bounds of the edit graph. Add comments. 33810 (end_of_frr_d_path_in_k_plus_delta): Likewise. Also, delta can be 33811 negative; support that. Do not cross the boundaries of the edit 33812 graph when following a diagonal edge. 33813 (find_last_snake_in_path): New function. 33814 (compute_middle_snake): Make forward/reverse d_path_vec be big 33815 enough to hold paths for M+N differences. Normally M+N/2 should 33816 be enough, but we were getting weird out of bound errors. Let's 33817 handle it this way for now. Do not require that we check for 33818 overlap only when we are on a diagonal edge. Once we detected an 33819 overlap, use the new find_last_snake_in_path to find the 33820 boundaries of the snake. 33821 (ses_len): Delta can be negative. 33822 (display_edit): Small minor English nit. 33823 338242013-09-28 Dodji Seketeli <dodji@redhat.com> 33825 33826 Lay down the foundations of computing the diff between two class_decl 33827 * include/abg-diff-utils.h: New file. 33828 * src/abg-diff-utils.cc: Likewise. Implement the code diffing 33829 algorithms from Eugene Myers. 33830 * include/abg-comparison.h: New file. First short at defining the 33831 basic APIs to compute the diff of two classes. 33832 * src/abg-comparison.cc: New file. Start the implementation of 33833 the above header. 33834 338352013-09-26 Dodji Seketeli <dodji@redhat.com> 33836 33837 Prepare node visitors to be usable on things other than IR nodes 33838 * include/abg-fwd.h (node_visitor_base): Renamed ir_node_visitor 33839 into this. 33840 * include/abg-traverse.h (struct node_visitor_base): New base for 33841 the visitors. 33842 (struct traversable_base): Update comments. 33843 (traversable_base::traverse): Change this into non-pure virtual. 33844 Make it take a reference to node_visitor_base, rather than a 33845 reference to ir_node_visitor. 33846 * src/abg-traverse.cc (traversable_base::traverse): New empty 33847 default implementation. 33848 * include/abg-ir.h: Make ir_node_visitor inherit from new 33849 node_visitor_base. 33850 338512013-09-26 Dodji Seketeli <dodji@redhat.com> 33852 33853 Renamed data members from m_something to something_ 33854 * src/abg-ir.{cc,h}: Renamed data members from m_something to 33855 something_ and update their usage. 33856 338572013-08-29 Dodji Seketeli <dodji@redhat.com> 33858 33859 Initial version of an archive manipulation program: biar 33860 * tests/test-utils.h (is_dir, ensure_dir_path_created) 33861 (ensure_parent_dir_created): Move these directories manipulation 33862 utilities from here to ... 33863 * tools/abg-tools-utils.h (is_dir, ensure_dir_path_created) 33864 (ensure_parent_dir_created): ... here in this new file. 33865 (dir_name, base_name): Declare these new functions. 33866 * tests/test-utils.cc (is_dir, ensure_dir_path_created) 33867 (ensure_parent_dir_created): Likewise, move these to ... 33868 * tools/abg-tools-utils.cc (is_dir, ensure_dir_path_created) 33869 (ensure_parent_dir_created): ... here in this new file. 33870 (dir_name, base_name): Define these. 33871 * tools/Makefile.am: New file. Create a new libtoolsutils.la 33872 static library with stuff from tools/abg-tools-utils.cc in it. 33873 Also create a new 'biar' program with the stuff from the new 33874 tools/biar.cc in it. 33875 * tools/biar.cc: New file. Contains the code for the new "biar" 33876 archive manipulation command line utility. 33877 * tests/test-read-write.cc (main): Adjust for the change about 33878 ensure_parent_dir_created above. 33879 * tests/test-write-read-archive.cc (main): Likewise. 33880 * Makefile.am (SUBDIRS): Add the new tools/ sub-directory to the 33881 build system. 33882 * configure.ac (AC_CONFIG_FILES): Generate tools/Makefile. 33883 * tests/Makefile.am: Make libtestutils.la link with the new 33884 libtoolsutils.la. Make sure to express the dependencies between 33885 libtestutils.la and the binaries that depend on it. Otherwise 33886 parallel builds can go awry. 33887 338882013-08-29 Dodji Seketeli <dodji@redhat.com> 33889 33890 Define translation_unit{_sptr,s} types in abigail:: 33891 * include/abg-corpus.h (abigail::corpus::{translation_unit_sptr, 33892 translation_units): Do not define these typedefs here. Rather) 33893 (define them ... 33894 * include/abg-ir.h 33895 (abigail::{translation_units,translation_unit_sptr): ... here. 33896 This is because a translation unit can be manipulated 33897 independently from an abi corpus. 33898 * src/abg-corpus.cc (corpus::get_translation_units): Adjust return 33899 type to comply with the change above. 33900 339012013-08-29 Dodji Seketeli <dodji@redhat.com> 33902 33903 Fix header inclusion in abg-corpus.h 33904 * include/abg-corpus.h: Drop incomplete abg-traverse.h and 33905 abg-fwd.h. Use abg-ir.h proper and be done with it. Users of the 33906 library will just have to use abg-corpus.h to manipulate and the 33907 archives and the IR they contain. 33908 339092013-08-29 Dodji Seketeli <dodji@redhat.com> 33910 33911 Add error message to translation_unit::write 33912 * src/abg-writer.cc (translation_unit::write): Add an error 33913 message to stderr if something ultimately went wrong. 33914 339152013-08-29 Dodji Seketeli <dodji@redhat.com> 33916 33917 Rename abigail::corpus::{get_file_path --> get_path} 33918 * include/abg-corpus.h (corpus::{get_path, set_path): Renamed 33919 corpus::get_file_path and corpus::set_file_path into these as 33920 get_path/set_path is what is used elsewhere as well. 33921 * src/abg-corpus.cc (corpus::{get_path, set_path}): Likewise. 33922 * tests/test-write-read-archive.cc (main): Adjust for the change 33923 above. 33924 339252013-08-29 Dodji Seketeli <dodji@redhat.com> 33926 33927 Cleanup src/Makefile.am 33928 * src/Makefile.am: Fix library naming and remove useless trailing 33929 space from directory path. 33930 339312013-08-27 Dodji Seketeli <dodji@redhat.com> 33932 33933 Initial writing/reading of an ABI corpus to an archive 33934 * configure.ac: Support detection of libzip dependency. Define 33935 new DEPS_CFLAGS and DEPS_LIBS variables for use in 33936 Makefile.am to refer to the dependency headers and 33937 libraries. 33938 * doc/website/mainpage.txt: Update this to talk about the new 33939 libzip dependency. 33940 * include/Makefile.am: Add abg-libzip-utils.h to the build system. 33941 * include/abg-corpus.h (corps): Hide abigail::corpus's private behind a 33942 pimpl idiom. 33943 (corpus::{drop_translation_units, get_file_path, set_file_path, 33944 write, read}): New methods. 33945 * include/abg-libxml-utils.h (new_reader_from_buffer): Declare new 33946 function. 33947 * include/abg-libzip-utils.h: New file. 33948 * src/Makefile.am: Add abg-corpus.cc and abg-libzip-utils.cc to 33949 the build system. Refer to the library and headers dependencies 33950 via the new DEPS_LIBS and DEPS_CFLAGS variables. 33951 * src/abg-corpus.cc: New file. 33952 * src/abg-ir.cc (translation::set_path): New method. 33953 * src/abg-libxml-utils.cc (new_reader_from_buffer): Define new 33954 function. 33955 * src/abg-libzip-utils.cc: New file. 33956 * src/abg-reader.cc (translation_unit::read): New overload. 33957 * src/abg-writer.cc: Inject the names from the std namespace into 33958 the abigail namespace, rather than into abigail::writer. 33959 (abigail::translation_unit::write): New overload. This can now 33960 use ofstream and the other stuff from std that are injected in the 33961 abigail:: namespace. 33962 * tests/Makefile.am: Add tests/test-write-read-archive.cc to the 33963 build system; use that to build runtestwritereadarchive. Also add 33964 the input test data from 33965 tests/data/test-write-read-archive/test[0-4].xml. 33966 * /tests/data/test-write-read-archive/test[0-4].xml: New test 33967 input data files. 33968 * tests/test-write-read-archive.cc: New test for this archive 33969 write/read support. 33970 339712013-08-27 Dodji Seketeli <dodji@redhat.com> 33972 33973 Fix & add missing API documentation 33974 * src/abg-ir.cc (location_manager::create_new_location): Fix 33975 documentation comment. (translation_unit::translation_unit) 33976 (translation_uni::get_global_scope, translation_unit::get_path) 33977 (translation_unit::traverse, translation_unit::get_loc_mgr) 33978 (translation_unit::is_empty, translation_unit::traverse): Add 33979 missing documentation comments. 33980 * src/abg-libxml-utils.cc (new_reader_from_file): Fix comment. 33981 * src/abg-reader.cc (translation_unit::read): Likewise. 33982 339832013-08-27 Dodji Seketeli <dodji@redhat.com> 33984 33985 Remove useless header inclusion 33986 * include/abg-traverse.h: Remove useless #include <tr1/memory> 33987 339882013-08-27 Dodji Seketeli <dodji@redhat.com> 33989 33990 Misc white space cleanups 33991 * include/abg-corpus.h: Cleanup white spaces. 33992 * include/abg-fwd.h: Likewise. 33993 * include/abg-ir.h: Likewise. 33994 * include/abg-libxml-utils.h: Likewise. 33995 * src/abg-config.cc: Likewise. 33996 * src/abg-ir.cc: Likewise. 33997 * src/abg-reader.cc: Likewise. 33998 * src/abg-writer.cc: Likewise. 33999 340002013-08-27 Dodji Seketeli <dodji@redhat.com> 34001 34002 Small cleanup in abg-config.cc 34003 * src/abg-config.cc: Include auto-generated 34004 $(top_builddir)/config.h file. 34005 340062013-08-27 Dodji Seketeli <dodji@redhat.com> 34007 34008 Pass absolute paths to the compiler during the build 34009 * src/Makefile.am: Pass absolute file paths to the compiler during 34010 the build. This helps in e.g in emacs' compilation mode, when the 34011 output shows an error reported by GCC's diagnostics, setting point 34012 to the error line and hitting 'enter' transports the user to the 34013 file location where the error happened; as the file path is nows 34014 absolute, emacs can always find it. Otherwise, finding it depends 34015 on $PWD and whatnot. 34016 * tests/Makefile.am: Likewise. 34017 340182013-08-27 Dodji Seketeli <dodji@redhat.com> 34019 34020 Misc cleanups in abg-fwd.h 34021 * include/abg-fwd.h: Move location, location_manager and 34022 translation_unit in the ir section. Remove stuff that was 34023 commented out anyway. 34024 340252013-08-27 Dodji Seketeli <dodji@redhat.com> 34026 34027 Move location, location_manager & translation_unit back into abg-ir.h 34028 * include/abg-corpus.h: Move location location_manager, 34029 translation_unit from here ... 34030 * include/abg-ir.h: ... to here. The reason being that these are 34031 really constructs of the Internal Representation of the ABI/API of 34032 a translation unit. What is left in abg-corpus is really 34033 exclusively related to an ABI Corpus, which I see more as a 34034 "packaging" construct that abstracts the bundling of several 34035 translation units together. Also, I fixed some comments about the 34036 location/location_manger types; now a location is made specific to 34037 a translation unit; to an abi corpus. A location of a given 34038 translation unit has to be decoded by the location manager of that 34039 same translation unit. 34040 340412013-08-22 Dodji Seketeli <dodji@redhat.com> 34042 34043 Make libxml2 a private dependency wrt pkconfig 34044 * libabigail.pc.in: Libxml2 is not exposed to clients so make it 34045 be a private dependency. 34046 340472013-08-22 Dodji Seketeli <dodji@redhat.com> 34048 34049 White space fix in COMPILING 34050 * COMPILING: White space fix. 34051 340522013-08-22 Dodji Seketeli <dodji@redhat.com> 34053 34054 Add abg-version.h.in to the source distribution & cleanup 34055 * include/Makefile.am: Add abg-version.h.in to the source 34056 distribution. 34057 * configure.ac: Generate abg-version.h in using the existing 34058 AC_CONFIG_FILES macro call. 34059 340602013-08-22 Dodji Seketeli <dodji@redhat.com> 34061 34062 Support pkgconfig through a new libabigail.pc file 34063 * libabigail.pc.in: New pkgconfig file. 34064 * configure.ac: Define the LIBXML2_VERSION variable that is used 34065 in the libabigail.pc.in file. Generate the libabigail.pc file 34066 from its libabigail.pc.in template. 34067 * Makefile.am: Add libabigail.pc.in to the source distribution. 34068 Install the generated libabigail.pc to the right destination. 34069 340702013-08-21 Dodji Seketeli <dodji@redhat.com> 34071 34072 Tweak the apidoc mainpage 34073 * include/abg-fwd.h<doxygen markup>: Fix link to the project web 34074 page and for git check-out. 34075 340762013-08-21 Dodji Seketeli <dodji@redhat.com> 34077 34078 Initial website generation-fu using Doxygen 34079 * doc/website/mainpage.txt: New file representing the input for 34080 the website. 34081 * doc/website/libabigail-website.doxy: New file representing the 34082 doxygen configuration for the website generation. 34083 * doc/api/libabigail.doxy: Output doxygen generation warnings into 34084 a file. 34085 * doc/Makefile.am: Support generating the website from doxygen. 34086 Update the api generation relevant macros names for better 34087 consistency. Make "make html" generate the website too. Make 34088 "make clean" erase the website bits too. Add a 'website' 34089 target to make the website. 34090 340912013-08-21 Dodji Seketeli <dodji@redhat.com> 34092 34093 Fix typo in CONTRIBUTING file 34094 * CONTRIBUTING: Fix typo, courtesy of Mark Wielaard. 34095 340962013-08-19 Dodji Seketeli <dodji@redhat.com> 34097 34098 Remove autotools-generated files 34099 * Makefile.in: Remove this autotools-generated file. I know that 34100 people in the GCC-realm like storing these autotools-generated 34101 files into the source control system, but I believe in this day 34102 and age, this is annoying (to say the least) for the project 34103 developers for no good reason. Requiring (the ubiquitous) 34104 autoconf for building from source is no big deal today, and typing 34105 "autoreconf" is not hard to do, really. And it saves the 34106 developers for having to update a bunch of boilerplate 34107 automatically generated files into the source control system; this 34108 is really unnecessary noise and it is a commonly accepted good 34109 practice to avoid doing it these days. To help people who do not 34110 know how to handle this, there is a COMPILING file in the source 34111 tree that explains how to build the project from sources. 34112 * aclocal.m4: Likewise. 34113 * configure: Likewise. 34114 * include/Makefile.in: Likewise. 34115 * src/Makefile.in: Likewise. 34116 * doc/Makefile.in: Likewise. 34117 * tests/Makefile.in: Likewise. 34118 341192013-08-19 Dodji Seketeli <dodji@redhat.com> 34120 34121 Add a new COMPILING file explaining how to build the package 34122 * COMPILING: New file. 34123 341242013-08-14 Dodji Seketeli <dodji@redhat.com> 34125 34126 Remove name of unused parameter in decl_base::traverse. 34127 * src/abg-ir.c (decl_base::traverse): Remove name of unused parameter. 34128 341292013-08-14 Dodji Seketeli <dodji@redhat.com> 34130 34131 install headers in $includedir/libabigail 34132 * include/Makefile.am: Install headers in $includedir/libabigail 34133 341342013-08-14 Dodji Seketeli <dodji@redhat.com> 34135 34136 For usage from within GCC set header path to $includedir/libabigail 34137 * abigail.m4: The include path used for compilation goes to 34138 $includedir/libabigail. 34139 341402013-08-08 Benjamin Kosnik <bkoz@redhat.com> 34141 34142 Separate out bits from the ir header. 34143 * include/abg-irfwd.h: Move to... 34144 * include/abg-fwd.h: ...this. 34145 * include/abg-ir.h (traverse_base): Move to... 34146 * include/abg-traverse.h: ...here. New. 34147 * include/abg-ir.h (location, location_manager, translation_unit): 34148 Move to... 34149 * include/abg-corpus.h: ...here. 34150 * include/Makefile.am: Adjust. 34151 * include/Makefile.in: Regenerate. 34152 341532013-08-07 Benjamin Kosnik <bkoz@redhat.com> 34154 34155 Template naming compression. 34156 * include/abg-ir.h: Template naming compressions. 34157 (class_template_decl): To class_tdecl. 34158 (function_template_decl): To function_tdecl. 34159 (template_type_parameter): To type_tparameter. 34160 (template_non_type_parameter): To non_type_tparameter. 34161 (template_template_parameter): To template_tparameter. 34162 (tmpl_parm_type_composition): To type_composition. 34163 * include/abg-irfwd.h: Same. 34164 * src/abg-hash.cc: Same. 34165 * src/abg-ir.cc: Same. 34166 * src/abg-reader.cc: Same. 34167 341682013-08-07 Benjamin Kosnik <bkoz@redhat.com> 34169 34170 Slight change to doxy config. 34171 * doc/api/libabigail.doxy: Turn off namespace scopes, on all the viz. 34172 341732013-08-07 Benjamin Kosnik <bkoz@redhat.com> 34174 34175 Move class_decl nested types out-of-line. 34176 * include/abg-ir.h (class_decl): Move nested types out of line. 34177 341782013-08-07 Benjamin Kosnik <bkoz@redhat.com> 34179 34180 Rename class_decl::method to class_decl::method_base. 34181 * include/abg-ir.h (class_decl::member): To member_base. 34182 * src/abg-hash.cc: Same. 34183 * src/abg-ir.cc: Same. 34184 * src/abg-writer.cc: Same. 34185 341862013-08-07 Benjamin Kosnik <bkoz@redhat.com> 34187 34188 Nest hashers. 34189 * include/abg-ir.h: Nest all hashers. 34190 * include/abg-irfwd.h (abigail): Don't inject std::tr1::hash. 34191 Remove hasher forward declarations. 34192 * include/abg-hash.h: Tweak. 34193 * src/abg-hash.cc: Define hashers here. 34194 * src/abg-ir.cc: Adjust for above. 34195 * src/abg-reader.cc: Same. 34196 * src/abg-writer.cc: Same. 34197 341982013-08-06 Benjamin Kosnik <bkoz@redhat.com> 34199 34200 Rename abi_corpus to corpus 34201 * include/abg-corpus.h (abi_corpus): Change to corpus. 34202 * include/abg-hash.h: Tweaks. 34203 * include/abg-libxml-utils.h: Same. 34204 342052013-08-06 Benjamin Kosnik <bkoz@redhat.com> 34206 34207 Simplify interface for serializing/deserializing translation_units. 34208 * include/abg-ir.h (translation_unit::read): New member function. 34209 (translation_unit::write): Same. 34210 * src/abg-reader.cc (translation_unit::read): Define. 34211 * src/abg-writer.cc (translation_unit::write): Define. 34212 * include/abg-reader.h: Remove. 34213 * include/abg-writer.h: Remove. 34214 * include/Makefile.am (headers): Same. 34215 * include/Makefile.in: Regenerate. 34216 342172013-08-06 Benjamin Kosnik <bkoz@redhat.com> 34218 34219 First pass clean reading API. 34220 * include/abg-reader.h (read_file): Remove extraneous file parameter. 34221 * src/abg-reader.cc: Same. 34222 * tests/test-read-write.cc: Adjust. 34223 342242013-08-06 Benjamin Kosnik <bkoz@redhat.com> 34225 34226 Rename traversable to traversable_base, move up the _decl hierarchy via decl_base derivation. 34227 * include/abg-ir.h (traversable): To traversable_base. 34228 (decl_base): Inherit from traversable_base. 34229 (decl_base::traverse): Null definition. 34230 (function_decl, etc.): Remove traversable_base as base class. 34231 342322013-08-06 Benjamin Kosnik <bkoz@redhat.com> 34233 34234 Standardize typedef naming. Plural form is the container form, smart_ptr types are type + _sptr. 34235 * include/abg-ir.h (scope_decl): Add declarations, scopes as types. 34236 (function_type): Add parameter_sptr, parameters as types. 34237 (enum_type_decl): Add type_sptr, enumerators as types. 34238 (class_decl): Adjust typedefs for consistency. Change 34239 base_specs_type to base_specs, member_types_type to member_types, 34240 data_members_type to data_members, member_functions_type to 34241 member_functions, member_function_templates_type to 34242 member_function_templates, member_class_templates_type to 34243 member_class_templates. 34244 342452013-08-02 Benjamin Kosnik <bkoz@redhat.com> 34246 34247 Doxygen markup fixes final. 34248 * include/abg-config.h: Doxygen cleanups round two. 34249 * include/abg-hash.h: Same. 34250 * include/abg-ir.h: Same. 34251 * include/abg-irfwd.h: Same. 34252 * include/abg-libxml-utils.h: Same. 34253 * src/abg-config.cc: Same. 34254 * src/abg-hash.cc: Same. 34255 * src/abg-ir.cc: Same. 34256 * src/abg-reader.cc: Same. 34257 * src/abg-writer.cc: Same. 34258 342592013-08-01 Benjamin Kosnik <bkoz@redhat.com> 34260 34261 Forward decls for abg-ir.h, doxygen fixups, restyle. 34262 * include/abg-irfwd.h: New file for forward declarations. 34263 * include/Makefile.am: Add new header. 34264 * include/Makefile.in: Regenerate. 34265 * include/*: Forward declare, doxygen fixups, restyle. 34266 * src/*: Same. 34267 * src/abg-corpus.cc: Empty, removed. 34268 * doc/api/libabigail.doxy: Tweak. 34269 342702013-08-01 Benjamin Kosnik <bkoz@redhat.com> 34271 34272 Add virtual dtor to translation_unit. 34273 * include/abg-ir.h (translation_unit): Add virtual dtor. 34274 * src/abg-ir.cc: Define. 34275 342762013-08-01 Benjamin Kosnik <bkoz@redhat.com> 34277 34278 Adjust doxygen input path. 34279 * doc/api/libabigail.doxy: Adjust include directory. 34280 342812013-08-01 Benjamin Kosnik <bkoz@redhat.com> 34282 34283 Collapse subdir of include to include. 34284 * include/libabigail/abg-*.h: Move to... 34285 * include/abg-*.h 34286 * include/libabigail: Remove. 34287 * configure.ac: Adjust include location from libabigail/include to 34288 include. 34289 * Makefile.in: Same. 34290 * aclocal.m4: Same. 34291 * configure: Same. 34292 * doc/Makefile.in: Same. 34293 * include/Makefile.am: Same. 34294 * src/Makefile.am: Same. 34295 * src/Makefile.in: Same. 34296 * tests/Makefile.am: Same. 34297 * tests/Makefile.in: Same. 34298 342992013-07-23 Dodji Seketeli <dodji@seketeli.org> 34300 34301 Update autotool auto-generated files 34302 * Makefile.in: Updated. 34303 * aclocal.m4: Likewise. 34304 * configure: Likewise. 34305 * doc/Makefile.in: Likewise. 34306 * src/Makefile.in: Likewise. 34307 * tests/Makefile.in: Likewise. 34308 343092013-07-20 Dodji Seketeli <dodji@seketeli.org> 34310 34311 Implement a translation unit traversal API 34312 * include/libabigail/abg-ir.h (struct ir_node_visitor, struct 34313 traversable): New interfaces. 34314 (translation_unit, scope_decl, type_decl, qualified_type_def) 34315 (pointer_type_def, reference_type_def, enum_type_decl) 34316 (typedef_decl, var_decl, function_decl, data_member) 34317 (member_function, member_function_template) 34318 (member_class_template): Implement the traversable interface, 34319 overload the traversable::traverse pure virtual function. 34320 * src/abg-ir.cc ({translation_unit, scope_decl, type_decl, 34321 namespace_decl, qualified_type_def, pointer_type_def, 34322 reference_type_def, enum_type_decl, typedef_decl, var_decl, 34323 function_decl, class_decl::member_function, class_decl, 34324 class_decl::data_member, class_decl::member_function_template, 34325 class_decl::member_class_template, function_template_decl, 34326 class_template_decl, }::traverse): Implement traversal. 34327 (ir_node_visitor::visit): New method, overloaded for the types 34328 above, which implement the traversable interface. 34329 * tests/test-walker.cc: New test case program to showcase how to 34330 use the new traversal API. 34331 * tests/makefile.am: Add test-walker.cc to the build system. 34332 343332013-07-19 Dodji Seketeli <dodji@seketeli.org> 34334 34335 By default, statically link libabigail with whoever uses abigail.m4 34336 * abigail.m4: Make $abigaillibs statically link libabigail by default. 34337 343382013-07-19 Dodji Seketeli <dodji@seketeli.org> 34339 34340 Move static member definition to abg-viz-dot.cc file 34341 * include/libabigail/abg-viz-dot.h: Move definition of 34342 node_base::_M_count_total to ... 34343 * src/abg-viz-dot.cc: ... here. 34344 343452013-07-19 Dodji Seketeli <dodji@seketeli.org> 34346 34347 Put headers in include/libabigail 34348 * include/libabigail: New directory. 34349 * include/Makefile.am: New file. 34350 * include/libabigail/Makefile.am: New file. 34351 * src/abg-*.h: Move these in include/libabigail/*.h 34352 * src/Makefile.am: Set -I option to look for headers in include/libabigail 34353 * doc/api/libabigail.doxy: Look for headers in include/libabigail 34354 * tests/Makefile.am: Set -I option to look for headers in include/libabigail 34355 * abigail.m4: Set includedir to $prefix/include/libabigail for 34356 library used as a dep, or to srcdir/libabigail/include/libabigail 34357 in GCC source tree. 34358 * configure.ac: Add Makefile.am in include and include/libabigail 34359 * abigail.m4: Look for headers in include/libabigail when the 34360 libabigail is in in the source tree and in $incdir/libabigail when 34361 it is installed as a dependency. 34362 343632013-07-18 Benjamin Kosnik <bkoz@redhat.com> 34364 34365 Install into docdir, turn off collaboration graphs. 34366 * doc/Makefile.am (doc-install-html-doxygen): Install generated 34367 files into docdir. 34368 * doc/api/libabigail.doxy (COLLABORATION_GRAPH): Turn off. 34369 343702013-07-18 Benjamin Kosnik <bkoz@redhat.com> 34371 34372 Fix dependencies for api/html output directory. 34373 * doc/Makefile.am: Create abi output directory. 34374 343752013-07-16 Dodji Seketeli <dodji@seketeli.org> 34376 34377 Prepare for publishing 34378 * COMMIT-LOG-GUIDELINES: New file. 34379 * CONTRIBUTING: New file. 34380 * README: Amended to refer to the first files above. 34381 343822013-07-16 Dodji Seketeli <dodji@seketeli.org> 34383 34384 LGPLv3 License the library 34385 * COPYING-LGPLV3: New file. 34386 * abg-config.cc: License the file to LGPLv3. 34387 * abg-config.h: Likewise. 34388 * abg-corpus.cc: Likewise. 34389 * abg-corpus.h: Likewise. 34390 * abg-hash.cc: Likewise. 34391 * abg-hash.h: Likewise. 34392 * abg-ir.cc: Likewise. 34393 * abg-ir.h: Likewise. 34394 * abg-libxml-utils.cc: Likewise. 34395 * abg-libxml-utils.h: Likewise. 34396 * abg-reader.cc: Likewise. 34397 * abg-reader.h: Likewise. 34398 * abg-writer.cc: Likewise. 34399 * abg-writer.h: Likewise. 34400 * src/abg-viz-common.cc: Likewise. 34401 * src/abg-viz-common.h: Likewise. 34402 * src/abg-viz-dot.cc: Likewise. 34403 * src/abg-viz-dot.h: Likewise. 34404 * src/abg-viz-svg.cc: Likewise. 34405 * src/abg-viz-svg.h: Likewise. 34406 * tests/test-read-write.cc: Likewise. 34407 * tests/test-utils.cc: Likewise. 34408 * tests/test-utils.h: Likewise. 34409 344102013-07-17 Dodji Seketeli <dodji@seketeli.org> 34411 34412 Add assert.h in abg-ir.cc 34413 * src/abg-ir.cc: Add missing assert.h 34414 344152013-07-17 Dodji Seketeli <dodji@seketeli.org> 34416 34417 Fix missing license blurbs 34418 * src/abg-config.cc: Fix licensing blurb. 34419 * src/abg-config.h: Likewise. 34420 * src/abg-corpus.cc: Likewise. 34421 * src/abg-corpus.h: Likewise. 34422 * src/abg-ir.cc: Likewise. 34423 * src/abg-ir.h: Likewise. 34424 * src/abg-reader.cc: Likewise. 34425 * src/abg-writer.cc: Likewise. 34426 344272013-07-02 Benjamin Kosnik <bkoz@redhat.com> 34428 34429 Correct DOT merge. 34430 * src/abg-viz-common.h: Use _M_attributes for attribute overflows. 34431 * src/abg-viz-dot.h: Merge in correct node_base. 34432 * src/abg-viz-dot.cc: Same. 34433 * tests/test-dot.cc: Correct examples. 34434 * tests/Makefile.am: Add .gv to CLEANFILES. 34435 * tests/Makefile.in: Regenerate. 34436 344372013-07-02 Benjamin Kosnik <bkoz@redhat.com> 34438 34439 Pull out common style type. 34440 * src/abg-viz-common.h: Pull out common style type. 34441 * src/abg-viz-dot.cc: Adjust scoping. 34442 * src/abg-viz-common.cc: Same. 34443 * src/abg-viz-dot.h: Use common style class. 34444 * src/abg-viz-svg.h: Same. 34445 344462013-07-02 Benjamin Kosnik <bkoz@redhat.com> 34447 34448 Commonize visualization support. 34449 * src/abg-viz-svg.h: Move common code to... 34450 * src/abg-viz-dot.h: Move common code to... 34451 * src/abg-viz-common.h: ...here. New. 34452 * src/abg-viz-svg.cc: Move common code to... 34453 * src/abg-viz-common.cc: ...here. New. 34454 * src/Makefile.am: Add abg-viz-common.cc, abg-viz-common.h 34455 * src/Makefile.in: Regenerate. 34456 344572013-07-01 Benjamin Kosnik <bkoz@redhat.com> 34458 34459 Initial DOT work. 34460 * doc/vizualization/layout/scripts/ 34461 (inkscape_export_svg_to_plain_svg.sh): Move... 34462 (inkscape_export_svg_to_png_and_pdf.sh): Move... 34463 * scripts: ..here. New toplevel directory. 34464 * scripts/scripts/dot_to_png.sh: New. 34465 * scripts/scripts/dot_to_svg.sh: New. 34466 * src/Makefile.am: Add abg-viz-dot.cc, abg-viz-dot.h. 34467 * tests/Makefile.am: Add test-dot.cc. 34468 * src/abg-viz-dot.cc: New. 34469 * src/abg-viz-dot.h: New. 34470 * tests/test-dot.cc: New. 34471 * doc/vizualization/graph: New. 34472 * doc/vizualization/graph/gv/sa-A.gv: New. 34473 * doc/vizualization/graph/gv/sa-B.gv: New. 34474 * doc/vizualization/graph/gv/sa-C1.gv: New. 34475 * doc/vizualization/graph/gv/sa-C2.gv: New. 34476 * doc/vizualization/graph/gv/sa-C3.gv: New. 34477 * doc/vizualization/graph/gv/sa-C4.gv: New. 34478 * doc/vizualization/graph/gv/sa-D1.gv: New. 34479 * doc/vizualization/graph/gv/sa-D2.gv: New. 34480 * doc/vizualization/graph/gv/sa-D2v.gv: New. 34481 * doc/vizualization/graph/gv/sa-D3.gv: New. 34482 * doc/vizualization/graph/gv/sa-D3v.gv: New. 34483 * doc/vizualization/graph/gv/sa-D4v.gv: New. 34484 * doc/vizualization/graph/gv/sa-D5v1.gv: New. 34485 * doc/vizualization/graph/gv/sa-D5v2.gv: New. 34486 * doc/vizualization/graph/gv/sa-DD1.gv: New. 34487 * doc/vizualization/graph/gv/sa-DD2.gv: New. 34488 * doc/vizualization/graph/gv/sa-DD3.gv: New. 34489 * doc/vizualization/graph/gv/sa-DD4.gv: New. 34490 * doc/vizualization/graph/gv/sa-DD5.gv: New. 34491 * doc/vizualization/graph/gv/sa-base.gv: New. 34492 * doc/vizualization/graph/png/sa-A.png: New. 34493 * doc/vizualization/graph/png/sa-B.png: New. 34494 * doc/vizualization/graph/png/sa-C1.png: New. 34495 * doc/vizualization/graph/png/sa-C2.png: New. 34496 * doc/vizualization/graph/png/sa-C3.png: New. 34497 * doc/vizualization/graph/png/sa-C4.png: New. 34498 * doc/vizualization/graph/png/sa-D1.png: New. 34499 * doc/vizualization/graph/png/sa-D2.png: New. 34500 * doc/vizualization/graph/png/sa-D2v.png: New. 34501 * doc/vizualization/graph/png/sa-D3.png: New. 34502 * doc/vizualization/graph/png/sa-D3v.png: New. 34503 * doc/vizualization/graph/png/sa-D4v.png: New. 34504 * doc/vizualization/graph/png/sa-D5v1.png: New. 34505 * doc/vizualization/graph/png/sa-D5v2.png: New. 34506 * doc/vizualization/graph/png/sa-DD1.png: New. 34507 * doc/vizualization/graph/png/sa-DD2.png: New. 34508 * doc/vizualization/graph/png/sa-DD3.png: New. 34509 * doc/vizualization/graph/png/sa-DD4.png: New. 34510 * doc/vizualization/graph/png/sa-DD5.png: New. 34511 * doc/vizualization/graph/png/sa-base.png: New. 34512 * doc/vizualization/graph/sources/sa-A.cc: New. 34513 * doc/vizualization/graph/sources/sa-B.cc: New. 34514 * doc/vizualization/graph/sources/sa-C.cc: New. 34515 * doc/vizualization/graph/sources/sa-D.cc: New. 34516 * doc/vizualization/graph/sources/sa-DD.cc: New. 34517 * doc/vizualization/graph/sources/sa-base.cc: New. 34518 * doc/vizualization/graph/svg/sa-A.svg: New. 34519 * doc/vizualization/graph/svg/sa-B.svg: New. 34520 * doc/vizualization/graph/svg/sa-C1.svg: New. 34521 * doc/vizualization/graph/svg/sa-C2.svg: New. 34522 * doc/vizualization/graph/svg/sa-C3.svg: New. 34523 * doc/vizualization/graph/svg/sa-C4.svg: New. 34524 * doc/vizualization/graph/svg/sa-D1.svg: New. 34525 * doc/vizualization/graph/svg/sa-D2.svg: New. 34526 * doc/vizualization/graph/svg/sa-D2v.svg: New. 34527 * doc/vizualization/graph/svg/sa-D3.svg: New. 34528 * doc/vizualization/graph/svg/sa-D3v.svg: New. 34529 * doc/vizualization/graph/svg/sa-D4v.svg: New. 34530 * doc/vizualization/graph/svg/sa-D5v1.svg: New. 34531 * doc/vizualization/graph/svg/sa-D5v2.svg: New. 34532 * doc/vizualization/graph/svg/sa-DD1.svg: New. 34533 * doc/vizualization/graph/svg/sa-DD2.svg: New. 34534 * doc/vizualization/graph/svg/sa-DD3.svg: New. 34535 * doc/vizualization/graph/svg/sa-DD4.svg: New. 34536 * doc/vizualization/graph/svg/sa-DD5.svg: New. 34537 * doc/vizualization/graph/svg/sa-base.svg: New. 34538 345392013-07-01 Benjamin Kosnik <bkoz@redhat.com> 34540 34541 Regenerate build/configure. 34542 * aclocal.m4: 34543 * configure: 34544 345452013-06-06 Benjamin Kosnik <bkoz@redhat.com> 34546 34547 Regenerate configure files. 34548 * Makefile.in: 34549 * aclocal.m4: 34550 * configure: 34551 * doc/Makefile.in: 34552 * src/Makefile.in: 34553 * tests/Makefile.in: 34554 345552013-05-28 Benjamin Kosnik <bkoz@redhat.com> 34556 34557 Add svg generation. 34558 * src/Makefile.am: Add abg-viz-svg.cc, abg-viz-svg.h. 34559 * tests/Makefile.am: Add test-svg.cc. 34560 * src/abg-viz-svg.cc: New. 34561 * src/abg-viz-svg.h: New. 34562 * tests/test-svg.cc: New. 34563 345642013-05-22 Benjamin Kosnik <bkoz@redhat.com> 34565 34566 Remove ChangeLog 34567 * ChangeLog: Remove content. 34568 345692013-05-21 Benjamin Kosnik <bkoz@redhat.com> 34570 34571 Fixup abg-version.h merge duplicate. 34572 * configure.ac: Remove src/abg-version.h merge duplicate. 34573 345742013-05-20 Benjamin Kosnik <bkoz@redhat.com> 34575 34576 Add doc/visualization/layout. 34577 * doc/vizualization/layout: New. 34578 * doc/vizualization/layout/pdf/sa-A.pdf: New. 34579 * doc/vizualization/layout/pdf/sa-B.pdf: New. 34580 * doc/vizualization/layout/pdf/sa-C1.pdf: New. 34581 * doc/vizualization/layout/pdf/sa-C2.pdf: New. 34582 * doc/vizualization/layout/pdf/sa-C3.pdf: New. 34583 * doc/vizualization/layout/pdf/sa-D1.pdf: New. 34584 * doc/vizualization/layout/pdf/sa-D2.pdf: New. 34585 * doc/vizualization/layout/pdf/sa-D2v.pdf: New. 34586 * doc/vizualization/layout/pdf/sa-D3.pdf: New. 34587 * doc/vizualization/layout/pdf/sa-D3v.pdf: New. 34588 * doc/vizualization/layout/pdf/sa-D4v.pdf: New. 34589 * doc/vizualization/layout/pdf/sa-DD1.pdf: New. 34590 * doc/vizualization/layout/pdf/sa-DD2.pdf: New. 34591 * doc/vizualization/layout/pdf/sa-DD3.pdf: New. 34592 * doc/vizualization/layout/pdf/sa-DD4.pdf: New. 34593 * doc/vizualization/layout/pdf/sa-DD5.pdf: New. 34594 * doc/vizualization/layout/pdf/sa-base.pdf: New. 34595 * doc/vizualization/layout/png/sa-A.png: New. 34596 * doc/vizualization/layout/png/sa-B.png: New. 34597 * doc/vizualization/layout/png/sa-C1.png: New. 34598 * doc/vizualization/layout/png/sa-C2.png: New. 34599 * doc/vizualization/layout/png/sa-C3.png: New. 34600 * doc/vizualization/layout/png/sa-D1.png: New. 34601 * doc/vizualization/layout/png/sa-D2.png: New. 34602 * doc/vizualization/layout/png/sa-D2v.png: New. 34603 * doc/vizualization/layout/png/sa-D3.png: New. 34604 * doc/vizualization/layout/png/sa-D3v.png: New. 34605 * doc/vizualization/layout/png/sa-D4v.png: New. 34606 * doc/vizualization/layout/png/sa-DD1.png: New. 34607 * doc/vizualization/layout/png/sa-DD2.png: New. 34608 * doc/vizualization/layout/png/sa-DD3.png: New. 34609 * doc/vizualization/layout/png/sa-DD4.png: New. 34610 * doc/vizualization/layout/png/sa-DD5.png: New. 34611 * doc/vizualization/layout/png/sa-base.png: New. 34612 * doc/vizualization/layout/scripts/ 34613 (inkscape_export_svg_to_plain_svg.sh): New. 34614 (inkscape_export_svg_to_png_and_pdf.sh): New. 34615 * doc/vizualization/layout/sources/sa-A.cc: New. 34616 * doc/vizualization/layout/sources/sa-B.cc: New. 34617 * doc/vizualization/layout/sources/sa-C.cc: New. 34618 * doc/vizualization/layout/sources/sa-D.cc: New. 34619 * doc/vizualization/layout/sources/sa-DD.cc: New. 34620 * doc/vizualization/layout/sources/sa-base.cc: New. 34621 * doc/vizualization/layout/svg/sa-A.svg: New. 34622 * doc/vizualization/layout/svg/sa-B.svg: New. 34623 * doc/vizualization/layout/svg/sa-C1.svg: New. 34624 * doc/vizualization/layout/svg/sa-C2.svg: New. 34625 * doc/vizualization/layout/svg/sa-C3.svg: New. 34626 * doc/vizualization/layout/svg/sa-D1.svg: New. 34627 * doc/vizualization/layout/svg/sa-D2.svg: New. 34628 * doc/vizualization/layout/svg/sa-D2v.svg: New. 34629 * doc/vizualization/layout/svg/sa-D3.svg: New. 34630 * doc/vizualization/layout/svg/sa-D3v.svg: New. 34631 * doc/vizualization/layout/svg/sa-D4v.svg: New. 34632 * doc/vizualization/layout/svg/sa-DD1.svg: New. 34633 * doc/vizualization/layout/svg/sa-DD2.svg: New. 34634 * doc/vizualization/layout/svg/sa-DD3.svg: New. 34635 * doc/vizualization/layout/svg/sa-DD4.svg: New. 34636 * doc/vizualization/layout/svg/sa-DD5.svg: New. 34637 * doc/vizualization/layout/svg/sa-base.svg: New. 34638 346392013-05-20 Benjamin Kosnik <bkoz@redhat.com> 34640 34641 Generate abg-version.h at configure time. 34642 * configure.ac: Add src/abg-version.h to AC_CONFIG_FILES. 34643 * src/Makefile.am: Remove abg-version.h generation rules. 34644 * src/abg-version.h.in: New. 34645 346462013-04-02 Benjamin Kosnik <bkoz@redhat.com> 34647 34648 Add doc dir. Add Doxgen api generation rules. 34649 * doc: Add. 34650 * doc/Makefile.am (html, install-html): Add. 34651 * doc/Makefile.in: Add. 34652 * doc/api/libabigail.doxy: Add doxygen config. 34653 * src/abg-*: Add @file markup. 34654 346552013-03-27 Benjamin Kosnik <bkoz@redhat.com> 34656 34657 Add configure to source control 34658 * configure: Add. 34659 * src/abg-corpus.cc: include stdexcept 34660 346612013-06-25 Dodji Seketeli <dodji@redhat.com> 34662 34663 Support offsets and virtual attribute in base class specifiers 34664 * src/abg-ir.h (class_decl::base_spec::base_spec): Take an offset 34665 and a is_virtual flag. 34666 (class_decl::base_spec::{get_is_virtual, get_offset_in_bits}): New 34667 methods. 34668 (class_decl::has_no_base_nor_member): New method declaration.. 34669 * src/abg-ir.cc (class_decl::base_spec::base_spec): Take an offset 34670 and a is_virtual flag 34671 (class_decl::has_no_base_nor_member): Define it. 34672 * src/abg-reader.cc (read_offset_in_bits): Renamed 34673 read_var_offset_in_bits into this. 34674 (read_is_virtual): New static function. 34675 (build_class_decl): Read the 'layout-offset-in-bits' and the 34676 'is-virtual' of the base class specifier. Adjust for the 34677 read_var_offset_in_bits -> read_offset_in_bits rename. 34678 * src/abg-writer.cc (write_layout_offset): New overload for the 34679 base class specifiers. 34680 (write_class_decl): If the class has no member or base class, make 34681 it a proper empty xml element. Write the offset and the 34682 is-virtual attribute. 34683 * tests/data/test-read-write/test20.xml: New test input data. 34684 * tests/test-read-write.cc: De-serialize the test above, serialize 34685 it back and compare that both versions are the same. 34686 346872013-06-22 Dodji Seketeli <dodji@redhat.com> 34688 34689 Iron out support for simple base classes. 34690 * src/abg-ir.h (class_decl::base_spec::base_spec): Move this 34691 out-of-line. Add a new constructor for clients compiled without 34692 RTTI. 34693 * src/abg-ir.cc (class_decl::base_spec::base_spec): This is now 34694 here out-of-line. Define the new constructor for clients compiled 34695 without RTTI. 34696 * tests/data/test-read-write/test19.xml: New test case input for 34697 base classes. 34698 * tests/test-read-write.cc: De-serialize and serialize the new 34699 test case input above. 34700 347012013-06-21 Dodji Seketeli <dodji@redhat.com> 34702 34703 Fix handling of forward decl of classes 34704 * abg-ir.h (class_decl::set_earlier_declaration): Move this 34705 out-of-line and add an overload. 34706 * src/abg-ir.cc (class_decl::set_earlier_declaration): Moved this 34707 out-of-line here and add an overload. 34708 * src/abg-reader.cc (build_class_decl): Really read the 34709 'decl-of-decl-id' property. Do not make the definition use the id 34710 of the declaration. Both have their id. 34711 * src/abg-writer.cc (write_class_decl): Put a space before the 34712 property "def-of-decl-id". 34713 * tests/data/test-read-write/test18.xml: New test input. 34714 * tests/test-read-write.cc: De-serialize this new input, serialize 34715 it back and make sure both versions are identical. 34716 347172013-06-21 Dodji Seketeli <dodji@redhat.com> 34718 34719 Serialize the layout offset of class data members. 34720 * src/abg-writer.cc (write_layout_offset): New function. 34721 (write_class_decl): Serialize the layout offset. 34722 347232013-06-21 Dodji Seketeli <dodji@redhat.com> 34724 34725 Support Bitwise OR for qualified_type_def::CV better 34726 * src/abg-ir.h (qualified_type_def::CV_RESTRICT): New enumerator 34727 for the qualified_type_def::CV enum. 34728 (operator|(qualified_type_def::CV, qualified_type_def::CV)): New 34729 declaration. 34730 * src/abg-ir.cc (operator|(qualified_type_def::CV, 34731 qualified_type_def::CV)): New definition. 34732 * src/abg-reader.cc (build_qualified_type_decl): No need for 34733 casting the result of bitwise or between instances of 34734 qualified_type_def::CV. 34735 347362013-06-14 Dodji Seketeli <dodji@seketeli.org> 34737 34738 Support method type/decl, variadic functions, class declarations-only 34739 * src/abg-ir.h (function_decl::parameter::parameter): New 34740 constructor with variadic parameter marker. 34741 (function_decl::m_type): Make this protected to let method_decl 34742 inheriting class to access it. 34743 (function_decl::get_type): Move this out-of-line. 34744 (class method_type, method_type_hash): New types. 34745 (enum class_decl::access_specifier): Add no_access new enumerator. 34746 (class_decl::data_member::data_member): Move this out-of-line. 34747 (class_decl::data_member::~data_member): Declare virtual 34748 destructor. 34749 (class method_decl): New class. 34750 (class member_function): Make this inherit method_decl, instead of 34751 function_decl. 34752 (class_decl::class_decl): New constructors. 34753 (class_decl::{hashing_started, is_declaration_only, 34754 set_earlier_declaration, get_earlier_declaration}): New methods. 34755 * src/abg-ir.cc (add_decl_to_scope): If a decl is already in a 34756 scope, don't add it to this scope. 34757 (get_global_scope): Make this work when passed an instance of 34758 global_scope. 34759 (dynamic_type_hash::operator()): Add support for method_type. 34760 (method_type::{method_type, set_class_type, ~method_type, }) 34761 (method_type_hash::operator()): New defintions. 34762 (function_decl::get_type, class_decl::class_decl): Move these 34763 out-of-line here. 34764 (class_decl::method_decl::{method_decl, ~method_decl, get_type}): 34765 New definitions. 34766 (class_decl::member_function::member_function): Move this 34767 out-of-line here. Support method_decl. 34768 (class_decl::data_member::data_member): Likewise. 34769 (class_decl_hash::operator()): Guard this against endless loop. 34770 * src/abg-reader.cc (write_class_is_declaration_only): New static 34771 function. 34772 (write_var_decl): Take a flag to write the mangled name or not. 34773 (write_function_decl): Take a flag to skip the first parameter. 34774 (write_cdtor_const_static): Use 'yes' instead of 'true' as value 34775 of the properties. 34776 (write_decl, write_function_template_decl): Adjust wrt the new 34777 signatures of write_var_decl and write_function_decl. 34778 (write_enum_type_decl): Simplify call to write_location. 34779 (write_class_decl): Support serializing declaration-only classes. 34780 * src/abg-writer.cc: 34781 * tests/data/test-read-write/test17.xml: New test input. 34782 * tests/test-read-write.cc: De-serialize the above, and serialize it back. 34783 * tests/data/test-read-write/test10.xml: Update this test. 34784 347852013-06-01 Dodji Seketeli <dodji@redhat.com> 34786 34787 Support function_type and adapt a function_decl to use it 34788 * src/abg-ir.h (class function_type): Forward decl prior to class 34789 function_decl. 34790 (function_decl::parameter): Pass string by const reference. Add a 34791 variadic marker member and initialize it. 34792 (function_decl::parameter::get_type): Add a non-const overload. 34793 (function_decl::parameter::get_variadic_marker): New getter. 34794 (function_decl::function_decl) Take a const reference to a vector 34795 for parameters, type size/alignment. Add two overloads that takes a 34796 pointer to function_type. 34797 (function_decl::get_parameters): Move this out-of-line. 34798 (function_decl::append_parameter(s)): Renamed 34799 function_decl::add_parameter(s) into these. Move it out-of-line. 34800 Add an overload. 34801 (function_decl::{get_type, set_type}): New declaration. 34802 (function_decl::get_return_type): Move this out-of-line. 34803 (function_decl::is_variadic): New in-line function. 34804 (function_decl::m_type): New data member. 34805 (function_decl::{m_parms, m_return_type}): Remove. This are now 34806 carried by function_decl::m_type. 34807 (class function_type, struct function_type_hash): New 34808 declarations. 34809 (member_function::member_function): Take a vector of pointers to 34810 parameters. Take size/align of the type of the member function. 34811 Adjust initialization. 34812 * src/abg-ir.cc (dynamic_type_hash): Hash instance of 34813 function_type accessed through a pointer. 34814 (function_type::{operator==, ~function_type}) 34815 (function_type_hash::operaror(), function_decl::{get_return_type, 34816 }, function_decl::parameter::hash::operator()): New definitions. 34817 (function_decl::function_decl): The out-of-line definitions of the 34818 declarations above. 34819 (function_decl::append_parameter): Moved this out-of-line from 34820 inline function_decl::add_parameter. Make this rely on the 34821 underlying m_type. 34822 (function_decl::operator==): Adjust for use of vector for the 34823 parameters. Also, there is no need anymore to compare the 34824 parameters or the return types as they are compared by the 34825 comparison of the function types. 34826 * src/abg-reader.cc (build_function_decl): Read the new size/alignment 34827 attributes on the function-decl element. Build a function_type 34828 and use it to build the function_decl. Parameters and return type 34829 are now hung off of the function_type. 34830 (handle_function_decl): use build_function_decl. 34831 * src/abg-writer.cc (write_function_decl): Write the new 34832 size/alignment properties of the function-decl element. Adjust 34833 for the use of vectors for function parameters now. 34834 * tests/data/test-read-write/test10.xml: Adjust for the presence 34835 of size/alignment properties in the function-decl element now. 34836 * tests/data/test-read-write/test11.xml: Likewise. 34837 * tests/data/test-read-write/test12.xml: Likewise. 34838 * tests/data/test-read-write/test13.xml: Likewise. 34839 * tests/data/test-read-write/test14.xml: Likewise. 34840 * tests/data/test-read-write/test9.xml: Likewise. 34841 348422013-06-01 Dodji Seketeli <dodji@redhat.com> 34843 34844 Support null type hashing 34845 * src/abg-ir.cc (dynamic_type_hash::operator()(const type_base* t) 34846 const): Support hashing null type. 34847 348482013-05-23 Dodji Seketeli <dodji@redhat.com> 34849 34850 Add a couple of output file suffix configuration properties 34851 * src/abg-config.h (config::{get_tu_instr_suffix, 34852 set_tu_instr_suffix, get_tu_instr_archive_suffix, 34853 set_tu_instr_archive_suffix}): New decls. 34854 * src/abg-config.cc (config::{get_tu_instr_suffix, 34855 set_tu_instr_suffix, get_tu_instr_archive_suffix, 34856 set_tu_instr_archive_suffix}): New defs. 34857 348582013-05-23 Dodji Seketeli <dodji@redhat.com> 34859 34860 Add a new add_decl_to_scope overload 34861 * src/abg-ir.h (add_decl_to_scope): New declaration. 34862 * src/abg-ir.cc (add_decl_to_scope): New definition. 34863 348642013-05-23 Dodji Seketeli <dodji@redhat.com> 34865 34866 Ensure add_decl_to_scope properly updates the scope 34867 * src/abg-ir.h (scope_decl::m_member_scopes) 34868 (scope_decl::get_member_scopes): New declarations. 34869 (scope_decl::add_member_decl): Move this to ... 34870 * src/abg-ir.cc (scope_decl::add_member_decl): ... here. Make it 34871 update the new scope_decl::m_member_scopes too. 34872 348732013-05-23 Dodji Seketeli <dodji@redhat.com> 34874 34875 Add translation_unit::get_path 34876 * src/abg-ir.cc (translation_unit::get_path): New declaration. 34877 * src/abg-ir.cc (translation_unit::get_path): New definition. 34878 348792013-05-23 Dodji Seketeli <dodji@redhat.com> 34880 34881 Link the global scope to its translation unit 34882 * src/abg-ir.h (global_scope::global_scope): Take a translation 34883 unit and initialize the tu member with it. 34884 * src/abg-ir.cc (translation_unit::get_global_scope): Initialize 34885 the global scope with its actual translation unit. 34886 348872013-05-23 Dodji Seketeli <dodji@redhat.com> 34888 34889 Have location numbers that are stable throughout translation unit editing 34890 * src/abg-irc.cc (location_manager::create_new_location): Just 34891 append the new expanded location to the end of the location 34892 vectors, and return the new size of the vector as the location 34893 number. That way we don't change the location number of an 34894 expanded location that is already in the vector -- that change 34895 happens if we keep the vector sorted during the insertion. 34896 (location_manager::expand_location): The index of the expanded 34897 location is the location number - 1. 34898 348992013-05-23 Dodji Seketeli <dodji@redhat.com> 34900 34901 Fix in-source detection of the library for GCC 34902 * abigail.m4 (ABIGAIL_INIT): Don't forget to set abigaillibs when 34903 we detect the library in the source tree, particularly for GCC. 34904 349052013-05-21 Dodji Seketeli <dodji@redhat.com> 34906 34907 Re-generate aclocal.m4 34908 * aclocal.m4: Re-generate with autoconf 2.64. 34909 349102013-05-21 Benjamin Kosnik <bkoz@redhat.com> 34911 34912 Generate abg-version at configure time in builddir 34913 * configure.ac: Add src/abg-version.h to AC_CONFIG_FILES. 34914 * src/Makefile.am: Remote ad-hoc generation of abg-version.h from 34915 here. 34916 * src/abg-version.h.in: New file. 34917 * configure: Re-generate. 34918 * src/Makefile.in: Likewise. 34919 349202013-05-21 Dodji Seketeli <dodji@redhat.com> 34921 34922 add abigail.m4 to the distribution 34923 * Makefile.am: Add abigail.m4 to the distribution. 34924 * Makefile.in: Re-generate. 34925 349262013-05-10 Dodji Seketeli <dodji@redhat.com> 34927 34928 Pedantic fixes 34929 * src/abg-ir.h (enum decl_base::binding): Remove trailing space. 34930 (enum class_decl::access_specifier): Likewise. 34931 349322013-05-07 Dodji Seketeli <dodji@redhat.com> 34933 34934 Fix for building libabigail inside the GCC tree 34935 * abigail.m4: Detect when we are in the GCC tree; disable version 34936 check in that case. 34937 349382013-05-07 Dodji Seketeli <dodji@redhat.com> 34939 34940 Re-generate configury with autoconf 2.64 34941 * abigail.m4: Add licence header. 34942 * configure.ac: Re-generate configure script with autoconf 2.64 34943 like for GCC. 34944 349452013-05-07 Dodji Seketeli <dodji@redhat.com> 34946 34947 Allow autoconf-based clients to detect the library 34948 * configure.ac: Define the components of the version number as 34949 autoconf variables. Set the version number to 0.1.0 34950 * abigail.m4: New file 34951 * Makefile.am: Add abigail.m4 to the build system. Install it in 34952 $(datadir)/aclocal. 34953 * src/Makefile.am: Generate and add abg-version.h from the version 34954 number autoconf variable defined in configure.ac. Re-generate 34955 abg-version.h each time configure.ac changes. 34956 * src/abg-config.h (abigail_get_library_version): Declare ... 34957 * src/abg-config.cc (abigail_get_library_version): ... and define 34958 this wirth C linkage. This is useful for autoconf tests to test 34959 for the presence of the library. 34960 * configure: Re-generate. 34961 * Makefile.in: Likewise. 34962 * src/Makefile.in: Likewise. 34963 * tests/Makefile.in: Likewise. 34964 349652013-05-03 Dodji Seketeli <dodji@redhat.com> 34966 34967 Build system fix for make distcheck 34968 * Makefile.am: Support the doc sub-directory. We don't have a 34969 COPYRIGHT file. 34970 * src/Makefile.am: Don't prefix the file paths by the absolute 34971 path of the src dir; current autotools know how to deal with it, 34972 otherwise and it break them. 34973 * tests/Makefile.am: Likewise. Make sure to remove the output of 34974 the tests upon make clean. 34975 * Makefile.in: Re-generate. 34976 * aclocal.m4: Likewise. 34977 * configure: Likewise. 34978 * src/Makefile.in: Likewise. 34979 * tests/Makefile.in: Likewise. 34980 349812013-05-02 Dodji Seketeli <dodji@redhat.com> 34982 34983 Initial support for member class templates 34984 * src/abg-ir.cc (class_decl::add_member_function_template): Fix 34985 comment. 34986 (class_decl::add_member_class_template) 34987 (class_decl::member_class_template::operator==) 34988 (class_decl::member_class_template_hash::operator()): New 34989 definitions. 34990 (class_decl::operator==): Compare member templates. Fix logic. 34991 (class_decl::data_member_hash::operator()) 34992 (class_decl::member_function_hash::operator()) 34993 (class_decl::member_function_template_hash::operator()): Don't 34994 hash the is_static boolean as it's hashed as part of the 'member' 34995 sub-object hashing. 34996 (class_decl::member_function_template::operator==): Move this out 34997 of line here, from the header file. 34998 (class_decl_hash::operator()): Hash member class templates. 34999 * src/abg-ir.h (class_decl::member::{m_is_static,is_static}): Add the is_static 35000 boolean here, so that it's factorized out of the inherited classes 35001 of this class. 35002 (class_decl::data_member::{is_static, m_is_static}) 35003 (class_decl::member_function::{is_static, m_is_static}) 35004 (class_decl::member_function_template::{is_static, m_is_static}): Remove this 35005 as it's now part of the base 'member' class. 35006 (class_decl::data_member::operator==) 35007 (class_decl::member_function::operator==): Don't compare the 35008 is_static boolean as it's now compared as part of the 'member' 35009 sub-object comparison. 35010 (class_decl::member_function_template::operator==): Move this 35011 out-of-line into src/abg-ir.cc. 35012 (class class_decl::member_class_template, struct 35013 class_decl::member_class_template_hash) 35014 (class_decl::{add_member_class_template, 35015 get_member_class_templates}): New declarations. 35016 (class_decl::member_class_templates_type): New typedef. 35017 * src/abg-reader.cc (build_class_decl): Support de-serializing 35018 member class templates. 35019 * src/abg-writer.cc (write_class_decl): Likewise, support 35020 serializing member class templates. 35021 * tests/data/test-read-write/test16.xml: New test input. 35022 * tests/test-read-write.cc (int_out_specs[]): Add the new test 35023 input to the list of inputs that are de-serialized and serialized 35024 back. 35025 * tests/Makefile.am: Add the new test input to the distribution. 35026 350272013-05-02 Dodji Seketeli <dodji@redhat.com> 35028 35029 Initial support of class templates 35030 * src/abg-ir.cc (class_template_decl::class_template_decl) 35031 (class_template_decl::set_pattern) 35032 (class_template_decl::operator==) 35033 (class_template_decl::~class_template_decl) 35034 (class_template_decl_hash::operator()) 35035 (class_tmpl_shared_ptr_hash::operator()): New definitions. 35036 * src/abg-ir.h (class class_template_decl, struct 35037 class_tmpl_shared_ptr_hash, struct class_tmpl_shared_ptr_hash): 35038 New declarations. 35039 * src/abg-reader.cc (read_context::const_class_tmpl_map_it): New 35040 typedef. 35041 (read_context::get_fn_tmpl_decl): Fix comment. 35042 (read_context::{get_class_tmpl_decl,key_class_tmpl_decl}) 35043 (build_class_template_decl, handle_class_template_decl): New 35044 definitions. 35045 (read_context::m_class_tmpl_map): New member. 35046 (handle_element): Support "class-template-decl" xml elements 35047 nodes. 35048 (build_class_decl): Add missing bits to comment. 35049 (build_function_template_decl): Fix spacing. 35050 * src/abg-writer.cc (class_tmpl_shared_ptr_map): New typedef. 35051 (write_context::m_class_tmpl_map): New member. 35052 (write_context::get_id_for_class_tmpl, write_class_template_decl): 35053 New definitions. 35054 (write_template_parameters): Factorize this this out from ... 35055 (write_function_template_decl): ... here. 35056 (write_decl): Support writing instances of class_template_decl. 35057 Fix spacing. 35058 * tests/data/test-read-write/test15.xml: New test input. 35059 * tests/Makefile.am: Add the new test15.xml input to the 35060 distribution. 35061 * tests/test-read-write.cc (in_out_specs): Add the new test15.xml 35062 test to the list of serialized output to be de-serialized and 35063 serialized back. 35064 350652013-05-02 Dodji Seketeli <dodji@redhat.com> 35066 35067 Fix function_tempalte_decl init & hashing 35068 * src/abg-ir.cc (function_template_decl::operator==): Compare the 35069 patterns, not a pointer to them. 35070 (function_template_decl_hash::operator()): Don't try to hash null 35071 patterns. 35072 * src/abg-ir.h (function_template_decl::function_template_decl): 35073 Use function_template_decl::set_pattern to set the pattern here. 35074 350752013-04-30 Dodji Seketeli <dodji@redhat.com> 35076 35077 Support member function templates 35078 * src:abg-ir.h: Move template declarations before class 35079 class_decl, so that class_decl can have member templates. 35080 (class class_decl::member_function_template) 35081 (class_decl::add_member_function_template) 35082 (class_decl::{base_specs_type, member_types_type, 35083 data_members_types, member_functions_type, 35084 member_function_templates_type}): New declarations. 35085 * src/abg-ir.cc (class_decl::add_member_function_template) 35086 (class_decl::member_function_template_hash::operator()): New 35087 definitions. 35088 (class_decl_hash::operator()): Support hashing for member 35089 function templates. 35090 * src/abg-reader.cc (build_class_decl): Use the new 35091 class_decl::{member_types_type, data_members_type, 35092 member_functions_type, base_specs_type} types. Support member 35093 function templates. 35094 * src/abg-writer.cc (write_cdtor_const_static): New definition. 35095 (write_class_decl): Support member function templates. 35096 * tests/data/test-read-write/test14.xml: New input data. 35097 * tests/Makefile.am: Add it to the distribution. 35098 * tests/test-read-write.cc (InOutSpec int_out_specs): De-serialize 35099 the new test input file, serialize it back and diff both results. 35100 351012013-04-25 Dodji Seketeli <dodji@redhat.com> 35102 35103 Inheritance fix 35104 * src/abg-ir.h (class template_non_type_parameter): Make this 35105 inherit decl_base virtually. 35106 351072013-04-25 Dodji Seketeli <dodji@redhat.com> 35108 35109 Small comment fix 35110 * src/abg-ir.h (class template_decl): Fix comment. 35111 351122013-04-25 Dodji Seketeli <dodji@redhat.com> 35113 35114 Add some decl predicates 35115 * src/abg-ir.h (is_at_global_scope): Rename 35116 is_decl_at_global_scope into this. 35117 (is_at_class_scope, is_at_template_scope) 35118 (is_template_parameter, is_type) 35119 (is_template_parm_composition_type) 35120 (is_function_template_pattern, is_template_decl): New 35121 declarations. 35122 * src/abg-ir.cc (is_at_global_scope): Rename 35123 is_decl_at_global_scope into this. 35124 (is_at_class_scope, is_at_template_scope, is_template_parameter) 35125 (is_type, is_template_parm_composition_type) 35126 (is_function_template_pattern, is_template_decl): New definitions. 35127 * src/abg-reader.cc (update_depth_info_of_read_context): Use the 35128 new is_at_class_scope decl. 35129 351302013-04-25 Dodji Seketeli <dodji@redhat.com> 35131 35132 Support composing template type parameters 35133 * src/abg-ir.h (class tmpl_parm_type_composition): New 35134 declaration. 35135 * src/abg-ir.cc 35136 (tmpl_parm_type_composition::tmpl_parm_type_composition) 35137 (tmpl_parm_type_composition::~tmpl_parm_type_composition): New 35138 definitions. 35139 * src/abg-reader.cc (build_tmpl_parm_type_composition): New 35140 function. 35141 (build_template_parameter): Support template parameter type 35142 composition. 35143 * src/abg-writer.cc (write_tmpl_parm_type_composition): New 35144 function. 35145 (write_template_non_type_parameter): Fix type-id attribute. 35146 (write_template_parameter): Support template parameter type 35147 composition. 35148 * tests/data/test-read-write/test13.xml: New test input. 35149 * tests/Makefile.am: Add it to the distribution. 35150 * tests/test-read-write.cc (InOutSpec in_out_spec): Add test13.xml 35151 to the list of xml file that are de-serialized and serialized back. 35152 351532013-04-24 Dodji Seketeli <dodji@redhat.com> 35154 35155 Fix depth management during the parsing 35156 * src/abg-ir.cc (decl_base_hash::operator()): Don't hash the 35157 context for decls in general. 35158 * src/abg-reader.cc (read_context::push_decl_to_current_scope) 35159 (read_context::push_and_key_type_decl): Add an overload that takes 35160 a node and update_depth_info boolean. 35161 (build_var_decl, build_type_decl, build_qualified_type_decl) 35162 (build_pointer_type_def, build_reference_type_def) 35163 (build_enum_type_decl, build_type_decl) 35164 (build_template_type_parameter, build_template_non_type_parameter) 35165 (build_template_template_parameter, build_template_parameter) 35166 (build_type): Make these functions take an update_depth_info 35167 parameter. Pass it do read_context::push_and_key_type_decl or 35168 read_context::push_decl_to_current_scope rather than call 35169 update_read_context. 35170 (build_function_decl, build_class_decl) 35171 (build_function_template_decl): Change the seen_by_reader 35172 parameter into update_depth_info. Pass the update_depth_info bool 35173 to read_context::push_decl_to_current_scope rather than call 35174 update_depth_info here. 35175 (handle_class, handle_function_template_decl): Adjust. 35176 * tests/data/test-read-write/test12.xml: Add new test input. 35177 * tests/test-read-write.cc (InOutSpec in_out_specs): Add it to the 35178 list of input to de-serialize, serialize back and compare the two. 35179 * tests/Makefile.am: Add the new test input to the distribution. 35180 351812013-04-23 Dodji Seketeli <dodji@redhat.com> 35182 35183 Initial support for function templates 35184 * src/abg-ir.h (function_decl::set_return_type): New inline 35185 definition. 35186 (class template_decl, struct template_decl_hash, class 35187 template_parameter, struct template_parameter_hash, struct 35188 dynamic_template_parameter_hash, struct 35189 template_parameter_shared_ptr_hash, class template_type_parameter) 35190 (struct template_type_parameter_hash, class 35191 template_non_type_parameter, struct 35192 template_non_type_parameter_hash, class 35193 template_template_parameter, struct 35194 template_template_parameter_hash, class function_template_decl) 35195 (struct function_template_decl_hash, struct 35196 fn_tmpl_shared_ptr_hash): New declarations. 35197 * src/abg-ir.cc (dynamic_type_hash::operator()): Add hashing for 35198 template template, and template type parameters. 35199 (template_decl_hash::operator, template_decl::~template_decl) 35200 (template_decl::operator==, template_parameter::operator==) 35201 (template_parameter_hash::operator()) 35202 (dynamic_template_parameter_hash::operator()) 35203 (template_type_parameter::operator==) 35204 (template_type_parameter::~template_type_parameter) 35205 (template_type_parameter_hash::operator()) 35206 (template_non_type_parameter::operator==) 35207 (template_non_type_parameter::~template_non_type_parameter) 35208 (template_non_type_parameter_hash::operator()) 35209 (template_template_parameter::operator==) 35210 (template_template_parameter::~template_template_parameter) 35211 (template_template_parameter_hash::operator()) 35212 (function_template_decl::operator==) 35213 (function_template_decl_hash::operator()) 35214 (fn_tmpl_shared_ptr_hash::operator()) 35215 (function_template_decl::~function_template_decl()): New 35216 definitions. 35217 * src/abg-reader.cc (read_context::get_fn_tmpl_decl) 35218 (read_context::key_fn_tmpl_decl): New functions. 35219 (read_context::m_fn_tmpl_map): New data member. 35220 (read_context::key_type_decl): Renamed read_context::add_type_decl 35221 into this. 35222 (read_context::push_decl_to_current_scope): Renamed 35223 read_context::finish_decl_creation into this. Add an assert. 35224 (read_context::push_and_key_type_decl): Renamed 35225 read_context::finish_type_decl_creation into this. Adjust to the 35226 use of push_decl_to_current_scope and key_type_decl. 35227 (build_function_template_decl, build_template_type_parameter) 35228 (build_template_non_type_parameter) 35229 (build_template_template_parameter, build_template_parameter) 35230 (handle_function_template_decl): New functions. 35231 (handle_element): Call handle_function_template_decl. 35232 (build_function_decl): Take a bool parameter to update depth 35233 information in parsing context. Move instantiation of 35234 function_decl before parsing its xml sub-nodes. Update the depth 35235 info in the parsing context if necessary. Push the newly 35236 intantiated decl to scope. And then parse the sub nodes. Do not 35237 forget to add the fn parameters and return type using 35238 function_decl::add_parameter and function_decl::set_return_type. 35239 (build_var_decl, build_type_decl, build_qualified_type_decl) 35240 (build_pointer_type_def, build_reference_type_def) 35241 (build_enum_type_decl, build_typedef_decl, handled_type_decl) 35242 (handle_qualified_type_decl, handle_pointer_type_def) 35243 (handle_reference_type_def, handle_enum_type_decl) 35244 (handle_typedef_decl, handle_var_decl, handle_function_decl) 35245 (handle_class_decl): Adjust. 35246 (build_class_decl): Take a bool parameter to update depth 35247 information in parsing context. Add comment. Wait for the class 35248 members to be built, before keying (and thus hashing it) the 35249 class. 35250 (build_type): Fix logic, and adjust. 35251 * src/abg-writer.cc (write_context::type_has_existing_id) 35252 (write_context::get_id_for_fn_tmpl, write_template_type_parameter) 35253 (write_template_non_type_parameter) 35254 (write_template_template_parameter, write_template_parameter) 35255 (write_function_template_decl): New functions. 35256 (write_context::get_id_for_type): Simplify logic. 35257 (write_decl): Support writing function template. 35258 * tests/data/test-read-write/test11.xml: New test input. 35259 * tests/test-read-write.cc (InoutSpec in_out_specs[]): 35260 De-serialize the new test11.xml test, serialize it back and diff 35261 output and input. 35262 * tests/Makefile.am: Add test11.xml to the distribution. 35263 352642013-04-23 Dodji Seketeli <dodji@redhat.com> 35265 35266 Mangled name of a scope_decl is its name 35267 * src/abg-ir.h (scope_decl::scope_decl): The mangled name is the name. 35268 352692013-04-23 Dodji Seketeli <dodji@redhat.com> 35270 35271 Update scope when adding class members 35272 * src/abg-ir.h (class_decl::add_member_type) 35273 (class_decl::add_data_member, class_decl::add_member_function): 35274 Move the inline implementation of these functions ... 35275 * src:abg-ir.cc (class_decl::add_member_type) 35276 (class_decl::add_data_member, class_decl::add_member_function): 35277 ... here. Augment their implementation to properly update the 35278 scope of the member. 35279 352802013-04-23 Dodji Seketeli <dodji@redhat.com> 35281 35282 Rename class_decl::member_type::get_type into as_type 35283 * src/abg-ir.h (class_decl::member_type::get_type): Rename this 35284 into class_decl::member_type::as_type. 35285 * src/abg-writer.cc (write_class_decl): Adjust. 35286 352872013-04-23 Dodji Seketeli <dodji@redhat.com> 35288 35289 Avoid having multiple sub-objects of base classes 35290 * src/abg-ir.cc (decl_base::decl_base): Remove useless definition. 35291 (type_base::type_base): Remove default arguments from parameters. 35292 (scope_type_decl::scope_type_decl) 35293 (namespace_decl::namespace_decl): Call the constructors for the 35294 virtual bases explicitly. 35295 * src/abg-ir.h (class scope_decl): Perform virtual inheritance of 35296 decl_base. 35297 (global_scope::global_scope): Call virtual base decl_base's 35298 constructor directly. 35299 (class type_decl): Inherit from decl_base and type_base 35300 virtually. 35301 (class scope_type_decl): Inherit from type_base virtually. 35302 (class qualified_type_def, pointer_type_def, reference_type_def) 35303 (class enum_type_decl, typedef_decl): Inherit from type_base and 35304 decl_base virtually. 35305 (class var_decl, function_decl): Inherit from decl_base virtually. 35306 (class class_decl::member): Don't inherit from anything and adjust 35307 constructor's mem-initializer accordingly. 35308 (class class_decl::member_type): Inherit from decl_base virtually 35309 and adjust constructor's mem-initializer accordingly. 35310 (class_decl::{data_member::data_member,member_function::member_function) 35311 (class_decl::class_decl): Call virtual base's constructor 35312 explicitly. 35313 353142013-04-22 Dodji Seketeli <dodji@redhat.com> 35315 35316 Move inline hashing functions out of line 35317 * src/abg-ir.h (decl_base_hash::operator()) 35318 (type_base_hash::operator(), type_decl_hash::operator()) 35319 (scope_type_decl_hash::operator()) 35320 (qualified_type_def_hash::operator()) 35321 (pointer_type_def_hash::operator()) 35322 (reference_type_def_hash::operator()) 35323 (enum_type_decl_hash::operator(), typedef_decl_hash::operator()) 35324 (var_decl_hash::operator(), function_decl_hash::operator()) 35325 (class_decl::member_type_hash::operator()) 35326 (class_decl::base_spec_hash::operator()) 35327 (class_decl::data_member_hash::operator()) 35328 (class_decl::member_function_hash::operator()): Move these inline 35329 definition ... 35330 * src/abg-ir.cc: ... here. 35331 353322013-04-22 Dodji Seketeli <dodji@redhat.com> 35333 35334 Various style nit fixes 35335 * src/abg-ir.cc: Move the emacs mode specifier for the file to the 35336 top of the file, otherwise, it's not effective. 35337 (struct location_manager::priv): Add end of struct comment. 35338 (class_decl_hash::operator()): Add fn comment. 35339 * src/abg-ir.h: Move the emacs mode specifier for the file to the 35340 top of the file, otherwise, it's not effective. 35341 (class scope_decl): Add end of class comment. 35342 * src/abg-reader.cc: Move the emacs mode specifier for the file to the 35343 top of the file, otherwise, it's not effective. 35344 (read_context::{get_type_decl,add_type_decl): Add comment. 35345 (handle_namespace_decl): Fix indent. 35346 * src/abg-writer.cc: Move the emacs mode specifier for the file to 35347 the top of the file, otherwise, it's not effective. 35348 353492013-04-12 Dodji Seketeli <dodji@redhat.com> 35350 35351 Remove .gitignore from VCS 35352 * .gitignore: Remove from revision control as different 35353 programmers might want to ignore different things. 35354 353552013-04-08 Benjamin Kosnik <bkoz@redhat.com> 35356 35357 Add license 35358 * src/abg-*: Add license. 35359 * tests/test-*: Same. 35360 353612013-04-11 Dodji Seketeli <dodji@redhat.com> 35362 35363 Initial Support for class declarations 35364 * src/abg-ir.h (scope_decl::scope_decl) 35365 (scope_type_decl::scope_type_decl): Don't set mangled name for 35366 scope_decl instances as it doesn't make sense. 35367 (var_decl::var_decl): Pass the type shared pointer by value. 35368 (struct var_decl_hash, function_decl::parameter::operator==) 35369 (struct function_decl::parameter_hash, function_decl::operator==) 35370 (struct function_decl_hash, class class_decl, struct 35371 class_decl_hash): New declarations. 35372 * src/abg-ir.cc (scope_type_decl::scope_type_decl): Don't set the 35373 mangled name. It doesn't make sense for scope_decls. 35374 (dynamic_type_hash::operator): Fix comment. Run the hashing for 35375 scope_type_decl instances *after* running it for class_decl 35376 instance, otherwise, the class_decl instances case will never get 35377 hit. 35378 (var_decl::var_decl): Pass the type shared pointer by value. 35379 (function_decl::operator==, class_decl::operator==) 35380 (class_decl_hash::operator()): New fns. 35381 * src/abg-libxml-utils.h (get_xml_node_depth): Declare new fn. 35382 (XML_READER_GET_ATTRIBUTE): Fix comment. 35383 (XML_NODE_GET_ATTRIBUTE): New getter macro. 35384 * src/abg-libxml-utils.cc (get_xml_node_depth): New definition. 35385 * src/abg-reader.cc (update_read_context) 35386 (update_depth_info_of_read_context, read_visibility, read_binding) 35387 (read_access, read_size_and_alignment, read_static) 35388 (read_var_offset_in_bits, read_cdtor_const, build_function_decl) 35389 ( build_var_decl, build_type_decl, build_qualified_type_decl) 35390 (build_pointer_type_def, build_reference_type_def) 35391 (build_enum_type_decl, build_typedef_decl, build_class_decl) 35392 (build_type, handle_class_decl): New functions or overloads. 35393 (handle_element): Update to handle "class-decl" xml elements. 35394 * src/abg-writer.cc (write_size_and_alignment, write_access) 35395 (write_class, do_indent_to_level, get_indent_to_level): New fns. 35396 (write_decl): Update to serialize instances of class_decl. 35397 (write_type_decl, write_pointer_type_def) 35398 (write_reference_type_def): Use the new write_size_and_alignment instead of 35399 writing the attributes directly. 35400 * tests/data/test-read-write/test10.xml: New test file. 35401 * tests/Makefile.am: Add tests/data/test-read-write/test10.xml to 35402 the build system. 35403 * tests/test-read-write.cc (in_out_spec): De-serialize 35404 data/test-read-write/test10.xml, serialize it back into 35405 output/test-read-write/test10.xml, and compare the two output that 35406 should be identical. 35407 354082013-04-11 Dodji Seketeli <dodji@redhat.com> 35409 35410 Update enum decl representation as per the schema 35411 * src/abg-reader.cc (handle_enum_type_decl): The name of the 35412 element holding the underlying type is now "underlying-type", no 35413 more "base". 35414 * src/abg-writer.cc (write_enum_type_decl): Likewise. 35415 * tests/data/test-read-write/test6.xml: Likewise. 35416 354172013-04-10 Dodji Seketeli <dodji@redhat.com> 35418 35419 Add tests/data/test-read-write/test9.xml 35420 * tests/data/test-read-write/test9.xml: (Forgot to) Add this new 35421 test file. 35422 354232013-04-04 Dodji Seketeli <dodji@redhat.com> 35424 35425 Support function declarations 35426 * src/abg-ir.h (class function_decl): New declaration & inline 35427 definitions. 35428 * src/abg-ir.cc (function_decl::~function_decl): New definition. 35429 * src/abg-reader.cc (read_location): New overload to read location 35430 from an xmlNodePtr. 35431 (build_function_parameter, handle_function_decl): 35432 New definitions. 35433 (handle_element): Support "function-decl" elements. 35434 * src/abg-writer.cc (write_location): New overload to write a 35435 location directly, not from a decl. 35436 (write_function_decl): New definition. 35437 (write_binding): Support writing the binding attribute from a 35438 function_decl instance. 35439 (write_decl): support serializing function 35440 * tests/data/test-read-write/test9.xml: New test input file. 35441 * tests/Makefile.am: Add data/test-read-write/test9.xml to the 35442 build system. 35443 * tests/test-read-write.cc: De-serialize 35444 data/test-read-write/test9.xml, serialize it back and diff the 35445 output from the input. 35446 354472013-04-03 Dodji Seketeli <dodji@redhat.com> 35448 35449 Update in-vcs configure and docs/Makefile.in to recent configure 35450 * configure: Updated as re-generated by autoconf 2.69. 35451 * doc/Makefile.in: Updated as re-generated by automake 1.12.2. 35452 354532013-04-02 Benjamin Kosnik <bkoz@redhat.com> 35454 35455 Add doc dir. Add Doxgen api generation rules. 35456 * doc: Add. 35457 * doc/Makefile.am (html, install-html): Add. 35458 * doc/Makefile.in: Add. 35459 * doc/api/libabigail.doxy: Add doxygen config. 35460 * src/abg-*: Add @file markup. 35461 354622013-04-03 Dodji Seketeli <dodji@redhat.com> 35463 35464 Introduce/use translation_unit & global_scope types 35465 * abg-corpus.h (abi_corpus::{get_decls, get_loc_mgr}): Remove. 35466 (abi_corpus::add): New function to add a translation unit. 35467 (abi_corpus::get_translation_units): New declaration. 35468 * abg-corpus.cc (abi_corpus::*): Remove all the definitions of 35469 abi_corpus for now, as the abi_corpus type is not used anymore -- 35470 for now at least. 35471 * src/abg-ir.h (add_decl_to_scope, get_global_scope) 35472 (get_translation_unit, is_global_scope, is_decl_at_global_scope) 35473 (class translation_unit, class global_scope): New declarations 35474 * src/abg-ir.cc (translation_unit::translation_unit) 35475 (translation_unit::get_global_scope) 35476 (translation_unit::get_loc_mgr, translation_unit::get_loc_mgr) 35477 (translation_unit::is_empty, get_global_scope) 35478 (get_translation_unit, is_global_scope, is_global_scope) 35479 (is_decl_at_global_scope, global_scope::~global_scope): New 35480 definitions. 35481 (scope_decl::scope_decl, scope_decl::scope_decl) 35482 (scope_decl::add_member_decl, scope_decl::get_member_decls): Move 35483 to abg-ir.h, inline. 35484 * src/abg-reader.h (read_file): Don't use abi_corpus in the api. 35485 Rather, use translation_unit. 35486 * src/abg-reader.cc (read_context::get_cur_scope): Now that we 35487 have a specific instance of global_scope to represent global 35488 scope, don't play games with empty scopes to detect a global 35489 scope. 35490 (read_context::get_translation_unit): New definition. 35491 (read_context::finish_decl_creation, finish_type_decl_creation): 35492 (read_input, read_file, read_location, handle_element) 35493 (handle_type_decl) 35494 (handle_namespace_decl, handle_qualified_type_decl) 35495 (handle_pointer_type_def, handle_reference_type_def) 35496 (handle_enum_type_decl, handle_typedef_decl, handle_var_decl): 35497 Don't use abi_corpus anymore. Rather, the translation unit a decl 35498 belongs to is accessible from the decl itself. 35499 * src/abg-writer.h (write_to_ostream): Use translation_unit in 35500 this API, rather than abi_corpus. 35501 * src/abg-writer.cc (write_translation_unit): Rename write_corpus 35502 into this. And stop using abi_corpus here. 35503 (write_to_ostream, write_corpus, write_location, write_decl) 35504 (write_type_decl, write_namespace_decl, write_qualified_type_def) 35505 (write_pointer_type_def, write_reference_type_def) 35506 (write_enum_type_decl, write_typedef_decl, write_var_decl): Stop 35507 using abi_corpus. Use the translation_unit that is accessible 35508 from the decl being serialized, if need be. 35509 * test-read-write.cc (main): De-serialize the input into an 35510 instance of translation_unit, not an abi_corpus anymore, and 35511 serialize that translation_unit. 35512 355132013-04-02 Dodji Seketeli <dodji@redhat.com> 35514 35515 Support var decl & mangled_name attributes 35516 * src/abg-ir.h (decl_base::binding, decl_base::get_mangled_name) 35517 (decl_base::set_mangled_name, decl_base::m_mangled_name): New 35518 declarations. 35519 (scope_decl::scope_decl: type_decl::type_decl) 35520 (scope_type_decl::scope_type_decl, typedef_decl::typedef_decl): 35521 Initialize mangled_name. 35522 (namespace_decl::namespace_decl): Initialize visibility. 35523 (class var_decl): New declaration. 35524 * src/abg-ir.cc (decl_base::decl_base, scope_decl::scope_decl) 35525 (type_decl::type_decl, scope_type_decl::scope_type_decl): 35526 Initialize mangled name. 35527 (namespace_decl::namespace_decl): Initialize visibility. 35528 (qualified_type_def::qualified_type_def) 35529 (pointer_type_def::pointer_type_def) 35530 (reference_type_def::reference_type_def): By default, set the 35531 visibility to the same as for the underlying type. 35532 (enum_type_decl::enum_type_decl, typedef_decl::typedef_decl): 35533 Initialize mangled name. 35534 (var_decl::var_decl, var_decl::operator==, var_decl::~var_decl): 35535 New definitions. 35536 * src/abg-reader.cc (read_visibility, read_binding, handle_var_decl): New 35537 definitions. 35538 (read_file): Handle var-decl elements. 35539 * src/abg-writer.cc (write_location): Rename write_decl_location 35540 into this. 35541 (write_var_decl, write_visibility, write_binding): New definitions. 35542 (write_decl, write_type_decl, write_qualified_type_def) 35543 (write_pointer_type_def, write_reference_type_def) 35544 (write_enum_type_decl, write_typedef_decl): Adjust to use 35545 write_location. 35546 * tests/data/test-read-write/test8.xml: New test input. 35547 * tests/test-read-write.cc: De-serialize the above and serialize 35548 it back and ensure both are equal. 35549 * tests/Makefile.am: add tests/data/test-read-write/test8.xml to 35550 the distribution. 35551 355522013-04-02 Dodji Seketeli <dodji@redhat.com> 35553 35554 Don't forget to init context & visibility in decl_base 35555 * src/abg-ir.cc (decl_base::decl_base): Initialize context and 35556 visibility on all the overloads of the constructor. 35557 355582013-03-31 Dodji Seketeli <dodji@redhat.com> 35559 35560 Fix some style 35561 * src/abg-ir.h (decl_base::get_scope): Really re-style. 35562 355632013-03-31 Dodji Seketeli <dodji@redhat.com> 35564 35565 Fix some style 35566 * src/abg-ir.h (decl_base::{get_location, set_location, get_name, 35567 set_name}): Re-style. 35568 355692013-03-31 Dodji Seketeli <dodji@redhat.com> 35570 35571 Basic support for type/decl visibility 35572 * src/abg-ir.h (enum decl_base::visibility) 35573 (decl_base::get_visibility, decl_base::set_visibility) 35574 (decl_base::m_visibility): New. 35575 (decl_base::decl_base, scope_decl::scope_decl) 35576 (type_decl::type_decl, enum_type_decl::enum_type_decl) 35577 (typedef_decl::typedef_decl): Pass visibility. 35578 * src/abg-ir.cc (decl_base::decl_base, scope_decl::scope_decl) 35579 (type_decl::type_decl, enum_type_decl::enum_type_decl) 35580 (typedef_decl::typedef_decl): Pass visibility. 35581 (qualified_type_def::qualified_type_def) 35582 (pointer_type_def::pointer_type_def) 35583 (reference_type_def::reference_type_def): Initialize visibility. 35584 355852013-03-31 Dodji Seketeli <dodji@redhat.com> 35586 35587 A type/decl shouldn't hold a reference on its scope 35588 * src/abg-ir.h (decl_base::m_context): Make this a naked pointer. 35589 (decl_base::set_scope, add_decl_to_scope): Pass the 35590 scope as a naked pointer. 35591 * src/abg-ir.cc (decl_base::decl_base): Initialize the context to 35592 0. 35593 (decl_base::set_scope, add_decl_to_scope): Pass the scope as a 35594 naked pointer. 35595 * src/abg-reader.cc (read_context::get_cur_scope): Return a naked 35596 pointer. 35597 (handle_namespace_decl): Adjust accordingly. 35598 355992013-03-30 Dodji Seketeli <dodji@redhat.com> 35600 35601 Support typedef declarations 35602 * src/abg-ir.cc (dynamic_type_hash::operator()): Handle hashing of 35603 a pointer to an instance of typedef_decl. 35604 (typedef_decl::typedef_decl, typedef_decl::operator==) 35605 (typedef_decl::operator==, typedef_decl::get_underlying_type) 35606 (typedef_decl::~typedef_decl): New definitions. 35607 * src/abg-ir.h (class typedef_decl, struct typedef_decl_hash): New 35608 declarations. 35609 * src/abg-reader.cc (handle_typedef_decl): New definition. 35610 (handle_element): Handle de-serialization of typedef-decl element. 35611 * src/abg-writer.cc (write_typedef_decl): New definition. 35612 (write_decl): Handle serialization of an instance of typedef_decl. 35613 * tests/data/test-read-write/test7.xml: New test. 35614 * tests/Makefile.am: Add it to the distribution. 35615 * tests/test-read-write.cc: De-serialize the content of the new 35616 test, serialize it back and diff both. 35617 356182013-03-30 Dodji Seketeli <dodji@redhat.com> 35619 35620 Remove useless static_cast from hashing code 35621 * src/abg-ir.h (scope_type_decl_hash::operator()) 35622 (qualified_type_def_hash::operator()) 35623 (pointer_type_def_hash::operator()) 35624 (reference_type_def_hash::operator()): Remove useless static_cast. 35625 356262013-03-30 Dodji Seketeli <dodji@redhat.com> 35627 35628 Simplify equality operators 35629 * src/abg-ir.cc (qualified_type_def::operator==) 35630 (pointer_type_def::operator==, reference_type_def::operator==) 35631 (enum_type_decl::operator==): Simplify the code by safely assuming 35632 the underlying type is non-null. 35633 356342013-03-30 Dodji Seketeli <dodji@redhat.com> 35635 35636 Support enum type declarations 35637 * src/abg-ir.h (class enum_type_decl, struct enum_type_decl_hash): 35638 New declarations. 35639 * src/abg-ir.cc (dynamic_type_hash::operator()): Add hashing 35640 support for enum_type_decl. 35641 (enum_type_decl::enum_type_decl) 35642 (enum_type_decl::get_underlying_type) 35643 (enum_type_decl::get_enumerators, enum_type_decl::~enum_type_decl) 35644 (enum_type_decl::operator==): New definitions. 35645 * src/abg-reader.cc (handle_enum_type_decl): New definition. 35646 (handle_element): Handle "enum-decl" element. 35647 * src/abg-writer.cc (write_enum_type_decl): New. 35648 (write_decl): Add support to serialize enum_type_decl. 35649 * tests/test-read-write.cc: De-serialize and serialize 35650 data/test-read-write/test6.xml back. 35651 * tests/data/test-read-write/test6.xml: New test input. 35652 * tests/Makefile.am: Add it to the distribution. 35653 356542013-03-30 Dodji Seketeli <dodji@redhat.com> 35655 35656 Fix reference-type-def serialization 35657 * tests/test-read-write.cc: Really de-serialize and then serialize 35658 back data/test-read-write/test5.xml, not test4.xml. Sigh. 35659 * src/abg-writer.cc (write_reference_type_def): As a result of 35660 really trying to serialize reference type definitions fix the 35661 serialization code here. 35662 356632013-03-29 Dodji Seketeli <dodji@redhat.com> 35664 35665 Support reference types 35666 * src/abg-ir.h (class reference_type_def, struct pointer_type_def) 35667 (struct reference_type_def): New declaration. 35668 (type_base_hash::operator(), type_decl_hash::operator()) 35669 (scope_type_decl_hash::operator()) 35670 (qualified_type_def_hash::operator()): Include the typeid name in 35671 the hash. 35672 * src/abg-ir.cc (reference_type_def::reference_type_def) 35673 (reference_type_def::operator==) 35674 (reference_type_def::get_pointed_to_type) 35675 (reference_type_def::is_lvalue) 35676 (reference_type_def::~reference_type_def): New definitions. 35677 (dynamic_type_hash::operator): Hash pointer_type_def and 35678 reference_type_def instances. 35679 * src/abg-reader.cc (read_context::finish_decl_creation) 35680 (read_context::finish_type_decl_creation) 35681 (handle_reference_type_def): New definitions. 35682 (read_file): Handle "reference-type-def" elements. 35683 (handle_type_decl, handle_namespace_decl) 35684 (handle_qualified_type_decl, handle_pointer_type_def): Use the new 35685 read_context::finish_type_decl_creation or 35686 read_context::finish_decl_creation. 35687 * src/abg-writer.cc (write_reference_type_def): New definition. 35688 (write_decl): Supporting writing a pointer to an instance of 35689 reference_type_def. 35690 * tests/data/test-read-write/test5.xml: New test file. 35691 * tests/test-read-write.cc: (De)Serialize it. 35692 * tests/Makefile.am: Add it to the build system. 35693 356942013-03-28 Dodji Seketeli <dodji@redhat.com> 35695 35696 Support pointer types & Fix IR types equality 35697 * src/abg-ir.h (location::{operator==, operator<}) 35698 (decl_base::operator==, scope_decl::operator==) 35699 (type_base::operator==, struct type_shared_ptr_equal) 35700 (type_decl::operator==, scope_type::operator==) 35701 (qualified_type_def::operator==, class pointer_type_def): New 35702 declarations.. 35703 * src/abg-ir.cc (decl_base::operator==, scope_decl::operator==) 35704 (type_base::operator==, type_decl::operator==) 35705 (scope_type_decl::operator==, namespace_decl::operator==) 35706 (qualified_type_def::operator==) 35707 (pointer_type_def::pointer_type_def, pointer_type_def::operator==) 35708 (pointer_type_def::get_pointed_to_type) 35709 (pointer_type_def::~pointer_type_def): New definitions. 35710 * src/abg-reader.cc (handle_pointer_type_def): New definition. 35711 (read_input): Handle pointer-type-def 35712 elements. 35713 * src/abg-writer.cc (type_shared_ptr_map): Make this map use the 35714 use type_shared_ptr_equal predicate. 35715 (write_pointer_type_def): New definition. 35716 (write_decl): Improve logic. Support serializing a pointer to 35717 pointer_type_def. 35718 * tests/data/test-read-write/test4.xml: New test input file. 35719 * tests/Makefile.am: Add tests/data/test-read-write/test4.xml to 35720 the build system. 35721 * tests/test-read-write.cc: (De)serialize the new test file. 35722 357232013-03-27 Dodji Seketeli <dodji@seketeli.org> 35724 35725 Support qualified types & Misc ancillary fixes 35726 * src/abg-ir.h (struct type_base_hash, struct dynamic_type_hash) 35727 (struct type_shared_ptr_hash, struct scope_type_decl_hash, class 35728 qualified_type_def, struct qualified_type_def_hash): New. 35729 (decl_base_hash::operator()): Constify. Don't crash if the scope 35730 of the decl we are hashing is null. 35731 (class type_decl): Add comment at the end. 35732 (type_decl_hash::operator()): Constify. Reuse the new 35733 type_base_hash hasher. 35734 (class namespace_decl): Add comment. 35735 * src/abg-ir.cc (qualified_type_def::qualified_type_def) 35736 (qualified_type_def::~qualified_type_def) 35737 (qualified_type_def::get_cv_quals) 35738 (qualified_type_def::set_cv_quals) 35739 (qualified_type_def::get_underlying_type) 35740 (dynamic_type_hash::operator()): New function definitions. 35741 * src/abg-reader.cc (handle_qualified_type_decl): New. 35742 (read_file): Handle elements named "qualified-type-def". 35743 (read::context::add_type_decl): Assert that 35744 the type being associated to the unique ID is non-null. 35745 (handle_type_decl): Fix this in the process; don't crash if some 35746 attributes are not present. Associate the unique id present in 35747 the xml document with the type we just parsed. 35748 (handle_namespace_decl): Add some comments. Don't crash if the 35749 name attribute is not present. 35750 * src/abg-writer.cc (write_context::get_id_for_type) 35751 (write_context::m_type_id_map, write_decl_location) 35752 (write_qualified_type_def): New. 35753 (write_decl): Handle instances of qualified_type_def. 35754 (write_type_decl): Use the new write_decl_location and 35755 write_context::get_id_for_type. 35756 * tests/data/test-read-write/test0.xml: Update id format since we 35757 are now using the new write_context::get_id_for_type to generate 35758 it. 35759 * tests/data/test-read-write/test1.xml: Likewise. 35760 * tests/data/test-read-write/test2.xml: Likewise. 35761 * tests/data/test-read-write/test3.xml: New test. 35762 * tests/test-read-write.cc: Test De-serializing 35763 tests/data/test-read-write/test3.xml and serializing it back. 35764 Also don't bail out if we fail on one input. 35765 * tests/Makefile.am: Add tests/data/test-read-write/test3.xml to the 35766 distribution. 35767 357682013-03-27 Benjamin Kosnik <bkoz@redhat.com> 35769 35770 Various autotool adjustments 35771 * configure: Add. 35772 * configure.ac (AM_INIT_AUTOMAKE): Use gcc versions. 35773 (PKG_CHECK_MODULES): Re-use libjava/classpath solution, naming. 35774 * m4/pkg.m4: Add, take from classpath. 35775 * src/Makefile.am: Adjust names. 35776 357772013-03-26 Dodji Seketeli <dodji@seketeli.org> 35778 35779 Remove the 'm_kind' member from the IR 35780 * src/abg-ir.{h,cc}: Remove use of the m_kind field. We are using 35781 full blown rtti so this uselessly just clutter the code. 35782 357832013-03-26 Dodji Seketeli <dodji@seketeli.org> 35784 35785 Fix parallel build 35786 * tests/Makefile.am: Remove useless absolute reference to the 35787 current directory. 35788 357892013-03-26 Dodji Seketeli <dodji@seketeli.org> 35790 35791 Fix depth handling during the parsing 35792 * src/abg-reader.cc (read_context::get_cur_scope): Remove useless 35793 const overload. Don't make this rely on m_cur_scope. Rather, use 35794 the path to the current decl (from the root element) to compute 35795 the cur scope. 35796 (read_context::m_cur_scope, read_context::set_cur_scope): Remove 35797 these. 35798 (update_read_context): Re-think logic. 35799 * tests/data/test-read-write/test2.xml: Add new test input. 35800 * tests/Makefile.am: Add data/test-read-write/test2.xml to the 35801 distribution. 35802 * tests/test-read-write.cc: Add data/test-read-write/test2.xml to 35803 the harness. 35804 358052013-03-25 Dodji Seketeli <dodji@seketeli.org> 35806 35807 Debug read-write of a type-decl in a namespace-decl 35808 * abg-ir.{h,cc} (decl_base::decl_base, scope_decl::scope_decl) 35809 (type_decl::type_decl, namespace_decl::namespace_decl): Do not 35810 append a decl to its context from within its constructor. It's 35811 better doing that in a function that takes shared_ptrs to decl and 35812 context. That way we avoid memory management havoc. 35813 (decl_base::set_scope): New private function. 35814 (scope_decl::add_member_decl): Make this private. 35815 (add_decl_to_scope): New function, friend of decl_base and 35816 scope_decl. 35817 * abg-reader.cc (read_context::get_cur_scope): Add a non-const 35818 overload. 35819 (handle_type_decl, handle_namespace_decl): Use add_decl_to_scope. 35820 Adjust to new type_decl and namespace_decl constructor signature. 35821 * src/abg-writer.cc (write_type): Emit 'id', not 'xml:id'. 35822 (write_namespace_decl): Emit "namespace-decl", not 35823 "namespace-decl-name", as the name of namespace element. 35824 * tests/Makefile.am (test0.xml): Rename input0.xml into this. 35825 (test1.xml): New test input. 35826 * tests/data/test-read-write/test0.xml: Update to use 'id' as id 35827 attribute, rather than xml:id. 35828 * tests/data/test-read-write/test1.xml: New test. 35829 * test-read-write.cc (struct InOutSpec): New 35830 (main): Reorganize to give a list of input files to read and to 35831 write to an output file, have the test read the input files, write 35832 them, and diff the two. 35833 358342013-03-22 Dodji Seketeli <dodji@seketeli.org> 35835 35836 Update tests/data/test-read-write/input0.xml 35837 * tests/data/test-read-write/input0.xml: Make this identical to 35838 how it would look like when serialized. 35839 358402013-03-22 Dodji Seketeli <dodji@seketeli.org> 35841 35842 Debug type-decl serialization 35843 * src/abg-writer.cc (do_indent): New function. 35844 (write_corpus&): Use do_indent. Don't forget to close the 35845 abi-instr tag. 35846 (write_type_decl): Use do_indent. Handle null decls pointers. 35847 Emit the id at the end of the element. 35848 (write_namespace_decl): Use do_indent. Handle null decls 35849 pointers. 35850 * tests/test-utils.{h,cc} (get_src_dir,get_build_dir): Constify 35851 the returned reference to string. 35852 (is_dir, ensure_dir_path_created, ensure_parent_dir_created): New 35853 function definitions. 35854 * tests/test-read-write.cc (main): Augment the test to serialize 35855 the corpus too. 35856 358572013-03-21 Dodji Seketeli <dodji@seketeli.org> 35858 35859 Debugged type-decl de-serialization 35860 * src/abg-ir.cc (namespace_decl::~namespace_decl): Add this 35861 missing virtual constructor definition. 35862 * src/abg-reader.cc (read_context::{get_cur_decl,pop_decl}): 35863 Return a null pointer when the decls stack is empty. 35864 (update_read_context): Don't try to de-reference a NULL cur_decl. 35865 (read_input): Don't try to poke at file validity here. What was I 35866 thinking. Really test for advance_cursor to return 1, expressing 35867 success. 35868 * src/abg-reader.h (read_file): Fix style. 35869 * Makefile.am: Add tests sub-directory. 35870 * configure.ac: Build with debugging-friendly options if the 35871 ABIGAIL_DEBUG env variable is set. Generate tests/Makefile. 35872 * tests/Makefile.am: New file. 35873 * tests/test-read-write.cc: Likewise. 35874 * tests/test-utils.{h,cc}: Likewise. 35875 * tests/data/test-read-write/input0.xml: Likewise. 35876 358772013-03-21 Dodji Seketeli <dodji@seketeli.org> 35878 35879 Initial implementation of serialization of basic types and namespaces. 35880 * src/Makefile.am: Add abg-writer.{h,cc} and abg-config.{h,cc}. 35881 * src/abg-config.{h,cc}: New files. 35882 * src/abg-corpus.h (abi_corpus::decls_type): New typedef. 35883 (abi_corpus::{add,get_decls,get_loc_mgr}): Fix style. 35884 (abi_corpus::is_empty): Declare new function. 35885 * src/abg-corpus.cc (abi_corpus::add): really add the declaration 35886 to the corpus. 35887 (abi_corpus::is_empty): Define new function. 35888 * src/abg-ir.{h,cc} (location_manager::expand_location): Consti-fy 35889 this function. 35890 * src/abg-reader.cc (read_file): Add a corpus parameter. 35891 * src/abg-serialize.cc: Delete this file. 35892 * src/abg-writer.h (write_to_ostream): Rename write into this. 35893 Make it take a corpus and an ostream as parameters. 35894 * abg-writer.cc: New file. 35895 358962013-03-08 Dodji Seketeli <dodji@seketeli.org> 35897 35898 Parse type-decl and namespace-decl elements 35899 * configure.ac: Add libxml2 dependencies. 35900 * src/abg-corpus.{h,cc}: New files. 35901 * src/abg-hash.{h,cc}: Likewise. 35902 * src/abg-libxml-utils.{h,cc}: Likewise. 35903 * src/abg-reader.{h,cc}: Likewise. 35904 * src/abg-serialize.{h,cc}: Likewise. 35905 * src/abg-writer.h: Likewise. 35906 * src/Makefile.am: Build the new files above. 35907 * src/abg-ir.h (class location): Add public accessors for the value, and 35908 a truth operator. Make the methods be inline. 35909 (class decl_base): Renamed decl into this. Renamed what_decl_kind 35910 into what_kind. Renamed get_context into get_scope. Add virtual 35911 destructor, accessors for location and name. 35912 (class {scope_decl, type_base, type_decl} ): Add virtual dtor. 35913 Re-style. 35914 (struct {decl_base_hash, type_decl_hash}): New hashing functors. 35915 (class {scope_type_decl, namespace_decl}): Add virtual dtor. 35916 * src/abg-ir.cc (location::*): Remove location definitions. There 35917 are now inline in the header. 35918 (class decl_base): Renamed decl into this. Remove most of the 35919 definitions from here as their are now inline in the header. 35920 (scope_decl::~scope_decl, type_base::~type_base) 35921 (type_decl::~type_decl, scope_type_decl::~scope_type_decl): New 35922 definitions. 35923 359242013-03-04 Dodji Seketeli <dodji@seketeli.org> 35925 35926 Updated hierarchy up to namespace_decl 35927 * src/abg-ir.h (location): Make the default ctor public. 35928 (class decl): Declare data member and proper constructors. Make the 35929 context be a shared_ptr. Add a kind data member to avoid RTTI for 35930 now. 35931 (class scope_decl): Added protected constructor to handle the kind data 35932 member. 35933 (class type_base): Add data members proper and clean the iface up. 35934 (class type_decl, scope_type_decl, namespace_decl): Iron out 35935 constructors. 35936 * src/abg-ir.cc (class location): Fix style. 35937 (class decl, scope_decl, type_base, type_decl, scope_type_decl) 35938 (namespace_decl): Define these types. 35939 359402013-03-01 Dodji Seketeli <dodji@seketeli.org> 35941 35942 Add missing autoconfiscation files into version control 35943 * config.guess: Added to VCS. 35944 * config.sub: Likewise. 35945 * depcomp: Likewise. 35946 * install-sh: Likewise. 35947 * ltmain.sh: Likewise. 35948 * missing: Likewise 35949 359502013-03-01 Dodji Seketeli <dodji@seketeli.org> 35951 35952 Upload m4 file 35953 * m4/: Import this directory into version control. 35954 359552013-03-01 Dodji Seketeli <dodji@seketeli.org> 35956 35957 Create and expand locations 35958 * src/abg-ir.h (class {location, location_manager, decl, 35959 scoped_decl, type_base, type_decl, scope_type_decl): Declare new 35960 types. 35961 * src/abg-ir.cc (class {location, location_manager}): Define new types. 35962 359632013-03-01 Dodji Seketeli <dodji@seketeli.org> 35964 35965 Adjust src/Makefile.am after some file rename 35966 * src/Makefile.am: Update build system for renaming files from 35967 abgl-* into abg-*. 35968 359692013-03-01 Dodji Seketeli <dodji@seketeli.org> 35970 35971 Update the README file 35972 * README: Update. 35973 359742013-02-28 Dodji Seketeli <dodji@seketeli.org> 35975 35976 Initial AUTHORS and README 35977 * AUTHORS: 35978 * README: 35979 359802013-02-28 Dodji Seketeli <dodji@seketeli.org> 35981 35982 Leave license stuff for later 35983 * COPYING: 35984 359852013-02-28 Dodji Seketeli <dodji@seketeli.org> 35986 35987 Initial import Abigail 35988 * AUTHORS: 35989 * COPYING: 35990 * ChangeLog: 35991 * INSTALL: 35992 * Makefile.am: 35993 * NEWS: 35994 * README: 35995 * config.h.in: 35996 * configure.ac: 35997 * src/Makefile.am: 35998 * src/abg-ir.cc: 35999 * src/abg-ir.h: 36000 36001