The Git repository of the Libabigail Project
Go to file
Dodji Seketeli 202820ea7a dwarf-reader, ir: Add member fns to exported corpus fns after c14n
There are cases where a member function C::f has a defined & exported
ELF symbol in a translation unit TU-2, whereas it has no associated
symbol in another translation unit TU-1.

The class C from TU-1 and the class C from TU-2 have the same
canonical type because they are equivalent.  Now, suppose it's C from
TU-2 that is the canonical type; that means the canonical type of C
from TU-1 is C from TU-2.

Today, the only types that are emitted in an ABIXML file are canonical
types.  So if we want the C::f which has a publicly defined & exported
elf symbol to be emitted in the ABIXML file, then the C::f that is
defined & exported in the ABI corpus should be the C::f from the
canonical class type C i.e, the C::f from TU-2.

In other words, the exported C::f should be the member function of the
canonical type class C.

That means that determining which C::f to export in the ABI corpus
should be done *after* type canonicalization.

Today however, determining which C::f to export is done during the
construction of the IR, in the DWARF reader.  That leads to
cases where the exported C::f is the one that has no defined &
exported ELF symbol.  As virtual member functions (in particular) are
involved in class type comparison, that could lead to spurious type
changes left and right.  Oops.

This patch implements the export of member functions after type
canonicalization in the DWARF reader.  Note that CTF and BTF readers
are not impacted as they only support the C language which doesn't
have member functions.

	* src/abg-dwarf-reader.cc
	(reader::fixup_functions_with_no_symbols): Do not export the
	virtual member function here.
	(build_ir_node_from_die): For DW_TAG_subprogram DIEs, likewise.
	* src/abg-ir.cc (maybe_adjust_canonical_type): Walk the member
	functions of the canonical type and export them in the ABI corpus
	if they have a defined and exported elf symbol.
	* tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2024-03-01 14:20:22 +01:00
.github Adding missing newline to build-container workflow 2022-05-17 09:46:16 +02:00
autoconf-archive Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
bash-completion Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
doc website: doxygen: set PROJECT_NAME to libabigail 2024-01-08 09:31:34 -05:00
docker Add github actions to support workflows 2022-05-17 00:13:40 +02:00
include ir,corpus,comparison: Const-iffy the access to corpus interfaces 2024-03-01 14:19:05 +01:00
m4 Delete ltsugar.m4 and pkg.m4 files from m4/ 2015-01-06 09:54:45 +01:00
relicensing-scripts Bug 27512 - Remove broken zip-archive support 2021-03-19 10:52:57 +01:00
scripts Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
src dwarf-reader, ir: Add member fns to exported corpus fns after c14n 2024-03-01 14:20:22 +01:00
tests dwarf-reader, ir: Add member fns to exported corpus fns after c14n 2024-03-01 14:20:22 +01:00
tools abicompat: Port this to the multi-front-end architecture 2024-03-01 14:19:41 +01:00
.clang-format Tweak clang-format configuration 2021-10-19 12:59:18 +02:00
.gitignore .gitignore: Add libabigail-?.* *.orig files 2019-05-22 14:34:23 +02:00
.mailmap Add '.mailmap' 2021-12-17 20:12:20 +01:00
abigail.m4 Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
ABIXML-FORMAT-VERSIONS Bug 28450 - Fix cloned member function handling in DWARF 2021-11-12 18:31:28 +01:00
AUTHORS Initial AUTHORS and README 2013-02-28 13:25:20 +01:00
ChangeLog ChangeLog: Update for 2.4 release 2023-10-20 18:40:33 +02:00
COMMIT-LOG-GUIDELINES Update the COMMIT-LOG-GUIDELINES file 2016-05-22 23:20:12 +02:00
COMPILING Improve some grammar 2022-02-25 11:24:20 +01:00
configure.ac Remove python3-mock dependency and use unittest.mock instead 2024-01-26 12:51:40 +01:00
CONTRIBUTING Improve some grammar 2022-02-25 11:24:20 +01:00
default.abignore Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
gen-changelog.py gen-changelog.py: Remove long standing debugging output 2023-10-20 18:35:59 +02:00
install-sh Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
libabigail.pc.in Make libxml2 a private dependency wrt pkconfig 2013-08-22 17:41:29 +02:00
license-change-2020.txt Add a license-change-2020.txt file 2020-12-02 11:50:22 +01:00
LICENSE.txt Add the LICENSE.txt file 2020-12-02 11:49:33 +01:00
ltmain.sh Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
Makefile.am Use xz as the default tarball compression format 2022-11-18 13:06:09 +01:00
NEWS Update NEWS file for 2.4 release 2023-10-20 18:40:33 +02:00
README Improve some grammar 2022-02-25 11:24:20 +01:00
README-DOCKER.md Add github actions to support workflows 2022-05-17 00:13:40 +02:00
release-text-template.txt release-text-template.txt: Modernize a little bit. 2023-05-10 16:29:55 +02:00
update-copyright.sh Update copyright year for 2023 2023-01-01 18:19:30 +01:00
VISIBILITY Improve some grammar 2022-02-25 11:24:20 +01:00

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.