diff options
Diffstat (limited to 'libsigsegv/README')
-rw-r--r-- | libsigsegv/README | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/libsigsegv/README b/libsigsegv/README new file mode 100644 index 00000000..2f4e7651 --- /dev/null +++ b/libsigsegv/README @@ -0,0 +1,123 @@ + GNU libsigsegv - Handling page faults in user mode + +This is a library for handling page faults in user mode. A page fault +occurs when a program tries to access to a region of memory that is +currently not available. 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, + - ... + +This library supports three sets of functions, all defined in <sigsegv.h>: + + - Global SIGSEGV handlers: + sigsegv_install_handler, sigsegv_deinstall_handler. + + - Local SIGSEGV handlers (a handler per memory area): + sigsegv_init, sigsegv_register, sigsegv_unregister, sigsegv_dispatch. + + - Stack overflow handlers: + stackoverflow_install_handler, stackoverflow_deinstall_handler. + +Each of the three APIs can be used independently or simultaneously. +For examples of the use of the APIs, see: + + - Global SIGSEGV handlers: see tests/sigsegv1.c. + - Local SIGSEGV handlers: see tests/sigsegv2.c. + - Stack overflow handlers: see tests/stackoverflow1.c. + + +About portability. + +Some platforms don't support this functionality. In <sigsegv.h>, the +preprocessor macro HAVE_SIGSEGV_RECOVERY will be defined if global and +local SIGSEGV handlers are available, and the preprocessor macro +HAVE_STACK_OVERFLOW_RECOVERY will be defined if stack overflow handlers +are available. Note that the declared functions are available in all cases; +on platforms where HAVE_SIGSEGV_RECOVERY or HAVE_STACK_OVERFLOW_RECOVERY is +not defined, they will simply always return an error code or do nothing. + +The list of platforms where this library is known to work is contained in +the file PORTING. + + +About pageable virtual memory. + +Pageable virtual memory is usually done in the operating system's kernel. +This library helps in implementing the others. + +Installing a page fault handler is usually more efficient than doing +access checks in software at every access, because it's effectively the +hardware (the MMU) which checks whether a page is present or not. + +Note that if you use system calls (like read()) to write into write- +protected pages, the system will react by returning -1 and setting +errno to EFAULT, instead of signalling SIGSEGV and restarting the system +call. In this case, the program has to do what the SIGSEGV handler would +do, and then restart the read() operation. Some buggy systems (SunOS 4) +go into an endless loop on this occasion; on these systems you have to +make sure that an area is writable _before_ you call read() on it, + + +About stack overflow handlers. + +In some applications, the stack overflow handler performs some cleanup or +notifies the user and then immediately terminates the application. In +other applications, the stack overflow handler longjmps back to a central +point in the application. This library supports both uses. In the second +case, the handler must ensure to restore the normal signal mask (because +many signals are blocked while the handler is executed), and must also +call sigsegv_leave_handler() to transfer control; then only it can longjmp +away. + + +About shared libraries. + +This library builds as a static library by default. This seems useful +because of the small size of the library (4 KB). Of course, you can build +it as a shared library by specifying the configure option '--enable-shared'. + + +Installation instructions on Unix: + + ./configure + make + make check + make install + +Installation instructions on Woe32: + + See README.woe32. + + +Using libsigsegv in your package: + - For the APIs, see the comments in the <sigsegv.h> file (generated from + src/sigsegv.h.in). + - An autoconf macro for determining where libsigsegv is installed and how to + link with it is part of GNU gnulib, see + <http://www.gnu.org/software/gnulib/MODULES.html#module=libsigsegv> + + +Copyright notice: + +Copyright 1998-1999, 2002-2008 Bruno Haible <bruno@clisp.org> +Copyright 2002-2005 Paolo Bonzini <bonzini@gnu.org> +Copyright 2008 Eric Blake <ebb9@byu.net> + +This is free software distributed under the GNU General Public Licence +described in the file COPYING. There is ABSOLUTELY NO WARRANTY, explicit or +implied, on this software. + + +Download: + +ftp://ftp.gnu.org/pub/gnu/libsigsegv/libsigsegv-2.6.tar.gz +http://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.6.tar.gz + +Homepage: + +http://libsigsegv.sourceforge.net/ |