exc_set_last_chance_handler man page on DigitalUNIX

Man page or keyword search:  
man Server   12896 pages
apropos Keyword Search (all sections)
Output format
DigitalUNIX logo
[printable version]

set_unhandled_exception(3)			    set_unhandled_exception(3)

NAME
       set_unhandled_exception, __exc_last_chance, exc_set_last_chance_handler
       - support routines for unhandled exceptions

SYNOPSIS
       #include <excpt.h>

       void set_unhandled_exception(
	       exception_handler_type	  handler     );      static	  void
       __exc_last_chance(
	       system_exrec_type *exceptionRecord,
	       void *EstablisherFrame,
	       CONTEXT *contextRecord,
	       DISPATCHER_CONTEXT	*dispatcherContext	 );	  void
       exc_set_last_chance_handler(
	       exception_handler_type last_chance );

LIBRARY
       Exception Handling Library (libexc.a)

PARAMETERS
       Address of last chance handler.	Address of primary  exception  record.
       Virtual	frame  pointer	of handler's establisher.  Pointer to a struct
       sigcontext (see signal(2)) used to  represent  a	 procedure's  context.
       Address	of  exception  dispatcher's  control  record.  Address of last
       chance handler.

DESCRIPTION
       When called as the result of  an	 exception,  exc_dispatch_exception(3)
       attempts	 to  find  a handler to process the exception by searching the
       stack frames of procedures in the call chain. It does this by virtually
       unwinding  the stack (see unwind(3)). The exc_dispatch_exception() rou‐
       tine invokes a handler, if one exists, for each procedure in  the  call
       chain until it finds one that handles the exception. If no handler han‐
       dles the exception, the dispatcher returns to its caller (for instance,
       exc_raise_exception(3)).	  The  caller  typically calls exc_unwind() to
       perform an exit unwind.

       During an exit unwind, existing handlers for  procedures	 in  the  call
       chain are invoked with notification that unwinding is in progress, thus
       allowing handlers to perform scope cleanup. Once	 the  stack  has  been
       unwound	and  all  frames  for  procedures  in the call chain have been
       removed from the stack, __exc_last_chance() is called. It calls a  user
       specified  handler,  if	present,  or  prints a message using stdio and
       calls exit(2) with an argument of 1.

       You can establish a last chance handler by  calling  either  set_unhan‐
       dled_exception()	 or exc_set_last_chance_handler() specifying a nonzero
       value as a handler. There is only one last chance handler  per  process
       and it is inherited over forks.

       The  type  exception_handler_type is defined in excpt.h and matches the
       prototype for __exc_last_chance.

EXAMPLES
       In  the	following  example,   exc_set_unhandled_exception()   installs
       my_lastchance  as  the  last chance handler. Because the exception_dis‐
       patcher is installed as the signal handler  for	SIGSEGV	 signals,  the
       dispatcher begins searching for a frame-based handler, when the segmen‐
       tation violation occurs, by virtually unwinding the context of the cur‐
       rent  and  previous  procedure  call frames. When it determines that no
       frame-based handler exists for this exception, the dispatcher  performs
       an exit unwind of the procedure call stack (see exc_resume(3)). Eventu‐
       ally the last-chance handler, my_last_chance, executes.

       /*
	* cc -call_shared -o lastchance lastchance.c -lexc
	*/ #include <stdio.h> #include <signal.h> #include <excpt.h>

       int     *x = 0;

       EXCEPTION_DISPOSITION my_lastchance (
	       system_exrec_type *exceptionRecord,
	       void *establisherFrame,
	       CONTEXT *contextRecord,
	       DISPATCHER_CONTEXT *dispatcherContext)
	   {
	   printf ("Handler: executing...\n");
	   printf ("The signal code is 0x%0lx\n",  exceptionRecord->Exception‐
       Code);
	   printf ("The exception PC is 0x%0lx\n", contextRecord->sc_pc);
	   printf ("Exception Masks: ");
	   /* Print option mask values */
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE)
	       printf ("NONCONTINUABLE ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_UNWINDING)
	       printf ("UNWINDING ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_EXIT_UNWIND)
	       printf ("EXIT_UNWIND ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_STACK_INVALID)
	       printf ("STACK_INVALID ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_NESTED_CALL)
	       printf ("NESTED_CALL ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_TARGET_UNWIND)
	       printf ("TARGET_UNWIND ");
	   if (exceptionRecord->ExceptionFlags & EXCEPTION_COLLIDED_UNWIND)
	       printf ("COLLIDED_UNWIND ");
	       printf ("\n");
	   exit (0);
	   }

       /*
	*
	*/

       int main ()
	   {
	   struct sigaction action;

	   action.sa_handler = exception_dispatcher;
	   action.sa_mask = 0;
	   action.sa_options = 0;

	   /*
	    * Request frame based exception dispatcher
	    * to be invoked on a signal.
	    */
	   if (sigaction (SIGSEGV, &action, NULL) == -1) {
	       perror ("sigaction");
	       exit (1);
	       }

	   /* establish last-chance handler */
	   set_unhandled_exception (my_lastchance);

	   *x = 55;    /* Let's SEGV now! */

	   return 0;
	   }

FILES
       /usr/ccs/lib/cmplrs/cc/libexc.a -- exception handling library
       /usr/include/excpt.h -- include file
       /usr/include/pdsc.h -- include file
       /usr/include/signal.h -- include file
       /usr/include/machine/fpu.h -- include file

SEE ALSO
       Functions: exception_intro(3), exc_lookup_function_entry(3), signal(2),
       sigaction(2),   setjmp(3),   exc_unwind(3),    exception_dispatcher(3),
       ieee(3)

       Files: excpt(4), c_excpt(4), signal(4), pdsc(4)

       Assembly Language Programmer's Guide

       Calling Standard for Alpha Systems

						    set_unhandled_exception(3)
[top]

List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net