mirror of
git://sourceware.org/git/libabigail.git
synced 2025-02-22 08:46:59 +00:00
The Git repository of the Libabigail Project
There is a confusion in the DWARF reader about static member functions and non-static member functions. With recent versions of DWARF, a member function with the DW_AT_object_pointer attribute is known to have a this-pointer and thus designates a non-static member function. DWARF emitted by gcc 4.4.x and previous compiler didn't emit the DW_AT_object_pointer so we need to look at the first parameter of the member function, make sure it's artificial and pointers to a pointer to the same class as the class of the current member function. This patch avoids to confuse static and non-static member functions by telling apart types of static member functions, non-static member function and non member functions. This fixes the representation of several method types and function declaration signatures across the test suite. * include/abg-ir.h (method_type::get_is_for_static_method): Add new method. * src/abg-dwarf-reader.cc (fn_die_first_parameter_die) (member_fn_die_has_this_pointer, die_peel_typedef): Define new static functions. (die_this_pointer_is_const): Make this support DIEs representing const pointers. (die_function_type_is_method_type): Use the new member_fn_die_has_this_pointer function rather than (wrongly) open coding its functionality. If the (member) function DIE has no this pointer DIE and if the function is at class scope, then we are looking a static member function. (finish_member_function_reading): Use the new method::get_is_for_static_method method rather than open-coding its functionality. * src/abg-ir.cc (method_type::get_is_for_static_method): Define new method. (type_topo_comp::operator()): In this comparison operator for types, if two method types have the same string representation then if one method type is for a static method, then make the non-static method type come first. (function_type::get_first_non_implicit_parm): The first parameter of a function can only carry the "this pointer" if it's artificial. * tests/data/test-abidiff-exit/PR31513/reported/PR31513-reported-report-1.txt: Adjust. * tests/data/test-abidiff/test-struct1-report.txt: Likewise. * tests/data/test-abidiff/test-struct1-v0.cc.bi: Likewise. * tests/data/test-abidiff/test-struct1-v1.cc.bi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. Signed-off-by: Dodji Seketeli <dodji@redhat.com> |
||
---|---|---|
.github | ||
autoconf-archive | ||
bash-completion | ||
doc | ||
docker | ||
include | ||
m4 | ||
patches | ||
relicensing-scripts | ||
scripts | ||
src | ||
tests | ||
tools | ||
.clang-format | ||
.gitignore | ||
.mailmap | ||
abigail.m4 | ||
ABIXML-FORMAT-VERSIONS | ||
AUTHORS | ||
ChangeLog | ||
COMMIT-LOG-GUIDELINES | ||
COMPILING | ||
configure.ac | ||
CONTRIBUTING | ||
default.abignore | ||
gen-changelog.py | ||
install-sh | ||
libabigail.pc.in | ||
license-change-2020.txt | ||
LICENSE.txt | ||
ltmain.sh | ||
Makefile.am | ||
NEWS | ||
README | ||
README-DOCKER.md | ||
release-text-template.txt | ||
update-copyright.sh | ||
VISIBILITY |
This is the Application Binary Interface Generic Analysis and Instrumentation Library. It aims at constructing, manipulating, serializing and de-serializing ABI-relevant artifacts. The set of artifacts that we are intersted is made of quantities like types, variable, functions and declarations of a given library or program. For a given library or program this set of quantities is called an ABI corpus. This library aims at (among other things) providing a way to compare two ABI Corpora (apparently the plural of corpus is copora, heh, that's cool), provide detailed information about their differences, and help build tools to infer interesting conclusions about these differences. You are welcome to contribute to this project after reading the files CONTRIBUTING and COMMIT-LOG-GUIDELINES files in the source tree. Communicating with the maintainers of this project -- including sending patches to be include to the source code -- happens via email at libabigail@sourceware.org.