[2/4] Show new created display

Message ID 1398665538-16580-3-git-send-email-yao@codesourcery.com
State Committed
Headers

Commit Message

Yao Qi April 28, 2014, 6:12 a.m. UTC
  When I run refactored unavailable.exp, I find
command display behaves a little different on live inferior and on
examining traceframes.  In live inferior, when command "display argc"
is typed, the value of "argc" is shown.

(gdb) display argc
1: argc = 1 '\001'

however, on tfile target, when command "display argc" is typed, the
value of "argc" is not shown.

(gdb) tfind
Found trace frame 0, tracepoint 1
    at ../../../../git/gdb/testsuite/gdb.trace/unavailable.cc:198
198       i =  (int) argc + argi + argf + argd + argstruct.memberi + argarray[1];
(gdb) display argc

I also notice that on "core" target, the value of "argc" isn't shown
either.  This difference is caused by the code below in printcmd.c:display_command,

      if (from_tty && target_has_execution)
        do_one_display (new);

Looks the value of each display is shown if the target has execution.
Source code archaeology doesn't tell much about this requirement.
However, if we type command "display" then on "core" or "tfile"
target, the value of "argc" is still displayed,

for "core" target,
(gdb) display argc
(gdb) display
1: argc = 1 '\001'

for "tfile" target,
(gdb) display argc
(gdb) display
1: argc = <unavailable>

I feel that it is not necessary to have such "target has execution"
requirement to show the value of new created display.  Auto-display is
a feature to show the value of expression frequently, has nothing to
do with whether target has execution or not.  On the other hand, GDB
has the requirement for new created display, but command "display" can
still show them, this is an inconsistency, which should be fixed.

This patch is to remove the checking to target_has_execution from the
condition.

gdb:

2014-04-26  Yao Qi  <yao@codesourcery.com>

	* printcmd.c (display_command): Remove the check to
	target_has_execution.
---
 gdb/printcmd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Pedro Alves April 30, 2014, 4:25 p.m. UTC | #1
On 04/28/2014 07:12 AM, Yao Qi wrote:
> When I run refactored unavailable.exp, I find
> command display behaves a little different on live inferior and on
> examining traceframes.  In live inferior, when command "display argc"
> is typed, the value of "argc" is shown.
> 
> (gdb) display argc
> 1: argc = 1 '\001'
> 
> however, on tfile target, when command "display argc" is typed, the
> value of "argc" is not shown.
> 
> (gdb) tfind
> Found trace frame 0, tracepoint 1
>     at ../../../../git/gdb/testsuite/gdb.trace/unavailable.cc:198
> 198       i =  (int) argc + argi + argf + argd + argstruct.memberi + argarray[1];
> (gdb) display argc
> 
> I also notice that on "core" target, the value of "argc" isn't shown
> either.  This difference is caused by the code below in printcmd.c:display_command,
> 
>       if (from_tty && target_has_execution)
>         do_one_display (new);
> 
> Looks the value of each display is shown if the target has execution.
> Source code archaeology doesn't tell much about this requirement.
> However, if we type command "display" then on "core" or "tfile"
> target, the value of "argc" is still displayed,

Maybe ancient, ancient code that tried to prevent "display $pc"
from erroring out?

Judging from doing that when there's execution, and then
killing the inferior, and getting:

 (gdb) display
 1: $pc = <error: No registers.>

Looks like we handle errors fine here, so I see no issue.

I assume that if there's no target pushed yet, we'll now
see that error -- it's fine with me.

It would be good if display.exp itself was augmented to explicitly
test this.  Say, do "display global" (where global is a variable that
is initialized to something not zero), and also "display $pc" before
there's execution.

> This patch is to remove the checking to target_has_execution from the
> condition.

OK.
  

Patch

diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 87b1448..228d4ad 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1547,7 +1547,7 @@  display_command (char *arg, int from_tty)
       new->enabled_p = 1;
       display_chain = new;
 
-      if (from_tty && target_has_execution)
+      if (from_tty)
 	do_one_display (new);
 
       dont_repeat ();