]> sourceware.org Git - libabigail.git/commit
Avoid building DIE -> parent DIE map when analyzing a C binary
authorDodji Seketeli <dodji@redhat.com>
Fri, 31 Mar 2017 10:44:38 +0000 (12:44 +0200)
committerDodji Seketeli <dodji@redhat.com>
Wed, 10 May 2017 09:50:54 +0000 (11:50 +0200)
commitd8f09c9e8952dafecc225ae7d735b0baf1eb9b2b
tree145a8bdfb3a56cc0d84ee7241aa6df91a3c62b30
parent12b80d07705628db57d8c8b82699f6d9da6f8600
Avoid building DIE -> parent DIE map when analyzing a C binary

The C language doesn't support namespaces.  So, in that language, the
context of a type is always the global scope.  Hence, the context of a
type DIE is always the global context associated to the current
translation unit.

Thus, when we are analyzing a C binary, we can do away with building
the DIE -> DIE parent map that we later use to get the parent of a
type DIE when we need to determine the context of a given type DIE.

This can save significant time and space.

This patch implements this optimization.

* include/abg-ir.h (global_scope_sptr): Make this be a share_ptr
of scope_decl, not of global_scope.
(translation_unit::get_global_scope): Return a reference to
scope_decl_sptr.
* src/abg-ir.cc (translation_unit::get_global_scope): Return a
scope_decl not a global_scope.
* src/abg-dwarf-reader.cc (read_context::nil_scope_): Add new data
member.
(read_context::{global_scope, nil_scope}): Define new member functions.
(read_context::build_die_parent_maps): Do not build the map if we
are looking at a C (or asm) translation unit.
(get_scope_die, get_scope_for_die): If we are looking at a C
translation unit then do return the global scope.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
include/abg-ir.h
src/abg-dwarf-reader.cc
src/abg-ir.cc
This page took 0.035769 seconds and 5 git commands to generate.