gdb/
authorYufeng Zhang <yufeng.zhang@arm.com>
Wed, 18 Dec 2013 16:47:33 +0000 (16:47 +0000)
committerYufeng Zhang <yufeng.zhang@arm.com>
Wed, 18 Dec 2013 16:47:33 +0000 (16:47 +0000)
* aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set
iov.iov_len with the real length in use.

gdb/gdbserver/

* linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set
iov.iov_len with the real length in use.

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

index 7d9308f..513c593 100644 (file)
@@ -1,3 +1,8 @@
+2013-12-18  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       * aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set
+       iov.iov_len with the real length in use.
+
 2013-12-18  Yao Qi  <yao@codesourcery.com>
 
        * target.h (target_xfer_partial_ftype): New typedef.
index 256725b..7d76833 100644 (file)
@@ -314,10 +314,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
 
   memset (&regs, 0, sizeof (regs));
   iov.iov_base = &regs;
-  iov.iov_len = sizeof (regs);
   count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
   addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
   ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
+  if (count == 0)
+    return;
+  iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1])
+                + sizeof (regs.dbg_regs [count - 1]));
 
   for (i = 0; i < count; i++)
     {
index c73840f..2847796 100644 (file)
@@ -1,3 +1,8 @@
+2013-12-18  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set
+       iov.iov_len with the real length in use.
+
 2013-12-13  Joel Brobecker  <brobecker@adacore.com>
 
        * Makefile.in (safe-ctype.o, lbasename.o): New rules.
index 93246b3..c2d271a 100644 (file)
@@ -602,10 +602,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
 
   memset (&regs, 0, sizeof (regs));
   iov.iov_base = &regs;
-  iov.iov_len = sizeof (regs);
   count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
   addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
   ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
+  if (count == 0)
+    return;
+  iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1])
+                + sizeof (regs.dbg_regs [count - 1]));
 
   for (i = 0; i < count; i++)
     {