Hash :
2d830e4a
Author :
Date :
2022-03-13T15:12:46
sigsegv: Add support for Linux/PowerPC (32-bit) with musl libc. Reported by Khem Raj <raj.khem@gmail.com> in <https://lists.gnu.org/archive/html/m4-patches/2022-03/msg00000.html>. * src/sigsegv.c (SIGSEGV_FAULT_STACKPOINTER): In the Linux/PowerPC 32-bit case, handle musl libc differently. * modules/sigsegv (Files): Add m4/musl.m4. (configure.ac): Invoke gl_MUSL_LIBC.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
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/musl.m4
m4/sigaltstack.m4
m4/stack-direction.m4
m4/libsigsegv.m4
m4/sigsegv.m4
Depends-on:
gen-header
havelib
host-cpu-c-abi
stdint
getpagesize
configure.ac:
AC_REQUIRE([gl_SIGSEGV])
if test $gl_sigsegv_uses_libsigsegv = yes; then
GL_GENERATE_SIGSEGV_H=false
else
GL_GENERATE_SIGSEGV_H=true
fi
gl_CONDITIONAL_HEADER([sigsegv.h])
AC_PROG_MKDIR_P
if $GL_GENERATE_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])
gl_MUSL_LIBC
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
@NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%'
$(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/sigsegv.in.h
$(AM_V_at)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