diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f284746a28..b4c1545801 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-08-02 Ulrich Weigand + + * inf-child.c (inf_child_fileio_pwrite): If pwrite fails, fall back + to attempting lseek/write. + (inf_child_fileio_pread): Likewise for pread. + 2012-08-02 Yao Qi * dwarf2loc.c (entry_values_debug): Add 'unsigned'. diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 6a1259b088..d446361fa7 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2012-08-02 Ulrich Weigand + + * hostio.c (handle_pread): If pread fails, fall back to attempting + lseek/read. + (handle_pwrite): Likewise for pwrite. + 2012-08-01 Ulrich Weigand * linux-arm-low.c (arm_linux_hw_point_initialize): Distinguish diff --git a/gdb/gdbserver/hostio.c b/gdb/gdbserver/hostio.c index 03aab587d9..72e334c414 100644 --- a/gdb/gdbserver/hostio.c +++ b/gdb/gdbserver/hostio.c @@ -328,10 +328,15 @@ handle_pread (char *own_buf, int *new_packet_len) #ifdef HAVE_PREAD ret = pread (fd, data, len, offset); #else - ret = lseek (fd, offset, SEEK_SET); - if (ret != -1) - ret = read (fd, data, len); + ret = -1; #endif + /* If we have no pread or it failed for this file, use lseek/read. */ + if (ret == -1) + { + ret = lseek (fd, offset, SEEK_SET); + if (ret != -1) + ret = read (fd, data, len); + } if (ret == -1) { @@ -376,10 +381,15 @@ handle_pwrite (char *own_buf, int packet_len) #ifdef HAVE_PWRITE ret = pwrite (fd, data, len, offset); #else - ret = lseek (fd, offset, SEEK_SET); - if (ret != -1) - ret = write (fd, data, len); + ret = -1; #endif + /* If we have no pwrite or it failed for this file, use lseek/write. */ + if (ret == -1) + { + ret = lseek (fd, offset, SEEK_SET); + if (ret != -1) + ret = write (fd, data, len); + } if (ret == -1) { diff --git a/gdb/inf-child.c b/gdb/inf-child.c index 54e65c5fba..ae2dd1e101 100644 --- a/gdb/inf-child.c +++ b/gdb/inf-child.c @@ -265,10 +265,15 @@ inf_child_fileio_pwrite (int fd, const gdb_byte *write_buf, int len, #ifdef HAVE_PWRITE ret = pwrite (fd, write_buf, len, (long) offset); #else - ret = lseek (fd, (long) offset, SEEK_SET); - if (ret != -1) - ret = write (fd, write_buf, len); + ret = -1; #endif + /* If we have no pwrite or it failed for this file, use lseek/write. */ + if (ret == -1) + { + ret = lseek (fd, (long) offset, SEEK_SET); + if (ret != -1) + ret = write (fd, write_buf, len); + } if (ret == -1) *target_errno = inf_child_errno_to_fileio_error (errno); @@ -288,10 +293,15 @@ inf_child_fileio_pread (int fd, gdb_byte *read_buf, int len, #ifdef HAVE_PREAD ret = pread (fd, read_buf, len, (long) offset); #else - ret = lseek (fd, (long) offset, SEEK_SET); - if (ret != -1) - ret = read (fd, read_buf, len); + ret = -1; #endif + /* If we have no pread or it failed for this file, use lseek/read. */ + if (ret == -1) + { + ret = lseek (fd, (long) offset, SEEK_SET); + if (ret != -1) + ret = read (fd, read_buf, len); + } if (ret == -1) *target_errno = inf_child_errno_to_fileio_error (errno);