New in 2.10:
* Support for Linux/S390.
<sigsegv.h> now defines a macro SIGSEGV_FAULT_ADDRESS_ALIGNMENT.
It is either 1 or pagesize. Its meaning is that
- The fault address passed to a SIGSEGV handler has been rounded down
to a multiple of SIGSEGV_FAULT_ADDRESS_ALIGNMENT.
- The address and length arguments of sigsegv_register function calls
must be multiples of SIGSEGV_FAULT_ADDRESS_ALIGNMENT.
* Faster distinction between stack overflow and other fault on OpenBSD.
New in 2.9:
* Correct support for 64-bit ABI on MacOS X 10.5 and newer.
* Fix alternate stack overflow on at least Linux for PowerPC64;
regression introduced in 2.6.
New in 2.7:
* Support for platforms that follow POSIX:2008, not POSIX:2001.
* Support for MirBSD 10.
* Support for IRIX 5.3. Contributed by Eric Blake.
* On Linux platforms, libsigsegv now prefers the POSIX way of defining the
signal handler over than the traditional one, when both are supported.
As a consequence, on Linux/i386 and other Linux platforms, the type
'stackoverflow_context_t' is now typedefed to 'ucontext_t *' rather than
'struct sigcontext *'.
New in 2.6:
* sigsegv_leave_handler is changed. Previously it was a normal function with
no arguments. Now it is a function that take a non-returning continuation
function and three arguments for it as arguments.
Where you had code like
int my_handler(void* fault_address, int serious)
{
...code_before()...;
sigsegv_leave_handler();
...code_after()...;
longjmp(...);
}
you now have to write
void my_handler_tail(void* arg1, void* arg2, void* arg3)
{
...code_after()...;
longjmp(...);
}
int my_handler(void* fault_address, int serious)
{
...code_before()...;
#if LIBSIGSEGV_VERSION >= 0x0206
return sigsegv_leave_handler(my_handler_tail, arg, NULL, NULL);
#else
sigsegv_leave_handler();
my_handler_tail(arg, NULL, NULL);
/* NOTREACHED */
abort();
#endif
}
* sigsegv_leave_handler now works correctly on MacOS X.
* Support for 64-bit ABI on MacOS X 10.5.
* Support for building universal binaries on MacOS X.
* Improved distinction between stack overflow and other fault on NetBSD,
OpenBSD, FreeBSD, Linux, AIX, Solaris. Contributed by Eric Blake.
* GNU gnulib now has an autoconf macro for locating libsigsegv:
http://www.gnu.org/software/gnulib/MODULES.html#module=libsigsegv
- On DragonFly, the stack overflow handling should follow the logic
of FreeBSD, similiar the address space scanning. This is now needed
for lang/clisp. Since the installed version differs, bump revision.
from the NEWS file:
New in 2.4:
* Support for GCC 4 on more platforms.
* Added support for catching stack overflow on NetBSD.
* Improved support for catching stack overflow on Linux, Solaris:
Works also when /proc is not mounted or lacks read permissions.
New in 2.3:
* Support for GCC 4 on some platforms contributed by Paolo Bonzini.
* Support for MacOS X i386 contributed by Bruno Haible.
* Improved support for Woe32 contributed by Doug Currie.
Martijn van Buul.
GNU libsigsegv is a library for handling page faults in user mode. A page
fault occurs when a program tries to access a region of memory that is
currently unavailable. Catching and handling a page fault is a useful
technique for implementing:
* Pageable virtual memory
* Memory-mapped access to persistent databases
* Generational garbage collectors
* Stack overflow handlers
* Distributed shared memory