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.