This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]