mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 18:44:20 +08:00
17bfe554b9
Saving the signal state is very slow (this patch is a 14% speedup). The reason we need this code is because signal handler will leave the signal blocked when we longjmp out of it. But in this case we can just manually unblock the signal instead of taking the unconditional perf hit. gdb/ChangeLog: 2019-10-16 Christian Biesinger <cbiesinger@google.com> * gdbsupport/gdb_setjmp.h (SIGSETJMP): Allow passing in the value to pass on to sigsetjmp's second argument. * cp-support.c (gdb_demangle): Unblock SIGSEGV if we caught a crash. Change-Id: Ib3010966050c64b4cc8b47d8cb45871652b0b3ea
37 lines
1.3 KiB
C
37 lines
1.3 KiB
C
/* Portability wrappers for setjmp and longjmp.
|
|
Copyright (C) 1986-2019 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef COMMON_GDB_SETJMP_H
|
|
#define COMMON_GDB_SETJMP_H
|
|
|
|
#include <setjmp.h>
|
|
|
|
#ifdef HAVE_SIGSETJMP
|
|
#define SIGJMP_BUF sigjmp_buf
|
|
#define SIGSETJMP(buf,val) sigsetjmp((buf), val)
|
|
#define SIGLONGJMP(buf,val) siglongjmp((buf), (val))
|
|
#else
|
|
#define SIGJMP_BUF jmp_buf
|
|
/* We ignore val here because that's safer and avoids having to check
|
|
whether _setjmp exists. */
|
|
#define SIGSETJMP(buf,val) setjmp(buf)
|
|
#define SIGLONGJMP(buf,val) longjmp((buf), (val))
|
|
#endif
|
|
|
|
#endif /* COMMON_GDB_SETJMP_H */
|