* symfile.h (struct sym_fns): Delete member "sym_flavour".
authorDoug Evans <dje@google.com>
Wed, 25 Sep 2013 22:48:19 +0000 (22:48 +0000)
committerDoug Evans <dje@google.com>
Wed, 25 Sep 2013 22:48:19 +0000 (22:48 +0000)
All uses updated.
(add_symtab_fns): Update prototype.
* symfile.c (sym_fns_ptr): Delete.  Replace with ...
(registered_sym_fns): ... this.
(symtab_fns): Update.
(add_symtab_fns): New arg "flavour".  All callers updated.
(find_sym_fns): Rewrite to use new sym_fns registry.

gdb/ChangeLog
gdb/coffread.c
gdb/dbxread.c
gdb/elfread.c
gdb/machoread.c
gdb/mipsread.c
gdb/somread.c
gdb/symfile.c
gdb/symfile.h
gdb/xcoffread.c

index 9830d8b6f60b4046cf30455063c9cedb4621c129..4265e3b6d8466c4100f2315c13691189c272c1c7 100644 (file)
@@ -1,5 +1,14 @@
 2013-09-25  Doug Evans  <dje@google.com>
 
+       * symfile.h (struct sym_fns): Delete member "sym_flavour".
+       All uses updated.
+       (add_symtab_fns): Update prototype.
+       * symfile.c (sym_fns_ptr): Delete.  Replace with ...
+       (registered_sym_fns): ... this.
+       (symtab_fns): Update.
+       (add_symtab_fns): New arg "flavour".  All callers updated.
+       (find_sym_fns): Rewrite to use new sym_fns registry.
+
        * symfile.h (struct sym_fns): Add "objfile" argument to
        sym_read_linetable.  All uses updated.
 
index e5151673979aab978d303028e33a449d5ebe12be..959e96ac83d8fc2a5293772e00fd83570ef79aac 100644 (file)
@@ -2250,7 +2250,6 @@ coff_read_enum_type (int index, int length, int lastsym,
 
 static const struct sym_fns coff_sym_fns =
 {
-  bfd_target_coff_flavour,
   coff_new_init,               /* sym_new_init: init anything gbl to
                                   entire symtab */
   coff_symfile_init,           /* sym_init: read initial info, setup
@@ -2283,7 +2282,7 @@ coff_free_info (struct objfile *objfile, void *arg)
 void
 _initialize_coffread (void)
 {
-  add_symtab_fns (&coff_sym_fns);
+  add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
 
   coff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
                                                              coff_free_info);
index 8188718130a9a4637d6296ec11bd1369397ad468..2bca65b2d732aa09a4e6a801763f3560a15aa412 100644 (file)
@@ -3564,7 +3564,6 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
 \f
 static const struct sym_fns aout_sym_fns =
 {
-  bfd_target_aout_flavour,
   dbx_new_init,                        /* init anything gbl to entire symtab */
   dbx_symfile_init,            /* read initial info, setup for sym_read() */
   dbx_symfile_read,            /* read a symbol file into symtab */
@@ -3581,7 +3580,7 @@ static const struct sym_fns aout_sym_fns =
 void
 _initialize_dbxread (void)
 {
-  add_symtab_fns (&aout_sym_fns);
+  add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns);
 
   dbx_objfile_data_key
     = register_objfile_data_with_cleanup (NULL, dbx_free_symfile_info);
index 1f9224a8aae29c33781d14f29207317404a8ef91..3f6fbd97f280327057905eb7a947b2a144e2a3b3 100644 (file)
@@ -1721,7 +1721,6 @@ static const struct sym_probe_fns elf_probe_fns =
 
 static const struct sym_fns elf_sym_fns =
 {
-  bfd_target_elf_flavour,
   elf_new_init,                        /* init anything gbl to entire symtab */
   elf_symfile_init,            /* read initial info, setup for sym_read() */
   elf_symfile_read,            /* read a symbol file into symtab */
@@ -1740,7 +1739,6 @@ static const struct sym_fns elf_sym_fns =
 
 static const struct sym_fns elf_sym_fns_lazy_psyms =
 {
-  bfd_target_elf_flavour,
   elf_new_init,                        /* init anything gbl to entire symtab */
   elf_symfile_init,            /* read initial info, setup for sym_read() */
   elf_symfile_read,            /* read a symbol file into symtab */
@@ -1758,7 +1756,6 @@ static const struct sym_fns elf_sym_fns_lazy_psyms =
    DWARF-specific GNU index rather than psymtab.  */
 static const struct sym_fns elf_sym_fns_gdb_index =
 {
-  bfd_target_elf_flavour,
   elf_new_init,                        /* init anything gbl to entire symab */
   elf_symfile_init,            /* read initial info, setup for sym_red() */
   elf_symfile_read,            /* read a symbol file into symtab */
@@ -1786,7 +1783,7 @@ void
 _initialize_elfread (void)
 {
   probe_key = register_objfile_data_with_cleanup (NULL, probe_key_free);
-  add_symtab_fns (&elf_sym_fns);
+  add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
 
   elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
   gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
index 78af2f6e583a666289c43acebbc2fe0637b75e59..69a234cddf84e2d4c1ff76fe0a55f5408a219ddd 100644 (file)
@@ -1029,8 +1029,6 @@ macho_symfile_offsets (struct objfile *objfile,
 }
 
 static const struct sym_fns macho_sym_fns = {
-  bfd_target_mach_o_flavour,
-
   macho_new_init,               /* init anything gbl to entire symtab */
   macho_symfile_init,           /* read initial info, setup for sym_read() */
   macho_symfile_read,           /* read a symbol file into symtab */
@@ -1050,7 +1048,7 @@ extern initialize_file_ftype _initialize_machoread;
 void
 _initialize_machoread (void)
 {
-  add_symtab_fns (&macho_sym_fns);
+  add_symtab_fns (bfd_target_mach_o_flavour, &macho_sym_fns);
 
   add_setshow_zuinteger_cmd ("mach-o", class_obscure,
                             &mach_o_debug_level,
index b425780bbd21957f1115e4e1b886f976b0d1ba95..fc4a268c313aafe06b97458c13bbe2e37ab05286 100644 (file)
@@ -405,7 +405,6 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets,
 
 static const struct sym_fns ecoff_sym_fns =
 {
-  bfd_target_ecoff_flavour,
   mipscoff_new_init,           /* init anything gbl to entire symtab */
   mipscoff_symfile_init,       /* read initial info, setup for sym_read() */
   mipscoff_symfile_read,       /* read a symbol file into symtab */
@@ -425,5 +424,5 @@ void _initialize_mipsread (void);
 void
 _initialize_mipsread (void)
 {
-  add_symtab_fns (&ecoff_sym_fns);
+  add_symtab_fns (bfd_target_ecoff_flavour, &ecoff_sym_fns);
 }
index 6c6cc14c1177b67892b69a278b9697a4d5bf828e..c262196e0ccff7a3da97a1e23c9dbec08bae7b0d 100644 (file)
@@ -534,7 +534,6 @@ som_symfile_offsets (struct objfile *objfile,
 
 static const struct sym_fns som_sym_fns =
 {
-  bfd_target_som_flavour,
   som_new_init,                        /* init anything gbl to entire symtab */
   som_symfile_init,            /* read initial info, setup for sym_read() */
   som_symfile_read,            /* read a symbol file into symtab */
@@ -553,5 +552,5 @@ initialize_file_ftype _initialize_somread;
 void
 _initialize_somread (void)
 {
-  add_symtab_fns (&som_sym_fns);
+  add_symtab_fns (bfd_target_som_flavour, &som_sym_fns);
 }
index 9f76c5e0f1cca90b3fbd84794732bfa6f8af2ed4..9bb3c55a057d46f298ad181c56e83d20d7f5e7e4 100644 (file)
@@ -130,10 +130,18 @@ void _initialize_symfile (void);
    calls add_symtab_fns() to register information on each format it is
    prepared to read.  */
 
-typedef const struct sym_fns *sym_fns_ptr;
-DEF_VEC_P (sym_fns_ptr);
+typedef struct
+{
+  /* BFD flavour that we handle.  */
+  enum bfd_flavour sym_flavour;
+
+  /* The "vtable" of symbol functions.  */
+  const struct sym_fns *sym_fns;
+} registered_sym_fns;
 
-static VEC (sym_fns_ptr) *symtab_fns = NULL;
+DEF_VEC_O (registered_sym_fns);
+
+static VEC (registered_sym_fns) *symtab_fns = NULL;
 
 /* If non-zero, shared library symbols will be added automatically
    when the inferior is created, new libraries are loaded, or when
@@ -1746,14 +1754,18 @@ get_section_index (struct objfile *objfile, char *section_name)
     return -1;
 }
 
-/* Link SF into the global symtab_fns list.  Called on startup by the
-   _initialize routine in each object file format reader, to register
-   information about each format the reader is prepared to handle.  */
+/* Link SF into the global symtab_fns list.
+   FLAVOUR is the file format that SF handles.
+   Called on startup by the _initialize routine in each object file format
+   reader, to register information about each format the reader is prepared
+   to handle.  */
 
 void
-add_symtab_fns (const struct sym_fns *sf)
+add_symtab_fns (enum bfd_flavour flavour, const struct sym_fns *sf)
 {
-  VEC_safe_push (sym_fns_ptr, symtab_fns, sf);
+  registered_sym_fns fns = { flavour, sf };
+
+  VEC_safe_push (registered_sym_fns, symtab_fns, &fns);
 }
 
 /* Initialize OBJFILE to read symbols from its associated BFD.  It
@@ -1764,7 +1776,7 @@ add_symtab_fns (const struct sym_fns *sf)
 static const struct sym_fns *
 find_sym_fns (bfd *abfd)
 {
-  const struct sym_fns *sf;
+  registered_sym_fns *rsf;
   enum bfd_flavour our_flavour = bfd_get_flavour (abfd);
   int i;
 
@@ -1773,9 +1785,9 @@ find_sym_fns (bfd *abfd)
       || our_flavour == bfd_target_tekhex_flavour)
     return NULL;       /* No symbols.  */
 
-  for (i = 0; VEC_iterate (sym_fns_ptr, symtab_fns, i, sf); ++i)
-    if (our_flavour == sf->sym_flavour)
-      return sf;
+  for (i = 0; VEC_iterate (registered_sym_fns, symtab_fns, i, rsf); ++i)
+    if (our_flavour == rsf->sym_flavour)
+      return rsf->sym_fns;
 
   error (_("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown."),
         bfd_get_target (abfd));
index 11cb3719b94da0d271efb5774dfade12045b1d5a..8e5909bd8bcd0918e787154dfeb02bafa190933b 100644 (file)
@@ -350,12 +350,6 @@ struct sym_probe_fns
 
 struct sym_fns
 {
-
-  /* BFD flavour that we handle, or (as a special kludge, see
-     xcoffread.c, (enum bfd_flavour)-1 for xcoff).  */
-
-  enum bfd_flavour sym_flavour;
-
   /* Initializes anything that is global to the entire symbol table.
      It is called during symbol_file_add, when we begin debugging an
      entirely new program.  */
@@ -454,7 +448,7 @@ extern bfd_byte *default_symfile_relocate (struct objfile *objfile,
 extern struct symtab *allocate_symtab (const char *, struct objfile *)
   ATTRIBUTE_NONNULL (1);
 
-extern void add_symtab_fns (const struct sym_fns *);
+extern void add_symtab_fns (enum bfd_flavour flavour, const struct sym_fns *);
 
 /* This enum encodes bit-flags passed as ADD_FLAGS parameter to
    symbol_file_add, etc.  */
index 17c45b96bae4aa102d5541315eaae649966898db..7f34ac922930e88ca283e69510393f84b1c68746 100644 (file)
@@ -3104,8 +3104,6 @@ static const struct sym_fns xcoff_sym_fns =
      xcoffread.c reads all the symbols and does in fact randomly access them
      (in C_BSTAT and line number processing).  */
 
-  bfd_target_xcoff_flavour,
-
   xcoff_new_init,              /* init anything gbl to entire symtab */
   xcoff_symfile_init,          /* read initial info, setup for sym_read() */
   xcoff_initial_scan,          /* read a symbol file into symtab */
@@ -3194,7 +3192,7 @@ extern initialize_file_ftype _initialize_xcoffread;
 void
 _initialize_xcoffread (void)
 {
-  add_symtab_fns (&xcoff_sym_fns);
+  add_symtab_fns (bfd_target_xcoff_flavour, &xcoff_sym_fns);
 
   xcoff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
                                                               xcoff_free_info);