aboutsummaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorThiago Jung Bauermann <bauerman@br.ibm.com>2009-12-30 17:33:35 +0000
committerThiago Jung Bauermann <bauerman@br.ibm.com>2009-12-30 17:33:35 +0000
commit218d2fc6506ec89b6ee03af89b4f23199f9fc8e9 (patch)
tree81f3c02f2cc8344f66870a074c9c5fdde8713ccb /gdb/valarith.c
parent236f1d4defb2070d3e43ce406604da7659860b38 (diff)
downloadgdb-218d2fc6506ec89b6ee03af89b4f23199f9fc8e9.zip
gdb-218d2fc6506ec89b6ee03af89b4f23199f9fc8e9.tar.gz
gdb-218d2fc6506ec89b6ee03af89b4f23199f9fc8e9.tar.bz2
gdb/
* valarith.c (value_equal_contents): New function. * value.h (value_equal_contents): Declare. * breakpoint.c (watchpoint_check): Use value_equal_contents instead of value_equal. gdb/testsuite/ * gdb.base/watchpoint.exp (test_watchpoint_in_big_blob): New function. (top level): Call test_watchpoint_in_big_blob. * gdb.base/watchpoint.c (buf): Change size to value too big for hardware watchpoints. (func3): Write to buf.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index a9c875d..2b5d116 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -1397,6 +1397,24 @@ value_equal (struct value *arg1, struct value *arg2)
}
}
+/* Compare values based on their raw contents. Useful for arrays since
+ value_equal coerces them to pointers, thus comparing just the address
+ of the array instead of its contents. */
+
+int
+value_equal_contents (struct value *arg1, struct value *arg2)
+{
+ struct type *type1, *type2;
+
+ type1 = check_typedef (value_type (arg1));
+ type2 = check_typedef (value_type (arg2));
+
+ return (TYPE_CODE (type1) == TYPE_CODE (type2)
+ && TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
+ && memcmp (value_contents (arg1), value_contents (arg2),
+ TYPE_LENGTH (type1)) == 0);
+}
+
/* Simulate the C operator < by returning 1
iff ARG1's contents are less than ARG2's. */