[RFA]: Add misc_obstack to object files.
Daniel Berlin
dan@cgsoftware.com
Mon Jun 25 19:07:00 GMT 2001
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 *) §ion, 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 *) §ion, 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
More information about the Gdb-patches
mailing list