diff options
author | Andrew Burgess <aburgess@redhat.com> | 2023-10-20 14:23:40 +0100 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2023-11-08 11:18:40 +0000 |
commit | b20885b0a439ff8bd0e4fd00c666589ffca10fa2 (patch) | |
tree | 68038c10a641c6fad03852521c5122e16c428222 /gdb/testsuite/gdb.disasm | |
parent | 7f51f2cd5866d485898fd4b60827fa3643252b71 (diff) | |
download | gdb-b20885b0a439ff8bd0e4fd00c666589ffca10fa2.zip gdb-b20885b0a439ff8bd0e4fd00c666589ffca10fa2.tar.gz gdb-b20885b0a439ff8bd0e4fd00c666589ffca10fa2.tar.bz2 |
gdb: add a custom command completer for disassemble command
Add a new command completer function for the disassemble command.
There are two things that this completion function changes. First,
after the previous commit, the new function calls skip_over_slash_fmt,
which means that hitting tab after entering a /OPT flag now inserts a
space ready to start typing the address to disassemble at:
(gdb) disassemble /r<TAB>
(gdb) disassemble /r <CURSOR>
But also, we now get symbol completion after a /OPT option set,
previously this would do nothing:
(gdb) disassemble /r mai<TAB>
But now:
(gdb) disassemble /r mai<TAB>
(gdb) disassemble /r main <CURSOR>
Which was my main motivation for working on this commit.
However, I have made a second change in the completion function.
Currently, the disassemble command calls the generic
location_completer function, however, the disassemble docs say:
Note that the 'disassemble' command's address arguments are specified
using expressions in your programming language (*note Expressions:
Expressions.), not location specs (*note Location Specifications::).
So, for example, if you want to disassemble function 'bar' in file
'foo.c', you must type 'disassemble 'foo.c'::bar' and not 'disassemble
foo.c:bar'.
And indeed, if I try:
(gdb) disassemble hello.c:main
No symbol "hello" in current context.
(gdb) disassemble hello.c::main
No symbol "hello" in current context.
(gdb) disassemble 'hello.c'::main
Dump of assembler code for function main:
... snip ...
But, if I do this:
(gdb) disassemble hell<TAB>
(gdb) disassemble hello.c:<CURSOR>
which is a consequence of using the location_completer function. So
in this commit, after calling skip_over_slash_fmt, I forward the bulk
of the disassemble command completion to expression_completer. Now
when I try this:
(gdb) disassemble hell<TAB>
gives nothing, which I think is an improvement. There is one slight
disappointment, if I do:
(gdb) disassemble 'hell<TAB>
I still get nothing. I had hoped that this would expand to:
'hello.c':: but I guess this is a limitation of the current
expression_completer implementation, however, I don't think this is a
regression, the previous expansion was just wrong. Fixing
expression_completer is out of scope for this commit.
I've added some disassembler command completion tests, and also a test
that disassembling using 'FILE'::FUNC syntax works, as I don't think
that is tested anywhere.
Diffstat (limited to 'gdb/testsuite/gdb.disasm')
-rw-r--r-- | gdb/testsuite/gdb.disasm/basics.exp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.disasm/basics.exp b/gdb/testsuite/gdb.disasm/basics.exp index 78df18d..3dfc16e 100644 --- a/gdb/testsuite/gdb.disasm/basics.exp +++ b/gdb/testsuite/gdb.disasm/basics.exp @@ -37,3 +37,7 @@ gdb_test "disassemble /rb main" \ "Cannot specify both /r and /b\\." gdb_test "disassemble /br main" \ "Cannot specify both /r and /b\\." + +# Check disassembly using 'FILE'::FUNC syntax. +gdb_test "disassemble '$srcfile'::main" \ + "Dump of assembler code for function main:.*End of assembler dump\\." |