Patchwork [v2,10/31] Convert symfile-debug.c to type-safe registry API

login
register
mail settings
Submitter Tom Tromey
Date May 3, 2019, 11:12 p.m.
Message ID <20190503231231.8954-11-tom@tromey.com>
Download mbox | patch
Permalink /patch/32523/
State New
Headers show

Comments

Tom Tromey - May 3, 2019, 11:12 p.m.
This changes symfile-debug.c to use the type-safe registry API.

2019-04-22  Tom Tromey  <tom@tromey.com>

	* symfile-debug.c (struct debug_sym_fns_data): Add initializers.
	(symfile_debug_objfile_data_key): Change type.
	(symfile_debug_installed, debug_qf_has_symbols)
	(debug_qf_find_last_source_symtab)
	(debug_qf_forget_cached_source_info)
	(debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol)
	(debug_qf_print_stats, debug_qf_dump)
	(debug_qf_expand_symtabs_for_function)
	(debug_qf_expand_all_symtabs)
	(debug_qf_expand_symtabs_with_fullname)
	(debug_qf_map_matching_symbols)
	(debug_qf_expand_symtabs_matching)
	(debug_qf_find_pc_sect_compunit_symtab)
	(debug_qf_map_symbol_filenames)
	(debug_qf_find_compunit_symtab_by_address, debug_sym_get_probes)
	(debug_sym_new_init, debug_sym_init, debug_sym_read)
	(debug_sym_read_psymbols, debug_sym_finish, debug_sym_offsets)
	(debug_sym_read_linetable, debug_sym_relocate): Update.
	(symfile_debug_free_objfile): Remove.
	(install_symfile_debug_logging, _initialize_symfile_debug):
	Update.
---
 gdb/ChangeLog       |  24 +++++++++++
 gdb/symfile-debug.c | 102 ++++++++++++++------------------------------
 2 files changed, 57 insertions(+), 69 deletions(-)

Patch

diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 5b3ae926504..8266ecbabf0 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -39,13 +39,14 @@ 
 
 struct debug_sym_fns_data
 {
-  const struct sym_fns *real_sf;
-  struct sym_fns debug_sf;
+  const struct sym_fns *real_sf = nullptr;
+  struct sym_fns debug_sf {};
 };
 
 /* We need to record a pointer to the real set of functions for each
    objfile.  */
-static const struct objfile_data *symfile_debug_objfile_data_key;
+static const struct objfile_key<debug_sym_fns_data>
+  symfile_debug_objfile_data_key;
 
 /* If non-zero all calls to the symfile functions are logged.  */
 static int debug_symfile = 0;
@@ -56,7 +57,7 @@  static int
 symfile_debug_installed (struct objfile *objfile)
 {
   return (objfile->sf != NULL
-	  && objfile_data (objfile, symfile_debug_objfile_data_key) != NULL);
+	  && symfile_debug_objfile_data_key.get (objfile) != NULL);
 }
 
 /* Utility return the name to print for SYMTAB.  */
@@ -73,8 +74,7 @@  static int
 debug_qf_has_symbols (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   int retval;
 
   retval = debug_data->real_sf->qf->has_symbols (objfile);
@@ -89,8 +89,7 @@  static struct symtab *
 debug_qf_find_last_source_symtab (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   struct symtab *retval;
 
   fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
@@ -108,8 +107,7 @@  static void
 debug_qf_forget_cached_source_info (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
 		    objfile_debug_name (objfile));
@@ -123,8 +121,7 @@  debug_qf_map_symtabs_matching_filename
    gdb::function_view<bool (symtab *)> callback)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog,
 		    "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n",
@@ -147,8 +144,7 @@  debug_qf_lookup_symbol (struct objfile *objfile, int kind, const char *name,
 			domain_enum domain)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   struct compunit_symtab *retval;
 
   fprintf_filtered (gdb_stdlog,
@@ -171,8 +167,7 @@  static void
 debug_qf_print_stats (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
 		    objfile_debug_name (objfile));
@@ -184,8 +179,7 @@  static void
 debug_qf_dump (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
 		    objfile_debug_name (objfile));
@@ -198,8 +192,7 @@  debug_qf_expand_symtabs_for_function (struct objfile *objfile,
 				      const char *func_name)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog,
 		    "qf->expand_symtabs_for_function (%s, \"%s\")\n",
@@ -212,8 +205,7 @@  static void
 debug_qf_expand_all_symtabs (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
 		    objfile_debug_name (objfile));
@@ -226,8 +218,7 @@  debug_qf_expand_symtabs_with_fullname (struct objfile *objfile,
 				       const char *fullname)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog,
 		    "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
@@ -247,8 +238,7 @@  debug_qf_map_matching_symbols (struct objfile *objfile,
 			       symbol_compare_ftype *ordered_compare)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog,
 		    "qf->map_matching_symbols (%s, \"%s\", %s, %d, %s, %s, %s, %s)\n",
@@ -276,8 +266,7 @@  debug_qf_expand_symtabs_matching
    enum search_domain kind)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog,
 		    "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
@@ -303,8 +292,7 @@  debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile,
 				       int warn_if_readin)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   struct compunit_symtab *retval;
 
   fprintf_filtered (gdb_stdlog,
@@ -335,8 +323,7 @@  debug_qf_map_symbol_filenames (struct objfile *objfile,
 			       int need_fullname)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   fprintf_filtered (gdb_stdlog,
 		    "qf->map_symbol_filenames (%s, %s, %s, %d)\n",
 		    objfile_debug_name (objfile),
@@ -353,8 +340,7 @@  debug_qf_find_compunit_symtab_by_address (struct objfile *objfile,
 					  CORE_ADDR address)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   fprintf_filtered (gdb_stdlog,
 		    "qf->find_compunit_symtab_by_address (%s, %s)\n",
 		    objfile_debug_name (objfile),
@@ -400,8 +386,7 @@  static const std::vector<probe *> &
 debug_sym_get_probes (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   const std::vector<probe *> &retval
     = debug_data->real_sf->sym_probe_fns->sym_get_probes (objfile);
@@ -425,8 +410,7 @@  static void
 debug_sym_new_init (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_new_init (%s)\n",
 		    objfile_debug_name (objfile));
@@ -438,8 +422,7 @@  static void
 debug_sym_init (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_init (%s)\n",
 		    objfile_debug_name (objfile));
@@ -451,8 +434,7 @@  static void
 debug_sym_read (struct objfile *objfile, symfile_add_flags symfile_flags)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read (%s, 0x%x)\n",
 		    objfile_debug_name (objfile), (unsigned) symfile_flags);
@@ -464,8 +446,7 @@  static void
 debug_sym_read_psymbols (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read_psymbols (%s)\n",
 		    objfile_debug_name (objfile));
@@ -477,8 +458,7 @@  static void
 debug_sym_finish (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_finish (%s)\n",
 		    objfile_debug_name (objfile));
@@ -491,8 +471,7 @@  debug_sym_offsets (struct objfile *objfile,
 		   const section_addr_info &info)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_offsets (%s, %s)\n",
 		    objfile_debug_name (objfile),
@@ -514,8 +493,7 @@  static void
 debug_sym_read_linetable (struct objfile *objfile)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read_linetable (%s)\n",
 		    objfile_debug_name (objfile));
@@ -527,8 +505,7 @@  static bfd_byte *
 debug_sym_relocate (struct objfile *objfile, asection *sectp, bfd_byte *buf)
 {
   const struct debug_sym_fns_data *debug_data
-    = ((const struct debug_sym_fns_data *)
-       objfile_data (objfile, symfile_debug_objfile_data_key));
+    = symfile_debug_objfile_data_key.get (objfile);
   bfd_byte *retval;
 
   retval = debug_data->real_sf->sym_relocate (objfile, sectp, buf);
@@ -563,14 +540,6 @@  static const struct sym_fns debug_sym_fns =
   &debug_sym_quick_functions
 };
 
-/* Free the copy of sym_fns recorded in the registry.  */
-
-static void
-symfile_debug_free_objfile (struct objfile *objfile, void *datum)
-{
-  xfree (datum);
-}
-
 /* Install the debugging versions of the symfile functions for OBJFILE.
    Do not call this if the debug versions are already installed.  */
 
@@ -586,7 +555,7 @@  install_symfile_debug_logging (struct objfile *objfile)
   real_sf = objfile->sf;
 
   /* Alas we have to preserve NULL entries in REAL_SF.  */
-  debug_data = XCNEW (struct debug_sym_fns_data);
+  debug_data = new struct debug_sym_fns_data;
 
 #define COPY_SF_PTR(from, to, name, func)	\
   do {						\
@@ -612,7 +581,7 @@  install_symfile_debug_logging (struct objfile *objfile)
 #undef COPY_SF_PTR
 
   debug_data->real_sf = real_sf;
-  set_objfile_data (objfile, symfile_debug_objfile_data_key, debug_data);
+  symfile_debug_objfile_data_key.set (objfile, debug_data);
   objfile->sf = &debug_data->debug_sf;
 }
 
@@ -627,12 +596,10 @@  uninstall_symfile_debug_logging (struct objfile *objfile)
   /* The debug versions should be currently installed.  */
   gdb_assert (symfile_debug_installed (objfile));
 
-  debug_data = ((struct debug_sym_fns_data *)
-		objfile_data (objfile, symfile_debug_objfile_data_key));
+  debug_data = symfile_debug_objfile_data_key.get (objfile);
 
   objfile->sf = debug_data->real_sf;
-  xfree (debug_data);
-  set_objfile_data (objfile, symfile_debug_objfile_data_key, NULL);
+  symfile_debug_objfile_data_key.clear (objfile);
 }
 
 /* Call this function to set OBJFILE->SF.
@@ -687,9 +654,6 @@  show_debug_symfile (struct ui_file *file, int from_tty,
 void
 _initialize_symfile_debug (void)
 {
-  symfile_debug_objfile_data_key
-    = register_objfile_data_with_cleanup (NULL, symfile_debug_free_objfile);
-
   add_setshow_boolean_cmd ("symfile", no_class, &debug_symfile, _("\
 Set debugging of the symfile functions."), _("\
 Show debugging of the symfile functions."), _("\