From 92b09522dc5a93ba4bda3c1c0b3c58264e357c8a Mon Sep 17 00:00:00 2001 From: Sanimir Agovic Date: Tue, 26 Nov 2013 14:35:43 +0000 Subject: [PATCH] vla: resolve dynamic bounds if value contents is a constant byte-sequence A variable location might be a constant value and therefore no inferior memory access is needed to read the content. In this case try to resolve the type bounds. * findvar.c (default_read_var_value): Resolve dynamic bounds if location points to a constant blob. --- gdb/ChangeLog | 5 +++++ gdb/findvar.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4e32b712c9..137dba4ee0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-04-11 Sanimir Agovic + + * findvar.c (default_read_var_value): Resolve dynamic bounds if location + points to a constant blob. + 2014-04-11 Sanimir Agovic * dwarf2read.c (read_subrange_type): Convert DW_AT_count to a dynamic diff --git a/gdb/findvar.c b/gdb/findvar.c index a2a7bb7d6d..998a799e3b 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -437,7 +437,12 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) switch (SYMBOL_CLASS (var)) { case LOC_CONST: - /* Put the constant back in target format. */ + if (is_dynamic_type (type)) + { + /* Value is a constant byte-sequence and needs no memory access. */ + type = resolve_dynamic_type (type, /* Unused address. */ 0); + } + /* Put the constant back in target format. */ v = allocate_value (type); store_signed_integer (value_contents_raw (v), TYPE_LENGTH (type), gdbarch_byte_order (get_type_arch (type)), @@ -464,6 +469,11 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) return v; case LOC_CONST_BYTES: + if (is_dynamic_type (type)) + { + /* Value is a constant byte-sequence and needs no memory access. */ + type = resolve_dynamic_type (type, /* Unused address. */ 0); + } v = allocate_value (type); memcpy (value_contents_raw (v), SYMBOL_VALUE_BYTES (var), TYPE_LENGTH (type)); -- 2.34.1