LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (2)     100  Modification History

   (3)     100  DECLARATIONS

   (4)     100  LIB$STOP -  Stop execution via signalling

   (5)     100  LIB$SIGNAL -  Signal Exceptional Condition

   (6)     100  SIGNAL -  Internal Routine to Signal Exceptions

   (13)    100  Panic code from stack problems, etc.

   (14)    100  HANDLER_SEARCH -  Internal Routine to Search

   (17)    100  OLD_SP -  Internal Routine to Calculate Old SP

   (18)    100  GETJPI_L -  Internal Routine to get process

   (19)    100  SIGNAL_HANDLER -  Internal Handler

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   1

1-13                                                                                                                             (1)



                                     0000   100 	.TITLE	LIB$SIGNAL - Condition Handling Facility SIGNAL and STOP

                                     0000   200 	.IDENT	/1-13/			; File: LIBSIGNAL.MAR

                                     0000   300 

                                     0000   400 ;

                                     0000   500 ;			  COPYRIGHT (c) 1978 BY

                                     0000   600 ;	      DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

                                     0000   700 ;

                                     0000   800 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED

                                     0000   900 ; ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE

                                     0000  1000 ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER

                                     0000  1100 ; COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY

                                     0000  1200 ; OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY

                                     0000  1300 ; TRANSFERRED.

                                     0000  1400 ;

                                     0000  1500 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE

                                     0000  1600 ; AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT

                                     0000  1700 ; CORPORATION.

                                     0000  1800 ;

                                     0000  1900 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS

                                     0000  2000 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

                                     0000  2100 ;

                                     0000  2200 

                                     0000  2300 ;++

                                     0000  2400 ; FACILITY:	Condition Handling

                                     0000  2500 ;

                                     0000  2600 ; ABSTRACT:

                                     0000  2700 ;

                                     0000  2800 ;	The Condition Handling Facility supports the exception

                                     0000  2900 ;	handling mechanisms needed by each of the common languages.

                                     0000  3000 ;	It provides the programmer with some control over fixup,

                                     0000  3100 ;	reporting, and flow of control on errors.  It provides

                                     0000  3200 ;	subsystem and application writers with the ability to

                                     0000  3300 ;	override system messages in order to give a more suitable

                                     0000  3400 ;	application oriented interface.

                                     0000  3500 ;

                                     0000  3600 ;	The CHF includes procedures to allow higher level language

                                     0000  3700 ;	users to change the hardware enables, and to establish and

                                     0000  3800 ;	revert condition handlers. This module includes procedures

                                     0000  3900 ;	to signal exceptions (LIB$SIGNAL and LIB$STOP).  The

                                     0000  4000 ;	facility also includes a procedure to unwind the stack

                                     0000  4100 ;	from a handler to its establisher (SYS$SET_UNWIND).

                                     0000  4200 ;

                                     0000  4300 ;	To understand CHF more fully, refer to its functional

                                     0000  4400 ;	specification and to the STARLET exception routine (EXCEPTION).

                                     0000  4500 ;

                                     0000  4600 ;

                                     0000  4700 ; ENVIRONMENT:	Any access mode--normally user mode

                                     0000  4800 ;		AST reentrant

                                     0000  4900 ;

                                     0000  5000 ; AUTHOR: Peter F. Conklin, CREATION DATE: 12-Nov-76

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   2

1-13            Modification History                                                                                             (2)



                                     0000   100 	.SBTTL	Modification History

                                     0000   200 ;

                                     0000   300 ; MODIFIED BY:

                                     0000   400 ;

                                     0000   500 ;  Peter F. Conklin, 27-Jan-78 VERSION 01

                                     0000   600 ; 01	-  Original, based on CHF Rev 4 spec.

                                     0000   700 ; 02	-  Changed to Rev 5 spec.

                                     0000   800 ; 03	-  Exit with "no handler" or "access violation" if bad stack.

                                     0000   900 ; 04	-  Copy signal args; add PSL and PC.

                                     0000  1000 ; 05	-  Reformat stack to mimic EXCEPTION exactly.

                                     0000  1100 ; 06	-  Change to PSECT LIB$CODE

                                     0000  1200 ; 07	-  Use $GETJPI, SYS$EXCMSG, SS$_NOHANDLER

                                     0000  1300 ;		support last chance handler,

                                     0000  1400 ;		STOP forces severe at every handler call.

                                     0000  1500 ; 08	- Change name to SYS$EXCMSG.  TNH 24-Jan-78

                                     0000  1600 ; 09	- Remember EXCVEC address.

                                     0000  1700 ; 10	- Continue from STOP now vectors to a Panic EXIT.

                                     0000  1800 ; 11	- Change name of OWN PSECT to LIB$DATA.

                                     0000  1900 ; 12	- Use G^ addressing in call to SYS$UNWIND.  JMT 28-Feb-78

                                     0000  1910 ; 13	- Make OWN be PIC.  TNH 27-June-78

                                     0000  2000 ;--

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   3

1-13            DECLARATIONS                                                                                                     (3)



                                     0000   100 	.SBTTL	DECLARATIONS

                                     0000   200 

                                     0000   300 ;

                                     0000   400 ; EXTERNAL REFERENCES:

                                     0000   500 ;

                                     0000   600 	.DSABL	GBL

                                     0000   700 

                                     0000   800 	.EXTRN	SYS$CALL_HANDL

                                     0000   900 	.EXTRN	SYS$EXCMSG

                                     0000  1000 	.EXTRN	SYS$EXIT

                                     0000  1100 	.EXTRN	SYS$GETJPI

                                     0000  1200 	.EXTRN	SYS$UNWIND

                                     0000  1300 

                                     0000  1400 ;

                                     0000  1500 ; INCLUDE FILES:

                                     0000  1600 ;

                                     0000  1700 	$CHFDEF				;Condition Handling definitions

                                     0000  1800 	$JPIDEF				;Get job process parameters

                                     0000  1900 	$LIBDEF				;Library status defs

                                     0000  2000 	$PSLDEF				;PSL definitions

                                     0000  2100 	$SSDEF				;System Status code definitions

                                     0000  2200 	$STSDEF				;Condition value format

                                     0000  2300 	$SFDEF				;Stack frame offsets

                                     0000  2400 

                                     0000  2500 ;

                                     0000  2600 ; MACROS:

                                     0000  2700 ;

                                     0000  2800 

                                     0000  2900 ;

                                     0000  3000 ; This macro defines the formals to a procedure

                                     0000  3100 ;

                                     0000  3200 

                                     0000  3300 	.MACRO	$FORMAL	LIST

                                     0000  3400 $$FORMAL=0

                                     0000  3500 	.IRP	L,<LIST>

                                     0000  3600 $$FORMAL=$$FORMAL+4

                                     0000  3700 L=$$FORMAL

                                     0000  3800 	.ENDM

                                     0000  3900 	.ENDM	$FORMAL

                                     0000  4000 

                                     0000  4100 ;

                                     0000  4200 ; EQUATED SYMBOLS:

                                     0000  4300 ;

                                     0000  4400 ;	NONE

                                     0000  4500 ;

                                     0000  4600 ; OWN STORAGE:

                                     0000  4700 ;

                                     0000  4800 

                                 00000000  4900 	.PSECT	LIB$DATA,NOEXE,LONG,PIC

                                     0000  5000 

                                     0000  5100 EXCVEC_SAVE:

                           00000000  0000  5200 	.LONG	0			;Address of Exception Vectors

                                     0004  5300 					;Note--still reentrant because

                                     0004  5400 					; this is a constant

                                     0004  5500 

                                 00000000  5600 	.PSECT	LIB$CODE,PIC,SHR,NOWRT,LONG

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   4

1-13            LIB$STOP -  Stop execution via signalling                                                                        (4)



                                     0000   100 	.SBTTL	LIB$STOP -  Stop execution via signalling

                                     0000   200 ;++

                                     0000   300 ; FUNCTIONAL DESCRIPTION:

                                     0000   400 ;

                                     0000   500 ;	This procedure is called whenever it is impossible

                                     0000   600 ;	to continue execution and no recovery is possible.

                                     0000   700 ;	It signals the exception. It always forces the

                                     0000   800 ;	severity code of severe_error on each call to

                                     0000   900 ;	a handler. Handler requests to continue are

                                     0000  1000 ;	treated as an error and produce a panic exit.

                                     0000  1100 ;	This procedure is guaranteed to never return.

                                     0000  1200 ;

                                     0000  1300 ;

                                     0000  1400 ; CALLING SEQUENCE:

                                     0000  1500 ;

                                     0000  1600 ;	CALL LIB$STOP (

                                     0000  1700 ;

                                     0000  1800 ;	CONDITON_VALUE.rlc.v,	standard signal name

                                     0000  1900 ;

                                     0000  2000 ;	{ARGS.rl.v})		additional FAO parameters for message

                                     0000  2100 ;				(stop adds PC and PSL to end)

                                     0000  2200 ;

                                     0000  2300 ; INPUT PARAMETERS:

                                     0000  2400 ;

                                     0000  2500 ;	NONE

                                     0000  2600 ;

                                     0000  2700 ; IMPLICIT INPUTS:

                                     0000  2800 ;

                                     0000  2900 ;	NONE

                                     0000  3000 ;

                                     0000  3100 ; OUTPUT PARAMETERS:

                                     0000  3200 ;

                                     0000  3300 ;	NONE

                                     0000  3400 ;

                                     0000  3500 ; IMPLICIT OUTPUTS:

                                     0000  3600 ;

                                     0000  3700 ;	NONE

                                     0000  3800 ;

                                     0000  3900 ; COMPLETION CODES:

                                     0000  4000 ;

                                     0000  4100 ;	NONE

                                     0000  4200 ;

                                     0000  4300 ; SIDE EFFECTS:

                                     0000  4400 ;

                                     0000  4500 ;	Never returns

                                     0000  4600 ;

                                     0000  4700 ;--

                                     0000  4800 

                                     0000  4900 	$FORMAL	<-

                                     0000  5000 CONDITION_VALUE-		;signal code

                                     0000  5100 	>			; {parameters}

                                     0000  5200 

                               0000' 0000  5300 	.ENTRY	LIB$STOP,0		;No registers (assumed below)

                          02     DD  0002  5400 	PUSHL	#2			;Set code for STOP

                          50     11  0004  5500 	BRB	SIGNAL			;Go do the signallling

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   5

1-13            LIB$SIGNAL -  Signal Exceptional Condition                                                                       (5)



                                     0006   100 	.SBTTL	LIB$SIGNAL -  Signal Exceptional Condition

                                     0006   200 ;++

                                     0006   300 ; FUNCTIONAL DESCRIPTION:

                                     0006   400 ;

                                     0006   500 ;	This procedure is called whenever it is necessary

                                     0006   600 ;	to indicate an exceptional condition and the procedure

                                     0006   700 ;	can not return a status code. If a handler returns

                                     0006   800 ;	with a continue code, LIB$SIGNAL returns with

                                     0006   900 ;	all registers including R0 and R1 preserved.  Thus,

                                     0006  1000 ;	LIB$SIGNAL can also be used to plant performance and

                                     0006  1100 ;	debugging traps in any code.  If no handler is found,

                                     0006  1200 ;	or all resignal, a catch-all handler is CALLed.

                                     0006  1300 ;

                                     0006  1400 ; CALLING SEQUENCE:

                                     0006  1500 ;

                                     0006  1600 ;	CALL LIB$SIGNAL (

                                     0006  1700 ;

                                     0006  1800 ;	CONDITION_VALUE.rlc.v,	standard signal name

                                     0006  1900 ;

                                     0006  2000 ;	{ARGS.rl.v})		additional FAO parameters for message

                                     0006  2100 ;				(signal adds PC and PSL to end)

                                     0006  2200 ;

                                     0006  2300 ; INPUT PARAMETERS:

                                     0006  2400 ;

                                     0006  2500 ;	NONE

                                     0006  2600 ;

                                     0006  2700 ; IMPLICIT INPUTS:

                                     0006  2800 ;

                                     0006  2900 ;	NONE

                                     0006  3000 ;

                                     0006  3100 ; OUTPUT PARAMETERS:

                                     0006  3200 ;

                                     0006  3300 ;	NONE

                                     0006  3400 ;

                                     0006  3500 ; IMPLICIT OUTPUTS:

                                     0006  3600 ;

                                     0006  3700 ;	NONE

                                     0006  3800 ;

                                     0006  3900 ; COMPLETION CODES:

                                     0006  4000 ;

                                     0006  4100 ;	NONE

                                     0006  4200 ;

                                     0006  4300 ; SIDE EFFECTS:

                                     0006  4400 ;

                                     0006  4500 ;	If a handler unwinds, then control will not return.

                                     0006  4600 ;	A handler could also modify R0/R1 and change the

                                     0006  4700 ;	flow of control.  If neither is done, then all

                                     0006  4800 ;	registers are preserved.

                                     0006  4900 ;

                                     0006  5000 ;--

                                     0006  5100 

                               0000' 0006  5200 	.ENTRY	LIB$SIGNAL,0		;No registers (assumed below)

                          01     DD  0008  5300 	PUSHL	#1			;Set code for SIGNAL

                          4A     11  000A  5400 	BRB	SIGNAL			;go do the signalling

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   6

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                  (6)



                                     000C   100 	.SBTTL	SIGNAL -  Internal Routine to Signal Exceptions

                                     000C   200 ;++

                                     000C   300 ; FUNCTIONAL DESCRIPTION:

                                     000C   400 ;

                                     000C   500 ;	This routine is used by LIB$STOP and LIB$SIGNAL to do

                                     000C   600 ;	the actual exception signaling. It sets up the handler

                                     000C   700 ;	argument list. It then checks both exception vectors for

                                     000C   800 ;	a handler. It then searches backward up the stack, frame

                                     000C   900 ;	by frame looking for a handler. Each handler found is

                                     000C  1000 ;	called. If the handler returns failure (resignal), the

                                     000C  1100 ;	search continues. If no handler is found or if all handlers

                                     000C  1200 ;	resignal, a last chance handler is called. If it returns,

                                     000C  1300 ;	this routine issues a signal and register dump and then

                                     000C  1400 ;	exits. If a handler returns success (continue) the

                                     000C  1500 ;	routine returns to the caller with R0/R1 intact.

                                     000C  1600 ;

                                     000C  1700 ;	During the stack search, if another signal is found to

                                     000C  1800 ;	be still active, the frames up to and including the

                                     000C  1900 ;	establisher of the handler are skipped. Refer to the

                                     000C  2000 ;	section Multiply Active Signals in the functional

                                     000C  2100 ;	specification. An active signal is defined as a routine

                                     000C  2200 ;	which is called from the system vector SYS$CALL_HANDLR.

                                     000C  2300 ;

                                     000C  2400 ;	If a memory access violation is found during the stack

                                     000C  2500 ;	search, it is assumed that the stack is finished and

                                     000C  2600 ;	the routine calls the last chance handler. If the stack

                                     000C  2700 ;	wanders out of the control region (P1) it is done.

                                     000C  2800 ;

                                     000C  2900 ;

                                     000C  3000 ; CALLING SEQUENCE:

                                     000C  3100 ;

                                     000C  3200 ;	PUSHL	#code		;1=SIGNAL, 2=STOP

                                     000C  3300 ;	BR	SIGNAL

                                     000C  3400 ;

                                     000C  3500 ; INPUT PARAMETERS:

                                     000C  3600 ;

                                     000C  3700 ;	AP points to the arg list

                                     000C  3800 ;

                                     000C  3900 ; IMPLICIT INPUTS:

                                     000C  4000 ;

                                     000C  4100 ;	NONE

                                     000C  4200 ;

                                     000C  4300 ; OUTPUT PARAMETERS:

                                     000C  4400 ;

                                     000C  4500 ;	NONE

                                     000C  4600 ;

                                     000C  4700 ; IMPLICIT OUTPUTS:

                                     000C  4800 ;

                                     000C  4900 ;	NONE

                                     000C  5000 ;

                                     000C  5100 ; COMPLETION CODES:

                                     000C  5200 ;

                                     000C  5300 ;	NONE

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   7

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                  (7)



                                     000C   100 ;

                                     000C   200 ; SIDE EFFECTS:

                                     000C   300 ;

                                     000C   400 ;	If a handler unwinds, then control will not return.

                                     000C   500 ;	A handler could also modify R0/R1 and change the flow

                                     000C   600 ;	of control. If neither is done, then all registers

                                     000C   700 ;	are preserved.

                                     000C   800 ;

                                     000C   900 ;--

                                     000C  1000 

                                     000C  1100 ;

                                     000C  1200 ; The following is a dummy signal argument list that is

                                     000C  1300 ; used if the call has no arguments. This dummy list

                                     000C  1400 ; has just one argument, in particular the signal code.

                                     000C  1500 ;

                                     000C  1600 

                                     000C  1700 DUMMY_SIG_ARG:

                  0015825C 00000001  000C  1800 	.LONG	1,LIB$_SIGNO_ARG	;dummy arg list

                                     0014  1900 

                                     0014  2000 ;

                                     0014  2100 ; The following is the give up message insert.

                                     0014  2200 ;

                                     0014  2300 

                                     0014  2400 FINAL_MESSAGE:

72 6F 20 6B 63 61 74 73 20 64 61 62  0014  2500 	.ASCIZ	\bad stack or no handler specified.\

20 72 65 6C 64 6E 61 68 20 6F 6E 20  0020       

   00 2E 64 65 69 66 69 63 65 70 73  002C       

                                     0037  2600 

                                     0037  2700 ;

                                     0037  2800 ; The following is the "continue from LIB$STOP" message insert.

                                     0037  2900 ;

                                     0037  3000 

                                     0037  3100 ATTCONSTO_MSG:

63 20 6F 74 20 74 70 6D 65 74 74 61  0037  3200 	.ASCIZ	\attempt to continue from STOP.\

6D 6F 72 66 20 65 75 6E 69 74 6E 6F  0043       

               00 2E 50 4F 54 53 20  004F       

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   8

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                  (8)



                                     0056   100 ;+

                                     0056   200 ; The code for the signal routine is straightforward

                                     0056   300 ; and consists of the following four parts:

                                     0056   400 ;

                                     0056   500 ;	evaporate the call stack

                                     0056   600 ;	format the handler argument list

                                     0056   700 ;	find a handler

                                     0056   800 ;	issue a message if no handler is found

                                     0056   900 ;

                                     0056  1000 ; The only peculiar algorithm has to do with evaporating

                                     0056  1100 ; the call frame. This is needed so that the format of

                                     0056  1200 ; the stack is the same whether the signal was an

                                     0056  1300 ; explicit call to signal or was a hardware detected

                                     0056  1400 ; exception. The latter has no frame because the hardware

                                     0056  1500 ; pushes the PSL, the PC, and some arguments. The exception

                                     0056  1600 ; handler in the system adds a reason code to identify the

                                     0056  1700 ; exception and then goes into a duplicate of this code.

                                     0056  1800 ;

                                     0056  1900 ; The algorithm to evaporate the frame is different for

                                     0056  2000 ; the cases of being called by CALLG or CALLS. In the latter

                                     0056  2100 ; case, the arguments also must be evaporated. In both

                                     0056  2200 ; cases, the argument list must be copied in order to allow

                                     0056  2300 ; the handler to alter the severity and resignal. At the

                                     0056  2400 ; same time, the caller's PSL and PC are appended to

                                     0056  2500 ; the list for consistency with the hardware detected

                                     0056  2600 ; exceptions. In both cases, the only trick in the algorithm

                                     0056  2700 ; is to ensure that SP stays below any information on the

                                     0056  2800 ; stack, and to allow for various number of parameters

                                     0056  2900 ; including the 0 to 3 byte stack alignment on call.

                                     0056  3000 ;-

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page   9

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                  (9)



                                     0056   100 SIGNAL:

         06 AD            0D     E1  0056   200 	BBC	#SF$V_CALLS,SF$W_SAVE_MASK(FP),40$

                          58         005A       

                                     005B   300 					;go handle CALLG call

                                     005B   400 

                                     005B   500 ;

                                     005B   600 ; Here on a CALLS with the stack:

                                     005B   700 ;

                                     005B   800 ;	(SP) = -04(FP) = code for LIB$STOP or LIB$SIGNAL

                                     005B   900 ;		00(FP) = 0 (this incarnation's handler)

                                     005B  1000 ;		04(FP) = CALL frame mask and caller's PSW

                                     005B  1100 ;		08(FP) = caller's AP

                                     005B  1200 ;		12(FP) = caller's FP

                                     005B  1300 ;		16(FP) = caller's PC

                                     005B  1400 ;		  ...	 0 to 3 bytes of alignment filler

                                     005B  1500 ;		00(AP) = number of arguments

                                     005B  1600 ;		04(AP)++ arguments to SIGNAL

                                     005B  1700 ;

                                     005B  1800 

            5E         E4 AC     9E  005B  1900 	MOVAB	-28(AP),SP		;make room on stack

                          03     BB  005F  2000 	PUSHR	#^M<R0,R1>		;save user's R1'R0

                       FC AD     DD  0061  2100 	PUSHL	-4(FP)			;save code for SIGNAL/STOP

                       08 AD     DD  0064  2200 	PUSHL	SF$L_SAVE_AP(FP)	;save caller's AP

                          7E     DC  0067  2300 	MOVPSL	-(SP)			;save PSL

            6E         04 AD     B0  0069  2400 	MOVW	SF$W_SAVE_PSW(FP),(SP)	;update with caller's PSW

                       10 AD     DD  006D  2500 	PUSHL	SF$L_SAVE_PC(FP)	;save caller's PC

            5D         0C AD     D0  0070  2600 	MOVL	SF$L_SAVE_FP(FP),FP	;restore caller's FP

            51            6C     9A  0074  2700 	MOVZBL	(AP),R1			;get number of args

                          0D     12  0077  2800 	BNEQU	10$			;branch if some

         F8 AC         94 AF     D0  0079  2900 	MOVL	DUMMY_SIG_ARG+4,-8(AP)	;use dummy if none

            5C            04     C2  007E  3000 	SUBL	#4,AP			;allocate room for one arg

            51            01     D0  0081  3100 	MOVL	#1,R1			;count as one arg

                          0D     11  0084  3200 	BRB	30$			;proceed

            50            01     D0  0086  3300 10$:	MOVL	#1,R0			;initialize loop to copy args

         F8 AC40          6C40   D0  0089  3400 20$:	MOVL	(AP)[R0],-8(AP)[R0]	;copy args for room for PSL'PC

            50            51     F3  008F  3500 	AOBLEQ	R1,R0,20$		;loop over arg list

                          F6         0092       

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  10

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                 (10)



            51            02     C1  0093   100 30$:	ADDL3	#2,R1,-8(AP)		;store signal vector length

                       F8 AC         0096       

            50         F4 AC     9E  0098   200 	MOVAB	-12(AP),R0		;set pop pointer address

            60         FC AC41   DE  009C   300 	MOVAL	-4(AP)[R1],(R0)		;set pop point

         00 B0            8E     7D  00A1   400 	MOVQ	(SP)+,@(R0)		;put away PSL'PC pair

            5C            8E     D0  00A5   500 	MOVL	(SP)+,AP		;restore caller's AP

            70            8E     D0  00A8   600 	MOVL	(SP)+,-(R0)		;store code for SIGNAL/STOP

            70            6E     7D  00AB   700 	MOVQ	(SP),-(R0)		;store caller's R1'R0

            5E            50     D0  00AE   800 	MOVL	R0,SP			;clean off unused space

                          52     11  00B1   900 	BRB	80$			;go join common code

                                     00B3  1000 

                                     00B3  1100 ;

                                     00B3  1200 ; Here on a CALLG

                                     00B3  1300 ;

                                     00B3  1400 

                          03     BB  00B3  1500 40$:	PUSHR	#^M<R0,R1>		;save R1'R0 to get a work area

                                     00B5  1600 

                                     00B5  1700 ;

                                     00B5  1800 ; At this point the stack is:

                                     00B5  1900 ;

                                     00B5  2000 ;	(SP) = -12(FP) = caller's R0

                                     00B5  2100 ;	       -08(FP) = caller's R1

                                     00B5  2200 ;	       -04(FP) = code for LIB$STOP or LIB$SIGNAL

                                     00B5  2300 ;		00(FP) = 0 (this incarnation's handler)

                                     00B5  2400 ;		04(FP) = CALL frame mask and caller's PSW

                                     00B5  2500 ;		08(FP) = caller's AP

                                     00B5  2600 ;		12(FP) = caller's FP

                                     00B5  2700 ;		16(FP) = caller's PC

                                     00B5  2800 ;		  ...	 0 to 3 bytes of alignment filler

                                     00B5  2900 ;

                                     00B5  3000 

            50            5D     D0  00B5  3100 	MOVL	FP,R0			;point to current frame

                          015A   30  00B8  3200 	BSBW	OLD_SP			;calculate pre-CALL SP into R0

            51            6C     9A  00BB  3300 50$:	MOVZBL	(AP),R1			;get arg count

                          07     12  00BE  3400 	BNEQU	60$			;proceed if not empty

            5C       FF48 CF     9E  00C0  3500 	MOVAB	DUMMY_SIG_ARG,AP	;use default if empty

                          F4     11  00C5  3600 	BRB	50$			; and try again

            51            07     C0  00C7  3700 60$:	ADDL	#7,R1			;add room for more

            51            04     C4  00CA  3800 	MULL	#4,R1			;convert to bytes

            50            51     C3  00CD  3900 	SUBL3	R1,R0,SP		;allocate stack

                          5E         00D0       

            6E         F4 AD     7D  00D1  4000 	MOVQ	-12(FP),(SP)		;put R1'R0 in correct place

         08 AE         FC AD     D0  00D5  4100 	MOVL	-4(FP),8(SP)		;save code for SIGNAL/STOP

                       08 AD     DD  00DA  4200 	PUSHL	SF$L_SAVE_AP(FP)	;save caller's AP for a moment

                          7E     DC  00DD  4300 	MOVPSL	-(SP)			;save PSL for a moment

            6E         04 AD     B0  00DF  4400 	MOVW	SF$W_SAVE_PSW(FP),(SP)	;change PSL to caller's

                       10 AD     DD  00E3  4500 	PUSHL	SF$L_SAVE_PC(FP)	;save caller's PC for a moment

            5D         0C AD     D0  00E6  4600 	MOVL	SF$L_SAVE_FP(FP),FP	;shift FP back to caller's FP

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  11

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                 (11)



                                     00EA   100 ;

                                     00EA   200 ; At this point, the extra frame created by the CALL to us

                                     00EA   300 ; has been removed. We can now proceed to build the signal

                                     00EA   400 ; and mechanism vectors and the final arg list.

                                     00EA   500 ;

                                     00EA   600 

            70            8E     7D  00EA   700 	MOVQ	(SP)+,-(R0)		;move caller's PSL'PC to vector

         10 AE            50     D0  00ED   800 	MOVL	R0,16(SP)		;save REI pop point for later

            51            6C     9A  00F1   900 	MOVZBL	(AP),R1			;get arg count

            70            6C41   D0  00F4  1000 70$:	MOVL	(AP)[R1],-(R0)		;copy args to signal vector

            F9            51     F5  00F8  1100 	SOBGTR	R1,70$			; top down

            51            6C     9A  00FB  1200 	MOVZBL	(AP),R1			;get arg count

            51            02     C1  00FE  1300 	ADDL3	#2,R1,-(R0)		;signal count is 2+arg count

                          70         0101       

            5C            8E     D0  0102  1400 	MOVL	(SP)+,AP		;change AP to caller's AP

            7E            03     CE  0105  1500 80$:	MNEGL	#3,-(SP)		;initialize depth

                          5D     DD  0108  1600 	PUSHL	FP			;initialize frame

                          04     DD  010A  1700 	PUSHL	#4			;set mechanism vector length

                          6E     9F  010C  1800 	PUSHAB	(SP)			;2nd arg is mechanism vector

                       20 AE     9F  010E  1900 	PUSHAB	32(SP)			;1st arg is signal vector

                          02     DD  0111  2000 	PUSHL	#2			;two arguments

                                     0113  2100 

                                     0113  2200 ;

                                     0113  2300 ;  At this point the stack is all set for a call to any handler:

                                     0113  2400 ;

                                     0113  2500 ;	00(SP) = 2

                                     0113  2600 ;	04(SP) = signal vector address		( 40(SP) )

                                     0113  2700 ;	08(SP) = mechanism vector address	( 12(SP) )

                                     0113  2800 ;	12(SP) = mechanism vector length (4)	\

                                     0113  2900 ;	16(SP) = mechanism vector frame (FP)	 |

                                     0113  3000 ;	20(SP) = mechanism vector depth (-3)	 | mechanism

                                     0113  3100 ;	24(SP) = mechanism vector caller's R0	 |

                                     0113  3200 ;	28(SP) = mechanism vector caller's R1	/

                                     0113  3300 ;	32(SP) = code for LIB$STOP or LIB$SIGNAL

                                     0113  3400 ;	36(SP) = pointer to PSL'PC pair for REI at end

                                     0113  3500 ;	40(SP) = 2+number of caller's args	\

                                     0113  3600 ;	44(SP)++ copy of caller's signal args	 | signal

                                     0113  3700 ;	  ...	 caller's return PC		 |   args

                                     0113  3800 ;	  ...	 caller's PSL			/

                                     0113  3900 ;

                                     0113  4000 ;	The next higher location on the stack is the

                                     0113  4100 ;	value of the caller's SP just before the CALL.

                                     0113  4200 ;

                                     0113  4300 ; AP and FP have been restored to the caller's values.

                                     0113  4400 ;

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  12

1-13            SIGNAL -  Internal Routine to Signal Exceptions                                                                 (12)



                                     0113   100 ;

                                     0113   200 ; Loop searching for a handler

                                     0113   300 ;

                                     0113   400 

         20 AE            02     D1  0113   500 90$:	CMPL	#2,32(SP)		;is it STOP?

                          06     12  0117   600 	BNEQ	100$			;if so, force severe_error

            00            04     F0  0119   700 	INSV	#STS$K_SEVERE,#STS$V_SEVERITY,#STS$S_SEVERITY,44(SP)	

         2C AE            03         011C       

         91'AF            6E     FA  011F   800 100$:	CALLG	(SP),B^HANDLER_SEARCH	;find next handler

            29            50     E9  0123   900 	BLBC	R0,STACK_PROBLEM	;Problem if none found

                 00000000'GF     16  0126  1000 	JSB	G^SYS$CALL_HANDL	;Call handler

            E4            50     E9  012C  1100 	BLBC	R0,90$			;Loop if resignal

         20 AE            02     D1  012F  1200 	CMPL	#2,32(SP)		;is it STOP?

                          0B     13  0133  1300 	BEQL	CONT_FROM_STOP		;if so, go do panic exit

                                     0135  1400 

                                     0135  1500 ;

                                     0135  1600 ; Here when a handler has said continue.

                                     0135  1700 ; We must restore R0 and R1 from the mechanism vector

                                     0135  1800 ; to preserve them and in case the handler changed them.

                                     0135  1900 ;

                                     0135  2000 

            5E         18 AE     DE  0135  2100 	MOVAL	24(SP),SP		;position to R1'R0 pair

                          03     BA  0139  2200 	POPR	#^M<R0,R1>		;restore R1'R0

            5E         04 AE     D0  013B  2300 	MOVL	4(SP),SP			;position stack to PSL'PC pair

                                 02  013F  2400 	REI				;return to caller

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  13

1-13            Panic code from stack problems, etc.                                                                            (13)



                                     0140   100 	.SBTTL	Panic code from stack problems, etc.

                                     0140   200 ;

                                     0140   300 ; Here when a handler specifies SS$_CONTINUE from a signal that

                                     0140   400 ; was generated by a call to LIB$STOP. We assume that the handler

                                     0140   500 ; has generated any message it may have wanted. We issue a

                                     0140   600 ; bad handling message with "attempt to continue from STOP"

                                     0140   700 ; and then a dump of the signal vector and the registers.

                                     0140   800 ;

                                     0140   900 

                                     0140  1000 CONT_FROM_STOP:

         24 AE   0015827C 8F     D0  0140  1100 	MOVL	#LIB$_ATTCONSTO,36(SP)	;set final exit status

                                     0148  1200 					; as "continue from stop"

            50       FEEB CF     9E  0148  1300 	MOVAB	ATTCONSTO_MSG,R0	;set message insert

                          2A     11  014D  1400 	BRB	PANIC_EXIT		;go do panic exit

                                     014F  1500 

                                     014F  1600 ;

                                     014F  1700 ; Here when no handler is found, or if all handlers resignal.

                                     014F  1800 ; This is either done when the stack saved FP is 0, meaning end

                                     014F  1900 ; of the stack, or when an access violation occurs, indicating

                                     014F  2000 ; that the stack is bad. The last chance handler is called

                                     014F  2100 ; then a no-handler message is issued.

                                     014F  2200 ; R0 contains the reason for the failure.

                                     014F  2300 ;

                                     014F  2400 

                                     014F  2500 STACK_PROBLEM:

         24 AE            50     D0  014F  2600 	MOVL	R0,36(SP)		;save error reason for exit

            50       0101 8F     B0  0153  2700 	MOVW	#JPI$_FINALEXC,R0	;set for last chance handler

                          00DA   30  0158  2800 	BSBW	GETJPI_L		;get address of vector in R0

                          17     13  015B  2900 	BEQLU	10$			;ignore if no table

                          51     DC  015D  3000 	MOVPSL	R1			;get current PSL

            02            18     EF  015F  3100 	EXTZV	#PSL$V_CURMOD,#PSL$S_CURMOD,R1,R1 ;extract current mode

            51            51         0162       

            51            6041   D0  0164  3200 	MOVL	(R0)[R1],R1		;get address of last chance

                          0A     13  0168  3300 	BEQLU	10$			;ignore if none

         14 AE            03     CE  016A  3400 	MNEGL	#3,20(SP)		;set frame depth of -3

                 00000000'GF     16  016E  3500 	JSB	G^SYS$CALL_HANDL	;call last chance handler

            50       FE9C CF     9E  0174  3600 10$:	MOVAB	FINAL_MESSAGE,R0	;set message insert

                                     0179  3700 

                                     0179  3800 ;

                                     0179  3900 ; Here to perform a panic exit.

                                     0179  4000 ; This code is enterred with the exit status at 36(SP) and

                                     0179  4100 ; with the address of the message insert in R0.

                                     0179  4200 ;

                                     0179  4300 

                                     0179  4400 PANIC_EXIT:

                          6E     9F  0179  4500 	PUSHAB	(SP)			;push address of cond arg list

                          60     9F  017B  4600 	PUSHAB	(R0)			;push address of message insert

   00000000'GF            02     FB  017D  4700 	CALLS	#2,G^SYS$EXCMSG		;print final message

            50         24 AE     D0  0184  4800 	MOVL	36(SP),R0		;get error reason

                                     0188  4900 	$EXIT_S	R0			;exit with no handler or access

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  14

1-13            HANDLER_SEARCH -  Internal Routine to Search                                                                    (14)



                                     0191   100 	.SBTTL	HANDLER_SEARCH -  Internal Routine to Search

                                     0191   200 ;++

                                     0191   300 ; FUNCTIONAL DESCRIPTION:

                                     0191   400 ;

                                     0191   500 ;	This routine is called to search for a handler. This

                                     0191   600 ;	is a separate routine so that we can have a frame in

                                     0191   700 ;	which to handle any memory access violations in case of

                                     0191   800 ;	a bad stack.

                                     0191   900 ;

                                     0191  1000 ;

                                     0191  1100 ; CALLING SEQUENCE:

                                     0191  1200 ;

                                     0191  1300 ;	00(AP) = 2

                                     0191  1400 ;	04(AP) = signal vector address		( 40(AP) )

                                     0191  1500 ;	08(AP) = mechanism vector address	( 12(AP) )

                                     0191  1600 ;	12(AP) = mechanism vector length (4)	\

                                     0191  1700 ;	16(AP) = mechanism vector frame (FP)	 |

                                     0191  1800 ;	20(AP) = mechanism vector depth (-3)	 | mechanism

                                     0191  1900 ;	24(AP) = mechanism vector caller's R0	 |

                                     0191  2000 ;	28(AP) = mechanism vector caller's R1	/

                                     0191  2100 ;	32(AP) = code for LIB$STOP or LIB$SIGNAL

                                     0191  2200 ;	36(AP) = pointer to PSL'PC pair for REI at end

                                     0191  2300 ;	40(AP) = 2+number of caller's args	\

                                     0191  2400 ;	44(AP)++ copy of caller's signal args	 | signal

                                     0191  2500 ;	  ...	 caller's return PC		 |   args

                                     0191  2600 ;	  ...	 caller's PSL			/

                                     0191  2700 ;

                                     0191  2800 ; INPUT PARAMETERS:

                                     0191  2900 ;

                                     0191  3000 ;	NONE

                                     0191  3100 ;

                                     0191  3200 ; IMPLICIT INPUTS:

                                     0191  3300 ;

                                     0191  3400 ;	NONE

                                     0191  3500 ;

                                     0191  3600 ; OUTPUT PARAMETERS:

                                     0191  3700 ;

                                     0191  3800 ;	R1 = address of handler if found

                                     0191  3900 ;

                                     0191  4000 ; IMPLICIT OUTPUTS:

                                     0191  4100 ;

                                     0191  4200 ;	NONE

                                     0191  4300 ;

                                     0191  4400 ; COMPLETION CODES:

                                     0191  4500 ;

                                     0191  4600 ;	Normal if handler found

                                     0191  4700 ;	Failure with reason as the status in R0

                                     0191  4800 ;

                                     0191  4900 ; SIDE EFFECTS:

                                     0191  5000 ;

                                     0191  5100 ;	NONE

                                     0191  5200 ;

                                     0191  5300 ;--

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  15

1-13            HANDLER_SEARCH -  Internal Routine to Search                                                                    (15)



                                     0191   100 HANDLER_SEARCH:

                               0000  0191   200 	.WORD	0			;no registers

            6D       025F'CF     9E  0193   300 	MOVAB	W^SIGNAL_HANDLER,(FP)	;establish a handler

                                     0198   400 

                                     0198   500 ;

                                     0198   600 ; loop looking for a handler to call

                                     0198   700 ;

                                     0198   800 

                       14 AC     D6  0198   900 10$:	INCL	20(AP)			;move to next depth

                          33     14  019B  1000 	BGTR	20$			;branch if searching stack

                          3E     13  019D  1100 	BEQL	30$			;branch if starting stack

            50   00000000'EF     D0  019F  1200 	MOVL	L^EXCVEC_SAVE,R0	;get saved exc vec address

                          11     12  01A6  1300 	BNEQU	15$			;skip sys call if known

            50       0100 8F     B0  01A8  1400 	MOVW	#JPI$_EXCVEC,R0		;set for primary/sec exc vec

                          0085   30  01AD  1500 	BSBW	GETJPI_L		;get address of vector in R0

   00000000'EF            50     D0  01B0  1600 	MOVL	R0,L^EXCVEC_SAVE	;save address for later calls

                          DF     13  01B7  1700 	BEQLU	10$			;give up if not available

                          51     DC  01B9  1800 15$:	MOVPSL	R1			;get current PSL

            02            18     EF  01BB  1900 	EXTZV	#PSL$V_CURMOD,#PSL$S_CURMOD,R1,R1 ;extract current mode

            51            51         01BE       

            50            6041   7D  01C0  2000 	MOVQ	(R0)[R1],R0		;get both exception vectors

         14 AC         FF 8F     91  01C4  2100 	CMPB	#-1,20(AP)		;see which vector this time

                          3A     13  01C9  2200 	BEQL	50$			;branch if secondary

            51            50     D0  01CB  2300 	MOVL	R0,R1			;if primary, move to R1

                          35     11  01CE  2400 	BRB	50$			; and branch

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  16

1-13            HANDLER_SEARCH -  Internal Routine to Search                                                                    (16)



                                     01D0   100 ;

                                     01D0   200 ; here if searching stack

                                     01D0   300 ;

                                     01D0   400 

            3B         16 AC     E8  01D0   500 20$:	BLBS	22(AP),60$		;if loop too long, give up

            50         10 AC     D0  01D4   600 	MOVL	16(AP),R0		;get last frame examined

         10 AC         0C A0     D0  01D8   700 	MOVL	SF$L_SAVE_FP(R0),16(AP) ;get previous frame

            50         10 AC     D0  01DD   800 30$:	MOVL	16(AP),R0		;get target frame

            02            1E     EF  01E1   900 	EXTZV	#30,#2,R0,R1		;get region of stack

            51            50         01E4       

            51            01     91  01E6  1000 	CMPB	#1,R1			;is it control region?

                          24     12  01E9  1100 	BNEQU	60$			;done if not

                                     01EB  1200 

                                     01EB  1300 ;

                                     01EB  1400 ; Here with R0 containing a frame whose predecessor might be

                                     01EB  1500 ; SIGNAL or EXCEPTION calling to a handler. If so, the return

                                     01EB  1600 ; PC would be SYS$CALL_HANDL+4 because both JSB to that

                                     01EB  1700 ; vector to call handlers. If so, we have the situation of

                                     01EB  1800 ; multiply active signals and need to bypass frames until this

                                     01EB  1900 ; handler's establisher is skipped. The depth parameter is

                                     01EB  2000 ; not incremented because a handler and its establisher are

                                     01EB  2100 ; considered part of the same entity.

                                     01EB  2200 ;

                                     01EB  2300 

   00000004'8F         10 A0     D1  01EB  2400 	CMPL	SF$L_SAVE_PC(R0),#SYS$CALL_HANDL+4

                                     01F3  2500 					;see if multiply active

                          0D     12  01F3  2600 	BNEQU	40$			;branch if not

                          1E     10  01F5  2700 	BSBB	OLD_SP			;adjust R0 to what SP

                                     01F7  2800 					; contained before the call

            50         0C A0     D0  01F7  2900 	MOVL	CHF$L_MCHARGLST+4(R0),R0 ;get mechanism vector

         10 AC         04 A0     D0  01FB  3000 	MOVL	CHF$L_MCH_FRAME(R0),16(AP) ;get establisher's frame

                                     0200  3100 					; as last frame

                          96     11  0200  3200 	BRB	10$			;search again

                                     0202  3300 

            51            60     D0  0202  3400 40$:	MOVL	SF$A_HANDLER(R0),R1	;get handler if any

                          51     D5  0205  3500 50$:	TSTL	R1			;see if handler

                          8F     13  0207  3600 	BEQL	10$			;if no handler, loop

                          61     B5  0209  3700 	TSTW	(R1)			;test to make sure accessible

            50            01     D0  020B  3800 	MOVL	#1,R0			;got a handler--give

                                 04  020E  3900 	RET				; normal return

                                     020F  4000 

                                     020F  4100 ;

                                     020F  4200 ; Here when no handler can be found

                                     020F  4300 ;

                                     020F  4400 

            50       08F8 8F     3C  020F  4500 60$:	MOVZWL	#SS$_NOHANDLER,R0	;give bad return

                                 04  0214  4600 	RET				; to caller

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  17

1-13            OLD_SP -  Internal Routine to Calculate Old SP                                                                  (17)



                                     0215   100 	.SBTTL	OLD_SP -  Internal Routine to Calculate Old SP

                                     0215   200 ;++

                                     0215   300 ; FUNCTIONAL DESCRIPTION:

                                     0215   400 ;

                                     0215   500 ;	This routine is called to calculate what SP was before

                                     0215   600 ;	a particular CALLG that resulted in a specific stack

                                     0215   700 ;	frame.  RESTRICTION: CALLS not handled.

                                     0215   800 ;

                                     0215   900 ; CALLING SEQUENCE:

                                     0215  1000 ;

                                     0215  1100 ;	NONE

                                     0215  1200 ;

                                     0215  1300 ; INPUT PARAMETERS:

                                     0215  1400 ;

                                     0215  1500 ;	R0 = address of stack frame in question

                                     0215  1600 ;

                                     0215  1700 ; IMPLICIT INPUTS:

                                     0215  1800 ;

                                     0215  1900 ;	NONE

                                     0215  2000 ;

                                     0215  2100 ; OUTPUT PARAMETERS:

                                     0215  2200 ;

                                     0215  2300 ;	R0 = value of SP before CALL in question

                                     0215  2400 ;

                                     0215  2500 ; IMPLICIT OUTPUTS:

                                     0215  2600 ;

                                     0215  2700 ;	NONE

                                     0215  2800 ;

                                     0215  2900 ; COMPLETION CODES:

                                     0215  3000 ;

                                     0215  3100 ;	NONE

                                     0215  3200 ;

                                     0215  3300 ; SIDE EFFECTS:

                                     0215  3400 ;

                                     0215  3500 ;	R1 is clobbered

                                     0215  3600 ;

                                     0215  3700 ;--

                                     0215  3800 

                                     0215  3900 

                                     0215  4000 

                                     0215  4100 OLD_SP:

                          0E     EF  0215  4200 	EXTZV	#SF$V_STACKOFFS,#SF$S_STACKOFFS,-

         06 A0            02         0217  4300 		SF$W_SAVE_MASK(R0),-(SP) ;get stack offset

                          7E         021A       

            0C            00     EF  021B  4400 	EXTZV	#SF$V_SAVE_MASK,#SF$S_SAVE_MASK,SF$W_SAVE_MASK(R0),R1

            51         06 A0         021E       

                                     0221  4500 					;get register mask

            50            14     C0  0221  4600 	ADDL2	#SF$L_SAVE_REGS,R0	;standard frame

            50            8E     C0  0224  4700 	ADDL2	(SP)+,R0		;SP correction

            03            51     E9  0227  4800 10$:	BLBC	R1,20$			;if register bit set,

            50            04     C0  022A  4900 	ADDL2	#4,R0			; count the register

            51         FF 8F     78  022D  5000 20$:	ASHL	#-1,R1,R1		;discard bit

                          51         0231       

                          F3     12  0232  5100 	BNEQU	10$			;loop until all done

                                 05  0234  5200 	RSB				;return

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  18

1-13            GETJPI_L -  Internal Routine to get process                                                                     (18)



                                     0235   100 	.SBTTL	GETJPI_L -  Internal Routine to get process

                                     0235   200 ;++

                                     0235   300 ; FUNCTIONAL DESCRIPTION:

                                     0235   400 ;

                                     0235   500 ;	This routine is called to get a longword of process

                                     0235   600 ;	information via the system service.

                                     0235   700 ;

                                     0235   800 ; CALLING SEQUENCE:

                                     0235   900 ;

                                     0235  1000 ;	NONE

                                     0235  1100 ;

                                     0235  1200 ; INPUT PARAMETERS:

                                     0235  1300 ;

                                     0235  1400 ;	R0 (word) = JPI code

                                     0235  1500 ;

                                     0235  1600 ; IMPLICIT INPUTS:

                                     0235  1700 ;

                                     0235  1800 ;	NONE

                                     0235  1900 ;

                                     0235  2000 ; OUTPUT PARAMETERS:

                                     0235  2100 ;

                                     0235  2200 ;	R0 = value of process parameter

                                     0235  2300 ;	     0 if not available

                                     0235  2400 ;

                                     0235  2500 ; IMPLICIT OUTPUTS:

                                     0235  2600 ;

                                     0235  2700 ;	NONE

                                     0235  2800 ;

                                     0235  2900 ; CONDITION CODES:

                                     0235  3000 ;

                                     0235  3100 ;	set on R0 returned

                                     0235  3200 ;

                                     0235  3300 ; SIDE EFFECTS:

                                     0235  3400 ;

                                     0235  3500 ;	R1 is clobbered

                                     0235  3600 ;

                                     0235  3700 ;--

                                     0235  3800 

                                     0235  3900 

                                     0235  4000 

                                     0235  4100 GETJPI_L:

                          7E     D4  0235  4200 	CLRL	-(SP)			;make room for result

                          7E     7C  0237  4300 	CLRQ	-(SP)			;end of list, no new length

                       08 AE     DF  0239  4400 	PUSHAL	8(SP)			;address of result

            7E            50     B0  023C  4500 	MOVW	R0,-(SP)		;set code

            7E            04     B0  023F  4600 	MOVW	#4,-(SP)		;length is longword

            50            5E     D0  0242  4700 	MOVL	SP,R0			;address of parameter block

                                     0245  4800 	$GETJPI_S ITMLST=(R0)

                                     0258  4900 					;if error, result is still 0

            5E            10     C0  0258  5000 	ADDL	#16,SP			;remove block

            50            8E     D0  025B  5100 	MOVL	(SP)+,R0		;get result and test it

                                 05  025E  5200 	RSB				;return

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  19

1-13            SIGNAL_HANDLER -  Internal Handler                                                                              (19)



                                     025F   100 	.SBTTL	SIGNAL_HANDLER -  Internal Handler

                                     025F   200 ;++

                                     025F   300 ; FUNCTIONAL DESCRIPTION:

                                     025F   400 ;

                                     025F   500 ;	This handler is used in SIGNAL to catch

                                     025F   600 ;	access violations during the stack search.

                                     025F   700 ;	If it gets an access violation exception from

                                     025F   800 ;	this procedure it terminates the search.

                                     025F   900 ;

                                     025F  1000 ;

                                     025F  1100 ; CALLING SEQUENCE:

                                     025F  1200 ;

                                     025F  1300 ;	handled.wlc.v = SIGNAL_HANDLER (signal.rl.ra, mechanism.rl.ra)

                                     025F  1400 ;

                                     025F  1500 ; INPUT PARAMETERS:

                                     025F  1600 ;

                                     025F  1700 ;	NONE

                                     025F  1800 ;

                                     025F  1900 ; IMPLICIT INPUTS:

                                     025F  2000 ;

                                     025F  2100 ;	NONE

                                     025F  2200 ;

                                     025F  2300 ; OUTPUT PARAMETERS:

                                     025F  2400 ;

                                     025F  2500 ;	NONE

                                     025F  2600 ;

                                     025F  2700 ; IMPLICIT OUTPUTS:

                                     025F  2800 ;

                                     025F  2900 ;	NONE

                                     025F  3000 ;

                                     025F  3100 ; COMPLETION CODES:

                                     025F  3200 ;

                                     025F  3300 ;	0 if not handled

                                     025F  3400 ;	success if unwound

                                     025F  3500 ;

                                     025F  3600 ; SIDE EFFECTS:

                                     025F  3700 ;

                                     025F  3800 ;	The stack is unwound and search returns with

                                     025F  3900 ;	the reason in R0.

                                     025F  4000 ;

                                     025F  4100 ;--

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  20

1-13            SIGNAL_HANDLER -  Internal Handler                                                                              (20)



                                     025F   100 SIGNAL_HANDLER:

                               0000  025F   200 	.WORD	0			;No registers

            50         04 AC     7D  0261   300 	MOVQ	CHF$L_SIGARGLST(AP),R0	;get both arguments

                       08 A1     D5  0265   400 	TSTL	CHF$L_MCH_DEPTH(R1)	;verify "this" establisher

                          14     12  0268   500 	BNEQU	10$			;branch if not

            0C         04 A0     D1  026A   600 	CMPL	CHF$L_SIG_NAME(R0),#SS$_ACCVIO ;see if memory access

                          0E     12  026E   700 	BNEQU	10$			;branch if not

                                     0270   800 

                                     0270   900 ;

                                     0270  1000 ; here if access violation in signal procedure

                                     0270  1100 ;

                                     0270  1200 

         0C A1         04 A0     D0  0270  1300 	MOVL	CHF$L_SIG_NAME(R0),CHF$L_MCH_SAVR0(R1)

                                     0275  1400 					;copy reason for error

                          7E     7C  0275  1500 	CLRQ	-(SP)			;default depth and PC

   00000000'GF            02     FB  0277  1600 	CALLS	#2,G^SYS$UNWIND		;unwind

                                     027E  1700 					;function value doesn't matter

                                     027E  1800 

                          50     D4  027E  1900 10$:	CLRL	R0			;not handled function value

                                 04  0280  2000 	RET				;return to unwind

                                     0281  2100 

                                     0281  2200 

                                     0281  2300 

                                     0281  2400 

                                     0281  2500 	.END

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  21

SYMBOL TABLE                                                                                                                    (20)



$$FORMAL       = 00000004            JPI$_GRP       = 00000308            MTH__LOGZERNEG = 00000053            

$$T1           = 00000001            JPI$_LASTADR   = 00000102            MTH__SINSIGLOS = 00000057            

ATTCONSTO_MSG    00000037 R     04   JPI$_LASTCTL   = 00000207            MTH__SQUROONEG = 00000054            

BIT...         = 00000010            JPI$_LASTPCB   = 0000031D            MTH__UNDEXP    = 00000052            

CHF$L_MCHARGLST  00000008            JPI$_LASTPHD   = 00000412            MTH__WRONUMARG = 00000050            

CHF$L_MCH_ARGS   00000000            JPI$_LOGINTIM  = 00000206            OLD_SP           00000215 R     04   

CHF$L_MCH_DEPTH  00000008            JPI$_MEM       = 00000307            PANIC_EXIT       00000179 R     04   

CHF$L_MCH_FRAME  00000004            JPI$_OWNER     = 00000303            PSL$C_EXEC     = 00000001            

CHF$L_MCH_SAVR0  0000000C            JPI$_PAGEFLTS  = 0000040A            PSL$C_KERNEL   = 00000000            

CHF$L_MCH_SAVR1  00000010            JPI$_PGFLQUOTA = 0000040E            PSL$C_SUPER    = 00000002            

CHF$L_SIGARGLST  00000004            JPI$_PID       = 00000319            PSL$C_USER     = 00000003            

CHF$L_SIG_ARG1   00000008            JPI$_PPGCNT    = 0000030D            PSL$M_CM       = 80000000            

CHF$L_SIG_ARGS   00000000            JPI$_PRCCNT    = 0000031B            PSL$M_CURMOD   = 03000000            

CHF$L_SIG_NAME   00000004            JPI$_PRCLM     = 00000408            PSL$M_DV       = 00000080            

CONDITION_VALUE= 00000004            JPI$_PRCNAM    = 0000031C            PSL$M_FPD      = 08000000            

CONT_FROM_STOP   00000140 R     04   JPI$_PRI       = 00000302            PSL$M_FU       = 00000040            

DUMMY_SIG_ARG    0000000C R     04   JPI$_PRIB      = 00000309            PSL$M_IPL      = 001F0000            

EXCVEC_SAVE      00000000 R     03   JPI$_PROCPRIV  = 00000204            PSL$M_IS       = 04000000            

FINAL_MESSAGE    00000014 R     04   JPI$_STATE     = 00000306            PSL$M_IV       = 00000020            

FOR$K_ERR_PREFX= 00000018            JPI$_STS       = 00000305            PSL$M_PRVMOD   = 00C00000            

GBL...         = 00000000            JPI$_TMBU      = 0000030B            PSL$M_SAFBITS  = 000037FF            

GETJPI_L         00000235 R     04   JPI$_TQCNT     = 00000315            PSL$M_TBIT     = 00000010            

HANDLER_SEARCH   00000191 R     04   JPI$_TQLM      = 00000410            PSL$M_TP       = 40000000            

JPI$C_ADRTYPE  = 00000001            JPI$_UIC       = 00000304            PSL$S_CURMOD   = 00000002            

JPI$C_CTLTYPE  = 00000002            JPI$_USERNAME  = 00000202            PSL$S_IPL      = 00000005            

JPI$C_LISTEND  = 00000000            JPI$_VIRTPEAK  = 00000200            PSL$S_PRVMOD   = 00000002            

JPI$C_PCBTYPE  = 00000003            JPI$_VOLUMES   = 00000205            PSL$V_CM       = 0000001F            

JPI$C_PHDTYPE  = 00000004            JPI$_WSAUTH    = 00000401            PSL$V_CURMOD   = 00000018            

JPI$_ACCOUNT   = 00000203            JPI$_WSPEAK    = 00000201            PSL$V_DV       = 00000007            

JPI$_APTCNT    = 0000030A            JPI$_WSQUOTA   = 00000402            PSL$V_FPD      = 0000001B            

JPI$_ASTACT    = 00000300            JPI$_WSSIZE    = 00000411            PSL$V_FU       = 00000006            

JPI$_ASTCNT    = 0000030E            LIB$SIGNAL       00000006 RG    04   PSL$V_IPL      = 00000010            

JPI$_ASTEN     = 00000301            LIB$STOP         00000000 RG    04   PSL$V_IS       = 0000001A            

JPI$_ASTLM     = 00000409            LIB$_AMBKEY    = 0015823C            PSL$V_IV       = 00000005            

JPI$_BIOCNT    = 0000030F            LIB$_ATTCONSTO = 0015827C            PSL$V_PRVMOD   = 00000016            

JPI$_BIOLM     = 00000310            LIB$_BADBLOADR = 00158264            PSL$V_TBIT     = 00000004            

JPI$_BUFIO     = 0000040C            LIB$_BADBLOSIZ = 0015826C            PSL$V_TP       = 0000001E            

JPI$_BYTCNT    = 00000311            LIB$_BADSTA    = 00158204            SF$A_HANDLER     00000000            

JPI$_BYTLM     = 0000031A            LIB$_FATERRLIB = 0015820C            SF$L_SAVE_AP     00000008            

JPI$_CPULIM    = 0000040D            LIB$_INPSTRTRU = 0015821C            SF$L_SAVE_FP     0000000C            

JPI$_CPUTIM    = 00000407            LIB$_INSVIRMEM = 00158214            SF$L_SAVE_PC     00000010            

JPI$_CURPRIV   = 00000400            LIB$_INTLOGERR = 0015822C            SF$L_SAVE_REGS   00000014            

JPI$_DFPFC     = 00000406            LIB$_INVARG    = 00158234            SF$M_C         = 00000001            

JPI$_DFWSCNT   = 00000403            LIB$_INVSTRDES = 00158224            SF$M_DV        = 00000080            

JPI$_DIOCNT    = 00000312            LIB$_INVTYPE   = 0015828C            SF$M_FU        = 00000040            

JPI$_DIOLM     = 00000313            LIB$_NORMAL    = 00000001            SF$M_IV        = 00000020            

JPI$_DIRIO     = 0000040B            LIB$_NOTFOU    = 00158274            SF$M_N         = 00000008            

JPI$_EFCS      = 00000317            LIB$_PUSSTAOVE = 0015824C            SF$M_TBIT      = 00000010            

JPI$_EFCU      = 00000318            LIB$_SIGNO_ARG = 0015825C            SF$M_V         = 00000002            

JPI$_EFWM      = 00000316            LIB$_STRTRU    = 00158011            SF$M_Z         = 00000004            

JPI$_EXCVEC    = 00000100            LIB$_SYNTAXERR = 00158284            SF$S_C         = 00000001            

JPI$_FILCNT    = 00000314            LIB$_UNRKEY    = 00158244            SF$S_CALLS     = 00000001            

JPI$_FILLM     = 0000040F            LIB$_USEFLORES = 00158254            SF$S_DV        = 00000001            

JPI$_FINALEXC  = 00000101            MTH$K_ERR_PREFX= 00000016            SF$S_FU        = 00000001            

JPI$_FREP0VA   = 00000404            MTH__FLOOVEMAT = 00000058            SF$S_IV        = 00000001            

JPI$_FREP1VA   = 00000405            MTH__FLOUNDMAT = 00000059            SF$S_N         = 00000001            

JPI$_GPGCNT    = 0000030C            MTH__INVARG    = 00000051            SF$S_SAVE_MASK = 0000000C            

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  22

SYMBOL TABLE                                                                                                                    (20)



SF$S_STACKOFFS = 00000002            SS$_DEVACTIVE  = 000002C4            SS$_INSFWSL    = 0000011C            

SF$S_TBIT      = 00000001            SS$_DEVALLOC   = 00000840            SS$_INTDIV     = 00000484            

SF$S_V         = 00000001            SS$_DEVALRALLOC= 00000641            SS$_INTOVF     = 0000047C            

SF$S_Z         = 00000001            SS$_DEVASSIGN  = 00000848            SS$_IVADDR     = 00000134            

SF$V_C         = 00000000            SS$_DEVFOREIGN = 00000064            SS$_IVCHAN     = 0000013C            

SF$V_CALLS     = 0000000D            SS$_DEVICEFULL = 00000850            SS$_IVCHNLSEC  = 0000026C            

SF$V_DV        = 00000007            SS$_DEVMOUNT   = 0000006C            SS$_IVDEVNAM   = 00000144            

SF$V_FU        = 00000006            SS$_DEVNOTALLOC= 00000858            SS$_IVGSDNAM   = 0000014C            

SF$V_IV        = 00000005            SS$_DEVNOTMBX  = 00000074            SS$_IVLOGNAM   = 00000154            

SF$V_N         = 00000003            SS$_DEVNOTMOUNT= 0000007C            SS$_IVLOGTAB   = 0000015C            

SF$V_SAVE_MASK = 00000000            SS$_DEVOFFLINE = 00000084            SS$_IVPROTECT  = 000002F4            

SF$V_STACKOFFS = 0000000E            SS$_DIRFULL    = 00000860            SS$_IVQUOTAL   = 00000164            

SF$V_TBIT      = 00000004            SS$_DRVERR     = 0000008C            SS$_IVSECFLG   = 0000016C            

SF$V_V         = 00000001            SS$_DUPFILENAME= 00000868            SS$_IVSECIDCTL = 000002E4            

SF$V_Z         = 00000002            SS$_DUPLNAM    = 00000094            SS$_IVSSRQ     = 00000174            

SF$W_SAVE_MASK   00000006            SS$_ENDOFFILE  = 00000870            SS$_IVSTSFLG   = 0000017C            

SF$W_SAVE_PSW    00000004            SS$_ENDOFTAPE  = 00000878            SS$_IVTIME     = 00000184            

SIGNAL           00000056 R     04   SS$_ENDOFUSRLBL= 00000970            SS$_LCKPAGFUL  = 000000D4            

SIGNAL_HANDLER   0000025F R     04   SS$_EXQUOTA    = 0000001C            SS$_LENVIO     = 0000018C            

SS$_ABORT      = 0000002C            SS$_EXTIDXFILE = 00000880            SS$_LKWSETFUL  = 00000194            

SS$_ACCONFLICT = 00000800            SS$_FCPREADERR = 00000888            SS$_MBFULL     = 000008D8            

SS$_ACCVIO     = 0000000C            SS$_FCPREPSTN  = 00000988            SS$_MBTOOSML   = 0000019C            

SS$_ACPVAFUL   = 000002FC            SS$_FCPREWNDERR= 00000890            SS$_MCHECK     = 000002BC            

SS$_ARTRES     = 00000474            SS$_FCPSPACERR = 00000898            SS$_MEDOFL     = 000001A4            

SS$_ASTFLT     = 0000040C            SS$_FCPWRITERR = 000008A0            SS$_MSGNOTFND  = 00000621            

SS$_BADATTRIB  = 00000034            SS$_FILACCERR  = 0000009C            SS$_MTLBLLONG  = 00000304            

SS$_BADCHKSUM  = 00000808            SS$_FILALRACC  = 000000A4            SS$_MUSTCLOSEFL= 00000948            

SS$_BADESCAPE  = 0000003C            SS$_FILELOCKED = 000008A8            SS$_NOAQB      = 00000314            

SS$_BADFILEHDR = 00000810            SS$_FILENUMCHK = 000008B0            SS$_NODATA     = 000001AC            

SS$_BADFILENAME= 00000818            SS$_FILESEQCHK = 000008B8            SS$_NOHANDLER  = 000008F8            

SS$_BADFILEVER = 00000820            SS$_FILESTRUCT = 000008C0            SS$_NOHOMEBLK  = 000008E0            

SS$_BADIMGHDR  = 00000044            SS$_FILNOTACC  = 000000AC            SS$_NOIOCHAN   = 000001B4            

SS$_BADIRECTORY= 00000828            SS$_FILNOTCNTG = 000002AC            SS$_NOLINKS    = 0000027C            

SS$_BADPARAM   = 00000014            SS$_FILNOTEXP  = 000000B4            SS$_NOLOGNAM   = 000001BC            

SS$_BADSTACK   = 000002B4            SS$_FLTDIV     = 00000494            SS$_NOMBX      = 00000274            

SS$_BEGOFFILE  = 00000938            SS$_FLTOVF     = 0000048C            SS$_NOMOREFILES= 00000930            

SS$_BLOCKCNTERR= 00000940            SS$_FLTUND     = 0000049C            SS$_NONEXDRV   = 000001C4            

SS$_BREAK      = 00000414            SS$_FORMAT     = 000000BC            SS$_NONEXPR    = 000008E8            

SS$_BUFBYTALI  = 0000030C            SS$_GPTFULL    = 000000C4            SS$_NONLOCAL   = 000008F0            

SS$_BUFFEROVF  = 00000601            SS$_GSDFULL    = 000000CC            SS$_NOPRIV     = 00000024            

SS$_BUGCHECK   = 000002A4            SS$_HANGUP     = 000002CC            SS$_NORMAL     = 00000001            

SS$_CANCEL     = 00000830            SS$_HEADERFULL = 000008C8            SS$_NOSIGNAL   = 00000900            

SS$_CHANINTLK  = 0000004C            SS$_IDXFILEFULL= 000008D0            SS$_NOSOLICIT  = 00000284            

SS$_CLIFRCEXT  = 00000980            SS$_ILLBLKNUM  = 000000DC            SS$_NOSUCHDEV  = 00000908            

SS$_CMODSUPR   = 0000041C            SS$_ILLCNTRFUNC= 000000E4            SS$_NOSUCHFILE = 00000910            

SS$_CMODUSER   = 00000424            SS$_ILLEFC     = 000000EC            SS$_NOSUCHNODE = 0000028C            

SS$_COMPAT     = 0000042C            SS$_ILLIOFUNC  = 000000F4            SS$_NOSUCHSEC  = 00000978            

SS$_CONTINUE   = 00000001            SS$_ILLLBLAST  = 00000968            SS$_NOTAPEOP   = 00000264            

SS$_CONTROLC   = 00000651            SS$_ILLPAGCNT  = 000000FC            SS$_NOTFILEDEV = 000001CC            

SS$_CONTROLO   = 00000609            SS$_ILLSEQOP   = 000002DC            SS$_NOTINTBLSZ = 000001D4            

SS$_CONTROLY   = 00000611            SS$_ILLSER     = 00000104            SS$_NOTLABELMT = 000001DC            

SS$_CREATED    = 00000619            SS$_ILLUSRLBLRD= 00000958            SS$_NOTMODIFIED= 00000659            

SS$_CTRLERR    = 00000054            SS$_ILLUSRLBLWT= 00000960            SS$_NOTNETDEV  = 000002EC            

SS$_DATACHECK  = 0000005C            SS$_INCVOLLABEL= 0000010C            SS$_NOTRAN     = 00000629            

SS$_DATAOVERUN = 00000838            SS$_INSFARG    = 00000114            SS$_NOTSQDEV   = 000001E4            

SS$_DEBUG      = 0000046C            SS$_INSFMEM    = 00000124            SS$_OPCCUS     = 00000434            

SS$_DECOVF     = 000004A4            SS$_INSFRAME   = 0000012C            SS$_OPCDEC     = 0000043C            

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  23

SYMBOL TABLE                                                                                                                    (20)



SS$_OPINCOMPL  = 000002D4            STS$S_FAC_SP   = 00000001            

SS$_PAGOWNVIO  = 000001EC            STS$S_INHIB_MSG= 00000001            

SS$_PAGRDERR   = 00000444            STS$S_MSG_NO   = 0000000D            

SS$_PARITY     = 000001F4            STS$S_SEVERITY = 00000003            

SS$_PARTESCAPE = 000001FC            STS$S_SUCCESS  = 00000001            

SS$_PFMBSY     = 00000204            STS$V_CODE     = 00000003            

SS$_PLHLDR     = 00000404            STS$V_COND_ID  = 00000003            

SS$_PSTFULL    = 0000020C            STS$V_CONTROL  = 0000001C            

SS$_RADRMOD    = 0000044C            STS$V_CUST_DEF = 0000001B            

SS$_REJECT     = 00000294            STS$V_FAC_NO   = 00000010            

SS$_REMOTE     = 00000649            STS$V_FAC_SP   = 0000000F            

SS$_RESIGNAL   = 00000918            STS$V_INHIB_MSG= 0000001C            

SS$_RESULTOVF  = 00000214            STS$V_MSG_NO   = 00000003            

SS$_ROPRAND    = 00000454            STS$V_SEVERITY = 00000000            

SS$_SECTBLFUL  = 0000021C            STS$V_SUCCESS  = 00000000            

SS$_SSFAIL     = 0000045C            SYS$CALL_HANDL   ********   X   01   

SS$_SUBRNG     = 000004AC            SYS$EXCMSG       ********   X   01   

SS$_SUPERSEDE  = 00000631            SYS$EXIT         ********   X   01   

SS$_TAPEPOSLOST= 00000224            SYS$GETJPI       ********   X   01   

SS$_TBIT       = 00000464            SYS$UNWIND       ********   X   01   

SS$_TIMEOUT    = 0000022C            

SS$_TOOMANYVER = 00000990            

SS$_TOOMUCHDATA= 0000029C            

SS$_UNASEFC    = 00000234            

SS$_UNSAFE     = 0000023C            

SS$_UNWIND     = 00000920            

SS$_UNWINDING  = 00000928            

SS$_VASFULL    = 00000244            

SS$_VECINUSE   = 0000024C            

SS$_VOLINV     = 00000254            

SS$_WAITUSRLBL = 00000950            

SS$_WASCLR     = 00000001            

SS$_WASECC     = 00000639            

SS$_WASSET     = 00000009            

SS$_WRITLCK    = 0000025C            

SS$_WRONGACP   = 0000031C            

STACK_PROBLEM    0000014F R     04   

STS$K_ERROR    = 00000002            

STS$K_INFO     = 00000003            

STS$K_SEVERE   = 00000004            

STS$K_SUCCESS  = 00000001            

STS$K_WARNING  = 00000000            

STS$M_CODE     = 00007FF8            

STS$M_COND_ID  = 0FFFFFF8            

STS$M_CONTROL  = F0000000            

STS$M_CUST_DEF = 08000000            

STS$M_FAC_NO   = 0FFF0000            

STS$M_FAC_SP   = 00008000            

STS$M_INHIB_MSG= 10000000            

STS$M_MSG_NO   = 0000FFF8            

STS$M_SEVERITY = 00000007            

STS$M_SUCCESS  = 00000001            

STS$S_CODE     = 0000000C            

STS$S_COND_ID  = 00000019            

STS$S_CONTROL  = 00000004            

STS$S_CUST_DEF = 00000001            

STS$S_FAC_NO   = 0000000C            

LIB$SIGNAL      - Condition Handling Facility SIGNAL and STOP    21-AUG-1978 18:59:55   VAX-11 MACRO X0.3-11               Page  24

PROGRAM SECTION SYNOPSIS                                                                                                        (20)







PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            00000018      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

LIB$DATA         00000004      03       PIC   USR   CON   REL   LCL NOSHR NOEXE   RD    WRT LONG  

LIB$CODE         00000281      04       PIC   USR   CON   REL   LCL   SHR   EXE   RD  NOWRT LONG  





THERE WERE NO ERRORS OR WARNINGS.

13216. BYTES LEFT IN FREE MEMORY POOL.

2838. BYTES OF RECLAIMED MEMORY.

OBJ$:LIBSIGNAL,LIS$:LIBSIGNAL/-SP=LIB$:S/ML,SRC$:P,LIBSIGNAL

22 MLB DIR RDS - 650 GETS TO DEFINE 20 MACROS. 54 INTER. FILE WRITES. 

