2010-02-03 Tristan Gingold <gingold@adacore.com>

* symfile.h (struct sym_fns): Add sym_relocate field.
	(default_symfile_relocate): New prototype.
	(symfile_relocate_debug_section): First argument is now an objfile.
	* symfile.c (default_symfile_relocate): Rename from
	symfile_relocate_debug_section, first argument is now an objfile.
	(symfile_relocate_debug_section): New function.
	* coffread.c (coff_sym_fns): Set sym_relocate field.
	* somread.c (som_sym_fns): Ditto.
	* mipsread.c (ecoff_sym_fns): Ditto.
	* machoread.c (macho_sym_fns): Ditto.
	* elfread.c (elf_sym_fns): Ditto.
	* dwarf2read.c (dwarf2_read_section): Ditto.
	* xcoffread.c (xcoff_sym_fns): Ditto.
	* dbxread.c (aout_sym_fns): Ditto.
	(dbx_psymtab_to_symtab): Adjust call to symfile_relocate_debug_section.
	(elfstab_build_psymtabs): Ditto.
This commit is contained in:
Tristan Gingold
2010-02-03 14:13:16 +00:00
parent be52b7566d
commit ac8035ab9e
11 changed files with 71 additions and 15 deletions

View File

@ -1,3 +1,22 @@
2010-02-03 Tristan Gingold <gingold@adacore.com>
* symfile.h (struct sym_fns): Add sym_relocate field.
(default_symfile_relocate): New prototype.
(symfile_relocate_debug_section): First argument is now an objfile.
* symfile.c (default_symfile_relocate): Rename from
symfile_relocate_debug_section, first argument is now an objfile.
(symfile_relocate_debug_section): New function.
* coffread.c (coff_sym_fns): Set sym_relocate field.
* somread.c (som_sym_fns): Ditto.
* mipsread.c (ecoff_sym_fns): Ditto.
* machoread.c (macho_sym_fns): Ditto.
* elfread.c (elf_sym_fns): Ditto.
* dwarf2read.c (dwarf2_read_section): Ditto.
* xcoffread.c (xcoff_sym_fns): Ditto.
* dbxread.c (aout_sym_fns): Ditto.
(dbx_psymtab_to_symtab): Adjust call to symfile_relocate_debug_section.
(elfstab_build_psymtabs): Ditto.
2010-02-03 H.J. Lu <hongjiu.lu@intel.com> 2010-02-03 H.J. Lu <hongjiu.lu@intel.com>
* defs.h (MAX_REGISTER_SIZE): Increase to 32. * defs.h (MAX_REGISTER_SIZE): Increase to 32.

View File

@ -2128,6 +2128,7 @@ static struct sym_fns coff_sym_fns =
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */ NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -2473,7 +2473,7 @@ Shouldn't happen.\n",
if (DBX_STAB_SECTION (pst->objfile)) if (DBX_STAB_SECTION (pst->objfile))
{ {
stabs_data stabs_data
= symfile_relocate_debug_section (pst->objfile->obfd, = symfile_relocate_debug_section (pst->objfile,
DBX_STAB_SECTION (pst->objfile), DBX_STAB_SECTION (pst->objfile),
NULL); NULL);
if (stabs_data) if (stabs_data)
@ -3460,7 +3460,7 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
symbuf_read = 0; symbuf_read = 0;
symbuf_left = bfd_section_size (objfile->obfd, stabsect); symbuf_left = bfd_section_size (objfile->obfd, stabsect);
stabs_data = symfile_relocate_debug_section (objfile->obfd, stabsect, NULL); stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
if (stabs_data) if (stabs_data)
back_to = make_cleanup (free_current_contents, (void *) &stabs_data); back_to = make_cleanup (free_current_contents, (void *) &stabs_data);
@ -3571,6 +3571,7 @@ static struct sym_fns aout_sym_fns =
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */ NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -1412,7 +1412,7 @@ dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info)
http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html .
We never compress sections in .o files, so we only need to We never compress sections in .o files, so we only need to
try this when the section is not compressed. */ try this when the section is not compressed. */
retbuf = symfile_relocate_debug_section (abfd, sectp, buf); retbuf = symfile_relocate_debug_section (objfile, sectp, buf);
if (retbuf != NULL) if (retbuf != NULL)
{ {
info->buffer = retbuf; info->buffer = retbuf;

View File

@ -1057,6 +1057,7 @@ static struct sym_fns elf_sym_fns =
elf_symfile_segments, /* sym_segments: Get segment information from elf_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */ NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -759,6 +759,9 @@ static struct sym_fns macho_sym_fns = {
macho_symfile_offsets, /* sym_offsets: xlate external to internal form */ macho_symfile_offsets, /* sym_offsets: xlate external to internal form */
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -399,6 +399,7 @@ static struct sym_fns ecoff_sym_fns =
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */ NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -437,6 +437,7 @@ static struct sym_fns som_sym_fns =
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
NULL, /* sym_read_linetable */ NULL, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };

View File

@ -3627,6 +3627,27 @@ symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
sectp->output_offset = 0; sectp->output_offset = 0;
} }
/* Default implementation for sym_relocate. */
bfd_byte *
default_symfile_relocate (struct objfile *objfile, asection *sectp,
bfd_byte *buf)
{
bfd *abfd = objfile->obfd;
/* We're only interested in sections with relocation
information. */
if ((sectp->flags & SEC_RELOC) == 0)
return NULL;
/* We will handle section offsets properly elsewhere, so relocate as if
all sections begin at 0. */
bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
}
/* Relocate the contents of a debug section SECTP in ABFD. The /* Relocate the contents of a debug section SECTP in ABFD. The
contents are stored in BUF if it is non-NULL, or returned in a contents are stored in BUF if it is non-NULL, or returned in a
malloc'd buffer otherwise. malloc'd buffer otherwise.
@ -3642,18 +3663,12 @@ symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
debug section. */ debug section. */
bfd_byte * bfd_byte *
symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf) symfile_relocate_debug_section (struct objfile *objfile,
asection *sectp, bfd_byte *buf)
{ {
/* We're only interested in sections with relocation gdb_assert (objfile->sf->sym_relocate);
information. */
if ((sectp->flags & SEC_RELOC) == 0)
return NULL;
/* We will handle section offsets properly elsewhere, so relocate as if return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
all sections begin at 0. */
bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
} }
struct symfile_segment_data * struct symfile_segment_data *

View File

@ -163,8 +163,15 @@ struct sym_fns
/* This function should read the linetable from the objfile when /* This function should read the linetable from the objfile when
the line table cannot be read while processing the debugging the line table cannot be read while processing the debugging
information. */ information. */
void (*sym_read_linetable) (void); void (*sym_read_linetable) (void);
/* Relocate the contents of a debug section SECTP. The
contents are stored in BUF if it is non-NULL, or returned in a
malloc'd buffer otherwise. */
bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf);
/* Finds the next struct sym_fns. They are allocated and /* Finds the next struct sym_fns. They are allocated and
initialized in whatever module implements the functions pointed initialized in whatever module implements the functions pointed
to; an initializer calls add_symtab_fns to add them to the global to; an initializer calls add_symtab_fns to add them to the global
@ -195,6 +202,12 @@ extern void default_symfile_offsets (struct objfile *objfile,
extern struct symfile_segment_data *default_symfile_segments (bfd *abfd); extern struct symfile_segment_data *default_symfile_segments (bfd *abfd);
/* The default version of sym_fns.sym_relocate for readers that don't
do anything special. */
extern bfd_byte *default_symfile_relocate (struct objfile *objfile,
asection *sectp, bfd_byte *buf);
extern void extend_psymbol_list (struct psymbol_allocation_list *, extern void extend_psymbol_list (struct psymbol_allocation_list *,
struct objfile *); struct objfile *);
@ -374,8 +387,8 @@ extern void symbol_file_clear (int from_tty);
/* Default overlay update function. */ /* Default overlay update function. */
extern void simple_overlay_update (struct obj_section *); extern void simple_overlay_update (struct obj_section *);
extern bfd_byte *symfile_relocate_debug_section (bfd *abfd, asection *sectp, extern bfd_byte *symfile_relocate_debug_section (struct objfile *, asection *,
bfd_byte * buf); bfd_byte *);
extern int symfile_map_offsets_to_segments (bfd *, extern int symfile_map_offsets_to_segments (bfd *,
struct symfile_segment_data *, struct symfile_segment_data *,

View File

@ -3035,6 +3035,7 @@ static struct sym_fns xcoff_sym_fns =
default_symfile_segments, /* sym_segments: Get segment information from default_symfile_segments, /* sym_segments: Get segment information from
a file. */ a file. */
aix_process_linenos, /* sym_read_linetable */ aix_process_linenos, /* sym_read_linetable */
default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */ NULL /* next: pointer to next struct sym_fns */
}; };