Fault Handler

This is the declaration and comments associated with FaultHandler in the MCP 4.8 at 24620000.

PROCEDURE FAULTHANDLER (FAULTNUM,INFO);                                  
 VALUE FAULTNUM,INFO; 
 REAL FAULTNUM,INFO; 
 % FAULTHANDLER BECOMES PERMANENTLY RESIDENT AT INITIALIZATION 
 BEGIN  [CONTROLSTATE, SEGMENT = SEGLOCUTIL] 
 
 FAULTHANDLER TAKES CARE OF FAULT STATEMENTS IN USER AND MCP 
 CODE. 
 
 FAULT STATEMENTS COME IN TWO FLAVORS:  THE GOTO 
 VERSION AND THE PROCEDURE-CALL VERSION.  IN EITHER CASE THE USER 
 STATEMENT IS POINTED TO BY AN SIRW OR PCW FOUND IMMEDIATELY 
 ABOVE A TAG 4 WORD.  IN ADDITION THE USER MAY ASK TO HAVE THE 
 STACKHISTORY AND/OR THE FAULT NUMBER STORED IN APPROPRIATE 
 VARIABLES OF HIS CHOICE.  IN THIS CASE THERE WILL BE ONE OR TWO 
 WORDS BELOW THE TAG 4 WORD, AS INDICATED BY THE BITS 
 FAULTHISTORF AND FAULTNUMREQF IN THE TAG 4 WORD.  THESE WORDS 
 WILL BE POINTERS TO THE VARIABLES WHERE THIS INFORMATION IS TO 
 BE STORED.  FOR THE GOTO VERSION FAULTHANDLER WILL CALL 
 GOTOSOLVER TO BRANCH TO THE SPECIFIED STATEMENT.  FOR THE 
 PROCEDURE-CALL VERSION, FAULTHANDLER CALLS A 
 PROCEDURE WITH EITHER TWO OR NO PARAMETERS, DEPENDING UPON 
 FAULTNOPARAMF IN THE TAG 4 WORD: 
 
 AS OF 35.40, THE ONLY CODE THAT KNEW ABOUT THE EXISTENCE OF 
 THESE PARAMETERS IS EMITTED BY THE PL/I COMPILER, TO PASS THESE 
 WORDS TO THE PLCONDITIONS INTRINSIC.  PLCONDITIONS USES ONLY THE 
 SECOND PARAMETER.  IF ANY OTHER SOFTWARE BECOMES SENSITIVE TO 
 THESE PARAMETERS, PLEASE UPDATE THIS COMMENT:  THERE'S NO SIMPLE 
 WAY TO FIND THEM.  NOTE:  THE PL/I COMPILER IS NO LONGER   
 SHIPPED. 
 
 THE NEWP COMPILER SUPPORTS THESE TWO PARAMETERS TOO. 
 
 THE FIRST PARAMETER IS THE VALUE OF ENV_TOP IN HARDWAREINTERRUPT, 
 IF HARDWAREINTERRUPT CALLED FAULTHANDLER; OTHERWISE IT IS ZERO. 
 THE SECOND PARAMETER IS THE FAULTREASON, INCLUDING TAG6FAULTF. 
 
 THE PARAMETERS TO FAULTHANDLER ARE AS FOLLOWS: 
 
 FAULTNUM    FAULTREASON (POSSIBLY INVALIDOPV & 1 TAG6FAULTF)    
 
 ABS(INFO)   STACK OFFSET OF THE HARDWARE INTERRUPT ACTIVATION 
 RECORD (I.E. THE VALUE ENV_TOP WOULD HAVE IN HWI) 
 OR ZERO (IF NOT CALLED FROM HARDWARE INTERRUPT). 
 INFO.SIGNBITF SET CAUSES A DIAGNOSTIC DUMP, IF 
 TAKEN, TO BE "ALLINUSE" RATHER THAN "PARTIAL".      
 
 WHEN CALLING FAULTHANDLER ONE SHOULD APPROXIMATE THE 
 FOLLOWING SEQUENCE OF CODE: 
 
 SPIB[SNR,STOPPOINT]:= CONSTRUCT_STOPPOINT (MY_RCW, 
 FAULTNUM, 0); 
 FAULTHANDLER(FAULTNUM,0); 
 DSEDHISTORY(FAULTCAUSE,FAULTNUM); 
 MESSER(------------); 
 PROCESSKILL; 
 
 WARNING  WHEN WE CALL USER PROCEDURE (FAULTSTMT) HE MIGHT CALL 
 CHECKPOINT SO WE CANNOT LEAVE ANY DESCRIPTORS IN STACK.