From 29976f3f7ebb0597b99d3d12cd4aed52921c8d64 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 16 Feb 2011 11:55:59 +0000 Subject: [PATCH] gdb/ * value.c (value_contents_copy_raw): Extend describing comment. Assert that the destination contents we're overwriting are wholly available. * value.h (value_contents_copy): Extend describing comment. --- gdb/ChangeLog | 8 ++++++++ gdb/value.c | 35 ++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f026bad267..23de49385d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2011-02-16 Pedro Alves + Jan Kratochvil + + * value.c (value_contents_copy_raw): Extend describing comment. + Assert that the destination contents we're overwriting are wholly + available. + * value.h (value_contents_copy): Extend describing comment. + 2011-02-16 Pedro Alves Jan Kratochvil diff --git a/gdb/value.c b/gdb/value.c index d2863db1aa..011b5e75b0 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -844,11 +844,15 @@ value_contents_all (struct value *value) return result; } -/* Copy LENGTH bytes of SRC value's contents starting at SRC_OFFSET, - into DST value's contents, starting at DST_OFFSET. If unavailable - contents are being copied from SRC, the corresponding DST contents - are marked unavailable accordingly. Neither DST nor SRC may be - lazy values. */ +/* Copy LENGTH bytes of SRC value's (all) contents + (value_contents_all) starting at SRC_OFFSET, into DST value's (all) + contents, starting at DST_OFFSET. If unavailable contents are + being copied from SRC, the corresponding DST contents are marked + unavailable accordingly. Neither DST nor SRC may be lazy + values. + + It is assumed the contents of DST in the [DST_OFFSET, + DST_OFFSET+LENGTH) range are wholly available. */ void value_contents_copy_raw (struct value *dst, int dst_offset, @@ -863,6 +867,11 @@ value_contents_copy_raw (struct value *dst, int dst_offset, mean we'd be copying garbage. */ gdb_assert (!dst->lazy && !src->lazy); + /* The overwritten DST range gets unavailability ORed in, not + replaced. Make sure to remember to implement replacing if it + turns out actually necessary. */ + gdb_assert (value_bytes_available (dst, dst_offset, length)); + /* Copy the data. */ memcpy (value_contents_all_raw (dst) + dst_offset, value_contents_all_raw (src) + src_offset, @@ -883,12 +892,16 @@ value_contents_copy_raw (struct value *dst, int dst_offset, } } -/* Copy LENGTH bytes of SRC value's contents starting at SRC_OFFSET - byte, into DST value's contents, starting at DST_OFFSET. If - unavailable contents are being copied from SRC, the corresponding - DST contents are marked unavailable accordingly. DST must not be - lazy. If SRC is lazy, it will be fetched now. If SRC is not valid - (is optimized out), an error is thrown. */ +/* Copy LENGTH bytes of SRC value's (all) contents + (value_contents_all) starting at SRC_OFFSET byte, into DST value's + (all) contents, starting at DST_OFFSET. If unavailable contents + are being copied from SRC, the corresponding DST contents are + marked unavailable accordingly. DST must not be lazy. If SRC is + lazy, it will be fetched now. If SRC is not valid (is optimized + out), an error is thrown. + + It is assumed the contents of DST in the [DST_OFFSET, + DST_OFFSET+LENGTH) range are wholly available. */ void value_contents_copy (struct value *dst, int dst_offset, -- 2.34.1