[binutils-gdb] Introduce common_val_print_checked

Tom Tromey tromey@sourceware.org
Sat Mar 14 00:04:33 GMT 2020


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

commit c2a44efee1cbe5321a850c53f34e9c205a1d6ca0
Author: Tom Tromey <tom@tromey.com>
Date:   Fri Mar 13 17:39:52 2020 -0600

    Introduce common_val_print_checked
    
    A (much) later patch will remove the call to value_check_printable
    from common_val_print.  This will needed to preserve some details of
    how optimized-out structures are printed.
    
    However, doing this will also break dw2-op-out-param.exp.  Making the
    change causes "bt" to print:
    
    However, the test wants to see:
    
    ... operand2=<optimized out>
    
    That is, a wholly-optimized out structure should not print its fields.
    
    So, this patch introduces a new common_val_print_checked, which calls
    value_check_printable first, and then arranges to use it in the one
    spot that affects the test suite.
    
    I was not completely sure if it would be preferable to change the
    test.  However, I reasoned that, assuming this output was intentional
    in the first place, in a backtrace space is at a premium and so this
    is a reasonable approach.  In other spots calling common_val_print,
    this behavior is probably unintended, or at least a "don't care".
    
    gdb/ChangeLog
    2020-03-13  Tom Tromey  <tom@tromey.com>
    
            * valprint.h (common_val_print_checked): Declare.
            * valprint.c (common_val_print_checked): New function.
            * stack.c (print_frame_arg): Use common_val_print_checked.

Diff:
---
 gdb/ChangeLog  |  6 ++++++
 gdb/stack.c    |  2 +-
 gdb/valprint.c | 13 +++++++++++++
 gdb/valprint.h |  8 ++++++++
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2a2b29887f9..c761221dd9f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.h (common_val_print_checked): Declare.
+	* valprint.c (common_val_print_checked): New function.
+	* stack.c (print_frame_arg): Use common_val_print_checked.
+
 2020-03-13  Tom Tromey  <tom@tromey.com>
 
 	* valprint.c (do_val_print): New function, from val_print.
diff --git a/gdb/stack.c b/gdb/stack.c
index 024ead0b611..af35d796d70 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -486,7 +486,7 @@ print_frame_arg (const frame_print_options &fp_opts,
 	      vp_opts.summary
 		= fp_opts.print_frame_arguments == print_frame_arguments_scalars;
 
-	      common_val_print (arg->val, &stb, 2, &vp_opts, language);
+	      common_val_print_checked (arg->val, &stb, 2, &vp_opts, language);
 	    }
 	  catch (const gdb_exception_error &except)
 	    {
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 66da0e607ba..aab43d4b811 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -1236,6 +1236,19 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse,
 		val, options, language);
 }
 
+/* See valprint.h.  */
+
+void
+common_val_print_checked (struct value *val, struct ui_file *stream,
+			  int recurse,
+			  const struct value_print_options *options,
+			  const struct language_defn *language)
+{
+  if (!value_check_printable (val, stream, options))
+    return;
+  common_val_print (val, stream, recurse, options, language);
+}
+
 /* Print on stream STREAM the value VAL according to OPTIONS.  The value
    is printed using the current_language syntax.  */
 
diff --git a/gdb/valprint.h b/gdb/valprint.h
index e242134d856..13b2b2d8c8d 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -282,4 +282,12 @@ extern bool val_print_check_max_depth (struct ui_file *stream, int recurse,
 				       const struct value_print_options *opts,
 				       const struct language_defn *language);
 
+/* Like common_val_print, but call value_check_printable first.  */
+
+extern void common_val_print_checked
+  (struct value *val,
+   struct ui_file *stream, int recurse,
+   const struct value_print_options *options,
+   const struct language_defn *language);
+
 #endif


More information about the Gdb-cvs mailing list