mirror of
git://sourceware.org/git/libabigail.git
synced 2025-02-23 01:06:56 +00:00
The Git repository of the Libabigail Project
When an ELF symbol alias designates two different functions, Libabigail can be confused as to which function to consider. This confusion indirectly leads to showing spurious changes in the return type of some functions when an ELF symbol designates more than one function. In other words, when an ELF symbol designates two (or more) functions, the comparison engine needs a way to tell the two functions apart. It needs an other way to identify the functions. This patch fixes the confusion by using the pretty representation of the functions in those cases. Please note that to replicate the issue reported in this bug, here is the command I used: $ fedabipkgdiff --debug --self-compare -a --from fc37 smesh * include/abg-corpus.h (corpus::lookup_functions): Return a set of functions rather than a vector of functions where a function can be present more than once. This allows to determine if a symbol designates more than one function. (corpus::exported_decls_builder::priv_): Make this public so that some outside code can access it. (corpus::exported_decls_builder::fn_id_maps_to_several_fns): Declare new function. (corpus::exported_decls_builder::maybe_add_fn_to_exported_fns): Remove useless const here. * include/abg-fwd.h (get_function_id_or_pretty_representation): Declare new function. * include/abg-ir.h (elf_symbol::get_alias_with_default_symbol_version): Declare new member function. * src/abg-comparison.cc (corpus_diff::priv::ensure_lookup_tables_populated): Use the new get_function_id_or_pretty_representation rather than function_decl::get_id() to identify a function. * src/abg-corpus-priv.h (str_fn_ptr_set_map_type): Define this new typedef of unordered_map<string, std::unordered_set<function_decl*> >. (corpus::exported_decls_builder::priv::id_fns_map_): Change the type of this to the new str_fn_ptr_set_map_type. (corpus::exported_decls_builder::priv::{id_fns_map, fn_id_is_in_id_fns_map, fn_is_in_fns, fn_is_in_id_fns_map}): Adjust to using a set of functions rather than a vector. (corpus::exported_decls_builder::fn_is_in_fns_by_repr): Define new static function. (corpus::exported_decls_builder::add_fn_to_exported): Remove useless const. * src/abg-corpus.cc (corpus::exported_decls_builder::fn_id_maps_to_several_fns): Define new function. (corpus::exported_decls_builder::maybe_add_fn_to_exported_fns): Remove useless const. (corpus::lookup_functions): Return a set of functions rather than a vector of functions where a function can be present more than once. This allows to determine if a symbol designates more than one function. * src/abg-dwarf-reader.cc (reader::symbol_already_belongs_to_a_function): Adjust. * src/abg-fe-iface.cc (fe_iface::maybe_add_fn_to_exported_decls): Adjust. * src/abg-ir.cc (get_function_id_or_pretty_representation): Define new function. Signed-off-by: Dodji Seketeli <dodji@redhat.com> |
||
---|---|---|
.github | ||
autoconf-archive | ||
bash-completion | ||
doc | ||
docker | ||
include | ||
m4 | ||
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.