diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 475ebbb..854ac31 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,18 @@
 2020-01-26  Tom Tromey  <tom@tromey.com>
 
+	* xcoffread.c (xcoff_end_psymtab): Use new.
+	* psymtab.c (start_psymtab_common): Use new.
+	(partial_symtab::partial_symtab): Rename from allocate_psymtab.
+	Update.
+	* psympriv.h (struct partial_symtab): Add parameters to
+	constructor.  Don't inline.
+	(allocate_psymtab): Don't declare.
+	* mdebugread.c (new_psymtab): Use new.
+	* dwarf2read.c (dwarf2_create_include_psymtab): Use new.
+	* dbxread.c (dbx_end_psymtab): Use new.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
 	* psymtab.h (class psymtab_storage) <install_psymtab>: Rename from
 	allocate_psymtab.  Update documentation.
 	* psymtab.c (psymtab_storage::install_psymtab): Rename from
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index d4d7901..9527085 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -2025,7 +2025,7 @@
   for (i = 0; i < num_includes; i++)
     {
       struct partial_symtab *subpst =
-	allocate_psymtab (include_list[i], objfile);
+	new partial_symtab (include_list[i], objfile);
 
       subpst->read_symtab_private =
 	XOBNEW (&objfile->objfile_obstack, struct symloc);
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 6394410..2cac286 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -6695,7 +6695,7 @@
 dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst,
                                struct objfile *objfile)
 {
-  struct partial_symtab *subpst = allocate_psymtab (name, objfile);
+  struct partial_symtab *subpst = new partial_symtab (name, objfile);
 
   if (!IS_ABSOLUTE_PATH (subpst->filename))
     {
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index f28c0b2..2ec30ec 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -4662,7 +4662,7 @@
 {
   struct partial_symtab *psymtab;
 
-  psymtab = allocate_psymtab (name, objfile);
+  psymtab = new partial_symtab (name, objfile);
 
   /* Keep a backpointer to the file's symbols.  */
 
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index ce28112..74ff10e 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -104,12 +104,14 @@
 
 struct partial_symtab
 {
-  partial_symtab ()
-    : searched_flag (PST_NOT_SEARCHED),
-      text_low_valid (0),
-      text_high_valid (0)
-  {
-  }
+  /* Allocate a new partial symbol table associated with OBJFILE.
+     FILENAME (which must be non-NULL) is the filename of this partial
+     symbol table; it is copied into the appropriate storage.  The
+     partial symtab will also be installed using
+     psymtab_storage::install.  */
+
+  partial_symtab (const char *filename, struct objfile *objfile)
+    ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
 
   /* Return the raw low text address of this partial_symtab.  */
   CORE_ADDR raw_text_low () const
@@ -329,16 +331,6 @@
 
 extern void end_psymtab_common (struct objfile *, struct partial_symtab *);
 
-/* Allocate a new partial symbol table associated with OBJFILE.
-   FILENAME (which must be non-NULL) is the filename of this partial
-   symbol table; it is copied into the appropriate storage.  A new
-   partial symbol table is returned; aside from "next" and "filename",
-   its fields are initialized to zero.  */
-
-extern struct partial_symtab *allocate_psymtab (const char *filename,
-						struct objfile *objfile)
-  ATTRIBUTE_NONNULL (1);
-
 static inline void
 discard_psymtab (struct objfile *objfile, struct partial_symtab *pst)
 {
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 975737c..844e718 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1487,7 +1487,7 @@
 {
   struct partial_symtab *psymtab;
 
-  psymtab = allocate_psymtab (filename, objfile);
+  psymtab = new partial_symtab (filename, objfile);
   psymtab->set_text_low (textlow);
   psymtab->set_text_high (psymtab->raw_text_low ()); /* default */
   psymtab->globals_offset = objfile->partial_symtabs->global_psymbols.size ();
@@ -1646,16 +1646,17 @@
 
 /* See psympriv.h.  */
 
-struct partial_symtab *
-allocate_psymtab (const char *filename, struct objfile *objfile)
+partial_symtab::partial_symtab (const char *filename_, struct objfile *objfile)
+  : searched_flag (PST_NOT_SEARCHED),
+    text_low_valid (0),
+    text_high_valid (0)
 {
-  struct partial_symtab *psymtab = new partial_symtab;
-  objfile->partial_symtabs->install_psymtab (psymtab);
+  objfile->partial_symtabs->install_psymtab (this);
 
-  psymtab->filename
+  filename
     = ((const char *) objfile->per_bfd->filename_cache.insert
-       (filename, strlen (filename) + 1));
-  psymtab->compunit_symtab = NULL;
+       (filename_, strlen (filename_) + 1));
+  compunit_symtab = NULL;
 
   if (symtab_create_debug)
     {
@@ -1674,10 +1675,8 @@
 	}
       fprintf_filtered (gdb_stdlog,
 			"Created psymtab %s for module %s.\n",
-			host_address_to_string (psymtab), filename);
+			host_address_to_string (this), filename);
     }
-
-  return psymtab;
 }
 
 void
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 27e49f7..be10c4f 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -2065,7 +2065,7 @@
   for (i = 0; i < num_includes; i++)
     {
       struct partial_symtab *subpst =
-	allocate_psymtab (include_list[i], objfile);
+	new partial_symtab (include_list[i], objfile);
 
       subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
       ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
