aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2016-02-10 16:40:52 +0000
committerYao Qi <yao.qi@linaro.org>2016-02-10 16:40:52 +0000
commit9f6a71b4bfdad8fa2fe33e86f799fa0d362973dc (patch)
tree58ac23408f68e52e5571d8080cf43c756161c240
parent550dc4e26630c9b9a2bb95cd51250762fc89fe16 (diff)
downloadgdb-9f6a71b4bfdad8fa2fe33e86f799fa0d362973dc.zip
gdb-9f6a71b4bfdad8fa2fe33e86f799fa0d362973dc.tar.gz
gdb-9f6a71b4bfdad8fa2fe33e86f799fa0d362973dc.tar.bz2
Clear *VAL in regcache_raw_read_unsigned
We have function regcache_raw_read_unsigned defined in both GDB and GDBserver, so that it is used in common like this, ULONGEST value; status = regcache_raw_read_unsigned (regcache, regnum, &value); 'value' is correctly set in GDB side, but may not be correctly set in GDBserver, because &value is passed in regcache_raw_read_unsigned but collect_register may only set part of the whole variable. In my test, I see the top half of 'value' is garbage. This patch fixes this problem by clearing *VAL before calling collect_register. gdb/gdbserver: 2016-02-10 Yao Qi <yao.qi@linaro.org> * regcache.c (regcache_raw_read_unsigned): Clear *VAL.
-rw-r--r--gdb/gdbserver/ChangeLog4
-rw-r--r--gdb/gdbserver/regcache.c1
2 files changed, 5 insertions, 0 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 30df0bc..2c11f89 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,7 @@
+2016-02-10 Yao Qi <yao.qi@linaro.org>
+
+ * regcache.c (regcache_raw_read_unsigned): Clear *VAL.
+
2016-02-09 Simon Marchi <simon.marchi@ericsson.com>
* configure.ac: Use AC_CONFIG_FILES instead of passing arguments
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index 6a737ea..2af8e24 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -440,6 +440,7 @@ regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
"%d bytes."),
(int) sizeof (ULONGEST));
+ *val = 0;
collect_register (regcache, regnum, val);
return REG_VALID;