FaultHandler

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.      
%