gdb/tui: Disassembler scrolling of very small programs
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 24 Jan 2020 12:46:56 +0000 (12:46 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 31 Jan 2020 00:41:06 +0000 (00:41 +0000)
commit42330a681af23a80d3e1f201d2a65886875e74bd
tree7c08bfb403ba2b4f930125483344aaa5227d675b
parent7a27a45bc66f38cbaee868092f0aaa55ef8d4564
gdb/tui: Disassembler scrolling of very small programs

In TUI mode, if the disassembly output for the program is less than
one screen long, then currently if the user scrolls down until on the
last assembly instruction is displayed and then tries to scroll up
using Page-Up, the display doesn't update - they are stuck viewing the
last line.

If the user tries to scroll up using the Up-Arrow, then the display
scrolls normally.

What is happening is on the Page-Up we ask GDB to scroll backward the
same number of lines as the height of the TUI ASM window.  The back
scanner, which looks for a good place to start disassembling, fails to
find a starting address which will provide the requested number of new
lines before we get back to the original starting address (which is
not surprising, our whole program contains less than a screen height
of instructions), as a result the back scanner gives up and returns
the original starting address.

When we scroll with Up-Arrow we only ask the back scanner to find 1
new instruction, which it manages to do, so this scroll works.

The solution here is, when we fail to find enough instructions, to
return the lowest address we did manage to find.  This will ensure we
jump to the lowest possible address in the disassembly output.

gdb/ChangeLog:

PR tui/9765
* tui/tui-disasm.c (tui_find_disassembly_address): If we don't
have enough lines to fill the screen, still return the lowest
address we found.

gdb/testsuite/ChangeLog:

PR tui/9765
* gdb.tui/tui-layout-asm-short-prog.S: New file.
* gdb.tui/tui-layout-asm-short-prog.exp: New file.

Change-Id: I6a6a7972c68a0559e9717fd8d82870b669a40af3
gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S [new file with mode: 0644]
gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp [new file with mode: 0644]
gdb/tui/tui-disasm.c