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]

Re: [RFA]: Add misc_obstack to object files.


Elena Zannoni <ezannoni@cygnus.com> writes:

> Daniel Berlin writes:
> > 
> > This way, we stop putting things in the psymbol_obstack that don't
> > belong.  
> > 
> 
> Dan, can you elaborate a bit on why we need this?
Because these things don't belong in the psymbol obstack.
They are section offsets, not partial symbols.

> Why are you removing
> the partial symbol table from the psymbol_objstack?
I'm not. At all in fact.
I'm specifically trying to make it so *all* that is in the
psymbol_obstack is the partial symbol table.
we've been stuffing random stuff like section offsets into the
psymbol_obstack, because it was handy.
This is wrong.
If we need a misc place to put info like section offsets, that isn't
large enough to deserve it's own obstack on it's own, then all the
misc stuff together should go in a misc_obstack.

>  Was this intended?
> There are several other things that get allocated on the
> psymbol_objstack, for instance look in xcoffread.c, somread.c,
> etc. Why just remove the section offset stuff?
Because I haven't gotten to the others yet.
And there is no harm in taking time to make sure it gets done right.

> 
> If your intent was to change the allocation of the section offset
> information, from psymbol_obstack to misc_obstack, why not modify also
> the same allocations done in xcoffread.c, elfread.c, somread.c?
Because i haven't gotten there yet.
:)
I did it as I saw them.

In actuality, what i was doing was freeing the psymbol obstack when we
were completely done with partial symbols, and seeing what broke.
They never broke, so i never noticed them.

When i submit a large patch that does all this in one fell swoop,
someone would say to break it down.
So consider this a first step, rather than a done deal.

> 
> Thanks
> Elena
> 
> 
> > 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
> > 

-- 
"I went into a clothes store the other day and a salesman walked
up to me and said, "Can I help you?"  and I said "Yeah, do you
got anything I like?"  He said, "What do you mean do we have
anything you like?"  I said, "You started this."
"-Steven Wright


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