aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2005-05-16 10:24:37 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2005-05-16 10:24:37 +0000
commit48d93c7500d9f0cee303e547f773ded6e325c6f6 (patch)
tree26913240a8107a30a27b281f1fec8c923c23c786 /gdb/gdbserver
parent1b0ba102266620a8d82e08315e921ab4d7f9972d (diff)
downloadgdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.zip
gdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.tar.gz
gdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.tar.bz2
* linux-low.c (fetch_register): Ensure buffer size is a multiple
of sizeof (PTRACE_XFER_TYPE). (usr_store_inferior_registers): Likewise. Zero out excess bytes.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r--gdb/gdbserver/ChangeLog6
-rw-r--r--gdb/gdbserver/linux-low.c17
2 files changed, 17 insertions, 6 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 311d3ec..90aa0d2 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-16 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * linux-low.c (fetch_register): Ensure buffer size is a multiple
+ of sizeof (PTRACE_XFER_TYPE).
+ (usr_store_inferior_registers): Likewise. Zero out excess bytes.
+
2005-05-12 Orjan Friberg <orjanf@axis.com>
* target.h (struct target_ops): Add insert_watchpoint,
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index c7dab4c..3795cb6 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -1095,7 +1095,7 @@ static void
fetch_register (int regno)
{
CORE_ADDR regaddr;
- register int i;
+ int i, size;
char *buf;
if (regno >= the_low_target.num_regs)
@@ -1106,8 +1106,10 @@ fetch_register (int regno)
regaddr = register_addr (regno);
if (regaddr == -1)
return;
- buf = alloca (register_size (regno));
- for (i = 0; i < register_size (regno); i += sizeof (PTRACE_XFER_TYPE))
+ size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
+ & - sizeof (PTRACE_XFER_TYPE);
+ buf = alloca (size);
+ for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
{
errno = 0;
*(PTRACE_XFER_TYPE *) (buf + i) =
@@ -1147,7 +1149,7 @@ static void
usr_store_inferior_registers (int regno)
{
CORE_ADDR regaddr;
- int i;
+ int i, size;
char *buf;
if (regno >= 0)
@@ -1162,9 +1164,12 @@ usr_store_inferior_registers (int regno)
if (regaddr == -1)
return;
errno = 0;
- buf = alloca (register_size (regno));
+ size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
+ & - sizeof (PTRACE_XFER_TYPE);
+ buf = alloca (size);
+ memset (buf, 0, size);
collect_register (regno, buf);
- for (i = 0; i < register_size (regno); i += sizeof (PTRACE_XFER_TYPE))
+ for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
{
errno = 0;
ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,