diff options
-rw-r--r-- | gdb/testsuite/gdb.base/limited-length.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/limited-length.exp | 10 | ||||
-rw-r--r-- | gdb/value.c | 9 |
3 files changed, 17 insertions, 4 deletions
diff --git a/gdb/testsuite/gdb.base/limited-length.c b/gdb/testsuite/gdb.base/limited-length.c index 627c34d..c8ece16 100644 --- a/gdb/testsuite/gdb.base/limited-length.c +++ b/gdb/testsuite/gdb.base/limited-length.c @@ -41,6 +41,8 @@ int large_2d_array[][10] = { {90, 91, 92, 93, 94, 95, 96, 97, 98, 99} }; +char large_empty_string[100000] = ""; + int main () { diff --git a/gdb/testsuite/gdb.base/limited-length.exp b/gdb/testsuite/gdb.base/limited-length.exp index a24adcb..2d160e1 100644 --- a/gdb/testsuite/gdb.base/limited-length.exp +++ b/gdb/testsuite/gdb.base/limited-length.exp @@ -240,3 +240,13 @@ with_test_prefix "with unlimited print elements" { "value is not available" \ "output expression referring unavailable element from history" } + +gdb_test_no_output "set max-value-size 10000" +gdb_test_no_output "set print elements 200" + +gdb_test "print large_empty_string" \ + " = \\\{0 '\\\\000' <repeats 10000 times>, <unavailable> <repeats 90000 times>\\\}" \ + "print large empty string which is not fully available" +gdb_test -nonl "output large_empty_string" \ + "\\\{0 '\\\\000' <repeats 10000 times>, <unavailable> <repeats 90000 times>\\\}" \ + "output large empty string which is not fully available" diff --git a/gdb/value.c b/gdb/value.c index 09fb19b..aaa9ed2 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -1716,10 +1716,6 @@ value::record_latest () fetch_lazy (); } - ULONGEST limit = m_limited_length; - if (limit != 0) - mark_bytes_unavailable (limit, m_enclosing_type->length () - limit); - /* Mark the value as recorded in the history for the availability check. */ m_in_history = true; @@ -3990,6 +3986,11 @@ value::fetch_lazy_memory () if (len > 0) read_value_memory (this, 0, stack (), addr, contents_all_raw ().data (), len); + + /* If only part of an array was loaded, mark the rest as unavailable. */ + if (m_limited_length > 0) + mark_bytes_unavailable (m_limited_length, + m_enclosing_type->length () - m_limited_length); } /* See value.h. */ |