* rs6000-nat.c (add_vmap): Rewrite archive loop. Fix reference
counting. * exec.c (exec_close_1): Unconditionally release vmap's BFD. (map_vmap): Acquire a reference to the BFD.
This commit is contained in:
parent
6c18f3e0f4
commit
da1cc82f30
|
@ -1,3 +1,10 @@
|
||||||
|
2012-07-23 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* rs6000-nat.c (add_vmap): Rewrite archive loop. Fix reference
|
||||||
|
counting.
|
||||||
|
* exec.c (exec_close_1): Unconditionally release vmap's BFD.
|
||||||
|
(map_vmap): Acquire a reference to the BFD.
|
||||||
|
|
||||||
2012-07-23 Siddhesh Poyarekar <siddhesh@redhat.com>
|
2012-07-23 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
* p-valprint.c (pascal_object_print_value): Replace potentially
|
* p-valprint.c (pascal_object_print_value): Replace potentially
|
||||||
|
|
|
@ -127,16 +127,13 @@ exec_close_1 (int quitting)
|
||||||
vp = nxt;
|
vp = nxt;
|
||||||
nxt = vp->nxt;
|
nxt = vp->nxt;
|
||||||
|
|
||||||
/* if there is an objfile associated with this bfd,
|
|
||||||
free_objfile() will do proper cleanup of objfile *and* bfd. */
|
|
||||||
|
|
||||||
if (vp->objfile)
|
if (vp->objfile)
|
||||||
{
|
{
|
||||||
free_objfile (vp->objfile);
|
free_objfile (vp->objfile);
|
||||||
need_symtab_cleanup = 1;
|
need_symtab_cleanup = 1;
|
||||||
}
|
}
|
||||||
else if (vp->bfd != exec_bfd)
|
|
||||||
gdb_bfd_unref (vp->bfd);
|
gdb_bfd_unref (vp->bfd);
|
||||||
|
|
||||||
xfree (vp);
|
xfree (vp);
|
||||||
}
|
}
|
||||||
|
@ -548,6 +545,7 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||||
memset ((char *) vp, '\0', sizeof (*vp));
|
memset ((char *) vp, '\0', sizeof (*vp));
|
||||||
vp->nxt = 0;
|
vp->nxt = 0;
|
||||||
vp->bfd = abfd;
|
vp->bfd = abfd;
|
||||||
|
gdb_bfd_ref (abfd);
|
||||||
vp->name = bfd_get_filename (arch ? arch : abfd);
|
vp->name = bfd_get_filename (arch ? arch : abfd);
|
||||||
vp->member = arch ? bfd_get_filename (abfd) : "";
|
vp->member = arch ? bfd_get_filename (abfd) : "";
|
||||||
|
|
||||||
|
|
|
@ -765,12 +765,16 @@ add_vmap (LdInfo *ldi)
|
||||||
|
|
||||||
else if (bfd_check_format (abfd, bfd_archive))
|
else if (bfd_check_format (abfd, bfd_archive))
|
||||||
{
|
{
|
||||||
last = 0;
|
last = gdb_bfd_openr_next_archived_file (abfd, NULL);
|
||||||
/* FIXME??? am I tossing BFDs? bfd? */
|
while (last != NULL)
|
||||||
while ((last = gdb_bfd_openr_next_archived_file (abfd, last)))
|
|
||||||
{
|
{
|
||||||
|
bfd *next;
|
||||||
|
|
||||||
if (strcmp (mem, last->filename) == 0)
|
if (strcmp (mem, last->filename) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
next = gdb_bfd_openr_next_archived_file (abfd, last);
|
||||||
|
gdb_bfd_unref (last);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!last)
|
if (!last)
|
||||||
|
@ -790,6 +794,9 @@ add_vmap (LdInfo *ldi)
|
||||||
}
|
}
|
||||||
|
|
||||||
vp = map_vmap (last, abfd);
|
vp = map_vmap (last, abfd);
|
||||||
|
/* map_vmap acquired a reference to LAST, so we can release
|
||||||
|
ours. */
|
||||||
|
gdb_bfd_unref (last);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -804,6 +811,11 @@ add_vmap (LdInfo *ldi)
|
||||||
/* Always add symbols for the main objfile. */
|
/* Always add symbols for the main objfile. */
|
||||||
if (vp == vmap || auto_solib_add)
|
if (vp == vmap || auto_solib_add)
|
||||||
vmap_add_symbols (vp);
|
vmap_add_symbols (vp);
|
||||||
|
|
||||||
|
/* Anything needing a reference to ABFD has already acquired it, so
|
||||||
|
release our local reference. */
|
||||||
|
gdb_bfd_unref (abfd);
|
||||||
|
|
||||||
return vp;
|
return vp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue