[12/12] Remove ALL_OBJFILE_PSYMTABS

Message ID 20181125165439.13773-13-tom@tromey.com
State New
Headers show
Series
  • Remove some ALL_* iteration macros
Related show

Commit Message

Tom Tromey Nov. 25, 2018, 4:54 p.m.
This removes the ALL_OBJFILE_PSYMTABS macro, replacing its uses with
ranged for loops.

gdb/ChangeLog
2018-11-25  Tom Tromey  <tom@tromey.com>

	* dbxread.c (dbx_end_psymtab): Use objfile_psymtabs.
	* mdebugread.c (parse_partial_symbols): Use objfile_psymtabs.
	* psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove.
	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
	(psym_lookup_symbol, psym_find_last_source_symtab)
	(psym_forget_cached_source_info, psym_print_stats)
	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
	(psym_map_matching_symbols, psym_expand_symtabs_matching)
	(psym_find_compunit_symtab_by_address)
	(maintenance_print_psymbols, maintenance_info_psymtabs)
	(maintenance_check_psymtabs): Use ranged for.
	* psymtab.h (class objfile_psymtabs): New.
	(require_partial_symbols): Return objfile_psymtabs.
	* psympriv.h (ALL_OBJFILE_PSYMTABS): Remove.
---
 gdb/ChangeLog    |  18 +++
 gdb/dbxread.c    |   6 +-
 gdb/mdebugread.c |  22 ++--
 gdb/psympriv.h   |   5 -
 gdb/psymtab.c    | 278 ++++++++++++++++++++---------------------------
 gdb/psymtab.h    |  22 +++-
 6 files changed, 168 insertions(+), 183 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index e004e8cb93..36b027193a 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -2014,18 +2014,14 @@  dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
     pst->set_text_low (pst->raw_text_high ());
   else
     {
-      struct partial_symtab *p1;
-
       /* If we know our own starting text address, then walk through all other
          psymtabs for this objfile, and if any didn't know their ending text
          address, set it to our starting address.  Take care to not set our
          own ending address to our starting address.  */
 
-      ALL_OBJFILE_PSYMTABS (objfile, p1)
-      {
+      for (struct partial_symtab *p1 : objfile_psymtabs (objfile))
 	if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
 	  p1->set_text_high (pst->raw_text_low ());
-      }
     }
 
   /* End of kludge for patching Solaris textlow and texthigh.  */
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 26687f6c8d..7014861f33 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -3681,17 +3681,17 @@  parse_partial_symbols (minimal_symbol_reader &reader,
 	  && save_pst->text_low_valid
 	  && !(objfile->flags & OBJF_REORDERED))
 	{
-	  ALL_OBJFILE_PSYMTABS (objfile, pst)
-	  {
-	    if (save_pst != pst
-		&& save_pst->raw_text_low () >= pst->raw_text_low ()
-		&& save_pst->raw_text_low () < pst->raw_text_high ()
-		&& save_pst->raw_text_high () > pst->raw_text_high ())
-	      {
-		objfile->flags |= OBJF_REORDERED;
-		break;
-	      }
-	  }
+	  for (struct partial_symtab *iter : objfile_psymtabs (objfile))
+	    {
+	      if (save_pst != iter
+		  && save_pst->raw_text_low () >= iter->raw_text_low ()
+		  && save_pst->raw_text_low () < iter->raw_text_high ()
+		  && save_pst->raw_text_high () > iter->raw_text_high ())
+		{
+		  objfile->flags |= OBJF_REORDERED;
+		  break;
+		}
+	    }
 	}
     }
 
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index f8eade7df3..16bfa8914d 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -331,9 +331,4 @@  class psymtab_discarder
   struct partial_symtab *m_psymtab;
 };
 
-/* Traverse all psymtabs in one objfile.  */
-
-#define	ALL_OBJFILE_PSYMTABS(objfile, p) \
-    for ((p) = (objfile) -> psymtabs; (p) != NULL; (p) = (p) -> next)
-
 #endif /* PSYMPRIV_H */
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 61fb0ebb70..566ee20334 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -19,8 +19,8 @@ 
 
 #include "defs.h"
 #include "symtab.h"
-#include "psympriv.h"
 #include "objfiles.h"
+#include "psympriv.h"
 #include "block.h"
 #include "filenames.h"
 #include "source.h"
@@ -65,10 +65,9 @@  static struct partial_symbol *find_pc_sect_psymbol (struct objfile *,
 static struct compunit_symtab *psymtab_to_symtab (struct objfile *objfile,
 						  struct partial_symtab *pst);
 
-/* Ensure that the partial symbols for OBJFILE have been loaded.  This
-   function always returns its argument, as a convenience.  */
+/* See psymtab.h.  */
 
-struct objfile *
+objfile_psymtabs
 require_partial_symbols (struct objfile *objfile, int verbose)
 {
   if ((objfile->flags & OBJF_PSYMTABS_READ) == 0)
@@ -93,21 +92,9 @@  require_partial_symbols (struct objfile *objfile, int verbose)
 	}
     }
 
-  return objfile;
+  return objfile_psymtabs (objfile);
 }
 
-/* Traverse all psymtabs in one objfile, requiring that the psymtabs
-   be read in.  */
-
-#define ALL_OBJFILE_PSYMTABS_REQUIRED(objfile, p)		\
-    for ((p) = require_partial_symbols (objfile, 1)->psymtabs;	\
-	 (p) != NULL;						\
-	 (p) = (p)->next)
-
-/* We want to make sure this file always requires psymtabs.  */
-
-#undef ALL_OBJFILE_PSYMTABS
-
 /* Helper function for psym_map_symtabs_matching_filename that
    expands the symtabs and calls the iterator.  */
 
@@ -146,57 +133,56 @@  psym_map_symtabs_matching_filename
    const char *real_path,
    gdb::function_view<bool (symtab *)> callback)
 {
-  struct partial_symtab *pst;
   const char *name_basename = lbasename (name);
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
-  {
-    /* We can skip shared psymtabs here, because any file name will be
-       attached to the unshared psymtab.  */
-    if (pst->user != NULL)
-      continue;
-
-    /* Anonymous psymtabs don't have a file name.  */
-    if (pst->anonymous)
-      continue;
+  for (struct partial_symtab *pst : require_partial_symbols (objfile, 1))
+    {
+      /* We can skip shared psymtabs here, because any file name will be
+	 attached to the unshared psymtab.  */
+      if (pst->user != NULL)
+	continue;
 
-    if (compare_filenames_for_search (pst->filename, name))
-      {
-	if (partial_map_expand_apply (objfile, name, real_path,
-				      pst, callback))
-	  return true;
+      /* Anonymous psymtabs don't have a file name.  */
+      if (pst->anonymous)
 	continue;
-      }
 
-    /* Before we invoke realpath, which can get expensive when many
-       files are involved, do a quick comparison of the basenames.  */
-    if (! basenames_may_differ
-	&& FILENAME_CMP (name_basename, lbasename (pst->filename)) != 0)
-      continue;
+      if (compare_filenames_for_search (pst->filename, name))
+	{
+	  if (partial_map_expand_apply (objfile, name, real_path,
+					pst, callback))
+	    return true;
+	  continue;
+	}
 
-    if (compare_filenames_for_search (psymtab_to_fullname (pst), name))
-      {
-	if (partial_map_expand_apply (objfile, name, real_path,
-				      pst, callback))
-	  return true;
+      /* Before we invoke realpath, which can get expensive when many
+	 files are involved, do a quick comparison of the basenames.  */
+      if (! basenames_may_differ
+	  && FILENAME_CMP (name_basename, lbasename (pst->filename)) != 0)
 	continue;
-      }
 
-    /* If the user gave us an absolute path, try to find the file in
-       this symtab and use its absolute path.  */
-    if (real_path != NULL)
-      {
-	gdb_assert (IS_ABSOLUTE_PATH (real_path));
-	gdb_assert (IS_ABSOLUTE_PATH (name));
-	if (filename_cmp (psymtab_to_fullname (pst), real_path) == 0)
-	  {
-	    if (partial_map_expand_apply (objfile, name, real_path,
-					  pst, callback))
-	      return true;
-	    continue;
-	  }
-      }
-  }
+      if (compare_filenames_for_search (psymtab_to_fullname (pst), name))
+	{
+	  if (partial_map_expand_apply (objfile, name, real_path,
+					pst, callback))
+	    return true;
+	  continue;
+	}
+
+      /* If the user gave us an absolute path, try to find the file in
+	 this symtab and use its absolute path.  */
+      if (real_path != NULL)
+	{
+	  gdb_assert (IS_ABSOLUTE_PATH (real_path));
+	  gdb_assert (IS_ABSOLUTE_PATH (name));
+	  if (filename_cmp (psymtab_to_fullname (pst), real_path) == 0)
+	    {
+	      if (partial_map_expand_apply (objfile, name, real_path,
+					    pst, callback))
+		return true;
+	      continue;
+	    }
+	}
+    }
 
   return false;
 }
@@ -289,7 +275,6 @@  find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
 		      struct obj_section *section,
 		      struct bound_minimal_symbol msymbol)
 {
-  struct partial_symtab *pst;
   CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets,
 				 SECT_OFF_TEXT (objfile));
 
@@ -298,8 +283,9 @@  find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
 
   if (objfile->psymtabs_addrmap != NULL)
     {
-      pst = ((struct partial_symtab *)
-	     addrmap_find (objfile->psymtabs_addrmap, pc - baseaddr));
+      struct partial_symtab *pst
+	= ((struct partial_symtab *)
+	   addrmap_find (objfile->psymtabs_addrmap, pc - baseaddr));
       if (pst != NULL)
 	{
 	  /* FIXME: addrmaps currently do not handle overlayed sections,
@@ -341,7 +327,7 @@  find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
      its CUs may be missing in PSYMTABS_ADDRMAP as they may be varying
      debug info type in single OBJFILE.  */
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
+  for (struct partial_symtab *pst : require_partial_symbols (objfile, 1))
     if (!pst->psymtabs_addrmap_supported
 	&& pc >= pst->text_low (objfile) && pc < pst->text_high (objfile))
       {
@@ -458,43 +444,42 @@  psym_lookup_symbol (struct objfile *objfile,
 		    int block_index, const char *name,
 		    const domain_enum domain)
 {
-  struct partial_symtab *ps;
   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
   struct compunit_symtab *stab_best = NULL;
 
   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
-  {
-    if (!ps->readin && lookup_partial_symbol (objfile, ps, name,
-					      psymtab_index, domain))
-      {
-	struct symbol *sym, *with_opaque = NULL;
-	struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps);
-	/* Note: While psymtab_to_symtab can return NULL if the partial symtab
-	   is empty, we can assume it won't here because lookup_partial_symbol
-	   succeeded.  */
-	const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-	struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-	sym = block_find_symbol (block, name, domain,
-				 block_find_non_opaque_type_preferred,
-				 &with_opaque);
-
-	/* Some caution must be observed with overloaded functions
-	   and methods, since the index will not contain any overload
-	   information (but NAME might contain it).  */
-
-	if (sym != NULL
-	    && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
-	  return stab;
-	if (with_opaque != NULL
-	    && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name))
-	  stab_best = stab;
-
-	/* Keep looking through other psymtabs.  */
-      }
-  }
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
+    {
+      if (!ps->readin && lookup_partial_symbol (objfile, ps, name,
+						psymtab_index, domain))
+	{
+	  struct symbol *sym, *with_opaque = NULL;
+	  struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps);
+	  /* Note: While psymtab_to_symtab can return NULL if the
+	     partial symtab is empty, we can assume it won't here
+	     because lookup_partial_symbol succeeded.  */
+	  const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
+	  struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
+
+	  sym = block_find_symbol (block, name, domain,
+				   block_find_non_opaque_type_preferred,
+				   &with_opaque);
+
+	  /* Some caution must be observed with overloaded functions
+	     and methods, since the index will not contain any overload
+	     information (but NAME might contain it).  */
+
+	  if (sym != NULL
+	      && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
+	    return stab;
+	  if (with_opaque != NULL
+	      && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name))
+	    stab_best = stab;
+
+	  /* Keep looking through other psymtabs.  */
+	}
+    }
 
   return stab_best;
 }
@@ -752,10 +737,9 @@  psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
 static struct symtab *
 psym_find_last_source_symtab (struct objfile *ofp)
 {
-  struct partial_symtab *ps;
   struct partial_symtab *cs_pst = NULL;
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (ofp, ps)
+  for (struct partial_symtab *ps : require_partial_symbols (ofp, 1))
     {
       const char *name = ps->filename;
       int len = strlen (name);
@@ -791,9 +775,7 @@  psym_find_last_source_symtab (struct objfile *ofp)
 static void
 psym_forget_cached_source_info (struct objfile *objfile)
 {
-  struct partial_symtab *pst;
-
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
+  for (struct partial_symtab *pst : require_partial_symbols (objfile, 1))
     {
       if (pst->fullname != NULL)
 	{
@@ -973,10 +955,9 @@  static void
 psym_print_stats (struct objfile *objfile)
 {
   int i;
-  struct partial_symtab *ps;
 
   i = 0;
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
     {
       if (ps->readin == 0)
 	i++;
@@ -1016,19 +997,17 @@  static void
 psym_expand_symtabs_for_function (struct objfile *objfile,
 				  const char *func_name)
 {
-  struct partial_symtab *ps;
-
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
-  {
-    if (ps->readin)
-      continue;
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
+    {
+      if (ps->readin)
+	continue;
 
-    if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN)
-	 != NULL)
-	|| (lookup_partial_symbol (objfile, ps, func_name, 0, VAR_DOMAIN)
-	    != NULL))
-      psymtab_to_symtab (objfile, ps);
-  }
+      if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN)
+	   != NULL)
+	  || (lookup_partial_symbol (objfile, ps, func_name, 0, VAR_DOMAIN)
+	      != NULL))
+	psymtab_to_symtab (objfile, ps);
+    }
 }
 
 /* Psymtab version of expand_all_symtabs.  See its definition in
@@ -1037,12 +1016,8 @@  psym_expand_symtabs_for_function (struct objfile *objfile,
 static void
 psym_expand_all_symtabs (struct objfile *objfile)
 {
-  struct partial_symtab *psymtab;
-
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, psymtab)
-    {
-      psymtab_to_symtab (objfile, psymtab);
-    }
+  for (struct partial_symtab *psymtab : require_partial_symbols (objfile, 1))
+    psymtab_to_symtab (objfile, psymtab);
 }
 
 /* Psymtab version of expand_symtabs_with_fullname.  See its definition in
@@ -1052,9 +1027,7 @@  static void
 psym_expand_symtabs_with_fullname (struct objfile *objfile,
 				   const char *fullname)
 {
-  struct partial_symtab *p;
-
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, p)
+  for (struct partial_symtab *p : require_partial_symbols (objfile, 1))
     {
       /* Anonymous psymtabs don't have a name of a source file.  */
       if (p->anonymous)
@@ -1077,9 +1050,7 @@  psym_map_symbol_filenames (struct objfile *objfile,
 			   symbol_filename_ftype *fun, void *data,
 			   int need_fullname)
 {
-  struct partial_symtab *ps;
-
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
     {
       const char *fullname;
 
@@ -1192,9 +1163,8 @@  psym_map_matching_symbols (struct objfile *objfile,
 			   symbol_compare_ftype *ordered_compare)
 {
   const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
-  struct partial_symtab *ps;
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
     {
       QUIT;
       if (ps->readin
@@ -1317,17 +1287,13 @@  psym_expand_symtabs_matching
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    enum search_domain domain)
 {
-  struct partial_symtab *ps;
-
   lookup_name_info lookup_name = lookup_name_in.make_ignore_params ();
 
   /* Clear the search flags.  */
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
-    {
-      ps->searched_flag = PST_NOT_SEARCHED;
-    }
+  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
+    ps->searched_flag = PST_NOT_SEARCHED;
 
-  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+  for (struct partial_symtab *ps : objfile_psymtabs (objfile))
     {
       QUIT;
 
@@ -1416,23 +1382,21 @@  psym_find_compunit_symtab_by_address (struct objfile *objfile,
 {
   if (objfile->psymbol_map.empty ())
     {
-      struct partial_symtab *pst;
-
       std::set<CORE_ADDR> seen_addrs;
 
-      ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
-      {
-	psym_fill_psymbol_map (objfile, pst,
-			       &seen_addrs,
-			       objfile->global_psymbols,
-			       pst->globals_offset,
-			       pst->n_global_syms);
-	psym_fill_psymbol_map (objfile, pst,
-			       &seen_addrs,
-			       objfile->static_psymbols,
-			       pst->statics_offset,
-			       pst->n_static_syms);
-      }
+      for (struct partial_symtab *pst : require_partial_symbols (objfile, 1))
+	{
+	  psym_fill_psymbol_map (objfile, pst,
+				 &seen_addrs,
+				 objfile->global_psymbols,
+				 pst->globals_offset,
+				 pst->n_global_syms);
+	  psym_fill_psymbol_map (objfile, pst,
+				 &seen_addrs,
+				 objfile->static_psymbols,
+				 pst->statics_offset,
+				 pst->n_static_syms);
+	}
 
       objfile->psymbol_map.shrink_to_fit ();
 
@@ -1868,7 +1832,6 @@  maintenance_print_psymbols (const char *args, int from_tty)
 {
   struct ui_file *outfile = gdb_stdout;
   char *address_arg = NULL, *source_arg = NULL, *objfile_arg = NULL;
-  struct partial_symtab *ps;
   int i, outfile_idx, found;
   CORE_ADDR pc = 0;
   struct obj_section *section = NULL;
@@ -1956,7 +1919,8 @@  maintenance_print_psymbols (const char *args, int from_tty)
 
 	  /* We don't assume each pc has a unique objfile (this is for
 	     debugging).  */
-	  ps = find_pc_sect_psymtab (objfile, pc, section, msymbol);
+	  struct partial_symtab *ps = find_pc_sect_psymtab (objfile, pc,
+							    section, msymbol);
 	  if (ps != NULL)
 	    {
 	      if (!printed_objfile_header)
@@ -1972,7 +1936,7 @@  maintenance_print_psymbols (const char *args, int from_tty)
 	}
       else
 	{
-	  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+	  for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
 	    {
 	      int print_for_source = 0;
 
@@ -2032,13 +1996,12 @@  maintenance_info_psymtabs (const char *regexp, int from_tty)
     for (struct objfile *objfile : all_objfiles (pspace))
       {
 	struct gdbarch *gdbarch = get_objfile_arch (objfile);
-	struct partial_symtab *psymtab;
 
 	/* We don't want to print anything for this objfile until we
 	   actually find a symtab whose name matches.  */
 	int printed_objfile_start = 0;
 
-	ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, psymtab)
+	for (struct partial_symtab *psymtab : require_partial_symbols (objfile, 1))
 	  {
 	    QUIT;
 
@@ -2139,13 +2102,12 @@  maintenance_check_psymtabs (const char *ignore, int from_tty)
 {
   struct symbol *sym;
   struct compunit_symtab *cust = NULL;
-  struct partial_symtab *ps;
   const struct blockvector *bv;
   struct block *b;
   int length;
 
   for (struct objfile *objfile : all_objfiles (current_program_space))
-    ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+    for (struct partial_symtab *ps : require_partial_symbols (objfile, 1))
       {
 	struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index 6d9f257f31..978fccb866 100644
--- a/gdb/psymtab.h
+++ b/gdb/psymtab.h
@@ -21,6 +21,7 @@ 
 #define PSYMTAB_H
 
 #include "symfile.h"
+#include "common/next-iterator.h"
 
 /* A bcache for partial symbols.  */
 
@@ -35,12 +36,25 @@  extern const struct quick_symbol_functions psym_functions;
 extern const struct quick_symbol_functions dwarf2_gdb_index_functions;
 extern const struct quick_symbol_functions dwarf2_debug_names_functions;
 
+/* A range adapter that makes it possible to iterate over all
+   psymtabs in one objfile.  */
+
+class objfile_psymtabs : public next_adapter<struct partial_symtab>
+{
+public:
+
+  explicit objfile_psymtabs (struct objfile *objfile)
+    : next_adapter<struct partial_symtab> (objfile->psymtabs)
+  {
+  }
+};
+
 /* Ensure that the partial symbols for OBJFILE have been loaded.  If
    VERBOSE is non-zero, then this will print a message when symbols
-   are loaded.  This function always returns its argument, as a
-   convenience.  */
+   are loaded.  This function returns a range adapter suitable for
+   iterating over the psymtabs of OBJFILE.  */
 
-extern struct objfile *require_partial_symbols (struct objfile *objfile,
-						int verbose);
+extern objfile_psymtabs require_partial_symbols (struct objfile *objfile,
+						 int verbose);
 
 #endif /* PSYMTAB_H */