* rs6000-nat.c (vmap_ldinfo): Issue warning instead of error if

fstat on ldinfo_fd fails.  Use objfile->obfd instead of vp->bfd
	to check for reference to the same file.

	* target.c (target_read_string):  Handle string transfers at the
	end of a memory section gracefully.
This commit is contained in:
Peter Schauer 1998-04-26 14:59:48 +00:00
parent 94fa695eca
commit 8b150a6b18
2 changed files with 32 additions and 12 deletions

View File

@ -1,3 +1,12 @@
Sun Apr 26 07:57:21 1998 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
* rs6000-nat.c (vmap_ldinfo): Issue warning instead of error if
fstat on ldinfo_fd fails. Use objfile->obfd instead of vp->bfd
to check for reference to the same file.
* target.c (target_read_string): Handle string transfers at the
end of a memory section gracefully.
Fri Apr 24 17:18:56 1998 Geoffrey Noer <noer@cygnus.com>
* Makefile.in: enable EXEEXT setting

View File

@ -1,5 +1,5 @@
/* IBM RS/6000 native-dependent code for GDB, the GNU debugger.
Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995, 1996, 1997
Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995, 1996, 1997, 1998
Free Software Foundation, Inc.
This file is part of GDB.
@ -466,15 +466,24 @@ vmap_ldinfo (ldi)
retried = 0;
if (fstat (ldi->ldinfo_fd, &ii) < 0)
fatal ("cannot fstat(fd=%d) on %s", ldi->ldinfo_fd, name);
{
/* The kernel sets ld_info to -1, if the process is still using the
object, and the object is removed. Keep the symbol info for the
removed object and issue a warning. */
warning ("%s (fd=%d) has disappeared, keeping its symbols",
name, ldi->ldinfo_fd);
continue;
}
retry:
for (got_one = 0, vp = vmap; vp; vp = vp->nxt)
{
struct objfile *objfile;
/* First try to find a `vp', which is the same as in ldinfo.
If not the same, just continue and grep the next `vp'. If same,
relocate its tstart, tend, dstart, dend values. If no such `vp'
found, get out of this for loop, add this ldi entry as a new vmap
(add_vmap) and come back, fins its `vp' and so on... */
(add_vmap) and come back, find its `vp' and so on... */
/* The filenames are not always sufficient to match on. */
@ -482,15 +491,17 @@ vmap_ldinfo (ldi)
|| (memb[0] && !STREQ(memb, vp->member)))
continue;
/* See if we are referring to the same file. */
if (bfd_stat (vp->bfd, &vi) < 0)
/* An error here is innocuous, most likely meaning that
the file descriptor has become worthless.
FIXME: What does it mean for a file descriptor to become
"worthless"? What makes it happen? What error does it
produce (ENOENT? others?)? Should we at least provide
a warning? */
continue;
/* See if we are referring to the same file.
We have to check objfile->obfd, symfile.c:reread_symbols might
have updated the obfd after a change. */
objfile = vp->objfile == NULL ? symfile_objfile : vp->objfile;
if (objfile == NULL
|| objfile->obfd == NULL
|| bfd_stat (objfile->obfd, &vi) < 0)
{
warning ("Unable to stat %s, keeping its symbols", name);
continue;
}
if (ii.st_dev != vi.st_dev || ii.st_ino != vi.st_ino)
continue;