* linux-low.c (fetch_register): Ensure buffer size is a multiple
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 16 May 2005 10:24:37 +0000 (10:24 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Mon, 16 May 2005 10:24:37 +0000 (10:24 +0000)
of sizeof (PTRACE_XFER_TYPE).
(usr_store_inferior_registers): Likewise.  Zero out excess bytes.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c

index 311d3ec..90aa0d2 100644 (file)
@@ -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, 
index c7dab4c..3795cb6 100644 (file)
@@ -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,