We currently throw exceptions from signal handlers (e.g., for Quit/ctrl-c). But throwing C++ exceptions from signal handlers is undefined. (That doesn't restore signal masks, like siglongjmp does, and, because asynchronous signals can arrive at any instruction, we'd have to build _everything_ with -fasync-unwind-tables to make it reliable.) It happens to work on x86_64 GNU/Linux at least, but it's likely broken on other ports. Until we stop throwing from signal handlers, use setjmp/longjmp based exceptions in C++ mode as well. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY) (GDB_XCPT_RAW_TRY, GDB_XCPT): Define. Replace __cplusplus checks with GDB_XCPT checks throughout. * common/common-exceptions.c: Replace __cplusplus checks with GDB_XCPT checks throughout. |
||
|---|---|---|
| .. | ||
| agent.c | ||
| agent.h | ||
| ax.def | ||
| break-common.h | ||
| btrace-common.c | ||
| btrace-common.h | ||
| buffer.c | ||
| buffer.h | ||
| cleanups.c | ||
| cleanups.h | ||
| common-debug.c | ||
| common-debug.h | ||
| common-defs.h | ||
| common-exceptions.c | ||
| common-exceptions.h | ||
| common-regcache.h | ||
| common-types.h | ||
| common-utils.c | ||
| common-utils.h | ||
| common.host | ||
| common.m4 | ||
| create-version.sh | ||
| enum-flags.h | ||
| errors.c | ||
| errors.h | ||
| fileio.c | ||
| fileio.h | ||
| filestuff.c | ||
| filestuff.h | ||
| format.c | ||
| format.h | ||
| gdb_assert.h | ||
| gdb_locale.h | ||
| gdb_setjmp.h | ||
| gdb_signals.h | ||
| gdb_sys_time.h | ||
| gdb_vecs.c | ||
| gdb_vecs.h | ||
| gdb_wait.h | ||
| host-defs.h | ||
| mingw-strerror.c | ||
| posix-strerror.c | ||
| print-utils.c | ||
| print-utils.h | ||
| ptid.c | ||
| ptid.h | ||
| queue.h | ||
| rsp-low.c | ||
| rsp-low.h | ||
| signals.c | ||
| symbol.h | ||
| vec.c | ||
| vec.h | ||
| version.h | ||
| x86-xstate.h | ||
| xml-utils.c | ||
| xml-utils.h | ||