aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.disasm
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2023-10-20 14:23:40 +0100
committerAndrew Burgess <aburgess@redhat.com>2023-11-08 11:18:40 +0000
commitb20885b0a439ff8bd0e4fd00c666589ffca10fa2 (patch)
tree68038c10a641c6fad03852521c5122e16c428222 /gdb/testsuite/gdb.disasm
parent7f51f2cd5866d485898fd4b60827fa3643252b71 (diff)
downloadgdb-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.exp4
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\\."