This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Wrong data type in function unpack_varlen_hex()
- From: "zhigang gong" <zhigang dot gong at gmail dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 16 Jun 2006 20:58:33 +0800
- Subject: Wrong data type in function unpack_varlen_hex()
Hi,
I am working on an mips4k platform. When I added hw watchpoint
support for my target board and debug it with gdb. The write
watchpoint works fine, but rwatch and awatch doesn't work. After trace
the source code of the gdb, I found there is a bug in
unpack_varlen_hex. The local variable retval is a signed integer. For
my case, the ULONGEST is a 64bit integer type. So when the
watchpoint's address is 0x8XXXXXXX, the "retval" will be 0x8XXXXXXX,
and pass its value to variable "result", the "result"'s value will be
sign extended to 0xFFFFFFFF8XXXXXXX. Then when i set a rwatch point,
the address matching will fail when the read watchpoint ocurred.
The patch is as belows. And I test it,
--- src/gdb/remote.c 2006-05-06 04:08:45.000000000 +0800
+++ insight-6550-060529/gdb/remote.c 2006-06-15 19:26:46.000000000 +0800
@@ -1125,7 +1125,7 @@
ULONGEST *result)
{
int nibble;
- int retval = 0;
+ ULONGEST retval = 0;
while (ishex (*buff, &nibble))
{
--- src/gdb/ChangeLog 2006-05-28 13:56:50.000000000 +0800
+++ insight-6550-060529/gdb/ChangeLog 2006-06-16 09:19: 55.000000000 +0800
@@ -1,3 +1,8 @@
+2006-06-16 Zhigang Gong < zhigang.gong@gmail.com>
+ * remote.c(unpack_varlen_hex):
+ Change the type of local variable "retval" to ULONGEST, so it
will avoid
+ incorrect sign extending.
+
2006-05-28 Alexandre Oliva < aoliva@redhat.com>
Best Regards,
Zhigang Gong