* 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 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>
* defs.h (MAX_REGISTER_SIZE): Increase to 32.
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};
if (DBX_STAB_SECTION (pst->objfile))
{
stabs_data
- = symfile_relocate_debug_section (pst->objfile->obfd,
+ = symfile_relocate_debug_section (pst->objfile,
DBX_STAB_SECTION (pst->objfile),
NULL);
if (stabs_data)
symbuf_read = 0;
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)
back_to = make_cleanup (free_current_contents, (void *) &stabs_data);
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};
http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html .
We never compress sections in .o files, so we only need to
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)
{
info->buffer = retbuf;
elf_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};
macho_symfile_offsets, /* sym_offsets: xlate external to internal form */
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
+ NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
+
NULL /* next: pointer to next struct sym_fns */
};
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};
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
contents are stored in BUF if it is non-NULL, or returned in a
malloc'd buffer otherwise.
debug section. */
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
- 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);
+ gdb_assert (objfile->sf->sym_relocate);
- return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
+ return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
}
struct symfile_segment_data *
/* This function should read the linetable from the objfile when
the line table cannot be read while processing the debugging
information. */
+
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
initialized in whatever module implements the functions pointed
to; an initializer calls add_symtab_fns to add them to the global
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 *,
struct objfile *);
/* Default overlay update function. */
extern void simple_overlay_update (struct obj_section *);
-extern bfd_byte *symfile_relocate_debug_section (bfd *abfd, asection *sectp,
- bfd_byte * buf);
+extern bfd_byte *symfile_relocate_debug_section (struct objfile *, asection *,
+ bfd_byte *);
extern int symfile_map_offsets_to_segments (bfd *,
struct symfile_segment_data *,
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
aix_process_linenos, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
NULL /* next: pointer to next struct sym_fns */
};