mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-18 07:54:36 +00:00
The Git repository of the Libabigail Project
db02f0bdb4
This the first patch of a series of 11 patches which aims at speeding up the time taken by "abidw --noout libmozjs.so". That shared library is built among by the mongodb project, among others. And abidw is taking around 5 minutes on my old Lenovo X220 laptop. After the series of patches, the same command is taking one minute and a half. The core of the optimization is to speed up type canonicalization that happens at the end of DWARF reading, once libabigail has built the IR or the ABI of the entire elf binary. The optimization comes from an insight derived from the One Definition Rule of C++, as explained at https://en.wikipedia.org/wiki/One_Definition_Rule. But before being able to perform that optimization, several fixes and code massaging were necessary. I have split those changes up in the first 10 patches of the series. The last patch thus contains the crux of the optimization. Its cover letter also contains instructions on how to build libmozjs.so, from mongodb, for those who want to replicate the results I have seen. Note that some of the first 10 patches incur adjustment in the test suite, but don't carry those necessary adjustments. All test suite adjustments are carried by the last, 11Th patch. The short description of the patches of the series are: constify is_class_type() Add missing deep equality operator for pointer and reference types Cleanup some IR type comparison operators Do not overly canonicalize types during typedef stripping Fix detection of changes in pointer diff in the comparison engine Prevent build_function_type from not canonicalizing certain types Do not use recursive type hashing when writing out function types Try harder to hash_type_or_decl avoid the slow path Fix infinite loop in peel_typedef_pointer_or_reference_type Late canonicalize all types that reference classes when reading DWARF Use the ODR to speed up type canonicalization And below is the ChangeLog of this first patch. * include/abg-fwd.h (is_class_type): Take a pointer to const. * src/abg-ir.cc (is_class_type): Adjust. Signed-off-by: Dodji Seketeli <dodji@redhat.com> |
||
---|---|---|
doc | ||
include | ||
m4 | ||
scripts | ||
src | ||
tests | ||
tools | ||
.gitignore | ||
abigail.m4 | ||
AUTHORS | ||
ChangeLog | ||
COMMIT-LOG-GUIDELINES | ||
COMPILING | ||
config.h.in | ||
configure.ac | ||
CONTRIBUTING | ||
COPYING | ||
COPYING-GPLV3 | ||
COPYING-LGPLV2 | ||
COPYING-LGPLV3 | ||
gen-changelog.py | ||
install-sh | ||
libabigail.pc.in | ||
ltmain.sh | ||
Makefile.am | ||
README |
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, fonctions 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.