aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2020-01-11 01:37:26 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-01-24 00:10:33 +0000
commit2f267673f0fdee9287e6d404ecd4f2d29da0d2f2 (patch)
treec3bca4935c90db98be3db0b447883eaae28dd838
parenta05d007dfee18aafc8f2c36ef7594e6554f2e1db (diff)
downloadgdb-2f267673f0fdee9287e6d404ecd4f2d29da0d2f2.zip
gdb-2f267673f0fdee9287e6d404ecd4f2d29da0d2f2.tar.gz
gdb-2f267673f0fdee9287e6d404ecd4f2d29da0d2f2.tar.bz2
gdb/tui: Prevent exceptions from trying to cross readline
This is triggered by simply scrolling off the end of the dissasembly window. This commit doesn't fix the actual exception that is being thrown, which will still need to be fixed, but makes sure that we don't ever throw an exception out to readline. gdb/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> PR tui/9765 * tui/tui-io.c (tui_getc): Rename to ... (tui_getc_1): ... this. (tui_get): New, reimplent as try/catch wrapper around tui_getc_1. Change-Id: I2e32a401ab34404b2132ec82a3e1c17b9b723e41
-rw-r--r--gdb/tui/tui-io.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index 9cb4110..d9f2333 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -950,10 +950,12 @@ tui_dispatch_ctrl_char (unsigned int ch)
return 0;
}
-/* Get a character from the command window. This is called from the
- readline package. */
+/* Main worker for tui_getc. Get a character from the command window.
+ This is called from the readline package, but wrapped in a
+ try/catch by tui_getc. */
+
static int
-tui_getc (FILE *fp)
+tui_getc_1 (FILE *fp)
{
int ch;
WINDOW *w;
@@ -1036,6 +1038,29 @@ tui_getc (FILE *fp)
return ch;
}
+/* Get a character from the command window. This is called from the
+ readline package. */
+
+static int
+tui_getc (FILE *fp)
+{
+ try
+ {
+ return tui_getc_1 (fp);
+ }
+ catch (const gdb_exception &ex)
+ {
+ /* Just in case, don't ever let an exception escape to readline.
+ This shouldn't ever happen, but if it does, print the
+ exception instead of just crashing GDB. */
+ exception_print (gdb_stderr, ex);
+
+ /* If we threw an exception, it's because we recognized the
+ character. */
+ return 0;
+ }
+}
+
/* See tui-io.h. */
gdb::unique_xmalloc_ptr<char>