This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fetch lazy value before calling val_print


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7d45f3df96ca108f6d7d0c5e4279e22b820145fa

commit 7d45f3df96ca108f6d7d0c5e4279e22b820145fa
Author: Yao Qi <yao.qi@linaro.org>
Date:   Fri Mar 3 17:16:19 2017 +0000

    Fetch lazy value before calling val_print
    
    As reported in PR 21165,
    
    (gdb) info locals^M
    gv = /home/yao/SourceCode/gnu/gdb/git/gdb/value.c:372: internal-error: int value_bits_any_optimized_out(const value*, int, int): Assertion `!value->lazy' failed.^M
    A problem internal to GDB has been detected,^M
    further debugging may prove unreliable.^M
    Quit this debugging session? (y or n) FAIL: gdb.ada/info_locals_renaming.exp: info locals (GDB internal error)
    Resyncing due to internal error.
    
    This internal error is caused by e8b24d9 (Remove parameter valaddr from
    la_val_print).  Commit e8b24d9 removes some calls to
    value_contents_for_printing, but value_fetch_lazy is not called, so the
    internal error above is triggered.  This patch adds value_fetch_lazy
    call before val_print.
    
    gdb:
    
    2017-03-03  Yao Qi  <yao.qi@linaro.org>
    
    	PR gdb/21165
    	* ada-valprint.c (ada_val_print_ref): Call value_fetch_lazy if
    	value is lazy.
    	* valprint.c (common_val_print): Likewise.

Diff:
---
 gdb/ChangeLog      | 7 +++++++
 gdb/ada-valprint.c | 3 +++
 gdb/valprint.c     | 3 +++
 3 files changed, 13 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b060291..368b24c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2017-03-03  Yao Qi  <yao.qi@linaro.org>
+
+	PR gdb/21165
+	* ada-valprint.c (ada_val_print_ref): Call value_fetch_lazy if
+	value is lazy.
+	* valprint.c (common_val_print): Likewise.
+
 2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
 
 	* NEWS: Mention new set/show disassembler-options commands.
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index 804cf40..d2489a2 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -1058,6 +1058,9 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr,
      (Eg: an array whose bounds are not set yet).  */
   ada_ensure_varsize_limit (value_type (deref_val));
 
+  if (value_lazy (deref_val))
+    value_fetch_lazy (deref_val);
+
   val_print (value_type (deref_val),
 	     value_embedded_offset (deref_val),
 	     value_address (deref_val), stream, recurse + 1,
diff --git a/gdb/valprint.c b/gdb/valprint.c
index c3e17ff..529f9a5 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -1201,6 +1201,9 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse,
        get a fixed representation of our value.  */
     val = ada_to_fixed_value (val);
 
+  if (value_lazy (val))
+    value_fetch_lazy (val);
+
   val_print (value_type (val),
 	     value_embedded_offset (val), value_address (val),
 	     stream, recurse,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]