Go to main content

man pages section 3: Library Interfaces and Headers

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

sigsegv_install_handler (3)

Name

sigsegv_install_handler - stall a global SIGSEGV handler

Synopsis

#include <sigsegv.h>

int sigsegv_install_handler (sigsegv_handler_t handler);

void sigsegv_deinstall_handler (void);

Description

Library Functions Manual                            sigsegv_install_handler(3)



NAME
       sigsegv_install_handler,  sigsegv_deinstall_handler - Install and dein-
       stall a global SIGSEGV handler


SYNOPSIS
       #include <sigsegv.h>

       int sigsegv_install_handler (sigsegv_handler_t handler);

       void sigsegv_deinstall_handler (void);


DESCRIPTION
       Pageable virtual memory is usually done in the operating system's  ker-
       nel. 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 sys-
       tem call. In this case, the program has to do what the SIGSEGV  handler
       would do, and then restart the read() operation.


       Sigsegv_install_handler  installs a global SIGSEGV handler. This should
       be called once only, and it ignores any  previously  installed  SIGSEGV
       handler.


       Sigsegv_deinstall_handler  deinstalls  the global SIGSEGV handler. This
       goes back to the state where no SIGSEGV handler is installed.


OPERANDS
       typedef int (*sigsegv_handler_t) (void* fault_address,
                                         int serious);

       Sigsegv_handler_t is the type of a global SIGSEGV  handler.  The  fault
       address is passed as an argument. The access type (read access or write
       access) is not passed; your handler has to know itself how  to  distin-
       guish  these  two  cases. If the second argument is 0, it means that it
       could also be a stack overflow, or 1, meaning the handler should  seri-
       ously  try  to fix the fault. The return value should be nonzero if the
       handler has done its job and no other handler should be called, or 0 if
       the handler declines responsibility for the given address.


       The  handler  is run at a moment when nothing about the global state of
       the program is known. Therefore it cannot use facilities  that  manipu-
       late  global variables or locks. In particular, it cannot use malloc();
       use mmap() instead. It cannot use fopen(); use open() instead. Etc. All
       global  variables  that  are  accessed  by the handler should be marked
       'volatile'.


EXIT STATUS
       If success, sigsegv_install_handler returns 0,  or  -1  if  the  system
       doesn't support catching SIGSEGV.


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


       GNU libsigsegv library and manual pages are licensed under GNU GPL ver-
       sion  2  or later <https://gnu.org/licenses/gpl-2.0.html>. This is free
       software: you are free to change and redistribute it. There is NO  WAR-
       RANTY, to the extent permitted by law.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+--------------------+
       |ATTRIBUTE TYPE |  ATTRIBUTE VALUE   |
       +---------------+--------------------+
       |Availability   | library/libsigsegv |
       +---------------+--------------------+
       |Stability      | Uncommitted        |
       +---------------+--------------------+

SEE ALSO
       attributes(7), sigsegv(3), standards(7)



NOTES
       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source  was  downloaded  from   https://ftp.gnu.org/gnu/libsigsegv/lib-
       sigsegv-2.13.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.gnu.org/software/libsigsegv.



Solaris 11.4                     17 June 2021
                                                    sigsegv_install_handler(3)