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]

[RFA]: Add misc_obstack to object files.



This way, we stop putting things in the psymbol_obstack that don't
belong.  

2001-05-27  Daniel Berlin  <dan@cgsoftware.com>

	* symfile.c (default_symfile_offsets): Allocate in misc_obstack.
	(reread_symbols): Handle misc_obstack too, and use it where
	psymbol_obstack didn't belong. 
	(allocate_psymtab): Ditto.

	* objfiles.c (add_to_objfile_sections):  Use misc_obstack, not psymbol_obstack.
	(build_objfile_section_table): Ditto.
	(free_objfile): Free the misc_obstack.
	(allocate_objfile): Setup misc_obstack too.

	* objfiles.h: Add misc_obstack to object file.

Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.32
diff -c -3 -p -w -B -b -r1.32 symfile.c
*** symfile.c	2001/05/10 15:33:21	1.32
--- symfile.c	2001/05/29 17:27:51
*************** default_symfile_offsets (struct objfile 
*** 500,506 ****
  
    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
--- 500,506 ----
  
    objfile->num_sections = SECT_OFF_MAX;
    objfile->section_offsets = (struct section_offsets *)
!     obstack_alloc (&objfile->misc_obstack, SIZEOF_SECTION_OFFSETS);
    memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
  
    /* Now calculate offsets for section that were specified by the
*************** reread_symbols (void)
*** 1679,1684 ****
--- 1679,1685 ----
  
  	      /* Free the obstacks for non-reusable objfiles */
  	      free_bcache (&objfile->psymbol_cache);
+ 	      obstack_free (&objfile->misc_obstack, 0);
  	      obstack_free (&objfile->psymbol_obstack, 0);
  	      obstack_free (&objfile->symbol_obstack, 0);
  	      obstack_free (&objfile->type_obstack, 0);
*************** reread_symbols (void)
*** 1704,1709 ****
--- 1705,1712 ----
  	         it is empty.  */
  	      obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
  					  xmalloc, xfree);
+ 	      obstack_specify_allocation (&objfile->misc_obstack, 0, 0,
+ 					  xmalloc, xfree);
  	      obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0,
  					  xmalloc, xfree);
  	      obstack_specify_allocation (&objfile->symbol_obstack, 0, 0,
*************** reread_symbols (void)
*** 1719,1725 ****
  	      /* We use the same section offsets as from last time.  I'm not
  	         sure whether that is always correct for shared libraries.  */
  	      objfile->section_offsets = (struct section_offsets *)
! 		obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
  	      memcpy (objfile->section_offsets, offsets, SIZEOF_SECTION_OFFSETS);
  	      objfile->num_sections = num_offsets;
  
--- 1722,1728 ----
  	      /* We use the same section offsets as from last time.  I'm not
  	         sure whether that is always correct for shared libraries.  */
  	      objfile->section_offsets = (struct section_offsets *)
! 		obstack_alloc (&objfile->misc_obstack, SIZEOF_SECTION_OFFSETS);
  	      memcpy (objfile->section_offsets, offsets, SIZEOF_SECTION_OFFSETS);
  	      objfile->num_sections = num_offsets;
  
*************** allocate_psymtab (char *filename, struct
*** 1981,1993 ****
        objfile->free_psymtabs = psymtab->next;
      }
    else
!     psymtab = (struct partial_symtab *)
!       obstack_alloc (&objfile->psymbol_obstack,
! 		     sizeof (struct partial_symtab));
  
    memset (psymtab, 0, sizeof (struct partial_symtab));
!   psymtab->filename = obsavestring (filename, strlen (filename),
! 				    &objfile->psymbol_obstack);
    psymtab->symtab = NULL;
  
    /* Prepend it to the psymtab list for the objfile it belongs to.
--- 1984,1993 ----
        objfile->free_psymtabs = psymtab->next;
      }
    else
!     psymtab = (struct partial_symtab *) obstack_alloc (&objfile->misc_obstack, sizeof (struct partial_symtab));
  
    memset (psymtab, 0, sizeof (struct partial_symtab));
!   psymtab->filename = obsavestring (filename, strlen(filename), &objfile->misc_obstack);
    psymtab->symtab = NULL;
  
    /* Prepend it to the psymtab list for the objfile it belongs to.
Index: objfiles.c
===================================================================
RCS file: /cvs/src/src/gdb/objfiles.c,v
retrieving revision 1.15
diff -c -3 -p -w -B -b -r1.15 objfiles.c
*** objfiles.c	2001/03/06 08:21:11	1.15
--- objfiles.c	2001/05/29 17:27:57
*************** add_to_objfile_sections (bfd *abfd, sec_
*** 96,102 ****
    section.ovly_mapped = 0;
    section.addr = bfd_section_vma (abfd, asect);
    section.endaddr = section.addr + bfd_section_size (abfd, asect);
!   obstack_grow (&objfile->psymbol_obstack, (char *) &section, sizeof (section));
    objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
  }
  
--- 96,102 ----
    section.ovly_mapped = 0;
    section.addr = bfd_section_vma (abfd, asect);
    section.endaddr = section.addr + bfd_section_size (abfd, asect);
!   obstack_grow (&objfile->misc_obstack, (char *) &section, sizeof (section));
    objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
  }
  
*************** build_objfile_section_table (struct objf
*** 121,134 ****
  {
    /* objfile->sections can be already set when reading a mapped symbol
       file.  I believe that we do need to rebuild the section table in
!      this case (we rebuild other things derived from the bfd), but we
!      can't free the old one (it's in the psymbol_obstack).  So we just
!      waste some memory.  */
  
    objfile->sections_end = 0;
    bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
    objfile->sections = (struct obj_section *)
!     obstack_finish (&objfile->psymbol_obstack);
    objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
    return (0);
  }
--- 121,137 ----
  {
    /* objfile->sections can be already set when reading a mapped symbol
       file.  I believe that we do need to rebuild the section table in
!      this case (we rebuild other things derived from the bfd).
!      DJB - 05-27-2001 
!      It's in the misc_obstack now, feel free to do what you need to.
!      All the stuff in objfile that was on the psymbol obstack, but didnt' belong, is in the misc obstack, which 
!      I think is all the stuff you want to blow away anyway.
!      */
  
    objfile->sections_end = 0;
    bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
    objfile->sections = (struct obj_section *)
!     obstack_finish (&objfile->misc_obstack);
    objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
    return (0);
  }
*************** allocate_objfile (bfd *abfd, int flags)
*** 188,193 ****
--- 191,198 ----
  	      /* Update pointers to functions to *our* copies */
  	      obstack_chunkfun (&objfile->psymbol_cache.cache, xmmalloc);
  	      obstack_freefun (&objfile->psymbol_cache.cache, mfree);
+ 	      obstack_chunkfun (&objfile->misc_obstack, xmmalloc);
+ 	      obstack_freefun (&objfile->misc_obstack, mfree);
  	      obstack_chunkfun (&objfile->psymbol_obstack, xmmalloc);
  	      obstack_freefun (&objfile->psymbol_obstack, mfree);
  	      obstack_chunkfun (&objfile->symbol_obstack, xmmalloc);
*************** allocate_objfile (bfd *abfd, int flags)
*** 218,223 ****
--- 223,231 ----
  	      obstack_specify_allocation_with_arg (&objfile->psymbol_cache.cache,
  						   0, 0, xmmalloc, mfree,
  						   objfile->md);
+ 	      obstack_specify_allocation_with_arg (&objfile->misc_obstack,
+ 						   0, 0, xmmalloc, mfree,
+ 						   objfile->md);
  	      obstack_specify_allocation_with_arg (&objfile->psymbol_obstack,
  						   0, 0, xmmalloc, mfree,
  						   objfile->md);
*************** allocate_objfile (bfd *abfd, int flags)
*** 264,269 ****
--- 272,279 ----
        objfile->md = NULL;
        obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
  				  xmalloc, xfree);
+       obstack_specify_allocation (&objfile->misc_obstack, 0, 0, xmalloc,
+ 				  xfree);
        obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0, xmalloc,
  				  xfree);
        obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
*************** free_objfile (struct objfile *objfile)
*** 475,480 ****
--- 485,491 ----
  	mfree (objfile->md, objfile->static_psymbols.list);
        /* Free the obstacks for non-reusable objfiles */
        free_bcache (&objfile->psymbol_cache);
+       obstack_free (&objfile->misc_obstack, 0);
        obstack_free (&objfile->psymbol_obstack, 0);
        obstack_free (&objfile->symbol_obstack, 0);
        obstack_free (&objfile->type_obstack, 0);
Index: objfiles.h
===================================================================
RCS file: /cvs/src/src/gdb/objfiles.h,v
retrieving revision 1.8
diff -c -3 -p -w -B -b -r1.8 objfiles.h
*** objfiles.h	2001/03/06 08:21:11	1.8
--- objfiles.h	2001/05/29 17:28:00
*************** struct objfile
*** 269,274 ****
--- 269,275 ----
      /* Obstacks to hold objects that should be freed when we load a new symbol
         table from this object file. */
  
+     struct obstack misc_obstack;	/* Misc stuff */
      struct obstack psymbol_obstack;	/* Partial symbols */
      struct obstack symbol_obstack;	/* Full symbols */
      struct obstack type_obstack;	/* Types */

-- 
"I used to be a narrator for bad mimes.
"-Steven Wright


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