mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
96e3f4e3c3
During my audit of the use of gdb_exception with regard to QUIT processing, I found a try/catch in the scoped_switch_fork_info destructor. Static analysis found this call path from the destructor to maybe_quit(): scoped_switch_fork_info::~scoped_switch_fork_info() -> remove_breakpoints() -> remove_breakpoint(bp_location*) -> remove_breakpoint_1(bp_location*, remove_bp_reason) -> memory_validate_breakpoint(gdbarch*, bp_target_info*) -> target_read_memory(unsigned long, unsigned char*, long) -> target_read(target_ops*, target_object, char const*, unsigned char*, unsigned long, long) -> maybe_quit() Since it's not safe to do a 'throw' from a destructor, we simply call set_quit_flag and, for gdb_exception_forced_quit, also set sync_quit_force_run. This will cause the appropriate exception to be rethrown at the next QUIT check. Another case is the try / catch in tui_getc() in tui-io.c. The existing catch swallows the exception. I've added a catch for 'gdb_exception_forced_quit', which also swallows the exception, but also sets sync_quit_force_run and calls set_quit_flag in order to restart forced quit processing at the next QUIT check. This is required because it isn't safe to throw into/through readline. Thanks to Pedro Alves for suggesting this idea. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26761 Tested-by: Tom de Vries <tdevries@suse.de> Approved-By: Pedro Alves <pedro@palves.net> |
||
---|---|---|
.. | ||
ChangeLog-1998-2003 | ||
tui-command.c | ||
tui-command.h | ||
tui-data.c | ||
tui-data.h | ||
tui-disasm.c | ||
tui-disasm.h | ||
tui-file.c | ||
tui-file.h | ||
tui-hooks.c | ||
tui-hooks.h | ||
tui-interp.c | ||
tui-io.c | ||
tui-io.h | ||
tui-layout.c | ||
tui-layout.h | ||
tui-location.c | ||
tui-location.h | ||
tui-out.c | ||
tui-out.h | ||
tui-regs.c | ||
tui-regs.h | ||
tui-source.c | ||
tui-source.h | ||
tui-stack.c | ||
tui-stack.h | ||
tui-win.c | ||
tui-win.h | ||
tui-wingeneral.c | ||
tui-wingeneral.h | ||
tui-winsource.c | ||
tui-winsource.h | ||
tui.c | ||
tui.h |