diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 6098b35..dc2eda2 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -158,7 +158,7 @@ static int block_address_function_relative = 0;
 static CORE_ADDR lowest_text_address;
 
 /* Non-zero if there is any line number info in the objfile.  Prevents
-   end_psymtab from discarding an otherwise empty psymtab.  */
+   dbx_end_psymtab from discarding an otherwise empty psymtab.  */
 
 static int has_line_numbers;
 
@@ -1358,12 +1358,12 @@ read_dbx_symtab (struct objfile *objfile)
 		     which are not the address.  */
 		  && nlist.n_value >= pst->textlow)
 		{
-		  end_psymtab (objfile, pst, psymtab_include_list,
-			       includes_used, symnum * symbol_size,
-			       nlist.n_value > pst->texthigh
-			       ? nlist.n_value : pst->texthigh,
-			       dependency_list, dependencies_used,
-			       textlow_not_set);
+		  dbx_end_psymtab (objfile, pst, psymtab_include_list,
+				   includes_used, symnum * symbol_size,
+				   nlist.n_value > pst->texthigh
+				   ? nlist.n_value : pst->texthigh,
+				   dependency_list, dependencies_used,
+				   textlow_not_set);
 		  pst = (struct partial_symtab *) 0;
 		  includes_used = 0;
 		  dependencies_used = 0;
@@ -1454,7 +1454,7 @@ read_dbx_symtab (struct objfile *objfile)
 	    prev_textlow_not_set = textlow_not_set;
 
 	    /* A zero value is probably an indication for the SunPRO 3.0
-	       compiler.  end_psymtab explicitly tests for zero, so
+	       compiler.  dbx_end_psymtab explicitly tests for zero, so
 	       don't relocate it.  */
 
 	    if (nlist.n_value == 0
@@ -1474,11 +1474,12 @@ read_dbx_symtab (struct objfile *objfile)
 
 		if (pst)
 		  {
-		    end_psymtab (objfile, pst, psymtab_include_list,
-				 includes_used, symnum * symbol_size,
-				 valu > pst->texthigh ? valu : pst->texthigh,
-				 dependency_list, dependencies_used,
-				 prev_textlow_not_set);
+		    dbx_end_psymtab (objfile, pst, psymtab_include_list,
+				     includes_used, symnum * symbol_size,
+				     valu > pst->texthigh
+				     ? valu : pst->texthigh,
+				     dependency_list, dependencies_used,
+				     prev_textlow_not_set);
 		    pst = (struct partial_symtab *) 0;
 		    includes_used = 0;
 		    dependencies_used = 0;
@@ -2080,15 +2081,16 @@ read_dbx_symtab (struct objfile *objfile)
 
 	case N_ENDM:
 	  /* Solaris 2 end of module, finish current partial symbol table.
-	     end_psymtab will set pst->texthigh to the proper value, which
+	     dbx_end_psymtab will set pst->texthigh to the proper value, which
 	     is necessary if a module compiled without debugging info
 	     follows this module.  */
 	  if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
 	    {
-	      end_psymtab (objfile, pst, psymtab_include_list, includes_used,
-			   symnum * symbol_size,
-			   (CORE_ADDR) 0, dependency_list,
-			   dependencies_used, textlow_not_set);
+	      dbx_end_psymtab (objfile, pst,
+			       psymtab_include_list, includes_used,
+			       symnum * symbol_size,
+			       (CORE_ADDR) 0, dependency_list,
+			       dependencies_used, textlow_not_set);
 	      pst = (struct partial_symtab *) 0;
 	      includes_used = 0;
 	      dependencies_used = 0;
@@ -2150,10 +2152,10 @@ read_dbx_symtab (struct objfile *objfile)
 	 : lowest_text_address)
 	+ text_size;
 
-      end_psymtab (objfile, pst, psymtab_include_list, includes_used,
-		   symnum * symbol_size,
-		   text_end > pst->texthigh ? text_end : pst->texthigh,
-		   dependency_list, dependencies_used, textlow_not_set);
+      dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
+		       symnum * symbol_size,
+		       text_end > pst->texthigh ? text_end : pst->texthigh,
+		       dependency_list, dependencies_used, textlow_not_set);
     }
 
   do_cleanups (back_to);
@@ -2196,11 +2198,12 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
    FIXME:  List variables and peculiarities of same.  */
 
 struct partial_symtab *
-end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
-	     const char **include_list, int num_includes,
-	     int capping_symbol_offset, CORE_ADDR capping_text,
-	     struct partial_symtab **dependency_list, int number_dependencies,
-	     int textlow_not_set)
+dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
+		 const char **include_list, int num_includes,
+		 int capping_symbol_offset, CORE_ADDR capping_text,
+		 struct partial_symtab **dependency_list,
+		 int number_dependencies,
+		 int textlow_not_set)
 {
   int i;
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
@@ -2287,12 +2290,7 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
 
   /* End of kludge for patching Solaris textlow and texthigh.  */
 
-  pst->n_global_syms =
-    objfile->global_psymbols.next - (objfile->global_psymbols.list
-				     + pst->globals_offset);
-  pst->n_static_syms =
-    objfile->static_psymbols.next - (objfile->static_psymbols.list
-				     + pst->statics_offset);
+  end_psymtab_common (objfile, pst);
 
   pst->number_of_dependencies = number_dependencies;
   if (number_dependencies)
@@ -2336,8 +2334,6 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
       subpst->read_symtab = pst->read_symtab;
     }
 
-  sort_pst_symbols (objfile, pst);
-
   if (num_includes == 0
       && number_dependencies == 0
       && pst->n_global_syms == 0
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index f440956..2a34a9b 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -6013,11 +6013,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
   pst->textlow = gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr);
   pst->texthigh = gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr);
 
-  pst->n_global_syms = objfile->global_psymbols.next -
-    (objfile->global_psymbols.list + pst->globals_offset);
-  pst->n_static_syms = objfile->static_psymbols.next -
-    (objfile->static_psymbols.list + pst->statics_offset);
-  sort_pst_symbols (objfile, pst);
+  end_psymtab_common (objfile, pst);
 
   if (!VEC_empty (dwarf2_per_cu_ptr, cu->per_cu->imported_symtabs))
     {
@@ -6129,11 +6125,7 @@ build_type_psymtabs_reader (const struct die_reader_specs *reader,
   highpc = (CORE_ADDR) 0;
   scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu);
 
-  pst->n_global_syms = objfile->global_psymbols.next -
-    (objfile->global_psymbols.list + pst->globals_offset);
-  pst->n_static_syms = objfile->static_psymbols.next -
-    (objfile->static_psymbols.list + pst->statics_offset);
-  sort_pst_symbols (objfile, pst);
+  end_psymtab_common (objfile, pst);
 }
 
 /* Struct used to sort TUs by their abbreviation table offset.  */
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 3a81615..5344d2f 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -2936,7 +2936,7 @@ parse_partial_symbols (struct objfile *objfile)
 		      prev_textlow_not_set = textlow_not_set;
 
 		      /* A zero value is probably an indication for the
-			 SunPRO 3.0 compiler.  end_psymtab explicitly tests
+			 SunPRO 3.0 compiler.  dbx_end_psymtab explicitly tests
 			 for zero, so don't relocate it.  */
 
 		      if (sh.value == 0
@@ -3347,7 +3347,7 @@ parse_partial_symbols (struct objfile *objfile)
 
 		  case N_ENDM:
 		    /* Solaris 2 end of module, finish current partial
-		       symbol table.  END_PSYMTAB will set
+		       symbol table.  dbx_end_psymtab will set
 		       pst->texthigh to the proper value, which is
 		       necessary if a module compiled without
 		       debugging info follows this module.  */
@@ -3731,12 +3731,14 @@ parse_partial_symbols (struct objfile *objfile)
 	    }
 	}
 
-      /* Link pst to FDR.  end_psymtab returns NULL if the psymtab was
+      /* Link pst to FDR.  dbx_end_psymtab returns NULL if the psymtab was
          empty and put on the free list.  */
-      fdr_to_pst[f_idx].pst = end_psymtab (objfile, save_pst,
-					psymtab_include_list, includes_used,
-					   -1, save_pst->texthigh,
-		       dependency_list, dependencies_used, textlow_not_set);
+      fdr_to_pst[f_idx].pst
+	= dbx_end_psymtab (objfile, save_pst,
+			   psymtab_include_list, includes_used,
+			   -1, save_pst->texthigh,
+			   dependency_list, dependencies_used,
+			   textlow_not_set);
       includes_used = 0;
       dependencies_used = 0;
 
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index ea2454c..545d9f3 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -204,8 +204,6 @@ struct partial_symtab
   void *read_symtab_private;
 };
 
-extern void sort_pst_symbols (struct objfile *, struct partial_symtab *);
-
 /* Add any kind of symbol to a psymbol_allocation_list.  */
 
 extern void add_psymbol_to_list (const char *, int,
@@ -222,6 +220,8 @@ extern struct partial_symtab *start_psymtab_common (struct objfile *,
 						    struct partial_symbol **,
 						    struct partial_symbol **);
 
+extern void end_psymtab_common (struct objfile *, struct partial_symtab *);
+
 extern struct partial_symtab *allocate_psymtab (const char *,
 						struct objfile *)
   ATTRIBUTE_NONNULL (1);
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index ba677bc..c3e1621 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1497,7 +1497,7 @@ compare_psymbols (const void *s1p, const void *s2p)
 			    SYMBOL_SEARCH_NAME (*s2));
 }
 
-void
+static void
 sort_pst_symbols (struct objfile *objfile, struct partial_symtab *pst)
 {
   /* Sort the global list; don't sort the static list.  */
@@ -1528,6 +1528,21 @@ start_psymtab_common (struct objfile *objfile,
   return (psymtab);
 }
 
+/* Perform "finishing up" operations of a partial symtab.  */
+
+void
+end_psymtab_common (struct objfile *objfile, struct partial_symtab *pst)
+{
+  pst->n_global_syms
+    = objfile->global_psymbols.next - (objfile->global_psymbols.list
+				       + pst->globals_offset);
+  pst->n_static_syms
+    = objfile->static_psymbols.next - (objfile->static_psymbols.list
+				       + pst->statics_offset);
+
+  sort_pst_symbols (objfile, pst);
+}
+
 /* Calculate a hash code for the given partial symbol.  The hash is
    calculated using the symbol's value, language, domain, class
    and name.  These are the values which are set by
diff --git a/gdb/stabsread.h b/gdb/stabsread.h
index dbf5e1d..65cccd2 100644
--- a/gdb/stabsread.h
+++ b/gdb/stabsread.h
@@ -160,16 +160,12 @@ struct stab_section_list
 /* Functions exported by dbxread.c.  These are not in stabsread.c because
    they are only used by some stabs readers.  */
 
-extern struct partial_symtab *end_psymtab (struct objfile *objfile,
-					   struct partial_symtab *pst,
-					   const char **include_list,
-					   int num_includes,
-					   int capping_symbol_offset,
-					   CORE_ADDR capping_text,
-					   struct partial_symtab
-					   **dependency_list,
-					   int number_dependencies,
-					   int textlow_not_set);
+extern struct partial_symtab *dbx_end_psymtab
+  (struct objfile *objfile, struct partial_symtab *pst,
+   const char **include_list, int num_includes,
+   int capping_symbol_offset, CORE_ADDR capping_text,
+   struct partial_symtab **dependency_list, int number_dependencies,
+   int textlow_not_set);
 
 extern void process_one_symbol (int, int, CORE_ADDR, char *,
 				const struct section_offsets *,
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 6a0b8da..1efb6f2 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -332,7 +332,7 @@ struct minimal_symbol
 
   struct general_symbol_info mginfo;
 
-  /* Size of this symbol.  end_psymtab in dbxread.c uses this
+  /* Size of this symbol.  dbx_end_psymtab in dbxread.c uses this
      information to calculate the end of the partial symtab based on the
      address of the last symbol plus the size of the last symbol.  */
 
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index b5b2a1d..5940ec9 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -2057,10 +2057,8 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
   ((struct symloc *) pst->read_symtab_private)->lineno_off =
     first_fun_line_offset;
   first_fun_line_offset = 0;
-  pst->n_global_syms = objfile->global_psymbols.next
-    - (objfile->global_psymbols.list + pst->globals_offset);
-  pst->n_static_syms = objfile->static_psymbols.next
-    - (objfile->static_psymbols.list + pst->statics_offset);
+
+  end_psymtab_common (objfile, pst);
 
   pst->number_of_dependencies = number_dependencies;
   if (number_dependencies)
@@ -2104,8 +2102,6 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
       subpst->read_symtab = pst->read_symtab;
     }
 
-  sort_pst_symbols (objfile, pst);
-
   if (num_includes == 0
       && number_dependencies == 0
       && pst->n_global_syms == 0
