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.