[14/20] abg-corpus: remove symbol maps and their setters

Message ID 20210127125853.886677-15-maennich@google.com
State Committed
Headers
Series Refactor (k)symtab reader |

Commit Message

Matthias Männich Jan. 27, 2021, 12:58 p.m. UTC
  With the prework in previous commits, we are now able to drop the
public symbols maps in corpus::priv and replace them by private members
with access through getters. The getters use the new symtab
implementation to generate the maps on the fly. Setters are not required
anymore and are removed. Also remove redundant getters.

We could also remove the getters for the symbol maps and the local
caching variable and leave it all to lookup_symbol, but this is left for
a later change.

	* include/abg-corpus.h (corpus::set_fun_symbol_map): Remove
	method declaration.
	(corpus::set_undefined_fun_symbol_map): Likewise.
	(corpus::set_var_symbol_map): Likewise.
	(corpus::set_undefined_var_symbol_map): Likewise.
	(corpus::get_fun_symbol_map_sptr): Likewise.
	(corpus::get_undefined_fun_symbol_map_sptr): Likewise.
	(corpus::get_var_symbol_map_sptr): Likewise.
	(corpus::get_undefined_var_symbol_map_sptr): Likewise.
	* src/abg-corpus-priv.h (corpus::priv::var_symbol_map): make
	private and mutable
	(corpus::priv::undefined_var_symbol_map): Likewise.
	(corpus::priv::fun_symbol_map): Likewise.
	(corpus::priv::undefined_fun_symbol_map): Likewise.
	(corpus::priv::get_fun_symbol_map): New method declaration.
	(corpus::priv::get_undefined_fun_symbol_map): Likewise.
	(corpus::priv::get_var_symbol_map): Likewise.
	(corpus::priv::get_undefined_var_symbol_map): Likewise.
	* src/abg-corpus.cc (corpus::priv::get_fun_symbol_map): New
	method implementation.
	(corpus::priv::get_undefined_fun_symbol_map): Likewise.
	(corpus::priv::get_var_symbol_map): Likewise.
	(corpus::priv::get_undefined_var_symbol_map): Likewise.
	(corpus::is_empty): depend on symtab only.
	(corpus::set_fun_symbol_map): Remove method.
	(corpus::set_undefined_fun_symbol_map): Likewise.
	(corpus::set_var_symbol_map): Likewise.
	(corpus::set_undefined_var_symbol_map): Likewise.
	(corpus::get_fun_symbol_map_sptr): Likewise.
	(corpus::get_undefined_fun_symbol_map_sptr): Likewise.
	(corpus::get_var_symbol_map_sptr): Likewise.
	(corpus::get_undefined_var_symbol_map_sptr): Likewise.
	(corpus::get_fun_symbol_map): Use corpus::priv proxy method.
	(corpus::get_undefined_fun_symbol_map): Likewise.
	(corpus::get_var_symbol_map): Likewise.
	(corpus::get_undefined_var_symbol_map): Likewise.
	* src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Do not
	set corpus symbol maps anymore.
	* src/abg-reader.cc (read_corpus_from_input): Likewise.
	* tests/test-symtab.cc (assert_symbol_count): Do not access the
	corpus symbol maps through sptr anymore.
	* tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Adjust
	expected test output.

Reviewed-by: Giuliano Procida <gprocida@google.com>
Signed-off-by: Matthias Maennich <maennich@google.com>
---
 include/abg-corpus.h                          |  24 ---
 src/abg-corpus-priv.h                         |  21 ++-
 src/abg-corpus.cc                             | 139 +++++++-----------
 src/abg-dwarf-reader.cc                       |  45 ------
 src/abg-reader.cc                             |  11 --
 .../data/test-read-dwarf/PR25007-sdhci.ko.abi |   2 -
 tests/test-symtab.cc                          |  15 +-
 7 files changed, 79 insertions(+), 178 deletions(-)
  

Comments

Dodji Seketeli March 16, 2021, 6:08 p.m. UTC | #1
Hello,

Matthias Maennich <maennich@google.com> a écrit:

[...]

> diff --git a/src/abg-corpus.cc b/src/abg-corpus.cc
> index f9f51a360707..94615bc727ff 100644
> --- a/src/abg-corpus.cc
> +++ b/src/abg-corpus.cc
> @@ -331,6 +331,18 @@ corpus::priv::get_sorted_fun_symbols() const
>    return *sorted_fun_symbols;
>  }
>  
> +const string_elf_symbols_map_type&
> +corpus::priv::get_fun_symbol_map() const

Please add a comment for this function.

> +{
> +  if (!fun_symbol_map)
> +    {
> +      fun_symbol_map = string_elf_symbols_map_type();
> +      for (const auto& symbol : get_sorted_fun_symbols())
> +	(*fun_symbol_map)[symbol->get_name()].push_back(symbol);
> +    }
> +  return *fun_symbol_map;
> +}
> +

[...]


> +const string_elf_symbols_map_type&
> +corpus::priv::get_undefined_fun_symbol_map() const

Likewise.

> +{
> +  if (!undefined_fun_symbol_map)
> +    {
> +      undefined_fun_symbol_map = string_elf_symbols_map_type();
> +      for (const auto& symbol : get_sorted_undefined_fun_symbols())
> +	(*undefined_fun_symbol_map)[symbol->get_name()].push_back(symbol);
> +    }
> +  return *undefined_fun_symbol_map;
> +}
> +
>  /// Return a list of symbols that are not referenced by any function of
>  /// corpus::get_functions().
>  ///
> @@ -425,6 +449,18 @@ corpus::priv::get_sorted_var_symbols() const
>    return *sorted_var_symbols;
>  }
>  
> +const string_elf_symbols_map_type&
> +corpus::priv::get_var_symbol_map() const

Likewise.

> +{
> +  if (!var_symbol_map)
> +    {
> +      var_symbol_map = string_elf_symbols_map_type();
> +      for (const auto& symbol : get_sorted_var_symbols())
> +	(*var_symbol_map)[symbol->get_name()].push_back(symbol);
> +    }
> +  return *var_symbol_map;
> +}
> +
>  /// Getter for a sorted vector of the variable symbols undefined in
>  /// this corpus.
>  ///
> @@ -446,6 +482,18 @@ corpus::priv::get_sorted_undefined_var_symbols() const
>    return *sorted_undefined_var_symbols;
>  }
>  
> +const string_elf_symbols_map_type&
> +corpus::priv::get_undefined_var_symbol_map() const

Likewise.

> +{
> +  if (!undefined_var_symbol_map)
> +    {
> +      undefined_var_symbol_map = string_elf_symbols_map_type();
> +      for (const auto& symbol : get_sorted_undefined_var_symbols())
> +	(*undefined_var_symbol_map)[symbol->get_name()].push_back(symbol);
> +    }
> +  return *undefined_var_symbol_map;
> +}
> +

[...]

> With the prework in previous commits, we are now able to drop the
> public symbols maps in corpus::priv and replace them by private members
> with access through getters. The getters use the new symtab
> implementation to generate the maps on the fly. Setters are not required
> anymore and are removed. Also remove redundant getters.
>
> We could also remove the getters for the symbol maps and the local
> caching variable and leave it all to lookup_symbol, but this is left for
> a later change.
>
> 	* include/abg-corpus.h (corpus::set_fun_symbol_map): Remove
> 	method declaration.
> 	(corpus::set_undefined_fun_symbol_map): Likewise.
> 	(corpus::set_var_symbol_map): Likewise.
> 	(corpus::set_undefined_var_symbol_map): Likewise.
> 	(corpus::get_fun_symbol_map_sptr): Likewise.
> 	(corpus::get_undefined_fun_symbol_map_sptr): Likewise.
> 	(corpus::get_var_symbol_map_sptr): Likewise.
> 	(corpus::get_undefined_var_symbol_map_sptr): Likewise.
> 	* src/abg-corpus-priv.h (corpus::priv::var_symbol_map): make
> 	private and mutable
> 	(corpus::priv::undefined_var_symbol_map): Likewise.
> 	(corpus::priv::fun_symbol_map): Likewise.
> 	(corpus::priv::undefined_fun_symbol_map): Likewise.
> 	(corpus::priv::get_fun_symbol_map): New method declaration.
> 	(corpus::priv::get_undefined_fun_symbol_map): Likewise.
> 	(corpus::priv::get_var_symbol_map): Likewise.
> 	(corpus::priv::get_undefined_var_symbol_map): Likewise.
> 	* src/abg-corpus.cc (corpus::priv::get_fun_symbol_map): New
> 	method implementation.
> 	(corpus::priv::get_undefined_fun_symbol_map): Likewise.
> 	(corpus::priv::get_var_symbol_map): Likewise.
> 	(corpus::priv::get_undefined_var_symbol_map): Likewise.
> 	(corpus::is_empty): depend on symtab only.
> 	(corpus::set_fun_symbol_map): Remove method.
> 	(corpus::set_undefined_fun_symbol_map): Likewise.
> 	(corpus::set_var_symbol_map): Likewise.
> 	(corpus::set_undefined_var_symbol_map): Likewise.
> 	(corpus::get_fun_symbol_map_sptr): Likewise.
> 	(corpus::get_undefined_fun_symbol_map_sptr): Likewise.
> 	(corpus::get_var_symbol_map_sptr): Likewise.
> 	(corpus::get_undefined_var_symbol_map_sptr): Likewise.
> 	(corpus::get_fun_symbol_map): Use corpus::priv proxy method.
> 	(corpus::get_undefined_fun_symbol_map): Likewise.
> 	(corpus::get_var_symbol_map): Likewise.
> 	(corpus::get_undefined_var_symbol_map): Likewise.
> 	* src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Do not
> 	set corpus symbol maps anymore.
> 	* src/abg-reader.cc (read_corpus_from_input): Likewise.
> 	* tests/test-symtab.cc (assert_symbol_count): Do not access the
> 	corpus symbol maps through sptr anymore.
> 	* tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Adjust
> 	expected test output.
>
> Reviewed-by: Giuliano Procida <gprocida@google.com>
> Signed-off-by: Matthias Maennich <maennich@google.com>

OK to apply to master with the changes above once the prerequisite
patches have been applied.

Thanks!

[...]

Cheers,
  

Patch

diff --git a/include/abg-corpus.h b/include/abg-corpus.h
index 425702182056..09f057d705f7 100644
--- a/include/abg-corpus.h
+++ b/include/abg-corpus.h
@@ -158,27 +158,9 @@  public:
   const symtab_reader::symtab_sptr&
   get_symtab() const;
 
-  void
-  set_fun_symbol_map(string_elf_symbols_map_sptr);
-
-  void
-  set_undefined_fun_symbol_map(string_elf_symbols_map_sptr);
-
-  void
-  set_var_symbol_map(string_elf_symbols_map_sptr);
-
-  void
-  set_undefined_var_symbol_map(string_elf_symbols_map_sptr);
-
-  const string_elf_symbols_map_sptr
-  get_fun_symbol_map_sptr() const;
-
   virtual const string_elf_symbols_map_type&
   get_fun_symbol_map() const;
 
-  const string_elf_symbols_map_sptr
-  get_undefined_fun_symbol_map_sptr() const;
-
   const string_elf_symbols_map_type&
   get_undefined_fun_symbol_map() const;
 
@@ -188,15 +170,9 @@  public:
   const elf_symbols&
   get_sorted_undefined_fun_symbols() const;
 
-  const string_elf_symbols_map_sptr
-  get_var_symbol_map_sptr() const;
-
   virtual const string_elf_symbols_map_type&
   get_var_symbol_map() const;
 
-  const string_elf_symbols_map_sptr
-  get_undefined_var_symbol_map_sptr() const;
-
   const string_elf_symbols_map_type&
   get_undefined_var_symbol_map() const;
 
diff --git a/src/abg-corpus-priv.h b/src/abg-corpus-priv.h
index c8bf7f9d4cf6..27a6524c8b42 100644
--- a/src/abg-corpus-priv.h
+++ b/src/abg-corpus-priv.h
@@ -15,6 +15,7 @@ 
 #define __ABG_CORPUS_PRIV_H__
 
 #include "abg-internal.h"
+#include "abg-ir.h"
 #include "abg-regex.h"
 #include "abg-sptr-utils.h"
 #include "abg-symtab-reader.h"
@@ -681,11 +682,7 @@  struct corpus::priv
   string_tu_map_type				path_tu_map;
   vector<function_decl*>			fns;
   vector<var_decl*>				vars;
-  string_elf_symbols_map_sptr			var_symbol_map;
-  string_elf_symbols_map_sptr			undefined_var_symbol_map;
   symtab_reader::symtab_sptr			symtab_;
-  string_elf_symbols_map_sptr			fun_symbol_map;
-  string_elf_symbols_map_sptr			undefined_fun_symbol_map;
   // The type maps contained in this data member are populated if the
   // corpus follows the One Definition Rule and thus if there is only
   // one copy of a type with a given name, per corpus. Otherwise, if
@@ -706,10 +703,14 @@  private:
   priv();
 
   mutable abg_compat::optional<elf_symbols> sorted_var_symbols;
+  mutable abg_compat::optional<string_elf_symbols_map_type> var_symbol_map;
   mutable abg_compat::optional<elf_symbols> sorted_undefined_var_symbols;
+  mutable abg_compat::optional<string_elf_symbols_map_type> undefined_var_symbol_map;
   mutable abg_compat::optional<elf_symbols> unrefed_var_symbols;
   mutable abg_compat::optional<elf_symbols> sorted_fun_symbols;
+  mutable abg_compat::optional<string_elf_symbols_map_type> fun_symbol_map;
   mutable abg_compat::optional<elf_symbols> sorted_undefined_fun_symbols;
+  mutable abg_compat::optional<string_elf_symbols_map_type> undefined_fun_symbol_map;
   mutable abg_compat::optional<elf_symbols> unrefed_fun_symbols;
 
 public:
@@ -731,18 +732,30 @@  public:
   const elf_symbols&
   get_sorted_fun_symbols() const;
 
+  const string_elf_symbols_map_type&
+  get_fun_symbol_map() const;
+
   const elf_symbols&
   get_sorted_undefined_fun_symbols() const;
 
+  const string_elf_symbols_map_type&
+  get_undefined_fun_symbol_map() const;
+
   const elf_symbols&
   get_unreferenced_function_symbols() const;
 
   const elf_symbols&
   get_sorted_var_symbols() const;
 
+  const string_elf_symbols_map_type&
+  get_var_symbol_map() const;
+
   const elf_symbols&
   get_sorted_undefined_var_symbols() const;
 
+  const string_elf_symbols_map_type&
+  get_undefined_var_symbol_map() const;
+
   const elf_symbols&
   get_unreferenced_variable_symbols() const;
 
diff --git a/src/abg-corpus.cc b/src/abg-corpus.cc
index f9f51a360707..94615bc727ff 100644
--- a/src/abg-corpus.cc
+++ b/src/abg-corpus.cc
@@ -331,6 +331,18 @@  corpus::priv::get_sorted_fun_symbols() const
   return *sorted_fun_symbols;
 }
 
+const string_elf_symbols_map_type&
+corpus::priv::get_fun_symbol_map() const
+{
+  if (!fun_symbol_map)
+    {
+      fun_symbol_map = string_elf_symbols_map_type();
+      for (const auto& symbol : get_sorted_fun_symbols())
+	(*fun_symbol_map)[symbol->get_name()].push_back(symbol);
+    }
+  return *fun_symbol_map;
+}
+
 /// Getter for a sorted vector of the function symbols undefined in
 /// this corpus.
 ///
@@ -352,6 +364,18 @@  corpus::priv::get_sorted_undefined_fun_symbols() const
   return *sorted_undefined_fun_symbols;
 }
 
+const string_elf_symbols_map_type&
+corpus::priv::get_undefined_fun_symbol_map() const
+{
+  if (!undefined_fun_symbol_map)
+    {
+      undefined_fun_symbol_map = string_elf_symbols_map_type();
+      for (const auto& symbol : get_sorted_undefined_fun_symbols())
+	(*undefined_fun_symbol_map)[symbol->get_name()].push_back(symbol);
+    }
+  return *undefined_fun_symbol_map;
+}
+
 /// Return a list of symbols that are not referenced by any function of
 /// corpus::get_functions().
 ///
@@ -425,6 +449,18 @@  corpus::priv::get_sorted_var_symbols() const
   return *sorted_var_symbols;
 }
 
+const string_elf_symbols_map_type&
+corpus::priv::get_var_symbol_map() const
+{
+  if (!var_symbol_map)
+    {
+      var_symbol_map = string_elf_symbols_map_type();
+      for (const auto& symbol : get_sorted_var_symbols())
+	(*var_symbol_map)[symbol->get_name()].push_back(symbol);
+    }
+  return *var_symbol_map;
+}
+
 /// Getter for a sorted vector of the variable symbols undefined in
 /// this corpus.
 ///
@@ -446,6 +482,18 @@  corpus::priv::get_sorted_undefined_var_symbols() const
   return *sorted_undefined_var_symbols;
 }
 
+const string_elf_symbols_map_type&
+corpus::priv::get_undefined_var_symbol_map() const
+{
+  if (!undefined_var_symbol_map)
+    {
+      undefined_var_symbol_map = string_elf_symbols_map_type();
+      for (const auto& symbol : get_sorted_undefined_var_symbols())
+	(*undefined_var_symbol_map)[symbol->get_name()].push_back(symbol);
+    }
+  return *undefined_var_symbol_map;
+}
+
 /// Return a list of symbols that are not referenced by any variable of
 /// corpus::get_variables().
 ///
@@ -883,10 +931,7 @@  corpus::is_empty() const
 	}
     }
   return (members_empty
-	  && priv_->fun_symbol_map
-	  && priv_->fun_symbol_map->empty()
-	  && priv_->var_symbol_map
-	  && priv_->var_symbol_map->empty()
+	  && !get_symtab()->has_symbols()
 	  && priv_->soname.empty()
 	  && priv_->needed.empty());
 }
@@ -920,69 +965,12 @@  const symtab_reader::symtab_sptr&
 corpus::get_symtab() const
 { return priv_->symtab_; }
 
-/// Setter of the function symbols map.
-///
-/// @param map a shared pointer to the new function symbols map.
-void
-corpus::set_fun_symbol_map(string_elf_symbols_map_sptr map)
-{priv_->fun_symbol_map = map;}
-
-/// Setter for the map of function symbols that are undefined in this
-/// corpus.
-///
-/// @param map a new map for function symbols not defined in this
-/// corpus.  The key of the map is the name of the function symbol.
-/// The value is a vector of all the function symbols that have the
-/// same name.
-void
-corpus::set_undefined_fun_symbol_map(string_elf_symbols_map_sptr map)
-{priv_->undefined_fun_symbol_map = map;}
-
-/// Setter of the variable symbols map.
-///
-/// @param map a shared pointer to the new variable symbols map.
-void
-corpus::set_var_symbol_map(string_elf_symbols_map_sptr map)
-{priv_->var_symbol_map = map;}
-
-/// Setter for the map of variable symbols that are undefined in this
-/// corpus.
-///
-/// @param map a new map for variable symbols not defined in this
-/// corpus.  The key of the map is the name of the variable symbol.
-/// The value is a vector of all the variable symbols that have the
-/// same name.
-void
-corpus::set_undefined_var_symbol_map(string_elf_symbols_map_sptr map)
-{priv_->undefined_var_symbol_map = map;}
-
-/// Getter for the function symbols map.
-///
-/// @return a shared pointer to the function symbols map.
-const string_elf_symbols_map_sptr
-corpus::get_fun_symbol_map_sptr() const
-{
-  if (!priv_->fun_symbol_map)
-    priv_->fun_symbol_map.reset(new string_elf_symbols_map_type);
-  return priv_->fun_symbol_map;
-}
-
 /// Getter for the function symbols map.
 ///
 /// @return a reference to the function symbols map.
 const string_elf_symbols_map_type&
 corpus::get_fun_symbol_map() const
-{return *get_fun_symbol_map_sptr();}
-
-/// Getter for the map of function symbols that are undefined in this
-/// corpus.
-///
-/// @return the map of function symbols not defined in this corpus.
-/// The key of the map is the name of the function symbol.  The value
-/// is a vector of all the function symbols that have the same name.
-const string_elf_symbols_map_sptr
-corpus::get_undefined_fun_symbol_map_sptr() const
-{return priv_->undefined_fun_symbol_map;}
+{return priv_->get_fun_symbol_map();}
 
 /// Getter for the map of function symbols that are undefined in this
 /// corpus.
@@ -992,7 +980,7 @@  corpus::get_undefined_fun_symbol_map_sptr() const
 /// is a vector of all the function symbols that have the same name.
 const string_elf_symbols_map_type&
 corpus::get_undefined_fun_symbol_map() const
-{return *get_undefined_fun_symbol_map_sptr();}
+{return priv_->get_undefined_fun_symbol_map();}
 
 const elf_symbols&
 corpus::get_sorted_fun_symbols() const
@@ -1010,33 +998,12 @@  const elf_symbols&
 corpus::get_sorted_undefined_var_symbols() const
 { return priv_->get_sorted_undefined_var_symbols(); }
 
-/// Getter for the variable symbols map.
-///
-/// @return a shared pointer to the variable symbols map.
-const string_elf_symbols_map_sptr
-corpus::get_var_symbol_map_sptr() const
-{
-  if (!priv_->var_symbol_map)
-    priv_->var_symbol_map.reset(new string_elf_symbols_map_type);
-  return priv_->var_symbol_map;
-}
-
 /// Getter for the variable symbols map.
 ///
 /// @return a reference to the variabl symbols map.
 const string_elf_symbols_map_type&
 corpus::get_var_symbol_map() const
-{return *get_var_symbol_map_sptr();}
-
-/// Getter for the map of variable symbols that are undefined in this
-/// corpus.
-///
-/// @return the map of variable symbols not defined in this corpus.
-/// The key of the map is the name of the variable symbol.  The value
-/// is a vector of all the variable symbols that have the same name.
-const string_elf_symbols_map_sptr
-corpus::get_undefined_var_symbol_map_sptr() const
-{return priv_->undefined_var_symbol_map;}
+{return priv_->get_var_symbol_map();}
 
 /// Getter for the map of variable symbols that are undefined in this
 /// corpus.
@@ -1046,7 +1013,7 @@  corpus::get_undefined_var_symbol_map_sptr() const
 /// is a vector of all the variable symbols that have the same name.
 const string_elf_symbols_map_type&
 corpus::get_undefined_var_symbol_map() const
-{return *get_undefined_var_symbol_map_sptr();}
+{return priv_->get_undefined_var_symbol_map();}
 
 /// Look in the function symbols map for a symbol with a given name.
 ///
diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc
index b2a7144afe9d..6d4e8ae23c53 100644
--- a/src/abg-dwarf-reader.cc
+++ b/src/abg-dwarf-reader.cc
@@ -14661,51 +14661,6 @@  read_debug_info_into_corpus(read_context& ctxt)
 
   // Set symbols information to the corpus.
   ctxt.current_corpus()->set_symtab(ctxt.symtab());
-  if (!get_ignore_symbol_table(ctxt))
-    {
-      if (ctxt.load_in_linux_kernel_mode()
-	  && is_linux_kernel(ctxt.elf_handle()))
-	{
-	  string_elf_symbols_map_sptr exported_fn_symbols_map
-	    (new string_elf_symbols_map_type);
-	  auto filter = ctxt.symtab()->make_filter();
-	  filter.set_functions();
-
-	  for (const auto& symbol :
-	       symtab_reader::filtered_symtab(*ctxt.symtab(), filter))
-	    {
-	      (*exported_fn_symbols_map)[symbol->get_name()].push_back(symbol);
-	    }
-
-	  ctxt.current_corpus()->set_fun_symbol_map(exported_fn_symbols_map);
-
-	  string_elf_symbols_map_sptr exported_var_symbols_map(
-	      new string_elf_symbols_map_type);
-	  filter = ctxt.symtab()->make_filter();
-	  filter.set_variables();
-	  for (const auto& symbol :
-	       symtab_reader::filtered_symtab(*ctxt.symtab(), filter))
-	    {
-	      (*exported_var_symbols_map)[symbol->get_name()].push_back(symbol);
-	    }
-	  ctxt.current_corpus()->set_var_symbol_map(exported_var_symbols_map);
-	}
-      else
-	{
-	  ctxt.current_corpus()->set_fun_symbol_map(ctxt.fun_syms_sptr());
-	  ctxt.current_corpus()->set_var_symbol_map(ctxt.var_syms_sptr());
-	}
-
-      ctxt.current_corpus()->set_undefined_fun_symbol_map
-	(ctxt.undefined_fun_syms_sptr());
-      ctxt.current_corpus()->set_undefined_var_symbol_map
-	(ctxt.undefined_var_syms_sptr());
-    }
-  else
-    {
-      ctxt.current_corpus()->set_fun_symbol_map(ctxt.fun_syms_sptr());
-      ctxt.current_corpus()->set_var_symbol_map(ctxt.var_syms_sptr());
-    }
 
   // Get out now if no debug info is found.
   if (!ctxt.dwarf())
diff --git a/src/abg-reader.cc b/src/abg-reader.cc
index c26689ae17ca..296e1e2115d1 100644
--- a/src/abg-reader.cc
+++ b/src/abg-reader.cc
@@ -1908,17 +1908,6 @@  read_corpus_from_input(read_context& ctxt)
       // are nil, due to potential suppression specifications.  That's
       // fine.
       corp.set_symtab(symtab_reader::symtab::load(fn_sym_db, var_sym_db));
-
-      if (fn_sym_db)
-	{
-	  corp.set_fun_symbol_map(fn_sym_db);
-	  fn_sym_db.reset();
-	}
-      if (var_sym_db)
-	{
-	  corp.set_var_symbol_map(var_sym_db);
-	  var_sym_db.reset();
-	}
     }
 
   ctxt.get_environment()->canonicalization_is_done(false);
diff --git a/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi b/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi
index 1167e5aa478a..4c9a766f1c7c 100644
--- a/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi
+++ b/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi
@@ -37,8 +37,6 @@ 
     <elf-symbol name='sdhci_start_tuning' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='sdhci_suspend_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
   </elf-function-symbols>
-  <elf-variable-symbols>
-  </elf-variable-symbols>
   <abi-instr version='1.0' address-size='64' path='/ws/android/kernel/aosp/common-mainline/common/drivers/mmc/host/sdhci.c' comp-dir-path='/ws/android/kernel/aosp/common-mainline/out/android-mainline/common' language='LANG_C89'>
     <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='type-id-1'/>
     <array-type-def dimensions='1' type-id='type-id-2' size-in-bits='64' id='type-id-3'>
diff --git a/tests/test-symtab.cc b/tests/test-symtab.cc
index ff467d8ad345..2df766de1c5c 100644
--- a/tests/test-symtab.cc
+++ b/tests/test-symtab.cc
@@ -89,17 +89,19 @@  assert_symbol_count(const std::string& path,
   REQUIRE((status & dwarf_reader::STATUS_OK));
   const corpus& corpus = *corpus_ptr;
 
+  size_t total_symbols = 0;
+
   if (function_symbols != N)
     {
       CHECK(corpus.get_sorted_fun_symbols().size() == function_symbols);
       CHECK(corpus.get_fun_symbol_map().size() == function_symbols);
-      CHECK(corpus.get_fun_symbol_map_sptr()->size() == function_symbols);
+      total_symbols += function_symbols;
     }
   if (variable_symbols != N)
     {
       CHECK(corpus.get_sorted_var_symbols().size() == variable_symbols);
       CHECK(corpus.get_var_symbol_map().size() == variable_symbols);
-      CHECK(corpus.get_var_symbol_map_sptr()->size() == variable_symbols);
+      total_symbols += variable_symbols;
     }
   if (undefined_variable_symbols != N)
     {
@@ -107,8 +109,7 @@  assert_symbol_count(const std::string& path,
 	    == undefined_function_symbols);
       CHECK(corpus.get_undefined_fun_symbol_map().size()
 	    == undefined_function_symbols);
-      CHECK(corpus.get_undefined_fun_symbol_map_sptr()->size()
-	    == undefined_function_symbols);
+      total_symbols += undefined_function_symbols;
     }
   if (undefined_function_symbols != N)
     {
@@ -116,10 +117,12 @@  assert_symbol_count(const std::string& path,
 	    == undefined_variable_symbols);
       CHECK(corpus.get_undefined_var_symbol_map().size()
 	    == undefined_variable_symbols);
-      CHECK(corpus.get_undefined_var_symbol_map_sptr()->size()
-	    == undefined_variable_symbols);
+      total_symbols += undefined_variable_symbols;
     }
 
+  // assert the corpus reports being empty consistently with the symbol count
+  CHECK(corpus.is_empty() == (total_symbols == 0));
+
   return corpus_ptr;
 }