aboutsummaryrefslogtreecommitdiffstats
path: root/libsigsegv/README
diff options
context:
space:
mode:
Diffstat (limited to 'libsigsegv/README')
-rw-r--r--libsigsegv/README123
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/