This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
PATCH: abstract section index initialization code
- From: Jim Blandy <jimb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: 25 Nov 2002 15:42:44 -0500
- Subject: PATCH: abstract section index initialization code
2002-11-25 Jim Blandy <jimb@redhat.com>
* symfile.c (init_objfile_sect_indices): New function.
(default_symfile_offsets): Move the section-index-initializing
stuff into init_objfile_sect_indices, and call that.
Index: gdb/symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.73
diff -c -r1.73 symfile.c
*** gdb/symfile.c 25 Nov 2002 20:11:35 -0000 1.73
--- gdb/symfile.c 25 Nov 2002 20:57:36 -0000
***************
*** 473,515 ****
}
! /* Parse the user's idea of an offset for dynamic linking, into our idea
! of how to represent it for fast symbol reading. This is the default
! version of the sym_fns.sym_offsets function for symbol readers that
! don't need to do anything special. It allocates a section_offsets table
! for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
!
! void
! default_symfile_offsets (struct objfile *objfile,
! struct section_addr_info *addrs)
{
int i;
! asection *sect = NULL;
!
! objfile->num_sections = SECT_OFF_MAX;
! objfile->section_offsets = (struct section_offsets *)
! obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
! memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
!
! /* Now calculate offsets for section that were specified by the
! caller. */
! for (i = 0; i < MAX_SECTIONS && addrs->other[i].name; i++)
! {
! struct other_sections *osp ;
!
! osp = &addrs->other[i] ;
! if (osp->addr == 0)
! continue;
!
! /* Record all sections in offsets */
! /* The section_offsets in the objfile are here filled in using
! the BFD index. */
! (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
! }
!
! /* Remember the bfd indexes for the .text, .data, .bss and
! .rodata sections. */
!
sect = bfd_get_section_by_name (objfile->obfd, ".text");
if (sect)
objfile->sect_index_text = sect->index;
--- 473,485 ----
}
! /* Initialize OBJFILE's sect_index_* members. */
! static void
! init_objfile_sect_indices (struct objfile *objfile)
{
+ asection *sect;
int i;
!
sect = bfd_get_section_by_name (objfile->obfd, ".text");
if (sect)
objfile->sect_index_text = sect->index;
***************
*** 555,560 ****
--- 525,570 ----
objfile->sect_index_rodata = 0;
}
}
+
+
+ /* Parse the user's idea of an offset for dynamic linking, into our idea
+ of how to represent it for fast symbol reading. This is the default
+ version of the sym_fns.sym_offsets function for symbol readers that
+ don't need to do anything special. It allocates a section_offsets table
+ for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
+
+ void
+ default_symfile_offsets (struct objfile *objfile,
+ struct section_addr_info *addrs)
+ {
+ int i;
+
+ objfile->num_sections = SECT_OFF_MAX;
+ objfile->section_offsets = (struct section_offsets *)
+ obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
+ memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
+
+ /* Now calculate offsets for section that were specified by the
+ caller. */
+ for (i = 0; i < MAX_SECTIONS && addrs->other[i].name; i++)
+ {
+ struct other_sections *osp ;
+
+ osp = &addrs->other[i] ;
+ if (osp->addr == 0)
+ continue;
+
+ /* Record all sections in offsets */
+ /* The section_offsets in the objfile are here filled in using
+ the BFD index. */
+ (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
+ }
+
+ /* Remember the bfd indexes for the .text, .data, .bss and
+ .rodata sections. */
+ init_objfile_sect_indices (objfile);
+ }
+
/* Process a symbol file, as either the main file or as a dynamically
loaded file.