aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2010-03-14 19:34:47 +0000
committerPedro Alves <palves@redhat.com>2010-03-14 19:34:47 +0000
commit93ae6fdc3156825efcb9892b98e81ad4ed83e078 (patch)
tree5bb019d598f2d274131b5e7b068c0cf61b70b4ea /gdb
parentc3adc08c6f4fb5f67d49946d4c45e50b842b1d83 (diff)
downloadgdb-93ae6fdc3156825efcb9892b98e81ad4ed83e078.zip
gdb-93ae6fdc3156825efcb9892b98e81ad4ed83e078.tar.gz
gdb-93ae6fdc3156825efcb9892b98e81ad4ed83e078.tar.bz2
* linux-low.c (linux_write_memory): Bail out early if peeking
memory failed.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/linux-low.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index f2e39fd..b8c26fa 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,10 @@
2010-03-14 Pedro Alves <pedro@codesourcery.com>
+ * linux-low.c (linux_write_memory): Bail out early if peeking
+ memory failed.
+
+2010-03-14 Pedro Alves <pedro@codesourcery.com>
+
* linux-low.h (struct lwp_info): New fields
`stopped_by_watchpoint' and `stopped_data_address'.
* linux-low.c (linux_wait_for_lwp): Check for watchpoint triggers
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 31ee6e9..1b34484 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -2556,9 +2556,8 @@ linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
return 0;
}
-/* Copy LEN bytes of data from debugger memory at MYADDR
- to inferior's memory at MEMADDR.
- On failure (cannot write the inferior)
+/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
+ memory at MEMADDR. On failure (cannot write to the inferior)
returns the value of errno. */
static int
@@ -2590,13 +2589,17 @@ linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
/* Fill start and end extra bytes of buffer with existing memory data. */
+ errno = 0;
/* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
about coercing an 8 byte integer to a 4 byte pointer. */
buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
(PTRACE_ARG3_TYPE) (uintptr_t) addr, 0);
+ if (errno)
+ return errno;
if (count > 1)
{
+ errno = 0;
buffer[count - 1]
= ptrace (PTRACE_PEEKTEXT, pid,
/* Coerce to a uintptr_t first to avoid potential gcc warning
@@ -2604,9 +2607,11 @@ linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
(PTRACE_ARG3_TYPE) (uintptr_t) (addr + (count - 1)
* sizeof (PTRACE_XFER_TYPE)),
0);
+ if (errno)
+ return errno;
}
- /* Copy data to be written over corresponding part of buffer */
+ /* Copy data to be written over corresponding part of buffer. */
memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), myaddr, len);