mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 10:35:12 +08:00
FIX EOF detection in PT_IO-based to_xfer_partial implementation.
At least on OpenBSD PT_IO/PIOD_READ_AUXV can return sucessfully without transferring any bytes. Arguably a kernel bug, but interpreting this as EOF seems sensible. gdb/ChangeLog: * inf-ptrace.c (inf_ptrace_xfer_partial): Return TARGET_XFER_EOF if a PT_IO ptrace request returns sucessfully but indicates that 0 bytes were transferred.
This commit is contained in:
parent
706d088346
commit
493443a47f
@ -1,3 +1,9 @@
|
||||
2014-02-12 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* inf-ptrace.c (inf_ptrace_xfer_partial): Return TARGET_XFER_EOF
|
||||
if a PT_IO ptrace request returns sucessfully but indicates that 0
|
||||
bytes were transferred.
|
||||
|
||||
2014-02-12 Pedro Alves <palves@redhat.com>
|
||||
Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
|
@ -489,9 +489,9 @@ inf_ptrace_xfer_partial (struct target_ops *ops, enum target_object object,
|
||||
errno = 0;
|
||||
if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
|
||||
{
|
||||
*xfered_len = piod.piod_len;
|
||||
/* Return the actual number of bytes read or written. */
|
||||
return TARGET_XFER_OK;
|
||||
*xfered_len = piod.piod_len;
|
||||
return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
|
||||
}
|
||||
/* If the PT_IO request is somehow not supported, fallback on
|
||||
using PT_WRITE_D/PT_READ_D. Otherwise we will return zero
|
||||
@ -595,9 +595,9 @@ inf_ptrace_xfer_partial (struct target_ops *ops, enum target_object object,
|
||||
errno = 0;
|
||||
if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
|
||||
{
|
||||
*xfered_len = piod.piod_len;
|
||||
/* Return the actual number of bytes read or written. */
|
||||
return TARGET_XFER_OK;
|
||||
*xfered_len = piod.piod_len;
|
||||
return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user