* 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) <deprecated_sym_private>: 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.
This commit is contained in:
Tom Tromey 2012-12-12 16:22:33 +00:00
parent d2f4b8feb9
commit b8b98ad1fc
6 changed files with 100 additions and 92 deletions

View File

@ -1,3 +1,27 @@
2012-12-12 Tom Tromey <tromey@redhat.com>
* 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) <deprecated_sym_private>: 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.
2012-12-12 Tom Tromey <tromey@redhat.com>
* coffread.c (coff_symfile_init): Use set_objfile_data.

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -2563,7 +2563,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));

View File

@ -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;
info->symtbl = obstack_alloc (&objfile->objfile_obstack, size);
info->symtbl_num_syms = num_symbols;
val = bfd_bread (((struct coff_symfile_info *)
objfile->deprecated_sym_private)->symtbl,
size, abfd);
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);
}