Reproducible: echo 'int main() {}' | gcc -x c - echo -e 'define hook-stop\ninterpreter mi "-stack-list-locals 2"\nend\nb main\nrun' > x gdb -x x ./a.out
This crash actually happens when using "interpreter mi" inside a define. It is not only with hook-stop. Below is an analysis from Paul P that comes from http://sourceware.org/ml/gdb/2009-07/msg00152.html -----Original Message----- From: Paul Pluzhnikov [mailto:ppluzhnikov@google.com] Sent: Tuesday, July 21, 2009 1:44 AM The problem is that in cli/cli-script.c, execute_user_command(), instream is set to NULL: 312 /* Set the instream to 0, indicating execution of a 313 user-defined function. */ 314 make_cleanup (do_restore_instream_cleanup, instream); 315 instream = (FILE *) 0; and later used for fileno(): #0 0x00007ffff6ea19f0 in fileno_unlocked () from /lib/libc.so.6 #1 0x000000000051d2ff in gdb_setup_readline () at ../../src/gdb/event-top.c:1086 #2 0x00000000004aaa09 in mi_interpreter_resume (data=0x0) at ../../src/gdb/mi/mi-interp.c:107 #3 0x00000000005180d7 in interp_set (interp=0xa7a850, top_level=0) at ../../src/gdb/interps.c:197 #4 0x000000000051834e in interpreter_exec_cmd (args=<value optimized out>, from_tty=<value optimized out>) at ../../src/gdb/interps.c:398 #5 0x0000000000459984 in execute_command (p=0xb295fd "t", from_tty=0) at ../../src/gdb/top.c:442 #6 0x00000000004a2c04 in execute_control_command (cmd=0xb23c40) at ../../src/gdb/cli/cli-script.c:400 #7 0x00000000004a31ad in execute_user_command (c=0xb3fd60, args=0x0) at ../../src/gdb/cli/cli-script.c:324
Fixing the crash is easy enough but then this trips over bug #21388. Also the test hits the double-prompt issue pointed out in https://sourceware.org/bugzilla/show_bug.cgi?id=23544#c1
I have a patch.
The master branch has been updated by Tom Tromey <tromey@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=058dc2c95935d54caa8891613a1080d57665fc43 commit 058dc2c95935d54caa8891613a1080d57665fc43 Author: Tom Tromey <tromey@adacore.com> Date: Fri Aug 12 13:15:01 2022 -0600 Fix interpreter-exec crash PR mi/10347 points out that using interpreter-exec inside of a "define" command will crash gdb. The bug here is that gdb_setup_readline doesn't check for the case where instream==nullptr. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10347
Fixed.