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.