diff options
author | Gary Benson <gbenson@redhat.com> | 2014-08-07 15:53:21 +0100 |
---|---|---|
committer | Gary Benson <gbenson@redhat.com> | 2014-08-29 10:53:36 +0100 |
commit | e9bcb6585201ab674d90d714295f63b40da41f16 (patch) | |
tree | 0f9c692937bd00e832170a137fed9eb17c4e188d /gdb/common | |
parent | e31806255fe0cf49a1eeb14a51788473eaaa6310 (diff) | |
download | gdb-e9bcb6585201ab674d90d714295f63b40da41f16.zip gdb-e9bcb6585201ab674d90d714295f63b40da41f16.tar.gz gdb-e9bcb6585201ab674d90d714295f63b40da41f16.tar.bz2 |
Introduce common/gdb_setjmp.h
This commit creates a new file, common/gdb_setjmp.h, to hold some
portability macros for setjmp/longjmp et al. that are used by the
exceptions subsystem and by the demangler crash catcher.
gdb/ChangeLog:
* common/gdb_setjmp.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add common/gdb_setjmp.h.
* configure.ac: Move sigsetjmp check...
* common/common.m4: ...here.
* configure: Regenerate.
* cp-support.c (SIGJMP_BUF): Delete.
(SIGSETJMP): Likewise.
(SIGLONGJMP): Likewise.
* exceptions.h (gdb_setjmp.h): Include.
(setjmp.h): Do not include.
(EXCEPTIONS_SIGJMP_BUF): Delete.
(EXCEPTIONS_SIGSETJMP): Likewise.
(EXCEPTIONS_SIGLONGJMP): Likewise.
Replace all uses of EXCEPTIONS_SIG* macros with SIG* macros
from gdb_setjmp.h.
* exceptions.c: Likewise.
gdb/gdbserver/ChangeLog:
* config.in: Regenerate.
* configure: Likewise.
Diffstat (limited to 'gdb/common')
-rw-r--r-- | gdb/common/common.m4 | 11 | ||||
-rw-r--r-- | gdb/common/gdb_setjmp.h | 34 |
2 files changed, 45 insertions, 0 deletions
diff --git a/gdb/common/common.m4 b/gdb/common/common.m4 index 426df79..7aabd07 100644 --- a/gdb/common/common.m4 +++ b/gdb/common/common.m4 @@ -33,4 +33,15 @@ AC_DEFUN([GDB_AC_COMMON], [ AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair]) AC_CHECK_DECLS([strerror, strstr]) + + dnl Check if sigsetjmp is available. Using AC_CHECK_FUNCS won't + dnl do since sigsetjmp might only be defined as a macro. +AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp, +[AC_TRY_COMPILE([ +#include <setjmp.h> +], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);], +gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)]) +if test $gdb_cv_func_sigsetjmp = yes; then + AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ]) +fi ]) diff --git a/gdb/common/gdb_setjmp.h b/gdb/common/gdb_setjmp.h new file mode 100644 index 0000000..aba50a4 --- /dev/null +++ b/gdb/common/gdb_setjmp.h @@ -0,0 +1,34 @@ +/* Portability wrappers for setjmp and longjmp. + Copyright (C) 1986-2014 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 GDB_SETJMP_H +#define GDB_SETJMP_H + +#include <setjmp.h> + +#ifdef HAVE_SIGSETJMP +#define SIGJMP_BUF sigjmp_buf +#define SIGSETJMP(buf) sigsetjmp((buf), 1) +#define SIGLONGJMP(buf,val) siglongjmp((buf), (val)) +#else +#define SIGJMP_BUF jmp_buf +#define SIGSETJMP(buf) setjmp(buf) +#define SIGLONGJMP(buf,val) longjmp((buf), (val)) +#endif + +#endif /* GDB_SETJMP_H */ |