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.