public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
From: Giuliano Procida <gprocida@google.com>
To: Matthias Maennich <maennich@google.com>
Cc: libabigail@sourceware.org, Dodji Seketeli <dodji@seketeli.org>,
	kernel-team@android.com
Subject: Re: [PATCH v1 16/16] dwarf reader: drop (now) unused code related symbol table reading
Date: Mon, 22 Jun 2020 10:56:03 +0100	[thread overview]
Message-ID: <CAGvU0Hm56DpCi4-7ctUTOSTrNowGJ=P6FU=x3XG+j3vck3nWJg@mail.gmail.com> (raw)
In-Reply-To: <20200619214305.562-17-maennich@google.com>

Hi.

On Fri, 19 Jun 2020 at 22:43, Matthias Maennich <maennich@google.com> wrote:
>
> The introduction of the new symtab reader incorporated much of the
> existing functionality. Now that the most code parts are migrated to the
> new symtab reader, we can safely remove the old code paths.
>
> Ignoring the symbol table is not a thing anymore. The new symtab reader
> does read the symtab unconditionally for consistency reasons. Hence also
> remove all functionality around conditional symtab reading.
>
>         * include/abg-dwarf-reader.h (set_ignore_symbol_table): Remove.
>         (get_ignore_symbol_table): Likewise.
>         * src/abg-dwarf-reader.cc (add_symbol_to_map): Likewise.
>         (read_context::options_type::ignore_symbol_table): Likewise.
>         (read_context::options_type): Adjust.
>         (read_context::fun_addr_sym_map_): Remove.
>         (read_context::fun_entry_addr_sym_map_): Likewise.
>         (read_context::fun_syms_): Likewise.
>         (read_context::var_addr_sym_map_): Likewise.
>         (read_context::var_syms_): Likewise.
>         (read_context::undefined_fun_syms_): Likewise.
>         (read_context::undefined_var_syms_): Likewise.
>         (read_context::initialize): Adjust.
>         (read_context::lookup_elf_symbol_from_index): Remove.
>         (read_context::fun_entry_addr_sym_map_sptr): Likewise.
>         (read_context::fun_entry_addr_sym_map): Likewise.
>         (read_context::fun_syms_sptr): Likewise.
>         (read_context::fun_syms): Likewise.
>         (read_context::var_syms_sptr): Likewise.
>         (read_context::var_syms): Likewise.
>         (read_context::undefined_fun_syms_sptr): Likewise.
>         (read_context::undefined_var_syms_sptr): Likewise.
>         (read_context::load_symbol_maps_from_symtab_section): Likewise.
>         (read_context::load_symbol_maps): Likewise.
>         (read_context::maybe_load_symbol_maps): Likewise.
>         (set_ignore_symbol_table): Likewise.
>         (get_ignore_symbol_table): Likewise.
>         (create_default_var_sym): Likewise.
>         (build_var_decl): Adjust.
>         (function_is_suppressed): Likewise.
>         (variable_is_suppressed): Likewise.
>         (build_function_decl): Likewise.
>         (add_symbol_to_map): Remove.
>         (read_corpus_from_elf): Adjust.
>         (build_corpus_group_from_kernel_dist_under): Likewise.
>         * tools/abidw.cc (main): Likewise.
>

Reviewed-by: Giuliano Procida <gprocida@google.com>

> Signed-off-by: Matthias Maennich <maennich@google.com>
> ---
>  include/abg-dwarf-reader.h |   6 -
>  src/abg-dwarf-reader.cc    | 656 +------------------------------------
>  src/abg-tools-utils.cc     |  13 -
>  tools/abidw.cc             |   2 -
>  4 files changed, 12 insertions(+), 665 deletions(-)
>
> diff --git a/include/abg-dwarf-reader.h b/include/abg-dwarf-reader.h
> index d0329aed9ccf..3f062e04502d 100644
> --- a/include/abg-dwarf-reader.h
> +++ b/include/abg-dwarf-reader.h
> @@ -195,12 +195,6 @@ set_drop_undefined_syms(read_context& ctxt,
>  void
>  set_do_log(read_context& ctxt, bool f);
>
> -void
> -set_ignore_symbol_table(read_context &ctxt, bool f);
> -
> -bool
> -get_ignore_symbol_table(const read_context &ctxt);
> -
>  void
>  set_environment(read_context& ctxt,
>                 ir::environment*);
> diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc
> index 2b978c239243..b69fcc79cfd6 100644
> --- a/src/abg-dwarf-reader.cc
> +++ b/src/abg-dwarf-reader.cc
> @@ -291,10 +291,6 @@ static bool
>  operator<(const imported_unit_point& l, const imported_unit_point& r)
>  {return l.offset_of_import < r.offset_of_import;}
>
> -static void
> -add_symbol_to_map(const elf_symbol_sptr& sym,
> -                 string_elf_symbols_map_type& map);
> -
>  static bool
>  get_parent_die(const read_context&     ctxt,
>                const Dwarf_Die* die,
> @@ -2026,7 +2022,6 @@ public:
>      environment*       env;
>      bool               load_in_linux_kernel_mode;
>      bool               load_all_types;
> -    bool               ignore_symbol_table;
>      bool               show_stats;
>      bool               do_log;
>
> @@ -2034,7 +2029,6 @@ public:
>        : env(),
>         load_in_linux_kernel_mode(),
>         load_all_types(),
> -       ignore_symbol_table(),
>         show_stats(),
>         do_log()
>      {}
> @@ -2230,19 +2224,6 @@ public:
>    offset_offset_map_type       alternate_die_parent_map_;
>    offset_offset_map_type       type_section_die_parent_map_;
>    list<var_decl_sptr>          var_decls_to_add_;
> -  addr_elf_symbol_sptr_map_sptr fun_addr_sym_map_;
> -  // On PPC64, the function entry point address is different from the
> -  // GElf_Sym::st_value value, which is the address of the descriptor
> -  // of the function.  The map below thus associates the address of
> -  // the entry point to the function symbol.  If we are not on ppc64,
> -  // then this map ought to be empty.  Only the fun_addr_sym_map_ is
> -  // used in that case.  On ppc64, though, both maps are used.
> -  addr_elf_symbol_sptr_map_sptr fun_entry_addr_sym_map_;
> -  string_elf_symbols_map_sptr  fun_syms_;
> -  addr_elf_symbol_sptr_map_sptr var_addr_sym_map_;
> -  string_elf_symbols_map_sptr  var_syms_;
> -  string_elf_symbols_map_sptr  undefined_fun_syms_;
> -  string_elf_symbols_map_sptr  undefined_var_syms_;
>    vector<string>               dt_needed_;
>    string                       dt_soname_;
>    string                       elf_architecture_;
> @@ -2378,13 +2359,6 @@ public:
>      alternate_die_parent_map_.clear();
>      type_section_die_parent_map_.clear();
>      var_decls_to_add_.clear();
> -    fun_addr_sym_map_.reset();
> -    fun_entry_addr_sym_map_.reset();
> -    fun_syms_.reset();
> -    var_addr_sym_map_.reset();
> -    var_syms_.reset();
> -    undefined_fun_syms_.reset();
> -    undefined_var_syms_.reset();
>      dt_needed_.clear();
>      dt_soname_.clear();
>      elf_architecture_.clear();
> @@ -5044,88 +5018,6 @@ public:
>      return true;
>    }
>
> -  /// Given the index of a symbol into the symbol table of an ELF
> -  /// file, look the symbol up, build an instace of @ref elf_symbol
> -  /// and return it.
> -  ///
> -  /// @param symbol_index the index of the symbol into the symbol
> -  /// table of the current elf file.
> -  ///
> -  /// @return the elf symbol found or nil if none was found.
> -  elf_symbol_sptr
> -  lookup_elf_symbol_from_index(size_t symbol_index)
> -  {
> -    GElf_Sym s;
> -    elf_symbol_sptr result =
> -      lookup_elf_symbol_from_index(symbol_index, s);
> -    return result;
> -  }
> -
> -  /// Lookup an ELF symbol given its index into the .symtab section.
> -  ///
> -  /// This function returns both the native symbol (from libelf) and
> -  /// the @p abigail::ir::elf_symbol instance, which is the
> -  /// libabigail-specific representation of the symbol.
> -  ///
> -  /// @param symbol_index the index of the symbol to look for.
> -  ///
> -  /// @param native_sym output parameter.  This is set to the native
> -  /// ELF symbol found iff the function returns a non-nil value.
> -  ///
> -  /// @return an instance of libabigail::ir::elf_symbol representing
> -  /// the ELF symbol found, iff one was found.  Otherwise, returns
> -  /// nil.
> -  elf_symbol_sptr
> -  lookup_elf_symbol_from_index(size_t symbol_index,
> -                              GElf_Sym &native_sym)
> -  {
> -    if (!lookup_native_elf_symbol_from_index(symbol_index, native_sym))
> -      return elf_symbol_sptr();
> -
> -    Elf_Scn* symtab_section = find_symbol_table_section();
> -    if (!symtab_section)
> -      return elf_symbol_sptr();
> -
> -    GElf_Shdr header_mem;
> -    GElf_Shdr* symtab_sheader = gelf_getshdr(symtab_section,
> -                                            &header_mem);
> -
> -    Elf_Data* symtab = elf_getdata(symtab_section, 0);
> -    ABG_ASSERT(symtab);
> -
> -    bool sym_is_defined = native_sym.st_shndx != SHN_UNDEF;
> -    bool sym_is_common = native_sym.st_shndx == SHN_COMMON; // this occurs in
> -                                                           // relocatable
> -                                                           // files.
> -    const char* name_str = elf_strptr(elf_handle(),
> -                                     symtab_sheader->sh_link,
> -                                     native_sym.st_name);
> -    if (name_str == 0)
> -      name_str = "";
> -
> -    elf_symbol::version ver;
> -    elf_helpers::get_version_for_symbol(elf_handle(), symbol_index,
> -                                       sym_is_defined, ver);
> -
> -    elf_symbol::visibility vis =
> -      stv_to_elf_symbol_visibility(GELF_ST_VISIBILITY(native_sym.st_other));
> -
> -    Elf_Scn* strings_section = find_ksymtab_strings_section(elf_handle());
> -    size_t strings_ndx = strings_section
> -      ? elf_ndxscn(strings_section)
> -      : 0;
> -
> -    elf_symbol_sptr sym =
> -      elf_symbol::create(env(), symbol_index, native_sym.st_size,
> -                        name_str, stt_to_elf_symbol_type
> -                        (GELF_ST_TYPE(native_sym.st_info)),
> -                        stb_to_elf_symbol_binding
> -                        (GELF_ST_BIND(native_sym.st_info)),
> -                        sym_is_defined, sym_is_common, ver, vis,
> -                        native_sym.st_shndx == strings_ndx);
> -    return sym;
> -  }
> -
>    /// Test if a given function symbol has been exported.
>    ///
>    /// @param symbol_address the address of the symbol we are looking
> @@ -5206,102 +5098,6 @@ public:
>      return symtab_;
>    }
>
> -  /// Getter for a pointer to the map that associates the address of
> -  /// an entry point of a function with the symbol of that function.
> -  ///
> -  /// Note that on non-"PPC64 ELFv1" binaries, this map is the same as
> -  /// the one that assciates the address of a function with the symbol
> -  /// of that function.
> -  ///
> -  /// @return a pointer to the map that associates the address of an
> -  /// entry point of a function with the symbol of that function.
> -  addr_elf_symbol_sptr_map_sptr&
> -  fun_entry_addr_sym_map_sptr()
> -  {
> -    if (!fun_entry_addr_sym_map_ && !fun_addr_sym_map_)
> -      maybe_load_symbol_maps();
> -    if (architecture_is_ppc64(elf_handle()))
> -      return fun_entry_addr_sym_map_;
> -    return fun_addr_sym_map_;
> -  }
> -
> -  /// Getter for the map that associates the address of an entry point
> -  /// of a function with the symbol of that function.
> -  ///
> -  /// Note that on non-"PPC64 ELFv1" binaries, this map is the same as
> -  /// the one that assciates the address of a function with the symbol
> -  /// of that function.
> -  ///
> -  /// @return the map that associates the address of an entry point of
> -  /// a function with the symbol of that function.
> -  addr_elf_symbol_sptr_map_type&
> -  fun_entry_addr_sym_map()
> -  {return *fun_entry_addr_sym_map_sptr();}
> -
> -  /// Getter for the map of function symbols (name -> sym).
> -  ///
> -  /// @return a shared pointer to the map of function symbols.
> -  const string_elf_symbols_map_sptr&
> -  fun_syms_sptr() const
> -  {
> -    maybe_load_symbol_maps();
> -    return fun_syms_;
> -  }
> -
> -  /// Getter for the map of function symbols (name -> sym).
> -  ///
> -  /// @return a reference to the map of function symbols.
> -  string_elf_symbols_map_type&
> -  fun_syms()
> -  {
> -    maybe_load_symbol_maps();
> -    return *fun_syms_;
> -  }
> -
> -  /// Getter for the map of variable symbols (name -> sym)
> -  ///
> -  /// @return a shared pointer to the map of variable symbols.
> -  const string_elf_symbols_map_sptr
> -  var_syms_sptr() const
> -  {
> -    maybe_load_symbol_maps();
> -    return var_syms_;
> -  }
> -
> -  /// Getter for the map of variable symbols (name -> sym)
> -  ///
> -  /// @return a reference to the map of variable symbols.
> -  string_elf_symbols_map_type&
> -  var_syms()
> -  {
> -    maybe_load_symbol_maps();
> -    return *var_syms_;
> -  }
> -
> -  /// Getter for the map of undefined function symbols (name -> vector
> -  /// of symbols).
> -  ///
> -  /// @return a (smart) pointer to the map of undefined function
> -  /// symbols.
> -  const string_elf_symbols_map_sptr&
> -  undefined_fun_syms_sptr() const
> -  {
> -    maybe_load_symbol_maps();
> -    return undefined_fun_syms_;
> -  }
> -
> -  /// Getter for the map of undefined variable symbols (name -> vector
> -  /// of symbols).
> -  ///
> -  /// @return a (smart) pointer to the map of undefined variable
> -  /// symbols.
> -  const string_elf_symbols_map_sptr&
> -  undefined_var_syms_sptr() const
> -  {
> -    maybe_load_symbol_maps();
> -    return undefined_var_syms_;
> -  }
> -
>    /// Getter for the ELF dt_needed tag.
>    const vector<string>&
>    dt_needed() const
> @@ -5317,232 +5113,6 @@ public:
>    elf_architecture() const
>    {return elf_architecture_;}
>
> -  /// Load the maps address -> function symbol, address -> variable
> -  /// symbol and the maps of function and variable undefined symbols.
> -  ///
> -  /// @param load_fun_map whether to load the address to function map.
> -  ///
> -  /// @param load_var_map whether to laod the address to variable map.
> -  ///
> -  /// @param load_undefined_fun_map whether to load the undefined
> -  /// function map.
> -  ///
> -  /// @param load_undefined_var_map whether to laod the undefined
> -  /// variable map.
> -  ///
> -  /// @return return true iff the maps have be loaded.
> -  bool
> -  load_symbol_maps_from_symtab_section(bool load_fun_map,
> -                                      bool load_var_map,
> -                                      bool load_undefined_fun_map,
> -                                      bool load_undefined_var_map)
> -  {
> -    Elf_Scn* symtab_section = find_symbol_table_section();
> -    if (!symtab_section)
> -      return false;
> -
> -    GElf_Shdr header_mem;
> -    GElf_Shdr* symtab_sheader = gelf_getshdr(symtab_section,
> -                                            &header_mem);
> -
> -    // check for bogus section header
> -    if (symtab_sheader->sh_entsize == 0)
> -      return false;
> -
> -    size_t nb_syms = symtab_sheader->sh_size / symtab_sheader->sh_entsize;
> -
> -    Elf_Data* symtab = elf_getdata(symtab_section, 0);
> -    if (!symtab)
> -      return false;
> -
> -    GElf_Ehdr elf_header;
> -    ABG_ASSERT(gelf_getehdr(elf_handle(), &elf_header));
> -
> -    bool is_ppc64 = architecture_is_ppc64(elf_handle());
> -
> -    for (size_t i = 0; i < nb_syms; ++i)
> -      {
> -       GElf_Sym* sym, sym_mem;
> -       sym = gelf_getsym(symtab, i, &sym_mem);
> -       ABG_ASSERT(sym);
> -
> -       if ((load_fun_map || load_undefined_fun_map)
> -           && (GELF_ST_TYPE(sym->st_info) == STT_FUNC
> -               || GELF_ST_TYPE(sym->st_info) == STT_GNU_IFUNC))
> -         {
> -           elf_symbol_sptr symbol = lookup_elf_symbol_from_index(i);
> -           ABG_ASSERT(symbol);
> -           ABG_ASSERT(symbol->is_function());
> -
> -           // If the symbol was suppressed by a suppression
> -           // specification then drop it on the floor.
> -           if (is_elf_symbol_suppressed(symbol))
> -             continue;
> -
> -           if (load_fun_map && symbol->is_public())
> -             {
> -               (*fun_syms_)[symbol->get_name()].push_back(symbol);
> -
> -               {
> -                 GElf_Addr symbol_value =
> -                     maybe_adjust_et_rel_sym_addr_to_abs_addr(elf_handle(),
> -                                                              sym);
> -
> -                 addr_elf_symbol_sptr_map_type::const_iterator it =
> -                   fun_addr_sym_map_->find(symbol_value);
> -                 if (it == fun_addr_sym_map_->end())
> -                   (*fun_addr_sym_map_)[symbol_value] = symbol;
> -                 else //if (sym->st_value != 0)
> -                   it->second->get_main_symbol()->add_alias(symbol);
> -
> -                 if (is_ppc64)
> -                   {
> -                     // For ppc64 ELFv1 binaries, we need to build a
> -                     // function entry point address -> function
> -                     // symbol map.  This is in addition to the
> -                     // function pointer -> symbol map.  This is
> -                     // because on ppc64 ELFv1, a function pointer is
> -                     // different from a function entry point
> -                     // address.
> -                     //
> -                     // On ppc64 ELFv1, the DWARF DIE of a function
> -                     // references the address of the entry point of
> -                     // the function symbol; whereas the value of the
> -                     // function symbol is the function pointer.  As
> -                     // these addresses are different, if I we want
> -                     // to get to the symbol of a function from its
> -                     // entry point address (as referenced by DWARF
> -                     // function DIEs) we must have the two maps I
> -                     // mentionned right above.
> -                     //
> -                     // In other words, we need a map that associates
> -                     // a function enty point address with the symbol
> -                     // of that function, to be able to get the
> -                     // function symbol that corresponds to a given
> -                     // function DIE, on ppc64.
> -                     //
> -                     // The value of the function pointer (the value
> -                     // of the symbol) usually refers to the offset
> -                     // of a table in the .opd section.  But
> -                     // sometimes, for a symbol named "foo", the
> -                     // corresponding symbol named ".foo" (note the
> -                     // dot before foo) which value is the entry
> -                     // point address of the function; that entry
> -                     // point address refers to a region in the .text
> -                     // section.
> -                     //
> -                     // So we are only interested in values of the
> -                     // symbol that are in the .opd section.
> -                     GElf_Addr fn_desc_addr = sym->st_value;
> -                     GElf_Addr fn_entry_point_addr =
> -                         lookup_ppc64_elf_fn_entry_point_address(
> -                             elf_handle(), fn_desc_addr);
> -                     addr_elf_symbol_sptr_map_type::const_iterator it2 =
> -                       fun_entry_addr_sym_map().find(fn_entry_point_addr);
> -
> -                     if (it2 == fun_entry_addr_sym_map().end())
> -                       fun_entry_addr_sym_map()[fn_entry_point_addr] = symbol;
> -                     else if (address_is_in_opd_section(elf_handle(),
> -                                                        fn_desc_addr))
> -                       {
> -                         // Either
> -                         //
> -                         // 'symbol' must have been registered as an
> -                         // alias for it2->second->get_main_symbol(),
> -                         // right before the "if (ppc64)" statement.
> -                         //
> -                         // Or
> -                         //
> -                         // if the name of 'symbol' is foo, then the
> -                         // name of it2->second is ".foo".  That is,
> -                         // foo is the name of the symbol when it
> -                         // refers to the function descriptor in the
> -                         // .opd section and ".foo" is an internal
> -                         // name for the address of the entry point
> -                         // of foo.
> -                         //
> -                         // In the latter case, we just want to keep
> -                         // a refernce to "foo" as .foo is an
> -                         // internal name.
> -
> -                         bool two_symbols_alias =
> -                           it2->second->get_main_symbol()->does_alias(*symbol);
> -                         bool symbol_is_foo_and_prev_symbol_is_dot_foo =
> -                           (it2->second->get_name()
> -                            == string(".") + symbol->get_name());
> -
> -                         ABG_ASSERT(two_symbols_alias
> -                                || symbol_is_foo_and_prev_symbol_is_dot_foo);
> -
> -                         if (symbol_is_foo_and_prev_symbol_is_dot_foo)
> -                           // Let's just keep a reference of the
> -                           // symbol that the user sees in the source
> -                           // code (the one named foo).  The symbol
> -                           // which name is prefixed with a "dot" is
> -                           // an artificial one.
> -                           fun_entry_addr_sym_map()[fn_entry_point_addr] = symbol;
> -                       }
> -                   }
> -               }
> -             }
> -           else if (load_undefined_fun_map && !symbol->is_defined())
> -             (*undefined_fun_syms_)[symbol->get_name()].push_back(symbol);
> -         }
> -       else if ((load_var_map || load_undefined_var_map)
> -                && (GELF_ST_TYPE(sym->st_info) == STT_OBJECT
> -                    || GELF_ST_TYPE(sym->st_info) == STT_TLS)
> -                // If the symbol is for an OBJECT, the index of the
> -                // section it refers to cannot be absolute.
> -                // Otherwise that OBJECT is not a variable.
> -                && (sym->st_shndx != SHN_ABS
> -                    || GELF_ST_TYPE(sym->st_info) != STT_OBJECT ))
> -         {
> -           elf_symbol_sptr symbol = lookup_elf_symbol_from_index(i);
> -           ABG_ASSERT(symbol);
> -           ABG_ASSERT(symbol->is_variable());
> -
> -           if (load_var_map && symbol->is_public())
> -             {
> -               (*var_syms_)[symbol->get_name()].push_back(symbol);
> -
> -               if (symbol->is_common_symbol())
> -                 {
> -                   string_elf_symbols_map_type::iterator it =
> -                     var_syms_->find(symbol->get_name());
> -                   ABG_ASSERT(it != var_syms_->end());
> -                   const elf_symbols& common_sym_instances = it->second;
> -                   ABG_ASSERT(!common_sym_instances.empty());
> -                   if (common_sym_instances.size() > 1)
> -                     {
> -                       elf_symbol_sptr main_common_sym =
> -                         common_sym_instances[0];
> -                       ABG_ASSERT(main_common_sym->get_name()
> -                              == symbol->get_name());
> -                       ABG_ASSERT(main_common_sym->is_common_symbol());
> -                       ABG_ASSERT(symbol.get() != main_common_sym.get());
> -                       main_common_sym->add_common_instance(symbol);
> -                     }
> -                 }
> -               else
> -                 {
> -                   GElf_Addr symbol_value =
> -                       maybe_adjust_et_rel_sym_addr_to_abs_addr(elf_handle(),
> -                                                                sym);
> -                   addr_elf_symbol_sptr_map_type::const_iterator it =
> -                     var_addr_sym_map_->find(symbol_value);
> -                   if (it == var_addr_sym_map_->end())
> -                     (*var_addr_sym_map_)[symbol_value] = symbol;
> -                   else
> -                     it->second->get_main_symbol()->add_alias(symbol);
> -                 }
> -             }
> -           else if (load_undefined_var_map && !symbol->is_defined())
> -             (*undefined_var_syms_)[symbol->get_name()].push_back(symbol);
> -         }
> -      }
> -    return true;
> -  }
> -
>    /// Test if a given ELF symbol was suppressed by a suppression
>    /// specification.
>    ///
> @@ -5558,71 +5128,6 @@ public:
>                                                symbol->get_type()));
>    }
>
> -  /// Load the maps of function symbol address -> function symbol,
> -  /// global variable symbol address -> variable symbol and also the
> -  /// maps of function and variable undefined symbols.
> -  ///
> -  /// All these maps are loaded only if they are not loaded already.
> -  ///
> -  /// @return true iff everything went fine.
> -  bool
> -  load_symbol_maps()
> -  {
> -    bool load_fun_map = !fun_addr_sym_map_ ;
> -    bool load_var_map = !var_addr_sym_map_;
> -    bool load_undefined_fun_map = !undefined_fun_syms_;
> -    bool load_undefined_var_map = !undefined_var_syms_;
> -
> -    if (!fun_syms_)
> -      fun_syms_.reset(new string_elf_symbols_map_type);
> -
> -    if (!fun_addr_sym_map_)
> -      fun_addr_sym_map_.reset(new addr_elf_symbol_sptr_map_type);
> -
> -    if (!fun_entry_addr_sym_map_ && architecture_is_ppc64(elf_handle()))
> -      fun_entry_addr_sym_map_.reset(new addr_elf_symbol_sptr_map_type);
> -
> -    if (!var_syms_)
> -      var_syms_.reset(new string_elf_symbols_map_type);
> -
> -    if (!var_addr_sym_map_)
> -      var_addr_sym_map_.reset(new addr_elf_symbol_sptr_map_type);
> -
> -    if (!undefined_fun_syms_)
> -      undefined_fun_syms_.reset(new string_elf_symbols_map_type);
> -
> -    if (!undefined_var_syms_)
> -      undefined_var_syms_.reset(new string_elf_symbols_map_type);
> -
> -    if (!options_.ignore_symbol_table)
> -      {
> -       if (load_symbol_maps_from_symtab_section(load_fun_map,
> -                                                load_var_map,
> -                                                load_undefined_fun_map,
> -                                                load_undefined_var_map))
> -           return true;
> -       return false;
> -      }
> -    return true;
> -  }
> -
> -  /// Load the symbol maps if necessary.
> -  ///
> -  /// @return true iff the symbol maps has been loaded by this
> -  /// invocation.
> -  bool
> -  maybe_load_symbol_maps() const
> -  {
> -    if (!fun_addr_sym_map_
> -       || !var_addr_sym_map_
> -       || !fun_syms_
> -       || !var_syms_
> -       || !undefined_fun_syms_
> -       || !undefined_var_syms_)
> -      return const_cast<read_context*>(this)->load_symbol_maps();
> -    return false;
> -  }
> -
>    /// Load the DT_NEEDED and DT_SONAME elf TAGS.
>    ///
>    void
> @@ -6494,46 +5999,6 @@ void
>  set_do_log(read_context& ctxt, bool f)
>  {ctxt.do_log(f);}
>
> -/// Setter of the "set_ignore_symbol_table" flag.
> -///
> -/// This flag tells if we should load information about ELF symbol
> -/// tables.  Not loading the symbol tables is a speed optimization
> -/// that is done when the set of symbols we care about is provided
> -/// off-hand.  This is the case when we are supposed to analyze a
> -/// Linux kernel binary.  In that case, because we have the white list
> -/// of functions/variable symbols we care about, we don't need to
> -/// analyze the symbol table; things are thus faster in that case.
> -///
> -/// By default, the symbol table is analyzed so this boolean is set to
> -/// false.
> -///
> -/// @param ctxt the read context to consider.
> -///
> -/// @param f the new value of the flag.
> -void
> -set_ignore_symbol_table(read_context &ctxt, bool f)
> -{ctxt.options_.ignore_symbol_table = f;}
> -
> -/// Getter of the "set_ignore_symbol_table" flag.
> -///
> -/// This flag tells if we should load information about ELF symbol
> -/// tables.  Not loading the symbol tables is a speed optimization
> -/// that is done when the set of symbols we care about is provided
> -/// off-hand.  This is the case when we are supposed to analyze a
> -/// Linux kernel binary.  In that case, because we have the white list
> -/// of functions/variable symbols we care about, we don't need to
> -/// analyze the symbol table; things are thus faster in that case.
> -///
> -/// By default, the symbol table is analyzed so this boolean is set to
> -/// false.
> -///
> -/// @param ctxt the read context to consider.
> -///
> -/// @return the value of the flag.
> -bool
> -get_ignore_symbol_table(const read_context& ctxt)
> -{return ctxt.options_.ignore_symbol_table;}
> -
>  /// Test if a given DIE is anonymous
>  ///
>  /// @param die the DIE to consider.
> @@ -13483,33 +12948,6 @@ build_or_get_var_decl_if_not_suppressed(read_context&  ctxt,
>    return var;
>  }
>
> -/// Create a variable symbol with a given name.
> -///
> -/// @param sym_name the name of the variable symbol.
> -///
> -/// @param env the environment to create the default symbol in.
> -///
> -/// @return the newly created symbol.
> -static elf_symbol_sptr
> -create_default_var_sym(const string& sym_name, const environment *env)
> -{
> -  elf_symbol::version ver;
> -  elf_symbol::visibility vis = elf_symbol::DEFAULT_VISIBILITY;
> -  elf_symbol_sptr result =
> -    elf_symbol::create(env,
> -                      /*symbol index=*/ 0,
> -                      /*symbol size=*/ 0,
> -                      sym_name,
> -                      /*symbol type=*/ elf_symbol::OBJECT_TYPE,
> -                      /*symbol binding=*/ elf_symbol::GLOBAL_BINDING,
> -                      /*symbol is defined=*/ true,
> -                      /*symbol is common=*/ false,
> -                      /*symbol version=*/ ver,
> -                      /*symbol_visibility=*/vis,
> -                      /*is_linux_string_cst=*/false);
> -  return result;
> -}
> -
>  /// Build a @ref var_decl out of a DW_TAG_variable DIE.
>  ///
>  /// @param ctxt the read context to use.
> @@ -13581,23 +13019,9 @@ build_var_decl(read_context&   ctxt,
>    if (!result->get_symbol())
>      {
>        elf_symbol_sptr var_sym;
> -      if (get_ignore_symbol_table(ctxt))
> -       {
> -         string var_name =
> -           result->get_linkage_name().empty()
> -           ? result->get_name()
> -           : result->get_linkage_name();
> -
> -         var_sym = create_default_var_sym(var_name, ctxt.env());
> -         ABG_ASSERT(var_sym);
> -         add_symbol_to_map(var_sym, ctxt.var_syms());
> -       }
> -      else
> -       {
> -         Dwarf_Addr var_addr;
> -         if (ctxt.get_variable_address(die, var_addr))
> -           var_sym = var_sym = ctxt.variable_symbol_is_exported(var_addr);
> -       }
> +      Dwarf_Addr      var_addr;
> +      if (ctxt.get_variable_address(die, var_addr))
> +       var_sym = var_sym = ctxt.variable_symbol_is_exported(var_addr);
>
>        if (var_sym)
>         {
> @@ -13658,15 +13082,9 @@ function_is_suppressed(const read_context& ctxt,
>        Dwarf_Addr fn_addr;
>        if (!ctxt.get_function_address(function_die, fn_addr))
>         return true;
> -      if (!get_ignore_symbol_table(ctxt))
> -       {
> -         // We were not instructed to ignore (avoid loading) the
> -         // symbol table, so we can rely on its presence to see if
> -         // the address corresponds to the address of an exported
> -         // function symbol.
> -         if (!ctxt.function_symbol_is_exported(fn_addr))
> -           return true;
> -       }
> +
> +      if (!ctxt.function_symbol_is_exported(fn_addr))
> +       return true;
>      }
>
>    return suppr::function_is_suppressed(ctxt, qualified_name,
> @@ -13769,15 +13187,9 @@ variable_is_suppressed(const read_context& ctxt,
>        Dwarf_Addr var_addr = 0;
>        if (!ctxt.get_variable_address(variable_die, var_addr))
>         return true;
> -      if (!get_ignore_symbol_table(ctxt))
> -       {
> -         // We were not instructed to ignore (avoid loading) the
> -         // symbol table, so we can rely on its presence to see if
> -         // the address corresponds to the address of an exported
> -         // variable symbol.
> -         if (!ctxt.variable_symbol_is_exported(var_addr))
> -           return true;
> -       }
> +
> +      if (!ctxt.variable_symbol_is_exported(var_addr))
> +       return true;
>      }
>
>    return suppr::variable_is_suppressed(ctxt, qualified_name,
> @@ -14028,23 +13440,9 @@ build_function_decl(read_context&      ctxt,
>    if (!result->get_symbol())
>      {
>        elf_symbol_sptr fn_sym;
> -      if (get_ignore_symbol_table(ctxt))
> -       {
> -         string fn_name =
> -           result->get_linkage_name().empty()
> -           ? result->get_name()
> -           : result->get_linkage_name();
> -
> -         fn_sym = create_default_fn_sym(fn_name, ctxt.env());
> -         ABG_ASSERT(fn_sym);
> -         add_symbol_to_map(fn_sym, ctxt.fun_syms());
> -       }
> -      else
> -       {
> -         Dwarf_Addr fn_addr;
> -         if (ctxt.get_function_address(die, fn_addr))
> -           fn_sym = ctxt.function_symbol_is_exported(fn_addr);
> -       }
> +      Dwarf_Addr      fn_addr;
> +      if (ctxt.get_function_address(die, fn_addr))
> +       fn_sym = ctxt.function_symbol_is_exported(fn_addr);
>
>        if (fn_sym)
>         {
> @@ -14074,29 +13472,6 @@ build_function_decl(read_context&      ctxt,
>    return result;
>  }
>
> -/// Add a symbol to a symbol map.
> -///
> -/// @param sym the symbol to add.
> -///
> -/// @param map the symbol map to add the symbol into.
> -static void
> -add_symbol_to_map(const elf_symbol_sptr& sym,
> -                 string_elf_symbols_map_type& map)
> -{
> -  if (!sym)
> -    return;
> -
> -  string_elf_symbols_map_type::iterator it = map.find(sym->get_name());
> -  if (it == map.end())
> -    {
> -      elf_symbols syms;
> -      syms.push_back(sym);
> -      map[sym->get_name()] = syms;
> -    }
> -  else
> -    it->second.push_back(sym);
> -}
> -
>  /// Read all @ref abigail::translation_unit possible from the debug info
>  /// accessible through a DWARF Front End Library handle, and stuff
>  /// them into a libabigail ABI Corpus.
> @@ -15341,13 +14716,6 @@ read_corpus_from_elf(read_context& ctxt, status& status)
>
>    ctxt.load_elf_properties();  // DT_SONAME, DT_NEEDED, architecture
>
> -  if (!get_ignore_symbol_table(ctxt))
> -    {
> -      // Read the symbols for publicly defined decls
> -      if (!ctxt.load_symbol_maps())
> -       status |= STATUS_NO_SYMBOLS_FOUND;
> -    }
> -
>    if (!ctxt.symtab() || !ctxt.symtab()->has_symbols())
>      status |= STATUS_NO_SYMBOLS_FOUND;
>
> diff --git a/src/abg-tools-utils.cc b/src/abg-tools-utils.cc
> index dfbec879de8d..9116a97a62e9 100644
> --- a/src/abg-tools-utils.cc
> +++ b/src/abg-tools-utils.cc
> @@ -2563,12 +2563,6 @@ build_corpus_group_from_kernel_dist_under(const string&  root,
>                       << t
>                       << "\n";
>
> -         // If we have been given a whitelist of functions and
> -         // variable symbols to look at, then we can avoid loading
> -         // and analyzing the ELF symbol table.
> -         bool do_ignore_symbol_table = !kabi_wl_paths.empty();
> -         set_ignore_symbol_table(*ctxt, do_ignore_symbol_table);
> -
>           group.reset(new corpus_group(env.get(), root));
>
>           set_read_context_corpus_group(*ctxt, group);
> @@ -2608,13 +2602,6 @@ build_corpus_group_from_kernel_dist_under(const string&  root,
>                                  /*read_all_types=*/false,
>                                  /*linux_kernel_mode=*/true);
>
> -             // If we have been given a whitelist of functions and
> -             // variable symbols to look at, then we can avoid loading
> -             // and analyzing the ELF symbol table.
> -             bool do_ignore_symbol_table = !kabi_wl_paths.empty();
> -
> -             set_ignore_symbol_table(*ctxt, do_ignore_symbol_table);
> -
>               load_generate_apply_suppressions(*ctxt, suppr_paths,
>                                                kabi_wl_paths, supprs);
>
> diff --git a/tools/abidw.cc b/tools/abidw.cc
> index 2cd848df9fb8..58072e7072c4 100644
> --- a/tools/abidw.cc
> +++ b/tools/abidw.cc
> @@ -828,8 +828,6 @@ main(int argc, char* argv[])
>        set_show_stats(ctxt, opts.show_stats);
>        set_suppressions(ctxt, opts);
>        abigail::dwarf_reader::set_do_log(ctxt, opts.do_log);
> -      if (!opts.kabi_whitelist_supprs.empty())
> -       set_ignore_symbol_table(ctxt, true);
>
>        if (opts.check_alt_debug_info_path)
>         {
> --
> 2.27.0.111.gc72c7da667-goog
>

  reply	other threads:[~2020-06-22  9:56 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-19 21:42 [PATCH v1 00/16] Refactor (k)symtab reader Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 01/16] abg-cxx-compat: add simplified version of std::optional Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 02/16] abg-cxx-compat: more <functional> support: std::bind and friends Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 03/16] abg-ir: elf_symbol: add is_in_ksymtab field Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 04/16] abg-ir: elf_symbol: add is_suppressed field Matthias Maennich
2020-06-22  9:46   ` Giuliano Procida
2020-06-19 21:42 ` [PATCH v1 05/16] dwarf-reader split: create abg-symtab-reader.{h, cc} and test case Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 06/16] Refactor ELF symbol table reading by adding a new symtab reader Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 07/16] Integrate new symtab reader into corpus and read_context Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 08/16] corpus: make get_(undefined_)?_(var|fun)_symbols use the new symtab Matthias Maennich
2020-06-22  9:53   ` Giuliano Procida
2020-06-19 21:42 ` [PATCH v1 09/16] corpus: make get_unreferenced_(function|variable)_symbols " Matthias Maennich
2020-06-19 21:42 ` [PATCH v1 10/16] abg-reader: avoid using the (var|function)_symbol_map Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 11/16] dwarf-reader: read_context: use new symtab in *_symbols_is_exported Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 12/16] Switch kernel stuff over to new symtab and drop unused code Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 13/16] abg-elf-helpers: migrate ppc64 specific helpers Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 14/16] symtab_reader: add support for ppc64 ELFv1 binaries Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 15/16] abg-corpus: remove symbol maps and their setters Matthias Maennich
2020-06-19 21:43 ` [PATCH v1 16/16] dwarf reader: drop (now) unused code related symbol table reading Matthias Maennich
2020-06-22  9:56   ` Giuliano Procida [this message]
2020-07-03 16:46 ` [PATCH v2 00/21] Refactor (k)symtab reader Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 01/21] abg-cxx-compat: add simplified version of std::optional Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 02/21] abg-cxx-compat: more <functional> support: std::bind and friends Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 03/21] abg-ir: elf_symbol: add is_in_ksymtab field Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 04/21] abg-ir: elf_symbol: add is_suppressed field Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 05/21] dwarf-reader split: create abg-symtab-reader.{h, cc} and test case Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 06/21] Refactor ELF symbol table reading by adding a new symtab reader Matthias Maennich
2020-07-20 15:39     ` Dodji Seketeli
2020-07-03 16:46   ` [PATCH v2 07/21] Integrate new symtab reader into corpus and read_context Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 08/21] corpus: make get_(undefined_)?_(var|fun)_symbols use the new symtab Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 09/21] corpus: make get_unreferenced_(function|variable)_symbols " Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 10/21] abg-reader: avoid using the (var|function)_symbol_map Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 11/21] dwarf-reader: read_context: use new symtab in *_symbols_is_exported Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 12/21] Switch kernel stuff over to new symtab and drop unused code Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 13/21] abg-elf-helpers: migrate ppc64 specific helpers Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 14/21] symtab_reader: add support for ppc64 ELFv1 binaries Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 15/21] abg-corpus: remove symbol maps and their setters Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 16/21] dwarf reader: drop now-unused code related to symbol table reading Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 17/21] test-symtab: add tests for whitelisted functions Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 18/21] symtab/dwarf-reader: allow hinting of main symbols for aliases Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 19/21] dwarf-reader/writer: consider aliases when dealing with suppressions Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 20/21] symtab: Add support for MODVERSIONS (CRC checksums) Matthias Maennich
2020-07-03 16:46   ` [PATCH v2 21/21] reader/symtab: Improve handling for suppressed aliases Matthias Maennich
2020-07-20 14:27   ` [PATCH v2 00/21] Refactor (k)symtab reader Dodji Seketeli
2021-01-27 12:58 ` [PATCH 00/20] " Matthias Maennich
2021-01-27 12:58   ` [PATCH 01/20] abg-cxx-compat: add simplified version of std::optional Matthias Maennich
2021-03-09  9:43     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 02/20] abg-ir: elf_symbol: add is_in_ksymtab field Matthias Maennich
2021-03-09 14:05     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 03/20] abg-ir: elf_symbol: add is_suppressed field Matthias Maennich
2021-03-09 18:03     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 04/20] dwarf-reader split: create abg-symtab-reader.{h, cc} and test case Matthias Maennich
2021-03-10 18:00     ` [PATCH 04/20] dwarf-reader split: create abg-symtab-reader.{h,cc} " Dodji Seketeli
2021-01-27 12:58   ` [PATCH 05/20] Refactor ELF symbol table reading by adding a new symtab reader Matthias Maennich
2021-03-12 11:18     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 06/20] Integrate new symtab reader into corpus and read_context Matthias Maennich
2021-03-12 15:04     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 07/20] corpus: make get_(undefined_)?_(var|fun)_symbols use the new symtab Matthias Maennich
2021-03-15 10:05     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 08/20] corpus: make get_unreferenced_(function|variable)_symbols " Matthias Maennich
2021-03-15 12:06     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 09/20] abg-reader: avoid using the (var|function)_symbol_map Matthias Maennich
2021-03-15 14:23     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 10/20] dwarf-reader: read_context: use new symtab in *_symbols_is_exported Matthias Maennich
2021-03-15 18:13     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 11/20] Switch kernel stuff over to new symtab and drop unused code Matthias Maennich
2021-03-16 10:38     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 12/20] abg-elf-helpers: migrate ppc64 specific helpers Matthias Maennich
2021-03-16 10:59     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 13/20] symtab_reader: add support for ppc64 ELFv1 binaries Matthias Maennich
2021-03-16 11:39     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 14/20] abg-corpus: remove symbol maps and their setters Matthias Maennich
2021-03-16 18:08     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 15/20] dwarf reader: drop (now) unused code related to symbol table reading Matthias Maennich
2021-03-16 18:42     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 16/20] test-symtab: add tests for whitelisted functions Matthias Maennich
2021-03-17 11:07     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 17/20] symtab/dwarf-reader: allow hinting of main symbols for aliases Matthias Maennich
2021-03-17 13:40     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 18/20] dwarf-reader/writer: consider aliases when dealing with suppressions Matthias Maennich
2021-03-17 15:44     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 19/20] abg-writer.cc: fix write_elf_symbol_reference loop Matthias Maennich
2021-03-17 16:11     ` Dodji Seketeli
2021-01-27 12:58   ` [PATCH 20/20] symtab: Add support for MODVERSIONS (CRC checksums) Matthias Maennich
2021-03-17 17:13     ` Dodji Seketeli
2021-03-17 23:29       ` Giuliano Procida
2021-03-18 22:10         ` Matthias Maennich
2021-03-19 16:55           ` Dodji Seketeli
2021-03-19 18:15     ` Dodji Seketeli
2021-03-29 13:19   ` [GIT PULL] Refactor (k)symtab reader Matthias Maennich
2021-04-02 14:28     ` Dodji Seketeli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGvU0Hm56DpCi4-7ctUTOSTrNowGJ=P6FU=x3XG+j3vck3nWJg@mail.gmail.com' \
    --to=gprocida@google.com \
    --cc=dodji@seketeli.org \
    --cc=kernel-team@android.com \
    --cc=libabigail@sourceware.org \
    --cc=maennich@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).