[2/3] Make "disassemble" always use TUI disassembly window
Commit Message
Currently the "disassemble" command will use the TUI disassembly
window if it is already showing. I think it makes more sense to
unconditionally switch to it. This patch implements this.
gdb/ChangeLog
2019-12-27 Tom Tromey <tom@tromey.com>
* cli/cli-cmds.c (print_disassembly): Just check tui_active.
gdb/testsuite/ChangeLog
2019-12-27 Tom Tromey <tom@tromey.com>
* gdb.tui/disasm.exp: New file.
Change-Id: I3bf3a93f618b2138c49c28156cf6c6f5ca0fa762
---
gdb/ChangeLog | 4 ++++
gdb/cli/cli-cmds.c | 2 +-
gdb/testsuite/ChangeLog | 4 ++++
gdb/testsuite/gdb.tui/disasm.exp | 36 ++++++++++++++++++++++++++++++++
4 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 gdb/testsuite/gdb.tui/disasm.exp
Comments
>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
Tom> Currently the "disassemble" command will use the TUI disassembly
Tom> window if it is already showing. I think it makes more sense to
Tom> unconditionally switch to it. This patch implements this.
I wonder if this should be limited to the case where the options to
disassemble are compatible with what the TUI does.
Tom
* Tom Tromey <tom@tromey.com> [2020-01-19 13:07:30 -0700]:
> >>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
>
> Tom> Currently the "disassemble" command will use the TUI disassembly
> Tom> window if it is already showing. I think it makes more sense to
> Tom> unconditionally switch to it. This patch implements this.
>
> I wonder if this should be limited to the case where the options to
> disassemble are compatible with what the TUI does.
I've wondered for a while if we should have something like:
set tui disassemble-flags ...
where a user can set the flags used by the disassembler. My main
interest initially was /r, but it might be nice if /m and /s could be
supported too, though I'm not quite sure how that might look or work.
Anyway, if we had something like this then using a disassemble command
could effectively be an alternative path to set the flags. So
something like:
(gdb) show tui disassemble-flags
TUI will disassemble using no flags.
(gdb) disassemble /r 0x.....
# TUI ASM window updates, and includes opcodes.
(gdb) show tui disassemble-flags
TUI will disassemble using flags /r.
# User doesn't want the opcodes any more, no problem.
(gdb) set tui disassemble-flags # <-- passing nothing here to
# clear the flags
# TUI updates, but not longer shows opcodes.
Just a thought.
Thanks,
Andrew
Tom> I wonder if this should be limited to the case where the options to
Tom> disassemble are compatible with what the TUI does.
Andrew> I've wondered for a while if we should have something like:
Andrew> set tui disassemble-flags ...
Andrew> where a user can set the flags used by the disassembler. My main
Andrew> interest initially was /r, but it might be nice if /m and /s could be
Andrew> supported too, though I'm not quite sure how that might look or work.
I've considered this too (and also adding support for the new binutils
mode that graphically shows jump targets).
However, I wasn't sure how these flags would interact with the current
TUI model of disassembly, where it shows a window on the entire memory
space, and not just a single function.
Tom
@@ -1338,7 +1338,7 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
gdb_disassembly_flags flags)
{
#if defined(TUI)
- if (tui_is_window_visible (DISASSEM_WIN))
+ if (tui_active)
tui_show_assembly (gdbarch, low);
else
#endif
new file mode 100644
@@ -0,0 +1,36 @@
+# Copyright 2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test that "disassemble" shows the disassembly window.
+
+load_lib "tuiterm.exp"
+
+standard_testfile tui-layout.c
+
+if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
+ return -1
+}
+
+Term::clean_restart 24 80 $testfile
+if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+}
+
+set text [Term::get_all_lines]
+gdb_assert {![string match "No Source Available" $text]} \
+ "initial source listing"
+
+Term::command "disassemble main"
+Term::check_contents "asm window is showing" "$hex <main>"