X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f X-Recipient: djgpp-workers AT delorie DOT com Date: Wed, 12 Dec 2012 05:43:11 +0200 From: Eli Zaretskii Subject: Re: RFC: remove deprecated_sym_private In-reply-to: <87sj7c9u95.fsf@fleche.redhat.com> X-012-Sender: halo1 AT inter DOT net DOT il To: Juan Manuel Guerrero Cc: djgpp-workers AT delorie DOT com Message-id: <83r4mw7x68.fsf@gnu.org> References: <87sj7c9u95 DOT fsf AT fleche DOT redhat DOT com> Reply-To: djgpp-workers AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp-workers AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk Could some of you please test this patch with DJGPP GDB and see if the ability to debug binaries produced with -gcoff is harmed in any way? Please report the results directly to gdb-patches AT sourceware DOT org. Thanks in advance. > From: Tom Tromey > Date: Tue, 11 Dec 2012 14:03:18 -0700 > > Here's another deprecation removal, this time deprecated_sym_private. > Like the previous patch, this changes all the users to use objfile_data > instead. > > This builds, and regtests on my x86-64 Fedora 16 machine -- but that > means nothing as I think none of the code is exercised in this setup. > > If you have access to the affected machines, I'd appreciate your testing > it. I can push a git branch if that would help. > > Tom > > * coffread.c (coff_objfile_data_key): New global. > (coff_symfile_init): Use set_objfile_data. > (coff_symfile_read): Use objfile_data. > (coff_symfile_finish): Don't free deprecated_sym_private. > (coff_free_info): New function. > (_initialize_coffread): Initialize coff_objfile_data_key. > * mdebugread.c (pending_list): Update comment. > * objfiles.h (struct objfile) : Remove. > * symfile.c (reread_symbols): Don't mention > deprecated_sym_private. > * xcoffread.c (xcoff_objfile_data_key): New global. > (XCOFF_DATA): New macro. > (process_linenos, enter_line_range, xcoff_next_symbol_text) > (read_xcoff_symtab, coff_getfilename, read_symbol_lineno): Use > XCOFF_DATA. > (xcoff_new_init) Use set_objfile_data. > (xcoff_symfile_finish): Don't free deprecated_sym_private. > (init_stringtab, swap_sym, scan_xcoff_symtab) > (xcoff_get_toc_offset, xcoff_initial_scan): Use XCOFF_DATA. > (xcoff_free_info): New function. > (_initialize_xcoffread): Initialize xcoff_objfile_data_key. > --- > gdb/coffread.c | 30 +++++++++----- > gdb/mdebugread.c | 10 ++--- > gdb/objfiles.h | 13 ------ > gdb/symfile.c | 1 - > gdb/xcoffread.c | 116 +++++++++++++++++++++++++----------------------------- > 5 files changed, 77 insertions(+), 93 deletions(-) > > diff --git a/gdb/coffread.c b/gdb/coffread.c > index 94d0554..56ed5ae 100644 > --- a/gdb/coffread.c > +++ b/gdb/coffread.c > @@ -47,6 +47,10 @@ > > extern void _initialize_coffread (void); > > +/* Key for COFF-associated data. */ > + > +static const struct objfile_data *coff_objfile_data_key; > + > /* The objfile we are currently reading. */ > > static struct objfile *coffread_objfile; > @@ -451,17 +455,15 @@ static void > coff_symfile_init (struct objfile *objfile) > { > struct dbx_symfile_info *dbx; > + struct coff_symfile_info *coff; > > /* Allocate struct to keep track of stab reading. */ > dbx = XCNEW (struct dbx_symfile_info); > set_objfile_data (objfile, dbx_objfile_data_key, dbx); > > /* Allocate struct to keep track of the symfile. */ > - objfile->deprecated_sym_private > - = xmalloc (sizeof (struct coff_symfile_info)); > - > - memset (objfile->deprecated_sym_private, 0, > - sizeof (struct coff_symfile_info)); > + coff = XCNEW (struct coff_symfile_info); > + set_objfile_data (objfile, coff_objfile_data_key, coff); > > /* COFF objects may be reordered, so set OBJF_REORDERED. If we > find this causes a significant slowdown in gdb then we could > @@ -526,7 +528,7 @@ coff_symfile_read (struct objfile *objfile, int symfile_flags) > struct cleanup *back_to, *cleanup_minimal_symbols; > int stabstrsize; > > - info = (struct coff_symfile_info *) objfile->deprecated_sym_private; > + info = objfile_data (objfile, coff_objfile_data_key); > dbxinfo = DBX_SYMFILE_INFO (objfile); > symfile_bfd = abfd; /* Kludge for swap routines. */ > > @@ -680,11 +682,6 @@ coff_new_init (struct objfile *ignore) > static void > coff_symfile_finish (struct objfile *objfile) > { > - if (objfile->deprecated_sym_private != NULL) > - { > - xfree (objfile->deprecated_sym_private); > - } > - > /* Let stabs reader clean up. */ > stabsread_clear_cache (); > > @@ -2199,8 +2196,19 @@ static const struct sym_fns coff_sym_fns = > &psym_functions > }; > > +/* Free the per-objfile COFF data. */ > + > +static void > +coff_free_info (struct objfile *objfile, void *arg) > +{ > + xfree (arg); > +} > + > void > _initialize_coffread (void) > { > add_symtab_fns (&coff_sym_fns); > + > + coff_objfile_data_key = register_objfile_data_with_cleanup (NULL, > + coff_free_info); > } > diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c > index d1b9177..37844b6 100644 > --- a/gdb/mdebugread.c > +++ b/gdb/mdebugread.c > @@ -479,12 +479,10 @@ struct mdebug_pending > }; > > > -/* The pending information is kept for an entire object file, and used > - to be in the deprecated_sym_private field. I took it out when I > - split mdebugread from mipsread, because this might not be the only > - type of symbols read from an object file. Instead, we allocate the > - pending information table when we create the partial symbols, and > - we store a pointer to the single table in each psymtab. */ > +/* The pending information is kept for an entire object file We > + allocate the pending information table when we create the partial > + symbols, and we store a pointer to the single table in each > + psymtab. */ > > static struct mdebug_pending **pending_list; > > diff --git a/gdb/objfiles.h b/gdb/objfiles.h > index 65162a1..877c9e0 100644 > --- a/gdb/objfiles.h > +++ b/gdb/objfiles.h > @@ -322,20 +322,7 @@ struct objfile > > struct entry_info ei; > > - /* Hook for information for use by the symbol reader (currently used > - for information shared by sym_init and sym_read). It is > - typically a pointer to malloc'd memory. The symbol reader's finish > - function is responsible for freeing the memory thusly allocated. */ > - /* NOTE: cagney/2004-10-23: This has been replaced by per-objfile > - data points implemented using "data" and "num_data" below. For > - an example of how to use this replacement, see "objfile_data" > - in "mips-tdep.c". */ > - > - void *deprecated_sym_private; > - > /* Per objfile data-pointers required by other GDB modules. */ > - /* FIXME: kettenis/20030711: This mechanism could replace > - deprecated_sym_private entirely. */ > > REGISTRY_FIELDS; > > diff --git a/gdb/symfile.c b/gdb/symfile.c > index 1d3278b..735f869 100644 > --- a/gdb/symfile.c > +++ b/gdb/symfile.c > @@ -2585,7 +2585,6 @@ reread_symbols (void) > objfile->free_psymtabs = NULL; > objfile->template_symbols = NULL; > objfile->msymbols = NULL; > - objfile->deprecated_sym_private = NULL; > objfile->minimal_symbol_count = 0; > memset (&objfile->msymbol_hash, 0, > sizeof (objfile->msymbol_hash)); > diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c > index e4d0861..40fd97d 100644 > --- a/gdb/xcoffread.c > +++ b/gdb/xcoffread.c > @@ -56,6 +56,10 @@ > #include "aout/stab_gnu.h" > > > +/* Key for XCOFF-associated data. */ > + > +static const struct objfile_data *xcoff_objfile_data_key; > + > /* We put a pointer to this structure in the read_symtab_private field > of the psymtab. */ > > @@ -150,6 +154,12 @@ struct coff_symfile_info > CORE_ADDR toc_offset; > }; > > +/* Convenience macro to access the per-objfile XCOFF data. */ > + > +#define XCOFF_DATA(objfile) \ > + ((struct coff_symfile_info *) objfile_data ((objfile), \ > + xcoff_objfile_data_key)) > + > /* XCOFF names for dwarf sections. There is no compressed sections. */ > > static const struct dwarf2_debug_sections dwarf2_xcoff_names = { > @@ -593,9 +603,8 @@ static void > process_linenos (CORE_ADDR start, CORE_ADDR end) > { > int offset, ii; > - file_ptr max_offset = > - ((struct coff_symfile_info *) this_symtab_psymtab->objfile > - ->deprecated_sym_private)->max_lineno_offset; > + file_ptr max_offset > + = XCOFF_DATA (this_symtab_psymtab->objfile)->max_lineno_offset; > > /* subfile structure for the main compilation unit. */ > struct subfile main_subfile; > @@ -829,9 +838,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, > if (endoffset == 0 && startaddr == 0 && endaddr == 0) > return; > curoffset = beginoffset; > - limit_offset = > - ((struct coff_symfile_info *) objfile->deprecated_sym_private) > - ->max_lineno_offset; > + limit_offset = XCOFF_DATA (objfile)->max_lineno_offset; > > if (endoffset != 0) > { > @@ -965,9 +972,7 @@ xcoff_next_symbol_text (struct objfile *objfile) > } > else if (symbol.n_sclass & 0x80) > { > - retval = ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->debugsec > - + symbol.n_offset; > + retval = XCOFF_DATA (objfile)->debugsec + symbol.n_offset; > raw_symbol += coff_data (objfile->obfd)->local_symesz; > ++symnum; > } > @@ -990,10 +995,9 @@ read_xcoff_symtab (struct partial_symtab *pst) > struct objfile *objfile = pst->objfile; > bfd *abfd = objfile->obfd; > char *raw_auxptr; /* Pointer to first raw aux entry for sym. */ > - char *strtbl = > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl; > - char *debugsec = > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec; > + struct coff_symfile_info *xcoff = XCOFF_DATA (objfile); > + char *strtbl = xcoff->strtbl; > + char *debugsec = xcoff->debugsec; > const char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF"; > > struct internal_syment symbol[1]; > @@ -1035,9 +1039,7 @@ read_xcoff_symtab (struct partial_symtab *pst) > symnum + ((struct symloc *) pst->read_symtab_private)->numsyms; > first_object_file_end = 0; > > - raw_symbol = > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl > - + symnum * local_symesz; > + raw_symbol = xcoff->symtbl + symnum * local_symesz; > > while (symnum < max_symnum) > { > @@ -1661,9 +1663,8 @@ coff_getfilename (union internal_auxent *aux_entry, struct objfile *objfile) > static char buffer[BUFSIZ]; > > if (aux_entry->x_file.x_n.x_zeroes == 0) > - strcpy (buffer, ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->strtbl > - + aux_entry->x_file.x_n.x_offset); > + strcpy (buffer, (XCOFF_DATA (objfile)->strtbl > + + aux_entry->x_file.x_n.x_offset)); > else > { > strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN); > @@ -1676,11 +1677,9 @@ coff_getfilename (union internal_auxent *aux_entry, struct objfile *objfile) > static void > read_symbol (struct internal_syment *symbol, int symno) > { > - int nsyms > - = ((struct coff_symfile_info *) > - this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl_num_syms; > - char *stbl = ((struct coff_symfile_info *) > - this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl; > + struct coff_symfile_info *xcoff = XCOFF_DATA (this_symtab_psymtab->objfile); > + int nsyms = xcoff->symtbl_num_syms; > + char *stbl = xcoff->symtbl; > > if (symno < 0 || symno >= nsyms) > { > @@ -1715,8 +1714,7 @@ read_symbol_lineno (int symno) > struct objfile *objfile = this_symtab_psymtab->objfile; > int xcoff64 = bfd_xcoff_is_xcoff64 (objfile->obfd); > > - struct coff_symfile_info *info = > - (struct coff_symfile_info *)objfile->deprecated_sym_private; > + struct coff_symfile_info *info = XCOFF_DATA (objfile); > int nsyms = info->symtbl_num_syms; > char *stbl = info->symtbl; > char *strtbl = info->strtbl; > @@ -1919,9 +1917,11 @@ xcoff_new_init (struct objfile *objfile) > static void > xcoff_symfile_init (struct objfile *objfile) > { > + struct coff_symfile_info *xcoff; > + > /* Allocate struct to keep track of the symfile. */ > - objfile->deprecated_sym_private > - = xmalloc (sizeof (struct coff_symfile_info)); > + xcoff = XNEW (struct coff_symfile_info); > + set_objfile_data (objfile, xcoff_objfile_data_key, xcoff); > > /* XCOFF objects may be reordered, so set OBJF_REORDERED. If we > find this causes a significant slowdown in gdb then we could > @@ -1939,11 +1939,6 @@ xcoff_symfile_init (struct objfile *objfile) > static void > xcoff_symfile_finish (struct objfile *objfile) > { > - if (objfile->deprecated_sym_private != NULL) > - { > - xfree (objfile->deprecated_sym_private); > - } > - > /* Start with a fresh include table for the next objfile. */ > if (inclTable) > { > @@ -1963,9 +1958,9 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile) > int val; > unsigned char lengthbuf[4]; > char *strtbl; > + struct coff_symfile_info *xcoff = XCOFF_DATA (objfile); > > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl > - = NULL; > + xcoff->strtbl = NULL; > > if (bfd_seek (abfd, offset, SEEK_SET) < 0) > error (_("cannot seek to string table in %s: %s"), > @@ -1984,8 +1979,7 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile) > as long as we have its symbol table around. */ > > strtbl = (char *) obstack_alloc (&objfile->objfile_obstack, length); > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl > - = strtbl; > + xcoff->strtbl = strtbl; > > /* Copy length buffer, the first byte is usually zero and is > used for stabs with a name length of zero. */ > @@ -2165,13 +2159,11 @@ swap_sym (struct internal_syment *symbol, union internal_auxent *aux, > } > else if (symbol->n_sclass & 0x80) > { > - *name = ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->debugsec + symbol->n_offset; > + *name = XCOFF_DATA (objfile)->debugsec + symbol->n_offset; > } > else > { > - *name = ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->strtbl + symbol->n_offset; > + *name = XCOFF_DATA (objfile)->strtbl + symbol->n_offset; > } > ++*symnump; > *raw += coff_data (objfile->obfd)->local_symesz; > @@ -2248,10 +2240,8 @@ scan_xcoff_symtab (struct objfile *objfile) > abfd = objfile->obfd; > next_symbol_text_func = xcoff_next_symbol_text; > > - sraw_symbol = ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->symtbl; > - nsyms = ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->symtbl_num_syms; > + sraw_symbol = XCOFF_DATA (objfile)->symtbl; > + nsyms = XCOFF_DATA (objfile)->symtbl_num_syms; > ssymnum = 0; > while (ssymnum < nsyms) > { > @@ -2930,8 +2920,7 @@ scan_xcoff_symtab (struct objfile *objfile) > Another place to obtain this information would be file auxiliary > header. */ > > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->toc_offset > - = toc_offset; > + XCOFF_DATA (objfile)->toc_offset = toc_offset; > } > > /* Return the toc offset value for a given objfile. */ > @@ -2940,8 +2929,7 @@ CORE_ADDR > xcoff_get_toc_offset (struct objfile *objfile) > { > if (objfile) > - return ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->toc_offset; > + return XCOFF_DATA (objfile)->toc_offset; > return 0; > } > > @@ -2967,7 +2955,7 @@ xcoff_initial_scan (struct objfile *objfile, int symfile_flags) > char *name; > unsigned int size; > > - info = (struct coff_symfile_info *) objfile->deprecated_sym_private; > + info = XCOFF_DATA (objfile); > symfile_bfd = abfd = objfile->obfd; > name = objfile->name; > > @@ -3006,9 +2994,7 @@ xcoff_initial_scan (struct objfile *objfile, int symfile_flags) > } > } > } > - ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->debugsec > - = debugsec; > + info->debugsec = debugsec; > } > } > > @@ -3019,15 +3005,10 @@ xcoff_initial_scan (struct objfile *objfile, int symfile_flags) > error (_("Error reading symbols from %s: %s"), > name, bfd_errmsg (bfd_get_error ())); > size = coff_data (abfd)->local_symesz * num_symbols; > - ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl = > - obstack_alloc (&objfile->objfile_obstack, size); > - ((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->symtbl_num_syms > - = num_symbols; > - > - val = bfd_bread (((struct coff_symfile_info *) > - objfile->deprecated_sym_private)->symtbl, > - size, abfd); > + info->symtbl = obstack_alloc (&objfile->objfile_obstack, size); > + info->symtbl_num_syms = num_symbols; > + > + val = bfd_bread (info->symtbl, size, abfd); > if (val != size) > perror_with_name (_("reading symbol table")); > > @@ -3138,6 +3119,14 @@ static const struct sym_fns xcoff_sym_fns = > &psym_functions > }; > > +/* Free the per-objfile xcoff data. */ > + > +static void > +xcoff_free_info (struct objfile *objfile, void *arg) > +{ > + xfree (arg); > +} > + > /* Provide a prototype to silence -Wmissing-prototypes. */ > extern initialize_file_ftype _initialize_xcoffread; > > @@ -3145,4 +3134,7 @@ void > _initialize_xcoffread (void) > { > add_symtab_fns (&xcoff_sym_fns); > + > + xcoff_objfile_data_key = register_objfile_data_with_cleanup (NULL, > + xcoff_free_info); > } > -- > 1.7.7.6 > >