* mdebugread.c (psymtab_to_symtab_1): Copy linetable to obstack.

(new_symtab): Don't set `free_code' on symtab.
	(new_linetable): Properly handle size==0.
	* symtab.h (struct symtab) <free_code, free_func>: Remove.
	* symmisc.c (free_symtab): Don't free the linetable.  Don't call
	free_func.
	* jv-lang.c (struct jv_per_objfile_data): New.
	(jv_per_objfile_free): Free the data.
	(get_dynamics_objfile): Allocate a jv_per_objfile_data.
	(get_java_class_symtab): Set the `dict' field on the
	jv_per_objfile_data.
	(free_class_block): Remove.
	* buildsym.c (end_symtab): Don't set `free_code' or `free_func' on
	the symtab.
This commit is contained in:
Tom Tromey
2011-04-04 15:11:19 +00:00
parent 0c2e60193c
commit 30cc903e7c
6 changed files with 57 additions and 73 deletions

View File

@ -4204,7 +4204,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename)
{
/* This symbol table contains ordinary ecoff entries. */
int maxlines;
int maxlines, size;
EXTR *ext_ptr;
if (fh == 0)
@ -4311,7 +4311,14 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename)
}
}
LINETABLE (st) = lines;
size = lines->nitems;
if (size > 1)
--size;
LINETABLE (st) = obstack_copy (&current_objfile->objfile_obstack,
lines,
(sizeof (struct linetable)
+ size * sizeof (lines->item)));
xfree (lines);
/* .. and our share of externals.
XXX use the global list to speed up things here. How?
@ -4763,7 +4770,6 @@ new_symtab (const char *name, int maxlines, struct objfile *objfile)
BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)) =
BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
s->free_code = free_linetable;
s->debugformat = "ECOFF";
return (s);
}
@ -4803,7 +4809,9 @@ new_linetable (int size)
{
struct linetable *l;
size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
if (size > 1)
--size;
size = size * sizeof (l->item) + sizeof (struct linetable);
l = (struct linetable *) xmalloc (size);
l->nitems = 0;
return l;