diff options
author | Bruno Haible <bruno@clisp.org> | 2021-05-16 15:20:12 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2021-05-16 18:27:12 +0200 |
commit | e54aa6196947ed22ff66bcd714e4fc7bd0c5c3b4 (patch) | |
tree | d5f35bd5ab065d19d34e73d5ebb37d27785ef92b /modules | |
parent | 1a72950760b1fce763ff834de0d545caab8a983c (diff) | |
download | gnulib-e54aa6196947ed22ff66bcd714e4fc7bd0c5c3b4.tar.gz |
sigsegv: New module.
* lib/sigsegv.in.h: New file, from GNU libsigsegv with modifications.
* lib/sigsegv.c: Likewise.
* lib/stackvma.h: Likewise.
* lib/stackvma.c: Likewise.
* m4/sigaltstack.m4: Likewise.
* m4/stack-direction.m4: Likewise.
* modules/sigsegv: New file.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/sigsegv | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/modules/sigsegv b/modules/sigsegv new file mode 100644 index 0000000000..2ef84332d2 --- /dev/null +++ b/modules/sigsegv @@ -0,0 +1,101 @@ +Description: +A simplified variant of GNU libsigsegv. +It implements the most important features of GNU libsigsegv: catching SIGSEGV +and catching stack overflow. It does *not* implement the 'sigsegv_dispatcher' +type (which is not multithread-safe). +It supports all modern Unix-like platforms: Linux, Hurd, FreeBSD, NetBSD, +OpenBSD, macOS, AIX, Solaris, Cygwin, Haiku, even IRIX. It does *not* support +HP-UX, Minix, native Windows; on these platforms the module compiles and +provides a <sigsegv.h> header file, but it does not define HAVE_SIGSEGV_RECOVERY +and HAVE_STACK_OVERFLOW_RECOVERY. +Unlike GNU libsigsegv, which consists of many .h and .c files, this module +compiles to just two object files, rather than a library. + +Files: +lib/sigsegv.in.h +lib/sigsegv.c +lib/stackvma.h +lib/stackvma.c +m4/mmap-anon.m4 +m4/sigaltstack.m4 +m4/stack-direction.m4 +m4/libsigsegv.m4 + +Depends-on: +havelib +host-cpu-c-abi +stdint +getpagesize + +configure.ac: +AC_ARG_WITH([libsigsegv], + [AS_HELP_STRING([--with-libsigsegv], + [use the GNU libsigsegv library, when present, instead of the gnulib module 'sigsegv'])]) +SIGSEGV_H=sigsegv.h +if test "$with_libsigsegv" = yes; then + gl_LIBSIGSEGV + if test "$gl_cv_lib_sigsegv" = yes; then + SIGSEGV_H= + fi +fi +AC_SUBST([SIGSEGV_H]) +AM_CONDITIONAL([GL_GENERATE_SIGSEGV_H], [test -n "$SIGSEGV_H"]) +if test -n "$SIGSEGV_H"; then + dnl Persuade glibc <sys/ucontext.h> to declare macros designating register + dnl indices: REG_RSP on x86_64, REG_ESP on i386. + dnl Persuade Solaris OpenIndiana <ucontext.h> to include <sys/regset.h>, + dnl which declares macros designating register indices, such as ESP on i386. + dnl Persuade Solaris OpenIndiana <unistd.h> to declare mincore(). + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + solaris2.11) + AC_DEFINE([SOLARIS11], [1], [Define on Solaris 11 and its derivates.]) + ;; + esac + + gl_FUNC_MMAP_ANON + + dnl Stack direction. + SV_STACK_DIRECTION + + dnl Catching stack overflow requires an alternate signal stack. + dnl The old "install a guard page" trick would be unreliable, because + dnl we don't know where exactly to place the guard page. + SV_SIGALTSTACK + + AC_CHECK_FUNCS_ONCE([getrlimit]) +fi + +Makefile.am: +BUILT_SOURCES += $(SIGSEGV_H) + +if GL_GENERATE_SIGSEGV_H +sigsegv.h: sigsegv.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/sigsegv.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +sigsegv.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += sigsegv.h sigsegv.h-t + +if GL_GENERATE_SIGSEGV_H +lib_SOURCES += sigsegv.c stackvma.c +endif + +Include: +<sigsegv.h> + +Link: +$(LTLIBSIGSEGV) when linking with libtool, $(LIBSIGSEGV) otherwise + +License: +GPLv2+ + +Maintainer: +Bruno Haible |