From 00b5771c2a7b46f918bd7c8dd8ec44b79b1372b8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 30 Sep 2010 19:14:30 +0000 Subject: [PATCH] * symfile.h (struct sym_fns) : Remove. (add_symtab_fns): Update. * symfile.c (sym_fns_ptr): New typedef. (symtab_fns): Now a VEC. (add_symtab_fns): Update. Change argument type. (find_sym_fns): Update. Change return type. (get_symfile_segment_data): Update. * objfiles.h (struct objfile) : Now const. * somread.c (som_sym_fns): Now const. Update. * xcoffread.c (xcoff_sym_fns): Now const. Update. * mipsread.c (ecoff_sym_fns): Now const. Update. * machoread.c (macho_sym_fns): Now const. Update. * elfread.c (elf_sym_fns): Now const. Update. (elf_sym_fns_gdb_index): Likewise. * dbxread.c (aout_sym_fns): Now const. Update. * coffread.c (coff_sym_fns): Now const. Update. --- gdb/ChangeLog | 19 +++++++++++++++++++ gdb/coffread.c | 5 ++--- gdb/dbxread.c | 5 ++--- gdb/elfread.c | 12 +++++------- gdb/machoread.c | 5 ++--- gdb/mipsread.c | 5 ++--- gdb/objfiles.h | 2 +- gdb/somread.c | 5 ++--- gdb/symfile.c | 21 ++++++++++++--------- gdb/symfile.h | 10 +--------- gdb/xcoffread.c | 5 ++--- 11 files changed, 50 insertions(+), 44 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ed211797fa..e31d565d74 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2010-09-30 Tom Tromey + + * symfile.h (struct sym_fns) : Remove. + (add_symtab_fns): Update. + * symfile.c (sym_fns_ptr): New typedef. + (symtab_fns): Now a VEC. + (add_symtab_fns): Update. Change argument type. + (find_sym_fns): Update. Change return type. + (get_symfile_segment_data): Update. + * objfiles.h (struct objfile) : Now const. + * somread.c (som_sym_fns): Now const. Update. + * xcoffread.c (xcoff_sym_fns): Now const. Update. + * mipsread.c (ecoff_sym_fns): Now const. Update. + * machoread.c (macho_sym_fns): Now const. Update. + * elfread.c (elf_sym_fns): Now const. Update. + (elf_sym_fns_gdb_index): Likewise. + * dbxread.c (aout_sym_fns): Now const. Update. + * coffread.c (coff_sym_fns): Now const. Update. + 2010-09-30 Tom Tromey * value.c (value_primitive_field): Take 'offset' into account for diff --git a/gdb/coffread.c b/gdb/coffread.c index 7f1ecd0deb..3d4dd6091c 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -2126,7 +2126,7 @@ coff_read_enum_type (int index, int length, int lastsym, /* Register our ability to parse symbols for coff BFD files. */ -static struct sym_fns coff_sym_fns = +static const struct sym_fns coff_sym_fns = { bfd_target_coff_flavour, coff_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -2138,8 +2138,7 @@ static struct sym_fns coff_sym_fns = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; void diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 25bf07b5af..05e9f2ec47 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -3573,7 +3573,7 @@ section (%s)"), dbx_symfile_read (objfile, 0); } -static struct sym_fns aout_sym_fns = +static const struct sym_fns aout_sym_fns = { bfd_target_aout_flavour, dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -3586,8 +3586,7 @@ static struct sym_fns aout_sym_fns = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; void diff --git a/gdb/elfread.c b/gdb/elfread.c index ae92ff65b1..4745f8ede9 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -41,7 +41,7 @@ extern void _initialize_elfread (void); /* Forward declaration. */ -static struct sym_fns elf_sym_fns_gdb_index; +static const struct sym_fns elf_sym_fns_gdb_index; /* The struct elfinfo is available only during ELF symbol table and psymtab reading. It is destroyed at the completion of psymtab-reading. @@ -1034,7 +1034,7 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst) /* Register that we are able to handle ELF object file formats. */ -static struct sym_fns elf_sym_fns = +static const struct sym_fns elf_sym_fns = { bfd_target_elf_flavour, elf_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -1046,13 +1046,12 @@ static struct sym_fns elf_sym_fns = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; /* The same as elf_sym_fns, but not registered and uses the DWARF-specific GNU index rather than psymtab. */ -static struct sym_fns elf_sym_fns_gdb_index = +static const struct sym_fns elf_sym_fns_gdb_index = { bfd_target_elf_flavour, elf_new_init, /* sym_new_init: init anything gbl to entire symab */ @@ -1064,8 +1063,7 @@ static struct sym_fns elf_sym_fns_gdb_index = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &dwarf2_gdb_index_functions, - NULL /* next: pointer to next struct sym_fns */ + &dwarf2_gdb_index_functions }; void diff --git a/gdb/machoread.c b/gdb/machoread.c index bb3268ca9e..23a5d1c303 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -837,7 +837,7 @@ macho_symfile_offsets (struct objfile *objfile, } } -static struct sym_fns macho_sym_fns = { +static const struct sym_fns macho_sym_fns = { bfd_target_mach_o_flavour, macho_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -849,8 +849,7 @@ static struct sym_fns macho_sym_fns = { a file. */ NULL, /* sym_read_linetable */ macho_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; void diff --git a/gdb/mipsread.c b/gdb/mipsread.c index cb186b1292..b1713b3d10 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -390,7 +390,7 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets, /* Initialization. */ -static struct sym_fns ecoff_sym_fns = +static const struct sym_fns ecoff_sym_fns = { bfd_target_ecoff_flavour, mipscoff_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -402,8 +402,7 @@ static struct sym_fns ecoff_sym_fns = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; /* Provide a prototype to silence -Wmissing-prototypes. */ diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 8b47d2bbfa..130ae26c34 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -293,7 +293,7 @@ struct objfile allocated memory, and is shared by all objfiles that use the object module reader of this type. */ - struct sym_fns *sf; + const struct sym_fns *sf; /* The per-objfile information about the entry point, the scope (file/func) containing the entry point, and the scope of the user's main() func. */ diff --git a/gdb/somread.c b/gdb/somread.c index cc36042ca8..779f5321d0 100644 --- a/gdb/somread.c +++ b/gdb/somread.c @@ -427,7 +427,7 @@ som_symfile_offsets (struct objfile *objfile, struct section_addr_info *addrs) /* Register that we are able to handle SOM object file formats. */ -static struct sym_fns som_sym_fns = +static const struct sym_fns som_sym_fns = { bfd_target_som_flavour, som_new_init, /* sym_new_init: init anything gbl to entire symtab */ @@ -439,8 +439,7 @@ static struct sym_fns som_sym_fns = a file. */ NULL, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; void diff --git a/gdb/symfile.c b/gdb/symfile.c index 087cd3a68f..dbd1412279 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -102,7 +102,7 @@ bfd *symfile_bfd_open (char *); int get_section_index (struct objfile *, char *); -static struct sym_fns *find_sym_fns (bfd *); +static const struct sym_fns *find_sym_fns (bfd *); static void decrement_reading_symtab (void *); @@ -147,7 +147,10 @@ void _initialize_symfile (void); calls add_symtab_fns() to register information on each format it is prepared to read. */ -static struct sym_fns *symtab_fns = NULL; +typedef const struct sym_fns *sym_fns_ptr; +DEF_VEC_P (sym_fns_ptr); + +static VEC (sym_fns_ptr) *symtab_fns = NULL; /* Flag for whether user will be reloading symbols multiple times. Defaults to ON for VxWorks, otherwise OFF. */ @@ -1702,10 +1705,9 @@ get_section_index (struct objfile *objfile, char *section_name) handle. */ void -add_symtab_fns (struct sym_fns *sf) +add_symtab_fns (const struct sym_fns *sf) { - sf->next = symtab_fns; - symtab_fns = sf; + VEC_safe_push (sym_fns_ptr, symtab_fns, sf); } /* Initialize OBJFILE to read symbols from its associated BFD. It @@ -1713,18 +1715,19 @@ add_symtab_fns (struct sym_fns *sf) struct sym_fns in the objfile structure, that contains cached information about the symbol file. */ -static struct sym_fns * +static const struct sym_fns * find_sym_fns (bfd *abfd) { - struct sym_fns *sf; + const struct sym_fns *sf; enum bfd_flavour our_flavour = bfd_get_flavour (abfd); + int i; if (our_flavour == bfd_target_srec_flavour || our_flavour == bfd_target_ihex_flavour || our_flavour == bfd_target_tekhex_flavour) return NULL; /* No symbols. */ - for (sf = symtab_fns; sf != NULL; sf = sf->next) + for (i = 0; VEC_iterate (sym_fns_ptr, symtab_fns, i, sf); ++i) if (our_flavour == sf->sym_flavour) return sf; @@ -3587,7 +3590,7 @@ symfile_relocate_debug_section (struct objfile *objfile, struct symfile_segment_data * get_symfile_segment_data (bfd *abfd) { - struct sym_fns *sf = find_sym_fns (abfd); + const struct sym_fns *sf = find_sym_fns (abfd); if (sf == NULL) return NULL; diff --git a/gdb/symfile.h b/gdb/symfile.h index 58ab786182..afa92cdb14 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -345,14 +345,6 @@ struct sym_fns /* The "quick" (aka partial) symbol functions for this symbol reader. */ const struct quick_symbol_functions *qf; - - /* Finds the next struct sym_fns. They are allocated and - initialized in whatever module implements the functions pointed - to; an initializer calls add_symtab_fns to add them to the global - chain. */ - - struct sym_fns *next; - }; extern struct section_addr_info * @@ -384,7 +376,7 @@ extern bfd_byte *default_symfile_relocate (struct objfile *objfile, extern struct symtab *allocate_symtab (char *, struct objfile *); -extern void add_symtab_fns (struct sym_fns *); +extern void add_symtab_fns (const struct sym_fns *); /* This enum encodes bit-flags passed as ADD_FLAGS parameter to syms_from_objfile, symbol_file_add, etc. */ diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index aa6d27ed32..902d48f588 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -3028,7 +3028,7 @@ xcoff_symfile_offsets (struct objfile *objfile, struct section_addr_info *addrs) /* Register our ability to parse symbols for xcoff BFD files. */ -static struct sym_fns xcoff_sym_fns = +static const struct sym_fns xcoff_sym_fns = { /* It is possible that coff and xcoff should be merged as @@ -3051,8 +3051,7 @@ static struct sym_fns xcoff_sym_fns = a file. */ aix_process_linenos, /* sym_read_linetable */ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ - &psym_functions, - NULL /* next: pointer to next struct sym_fns */ + &psym_functions }; /* Provide a prototype to silence -Wmissing-prototypes. */ -- 2.34.1