diff options
author | Pedro Alves <palves@redhat.com> | 2011-02-16 10:13:53 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-02-16 10:13:53 +0000 |
commit | cd24cfaa4f49cd34f25ef0bd97f8e52fc885b0b1 (patch) | |
tree | 261236416ac55f3439886ffa245d4652f3092740 | |
parent | 60bbf3380ac7d9e1f24e3497b2cea852731a6654 (diff) | |
download | gdb-cd24cfaa4f49cd34f25ef0bd97f8e52fc885b0b1.zip gdb-cd24cfaa4f49cd34f25ef0bd97f8e52fc885b0b1.tar.gz gdb-cd24cfaa4f49cd34f25ef0bd97f8e52fc885b0b1.tar.bz2 |
* value.c (value_available_contents_eq): Remove redundant local
variables. Fix available contents comparision.
* value.h (value_available_contents_eq): Extend describing
comment.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/value.c | 21 | ||||
-rw-r--r-- | gdb/value.h | 21 |
3 files changed, 29 insertions, 21 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 41f7a86..f026bad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2011-02-16 Pedro Alves <pedro@codesourcery.com> + Jan Kratochvil <jan.kratochvil@redhat.com> + + * value.c (value_available_contents_eq): Remove redundant local + variables. Fix available contents comparision. + * value.h (value_available_contents_eq): Extend describing + comment. + 2011-02-16 Yao Qi <yao@codesourcery.com> * thread.c (info_threads_command): Add missing i18n markup and remove diff --git a/gdb/value.c b/gdb/value.c index 2e07a85..d2863db 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -533,21 +533,13 @@ value_available_contents_eq (const struct value *val1, int offset1, const struct value *val2, int offset2, int length) { - int org_len = length; - int org_offset1 = offset1; - int org_offset2 = offset2; int idx1 = 0, idx2 = 0; - int prev_avail; /* This routine is used by printing routines, where we should already have read the value. Note that we only know whether a value chunk is available if we've tried to read it. */ gdb_assert (!val1->lazy && !val2->lazy); - /* The offset from either ORG_OFFSET1 or ORG_OFFSET2 where the - available contents we haven't compared yet start. */ - prev_avail = 0; - while (length > 0) { range_s *r1, *r2; @@ -561,9 +553,9 @@ value_available_contents_eq (const struct value *val1, int offset1, /* The usual case is for both values to be completely available. */ if (idx1 == -1 && idx2 == -1) - return (memcmp (val1->contents + org_offset1 + prev_avail, - val2->contents + org_offset2 + prev_avail, - org_len - prev_avail) == 0); + return (memcmp (val1->contents + offset1, + val2->contents + offset2, + length) == 0); /* The contents only match equal if the available set matches as well. */ else if (idx1 == -1 || idx2 == -1) @@ -596,12 +588,11 @@ value_available_contents_eq (const struct value *val1, int offset1, return 0; /* Compare the _available_ contents. */ - if (memcmp (val1->contents + org_offset1 + prev_avail, - val2->contents + org_offset2 + prev_avail, - l2 - prev_avail) != 0) + if (memcmp (val1->contents + offset1, + val2->contents + offset2, + l1) != 0) return 0; - prev_avail += h1; length -= h1; offset1 += h1; offset2 += h1; diff --git a/gdb/value.h b/gdb/value.h index b8ce97b..e019e56 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -379,12 +379,21 @@ extern void mark_value_bytes_unavailable (struct value *value, int offset, int length); /* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with - LENGTH bytes of VAL2's contents starting at OFFSET2. Returns true - iff the set of available contents match. Unavailable contents - compare equal with unavailable contents, and different with any - available byte. For example, if 'x's represent an unavailable - byte, and 'V' and 'Z' represent different available bytes, in a - value with length 16: + LENGTH bytes of VAL2's contents starting at OFFSET2. + + Note that "contents" refers to the whole value's contents + (value_contents_all), without any embedded offset adjustment. For + example, to compare a complete object value with itself, including + its enclosing type chunk, you'd do: + + int len = TYPE_LENGTH (check_typedef (value_enclosing_type (val))); + value_available_contents (val, 0, val, 0, len); + + Returns true iff the set of available contents match. Unavailable + contents compare equal with unavailable contents, and different + with any available byte. For example, if 'x's represent an + unavailable byte, and 'V' and 'Z' represent different available + bytes, in a value with length 16: offset: 0 4 8 12 16 contents: xxxxVVVVxxxxVVZZ |