aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2005-02-20 01:19:24 +0000
committerMark Kettenis <kettenis@gnu.org>2005-02-20 01:19:24 +0000
commita6c442d88114a76fe77ff3e3f6aa62993703759d (patch)
tree5ab13b27752d31560191470bb6ae89fad5e2349c /gdb/value.c
parent0ac0f72ae7b02217b8525a62c776b5aa190e185f (diff)
downloadgdb-a6c442d88114a76fe77ff3e3f6aa62993703759d.zip
gdb-a6c442d88114a76fe77ff3e3f6aa62993703759d.tar.gz
gdb-a6c442d88114a76fe77ff3e3f6aa62993703759d.tar.bz2
* value.h (value_contents_equal): New prototype.
* value.c (value_contents_equal): New function. * varobj.c: Include "exceptions.h" and "gdb_assert.h". Don't include <math.h>. (varobj_set_value): Initialize error to zero. (varobj_update): Rename error2 to error and initialize it to zero. Slightly change the wording of some comments. (my_value_equal): Reimplement using TRY_CATCH and value_contents_equal.
Diffstat (limited to 'gdb/value.c')
-rw-r--r--gdb/value.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/value.c b/gdb/value.c
index eb0cc2c..1ab5f79 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -358,6 +358,26 @@ value_contents_writeable (struct value *value)
return value->aligner.contents;
}
+/* Return non-zero if VAL1 and VAL2 have the same contents. Note that
+ this function is different from value_equal; in C the operator ==
+ can return 0 even if the two values being compared are equal. */
+
+int
+value_contents_equal (struct value *val1, struct value *val2)
+{
+ struct type *type1;
+ struct type *type2;
+ int len;
+
+ type1 = check_typedef (value_type (val1));
+ type2 = check_typedef (value_type (val2));
+ len = TYPE_LENGTH (type1);
+ if (len != TYPE_LENGTH (type2))
+ return 0;
+
+ return (memcmp (value_contents (val1), value_contents (val2), len) == 0);
+}
+
int
value_optimized_out (struct value *value)
{