File Explorer

/proc/thread-self/root/proc/thread-self/root/usr/share/doc/libsigsegv

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

README6.2 KB · 163 lines
           GNU libsigsegv  -  Handling page faults in user mode This is a library for handling page faults in user mode. A page faultoccurs when a program tries to access to a region of memory that iscurrently not available. Catching and handling a page fault is a usefultechnique 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>, thepreprocessor macro HAVE_SIGSEGV_RECOVERY will be defined if global andlocal SIGSEGV handlers are available, and the preprocessor macroHAVE_STACK_OVERFLOW_RECOVERY will be defined if stack overflow handlersare available. Note that the declared functions are available in all cases;on platforms where HAVE_SIGSEGV_RECOVERY or HAVE_STACK_OVERFLOW_RECOVERY isnot 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 inthe 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 doingaccess checks in software at every access, because it's effectively thehardware (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 settingerrno to EFAULT, instead of signalling SIGSEGV and restarting the systemcall. In this case, the program has to do what the SIGSEGV handler woulddo, and then restart the read() operation. Some buggy systems (SunOS 4)go into an endless loop on this occasion; on these systems you have tomake 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 ornotifies the user and then immediately terminates the application.  Inother applications, the stack overflow handler longjmps back to a centralpoint in the application.  This library supports both uses.  In the secondcase, the handler must ensure to restore the normal signal mask (becausemany signals are blocked while the handler is executed), and must alsocall sigsegv_leave_handler() to transfer control; then only it can longjmpaway. Note that longjmping back to a central point in the application can leavethe application in an inconsistent state, because  1) no cleanup is executed for call frames that are being unwound,  2) the code being executed while the stack overflow occurred might leave     data structures in an intermediate, inconsistent state.If you want to avoid the first problem, you need to restructure yourapplication into three or more threads:  - a main thread, which creates the other threads,  - worker threads, which may cause stack overflows, and in which all    cleanups are registered through the pthread_cleanup_push function,  - a handler thread, which contains the handler for stack overflow and    other kinds of SIGSEGV. The handler will call pthread_cancel on the    worker thread whose stack overflowed.You will need to use the function pthread_sigmask on all threads exceptthe handler thread, in order to ensure that the SIGSEGV signal gets handledin the designated handler thread.If you want to avoid the second problem together with the first problem,you need to enclose code that manipulates data structures in a way that isnot safe to be interrupted within calls to pthread_setcancelstate() orpthread_setcanceltype().If you want to avoid just the second problem, you need to manipulate all datastructures in a way that is safe to be interrupted at any moment and alsocompile your program with the gcc flag -fnon-call-exceptions.  About shared libraries. This library builds as a static library by default.  This seems usefulbecause of the small size of the library (4 KB).  Of course, you can buildit as a shared library by specifying the configure option '--enable-shared'.  Installation------------ Installation instructions on Unix:         ./configure [OPTIONS]        make        make check        make install Installation instructions on Microsoft Windows:         See INSTALL.windows.  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    <https://www.gnu.org/software/gnulib/MODULES.html#module=libsigsegv>  Copyright notice---------------- Copyright 1998-1999, 2002-2012, 2016-2021  Bruno Haible <bruno@clisp.org>Copyright 2002-2005, 2009  Paolo Bonzini <bonzini@gnu.org>Copyright 2008-2010  Eric Blake <ebb9@byu.net>Copyright 2002-2021  Free Software Foundation, Inc. This is free software distributed under the GNU General Public Licence v2described in the file COPYING or (at your option) any later version.There is ABSOLUTELY NO WARRANTY, explicit or implied, on this software.  Download--------     https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.13.tar.gz Homepage--------     https://www.gnu.org/software/libsigsegv/    https://savannah.gnu.org/projects/libsigsegv    http://libsigsegv.sourceforge.net/ (old) Bug reports----------- Report bugs  - in the bug tracker at <https://savannah.gnu.org/projects/libsigsegv>  - or by email to <bug-libsigsegv@gnu.org>.