COMPILATION LISTING OF SEGMENT terminate_proc Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1001.2 mst Sat Options: optimize map 1 /****^ ****************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright (c) 1986 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* * Copyright (c) 1972 by Massachusetts Institute of * 9* * Technology and Honeywell Information Systems, Inc. * 10* * * 11* ****************************************************** */ 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(86-05-13,GJohnson), approve(86-05-13,MCR7387), 17* audit(86-05-13,Martinson), install(86-05-14,MR12.0-1056): 18* Correct error message documentation. 19* END HISTORY COMMENTS */ 20 21 22 terminate_proc: proc (a_code); 23 24 /* Date Last Modified and Reason 25* 26* Modified by E. Stone 11/73 to convert to version 2 and to allow standard error codes to be passed as arg 27* Modified by R.B.Snyder 08/08/74 to call tty_lock$cleanup_locks. 28* Modified by T. Casey April 1976 to add the init_failure entry point. 29* Modified by Mike Grady June 1979 for stack 0 sharing 30* Modified by BIM 1984 for use of ext vars in tty_buf and sst. 31**/ 32 33 dcl (a_code, code, rcode) fixed bin; 34 35 36 dcl state fixed bin, 37 fb71 fixed bin (71) based, 38 astep ptr, 39 lockname char (4) aligned; 40 41 dcl sb_num fixed bin int static init (7), 42 sp fixed bin int static init (6), 43 access fixed bin int static init (20); 44 45 declare sst$ptl bit (36) aligned external static; 46 declare tty_buf$slock bit (36) aligned external static; 47 48 dcl (error_table_$fim_fault, error_table_$no_handler, error_table_$not_ring_0, error_table_$unable_to_do_io, 49 error_table_$signaller_fault, error_table_$bad_stack_access, error_table_$bad_linkage_access, 50 error_table_$bad_handler_access, error_table_$no_fim_flag, error_table_$oob_stack, 51 error_table_$bad_bar_sp, error_table_$termination_requested) fixed bin (35) ext; 52 53 54 dcl pds$term_channel fixed bin (71) ext, 55 pds$term_proc fixed bin ext, 56 pds$processid bit (36) aligned ext, 57 pds$stack_0_ptr ptr ext, 58 tc_data$initializer_id bit (36) aligned ext, 59 tc_data$apt_lock bit (36) aligned ext, 60 (pds$signal_data, pds$fim_data) fixed bin ext, 61 (pds$apt_ptr, prds$idle_ptr) pointer ext; 62 63 dcl syserr ext entry options (variable), 64 tty_lock$cleanup_locks entry, 65 arg_count_ entry returns (fixed bin), 66 verify_lock external entry, 67 get_ptrs_$given_segno entry (fixed bin) returns (ptr), 68 pc_wired$unwire entry (ptr, fixed bin, fixed bin), 69 pxss$stop ext entry (bit (36) aligned, fixed bin), 70 pxss$force_stop ext entry, 71 pxss$wakeup ext entry (fixed bin, fixed bin (71), fixed bin (71), fixed bin); 72 73 dcl (addr, baseno, baseptr, fixed) builtin; 74 75 dcl 1 message aligned, 76 2 p ptr, /* force even */ 77 2 name char (4) aligned, 78 2 code fixed bin; 79 1 1 /* BEGIN INCLUDE FILE ... stack_header.incl.pl1 .. 3/72 Bill Silver */ 1 2 /* modified 7/76 by M. Weaver for *system links and more system use of areas */ 1 3 /* modified 3/77 by M. Weaver to add rnt_ptr */ 1 4 /* Modified April 1983 by C. Hornig for tasking */ 1 5 1 6 /****^ HISTORY COMMENTS: 1 7* 1) change(86-06-24,DGHowe), approve(86-06-24,MCR7396), 1 8* audit(86-08-05,Schroth), install(86-11-03,MR12.0-1206): 1 9* added the heap_header_ptr definition. 1 10* 2) change(86-08-12,Kissel), approve(86-08-12,MCR7473), 1 11* audit(86-10-10,Fawcett), install(86-11-03,MR12.0-1206): 1 12* Modified to support control point management. These changes were actually 1 13* made in February 1985 by G. Palter. 1 14* 3) change(86-10-22,Fawcett), approve(86-10-22,MCR7473), 1 15* audit(86-10-22,Farley), install(86-11-03,MR12.0-1206): 1 16* Remove the old_lot pointer and replace it with cpm_data_ptr. Use the 18 1 17* bit pad after cur_lot_size for the cpm_enabled. This was done to save some 1 18* space int the stack header and change the cpd_ptr unal to cpm_data_ptr 1 19* (ITS pair). 1 20* END HISTORY COMMENTS */ 1 21 1 22 /* format: style2 */ 1 23 1 24 dcl sb ptr; /* the main pointer to the stack header */ 1 25 1 26 dcl 1 stack_header based (sb) aligned, 1 27 2 pad1 (4) fixed bin, /* (0) also used as arg list by outward_call_handler */ 1 28 2 cpm_data_ptr ptr, /* (4) pointer to control point which owns this stack */ 1 29 2 combined_stat_ptr ptr, /* (6) pointer to area containing separate static */ 1 30 2 clr_ptr ptr, /* (8) pointer to area containing linkage sections */ 1 31 2 max_lot_size fixed bin (17) unal, /* (10) DU number of words allowed in lot */ 1 32 2 main_proc_invoked fixed bin (11) unal, /* (10) DL nonzero if main procedure invoked in run unit */ 1 33 2 have_static_vlas bit (1) unal, /* (10) DL "1"b if (very) large arrays are being used in static */ 1 34 2 pad4 bit (2) unal, 1 35 2 run_unit_depth fixed bin (2) unal, /* (10) DL number of active run units stacked */ 1 36 2 cur_lot_size fixed bin (17) unal, /* (11) DU number of words (entries) in lot */ 1 37 2 cpm_enabled bit (18) unal, /* (11) DL non-zero if control point management is enabled */ 1 38 2 system_free_ptr ptr, /* (12) pointer to system storage area */ 1 39 2 user_free_ptr ptr, /* (14) pointer to user storage area */ 1 40 2 null_ptr ptr, /* (16) */ 1 41 2 stack_begin_ptr ptr, /* (18) pointer to first stack frame on the stack */ 1 42 2 stack_end_ptr ptr, /* (20) pointer to next useable stack frame */ 1 43 2 lot_ptr ptr, /* (22) pointer to the lot for the current ring */ 1 44 2 signal_ptr ptr, /* (24) pointer to signal procedure for current ring */ 1 45 2 bar_mode_sp ptr, /* (26) value of sp before entering bar mode */ 1 46 2 pl1_operators_ptr ptr, /* (28) pointer to pl1_operators_$operator_table */ 1 47 2 call_op_ptr ptr, /* (30) pointer to standard call operator */ 1 48 2 push_op_ptr ptr, /* (32) pointer to standard push operator */ 1 49 2 return_op_ptr ptr, /* (34) pointer to standard return operator */ 1 50 2 return_no_pop_op_ptr 1 51 ptr, /* (36) pointer to standard return / no pop operator */ 1 52 2 entry_op_ptr ptr, /* (38) pointer to standard entry operator */ 1 53 2 trans_op_tv_ptr ptr, /* (40) pointer to translator operator ptrs */ 1 54 2 isot_ptr ptr, /* (42) pointer to ISOT */ 1 55 2 sct_ptr ptr, /* (44) pointer to System Condition Table */ 1 56 2 unwinder_ptr ptr, /* (46) pointer to unwinder for current ring */ 1 57 2 sys_link_info_ptr ptr, /* (48) pointer to *system link name table */ 1 58 2 rnt_ptr ptr, /* (50) pointer to Reference Name Table */ 1 59 2 ect_ptr ptr, /* (52) pointer to event channel table */ 1 60 2 assign_linkage_ptr ptr, /* (54) pointer to storage for (obsolete) hcs_$assign_linkage */ 1 61 2 heap_header_ptr ptr, /* (56) pointer to the heap header for this ring */ 1 62 2 trace, 1 63 3 frames, 1 64 4 count fixed bin, /* (58) number of trace frames */ 1 65 4 top_ptr ptr unal, /* (59) pointer to last trace frame */ 1 66 3 in_trace bit (36) aligned, /* (60) trace antirecursion flag */ 1 67 2 pad2 bit (36), /* (61) */ 1 68 2 pad5 pointer; /* (62) pointer to future stuff */ 1 69 1 70 /* The following offset refers to a table within the pl1 operator table. */ 1 71 1 72 dcl tv_offset fixed bin init (361) internal static; 1 73 /* (551) octal */ 1 74 1 75 1 76 /* The following constants are offsets within this transfer vector table. */ 1 77 1 78 dcl ( 1 79 call_offset fixed bin init (271), 1 80 push_offset fixed bin init (272), 1 81 return_offset fixed bin init (273), 1 82 return_no_pop_offset fixed bin init (274), 1 83 entry_offset fixed bin init (275) 1 84 ) internal static; 1 85 1 86 1 87 1 88 1 89 1 90 /* The following declaration is an overlay of the whole stack header. Procedures which 1 91* move the whole stack header should use this overlay. 1 92**/ 1 93 1 94 dcl stack_header_overlay (size (stack_header)) fixed bin based (sb); 1 95 1 96 1 97 1 98 /* END INCLUDE FILE ... stack_header.incl.pl1 */ 80 2 1 /* */ 2 2 /* BEGIN INCLUDE FILE mc.incl.pl1 Created Dec 72 for 6180 - WSS. */ 2 3 /* Modified 06/07/76 by Greenberg for mc.resignal */ 2 4 /* Modified 07/07/76 by Morris for fault register data */ 2 5 /* Modified 08/28/80 by J. A. Bush for the DPS8/70M CVPU */ 2 6 /* Modified '82 to make values constant */ 2 7 2 8 /* words 0-15 pointer registers */ 2 9 2 10 dcl mcp ptr; 2 11 2 12 dcl 1 mc based (mcp) aligned, 2 13 2 prs (0:7) ptr, /* POINTER REGISTERS */ 2 14 (2 regs, /* registers */ 2 15 3 x (0:7) bit (18), /* index registers */ 2 16 3 a bit (36), /* accumulator */ 2 17 3 q bit (36), /* q-register */ 2 18 3 e bit (8), /* exponent */ 2 19 3 pad1 bit (28), 2 20 3 t bit (27), /* timer register */ 2 21 3 pad2 bit (6), 2 22 3 ralr bit (3), /* ring alarm register */ 2 23 2 24 2 scu (0:7) bit (36), 2 25 2 26 2 mask bit (72), /* mem controller mask at time of fault */ 2 27 2 ips_temp bit (36), /* Temporary storage for IPS info */ 2 28 2 errcode fixed bin (35), /* fault handler's error code */ 2 29 2 fim_temp, 2 30 3 unique_index bit (18) unal, /* unique index for restarting faults */ 2 31 3 resignal bit (1) unal, /* recompute signal name with fcode below */ 2 32 3 fcode bit (17) unal, /* fault code used as index to FIM table and SCT */ 2 33 2 fault_reg bit (36), /* fault register */ 2 34 2 pad2 bit (1), 2 35 2 cpu_type fixed bin (2) unsigned, /* L68 = 0, DPS8/70M = 1 */ 2 36 2 ext_fault_reg bit (15), /* extended fault reg for DPS8/70M CPU */ 2 37 2 fault_time bit (54), /* time of fault */ 2 38 2 39 2 eis_info (0:7) bit (36)) unaligned; 2 40 2 41 2 42 dcl (apx fixed bin init (0), 2 43 abx fixed bin init (1), 2 44 bpx fixed bin init (2), 2 45 bbx fixed bin init (3), 2 46 lpx fixed bin init (4), 2 47 lbx fixed bin init (5), 2 48 spx fixed bin init (6), 2 49 sbx fixed bin init (7)) internal static options (constant); 2 50 2 51 2 52 2 53 2 54 dcl scup ptr; 2 55 2 56 dcl 1 scu based (scup) aligned, /* SCU DATA */ 2 57 2 58 2 59 /* WORD (0) */ 2 60 2 61 (2 ppr, /* PROCEDURE POINTER REGISTER */ 2 62 3 prr bit (3), /* procedure ring register */ 2 63 3 psr bit (15), /* procedure segment register */ 2 64 3 p bit (1), /* procedure privileged bit */ 2 65 2 66 2 apu, /* APPENDING UNIT STATUS */ 2 67 3 xsf bit (1), /* ext seg flag - IT modification */ 2 68 3 sdwm bit (1), /* match in SDW Ass. Mem. */ 2 69 3 sd_on bit (1), /* SDW Ass. Mem. ON */ 2 70 3 ptwm bit (1), /* match in PTW Ass. Mem. */ 2 71 3 pt_on bit (1), /* PTW Ass. Mem. ON */ 2 72 3 pi_ap bit (1), /* Instr Fetch or Append cycle */ 2 73 3 dsptw bit (1), /* Fetch of DSPTW */ 2 74 3 sdwnp bit (1), /* Fetch of SDW non paged */ 2 75 3 sdwp bit (1), /* Fetch of SDW paged */ 2 76 3 ptw bit (1), /* Fetch of PTW */ 2 77 3 ptw2 bit (1), /* Fetch of pre-paged PTW */ 2 78 3 fap bit (1), /* Fetch of final address paged */ 2 79 3 fanp bit (1), /* Fetch of final address non-paged */ 2 80 3 fabs bit (1), /* Fetch of final address absolute */ 2 81 2 82 2 fault_cntr bit (3), /* number of retrys of EIS instructions */ 2 83 2 84 2 85 /* WORD (1) */ 2 86 2 87 2 fd, /* FAULT DATA */ 2 88 3 iro bit (1), /* illegal ring order */ 2 89 3 oeb bit (1), /* out of execute bracket */ 2 90 3 e_off bit (1), /* no execute */ 2 91 3 orb bit (1), /* out of read bracket */ 2 92 3 r_off bit (1), /* no read */ 2 93 3 owb bit (1), /* out of write bracket */ 2 94 3 w_off bit (1), /* no write */ 2 95 3 no_ga bit (1), /* not a gate */ 2 96 3 ocb bit (1), /* out of call bracket */ 2 97 3 ocall bit (1), /* outward call */ 2 98 3 boc bit (1), /* bad outward call */ 2 99 3 inret bit (1), /* inward return */ 2 100 3 crt bit (1), /* cross ring transfer */ 2 101 3 ralr bit (1), /* ring alarm register */ 2 102 3 am_er bit (1), /* associative memory fault */ 2 103 3 oosb bit (1), /* out of segment bounds */ 2 104 3 paru bit (1), /* processor parity upper */ 2 105 3 parl bit (1), /* processor parity lower */ 2 106 3 onc_1 bit (1), /* op not complete type 1 */ 2 107 3 onc_2 bit (1), /* op not complete type 2 */ 2 108 2 109 2 port_stat, /* PORT STATUS */ 2 110 3 ial bit (4), /* illegal action lines */ 2 111 3 iac bit (3), /* illegal action channel */ 2 112 3 con_chan bit (3), /* connect channel */ 2 113 2 114 2 fi_num bit (5), /* (fault/interrupt) number */ 2 115 2 fi_flag bit (1), /* 1 => fault, 0 => interrupt */ 2 116 2 117 2 118 /* WORD (2) */ 2 119 2 120 2 tpr, /* TEMPORARY POINTER REGISTER */ 2 121 3 trr bit (3), /* temporary ring register */ 2 122 3 tsr bit (15), /* temporary segment register */ 2 123 2 124 2 pad2 bit (9), 2 125 2 126 2 cpu_no bit (3), /* CPU number */ 2 127 2 128 2 delta bit (6), /* tally modification DELTA */ 2 129 2 130 2 131 /* WORD (3) */ 2 132 2 133 2 word3 bit (18), 2 134 2 135 2 tsr_stat, /* TSR STATUS for 1,2,&3 word instructions */ 2 136 3 tsna, /* Word 1 status */ 2 137 4 prn bit (3), /* Word 1 PR number */ 2 138 4 prv bit (1), /* Word 1 PR valid bit */ 2 139 3 tsnb, /* Word 2 status */ 2 140 4 prn bit (3), /* Word 2 PR number */ 2 141 4 prv bit (1), /* Word 2 PR valid bit */ 2 142 3 tsnc, /* Word 3 status */ 2 143 4 prn bit (3), /* Word 3 PR number */ 2 144 4 prv bit (1), /* Word 3 PR valid bit */ 2 145 2 146 2 tpr_tbr bit (6), /* TPR.TBR field */ 2 147 2 148 2 149 /* WORD (4) */ 2 150 2 151 2 ilc bit (18), /* INSTRUCTION COUNTER */ 2 152 2 153 2 ir, /* INDICATOR REGISTERS */ 2 154 3 zero bit (1), /* zero indicator */ 2 155 3 neg bit (1), /* negative indicator */ 2 156 3 carry bit (1), /* carryry indicator */ 2 157 3 ovfl bit (1), /* overflow indicator */ 2 158 3 eovf bit (1), /* eponent overflow */ 2 159 3 eufl bit (1), /* exponent underflow */ 2 160 3 oflm bit (1), /* overflow mask */ 2 161 3 tro bit (1), /* tally runout */ 2 162 3 par bit (1), /* parity error */ 2 163 3 parm bit (1), /* parity mask */ 2 164 3 bm bit (1), /* ^bar mode */ 2 165 3 tru bit (1), /* truncation mode */ 2 166 3 mif bit (1), /* multi-word instruction mode */ 2 167 3 abs bit (1), /* absolute mode */ 2 168 3 hex bit (1), /* hexadecimal exponent mode */ 2 169 3 pad bit (3), 2 170 2 171 2 172 /* WORD (5) */ 2 173 2 174 2 ca bit (18), /* COMPUTED ADDRESS */ 2 175 2 176 2 cu, /* CONTROL UNIT STATUS */ 2 177 3 rf bit (1), /* on first cycle of repeat instr */ 2 178 3 rpt bit (1), /* repeat instruction */ 2 179 3 rd bit (1), /* repeat double instruction */ 2 180 3 rl bit (1), /* repeat link instruciton */ 2 181 3 pot bit (1), /* IT modification */ 2 182 3 pon bit (1), /* return type instruction */ 2 183 3 xde bit (1), /* XDE from Even location */ 2 184 3 xdo bit (1), /* XDE from Odd location */ 2 185 3 poa bit (1), /* operation preparation */ 2 186 3 rfi bit (1), /* tells CPU to refetch instruction */ 2 187 3 its bit (1), /* ITS modification */ 2 188 3 if bit (1), /* fault occured during instruction fetch */ 2 189 2 190 2 cpu_tag bit (6)) unaligned, /* computed tag field */ 2 191 2 192 2 193 /* WORDS (6,7) */ 2 194 2 195 2 even_inst bit (36), /* even instruction of faulting pair */ 2 196 2 197 2 odd_inst bit (36); /* odd instruction of faulting pair */ 2 198 2 199 2 200 2 201 2 202 2 203 2 204 /* ALTERNATE SCU DECLARATION */ 2 205 2 206 2 207 dcl 1 scux based (scup) aligned, 2 208 2 209 (2 pad0 bit (36), 2 210 2 211 2 fd, /* GROUP II FAULT DATA */ 2 212 3 isn bit (1), /* illegal segment number */ 2 213 3 ioc bit (1), /* illegal op code */ 2 214 3 ia_am bit (1), /* illegal address - modifier */ 2 215 3 isp bit (1), /* illegal slave procedure */ 2 216 3 ipr bit (1), /* illegal procedure */ 2 217 3 nea bit (1), /* non existent address */ 2 218 3 oobb bit (1), /* out of bounds */ 2 219 3 pad bit (29), 2 220 2 221 2 pad2 bit (36), 2 222 2 223 2 pad3a bit (18), 2 224 2 225 2 tsr_stat (0:2), /* TSR STATUS as an ARRAY */ 2 226 3 prn bit (3), /* PR number */ 2 227 3 prv bit (1), /* PR valid bit */ 2 228 2 229 2 pad3b bit (6)) unaligned, 2 230 2 231 2 pad45 (0:1) bit (36), 2 232 2 233 2 instr (0:1) bit (36); /* Instruction ARRAY */ 2 234 2 235 2 236 2 237 /* END INCLUDE FILE mc.incl.pl1 */ 81 3 1 /* BEGIN INCLUDE FILE its.incl.pl1 3 2* modified 27 July 79 by JRDavis to add its_unsigned 3 3* Internal format of ITS pointer, including ring-number field for follow-on processor */ 3 4 3 5 dcl 1 its based aligned, /* declaration for ITS type pointer */ 3 6 2 pad1 bit (3) unaligned, 3 7 2 segno bit (15) unaligned, /* segment number within the pointer */ 3 8 2 ringno bit (3) unaligned, /* ring number within the pointer */ 3 9 2 pad2 bit (9) unaligned, 3 10 2 its_mod bit (6) unaligned, /* should be 43(8) */ 3 11 3 12 2 offset bit (18) unaligned, /* word offset within the addressed segment */ 3 13 2 pad3 bit (3) unaligned, 3 14 2 bit_offset bit (6) unaligned, /* bit offset within the word */ 3 15 2 pad4 bit (3) unaligned, 3 16 2 mod bit (6) unaligned; /* further modification */ 3 17 3 18 dcl 1 itp based aligned, /* declaration for ITP type pointer */ 3 19 2 pr_no bit (3) unaligned, /* number of pointer register to use */ 3 20 2 pad1 bit (27) unaligned, 3 21 2 itp_mod bit (6) unaligned, /* should be 41(8) */ 3 22 3 23 2 offset bit (18) unaligned, /* word offset from pointer register word offset */ 3 24 2 pad2 bit (3) unaligned, 3 25 2 bit_offset bit (6) unaligned, /* bit offset relative to new word offset */ 3 26 2 pad3 bit (3) unaligned, 3 27 2 mod bit (6) unaligned; /* further modification */ 3 28 3 29 3 30 dcl 1 its_unsigned based aligned, /* just like its, but with unsigned binary */ 3 31 2 pad1 bit (3) unaligned, 3 32 2 segno fixed bin (15) unsigned unaligned, 3 33 2 ringno fixed bin (3) unsigned unaligned, 3 34 2 pad2 bit (9) unaligned, 3 35 2 its_mod bit (6) unaligned, 3 36 3 37 2 offset fixed bin (18) unsigned unaligned, 3 38 2 pad3 bit (3) unaligned, 3 39 2 bit_offset fixed bin (6) unsigned unaligned, 3 40 2 pad4 bit (3) unaligned, 3 41 2 mod bit (6) unaligned; 3 42 3 43 dcl 1 itp_unsigned based aligned, /* just like itp, but with unsigned binary where appropriate */ 3 44 2 pr_no fixed bin (3) unsigned unaligned, 3 45 2 pad1 bit (27) unaligned, 3 46 2 itp_mod bit (6) unaligned, 3 47 3 48 2 offset fixed bin (18) unsigned unaligned, 3 49 2 pad2 bit (3) unaligned, 3 50 2 bit_offset fixed bin (6) unsigned unaligned, 3 51 2 pad3 bit (3) unaligned, 3 52 2 mod bit (6) unaligned; 3 53 3 54 3 55 dcl ITS_MODIFIER bit (6) unaligned internal static options (constant) init ("43"b3); 3 56 dcl ITP_MODIFIER bit (6) unaligned internal static options (constant) init ("41"b3); 3 57 3 58 /* END INCLUDE FILE its.incl.pl1 */ 82 83 84 85 86 87 88 message.name = "term"; /* send "term"xxxx wakeup to answering service; xxxx is an 89* error_table_ code, and "term" says to the answering service: 90* "Fatal process error. Please create a new process." */ 91 goto common; 92 93 init_failure: entry (a_code); /* This entry point sends "init"xxxx wakeup */ 94 message.name = "init"; /* "init" says to the answering service: 95* Fatal error during process initialization. Don't bother 96* creating a new process, because it would fail in the same way." 97* This prevents some fatal process error loops. */ 98 common: 99 100 if arg_count_ () > 0 then code = a_code; /* if arg given use it */ 101 else code = 0; /* otherwise set code so 102* error_table_$termination_requested is used */ 103 104 if pds$processid = tc_data$initializer_id then 105 call syserr (1, "attempt to terminate initializer process"); 106 107 if pds$apt_ptr = prds$idle_ptr then 108 call syserr (1, "attempt to terminate an idle process"); 109 110 lockname = "none"; 111 call verify_lock; /* check locks */ 112 if sst$ptl = pds$processid then lockname = "ptl"; 113 else if tty_buf$slock = pds$processid then lockname = "tty"; 114 else if tc_data$apt_lock = pds$processid then lockname = "apt"; 115 if lockname ^= "none" then 116 call syserr (1, "attempt to terminate process with ^a lock set", lockname); 117 118 call tty_lock$cleanup_locks; /* make sure no per-process lock left locked */ 119 120 if code <= 0 then do; /* If argument is non-positive, then code must be mapped */ 121 if code = -1 then rcode = error_table_$fim_fault; 122 else if code = -2 then rcode = error_table_$no_handler; 123 else if code = -3 then rcode = error_table_$not_ring_0; 124 else if code = -4 then rcode = error_table_$signaller_fault; 125 else if code = -5 then rcode = error_table_$bad_stack_access; 126 else if code = -6 then rcode = error_table_$bad_handler_access; 127 else if code = -7 then rcode = error_table_$no_fim_flag; 128 else if code = -8 then rcode = error_table_$unable_to_do_io; 129 else if code = -9 then rcode = error_table_$termination_requested; 130 else if code = -10 then rcode = error_table_$bad_bar_sp; 131 else rcode = error_table_$termination_requested; /* default code */ 132 end; 133 else rcode = code; /* If argument was positive, assume it is a standard error code */ 134 if rcode = error_table_$fim_fault | rcode = error_table_$signaller_fault then do; 135 if rcode = error_table_$signaller_fault then 136 mcp = addr (pds$signal_data); 137 else mcp = addr (pds$fim_data); 138 scup = addr (mcp -> mc.scu (0)); 139 if fixed (scup -> scu.fi_num, 5) = access then do; 140 if scup -> scu.fd.oosb then 141 if fixed (baseno (mcp -> mc.prs (sp)), 18) = fixed (scup -> scu.tpr.tsr, 15) 142 then rcode = error_table_$oob_stack; 143 if fixed (baseno (mcp -> mc.prs (sb_num) -> stack_header.lot_ptr), 18) = 144 fixed (scup -> scu.tpr.tsr, 15) then rcode = error_table_$bad_linkage_access; 145 end; 146 end; 147 message.code = rcode; 148 call pxss$wakeup (pds$term_proc, pds$term_channel, addr (message.name) -> fb71, state); 149 150 call pxss$stop (pds$processid, state); /* first step at stopping process */ 151 152 astep = get_ptrs_$given_segno (fixed (baseno (pds$stack_0_ptr), 17)); 153 call pc_wired$unwire (astep, 0, -1); /* unwire all stack pages */ 154 155 sb = baseptr (baseno (pds$stack_0_ptr)); /* ptr to base of stack seg */ 156 stack_header.stack_end_ptr = stack_header.stack_begin_ptr; /* dump stack history */ 157 158 call pxss$force_stop; 159 160 161 /* BEGIN MESSAGE DOCUMENTATION 162* 163* Message: 164* attempt to terminate initializer process 165* 166* S: $crash 167* 168* T: $run 169* 170* M: $err 171* 172* A: $recover 173* 174* 175* Message: 176* attempt to terminate an idle process 177* 178* S: $crash 179* 180* T: $run 181* 182* M: $err 183* 184* A: $recover 185* 186* 187* Message: 188* attempt to terminate process with TYPE lock set 189* 190* S: $crash 191* 192* T: $run 193* 194* M: $err 195* 196* A: $recover 197* 198* 199* END MESSAGE DOCUMENTATION */ 200 201 end terminate_proc; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0838.7 terminate_proc.pl1 >special_ldd>install>MR12.3-1114>terminate_proc.pl1 80 1 11/07/86 1550.3 stack_header.incl.pl1 >ldd>include>stack_header.incl.pl1 81 2 12/15/83 1100.4 mc.incl.pl1 >ldd>include>mc.incl.pl1 82 3 11/26/79 1320.6 its.incl.pl1 >ldd>include>its.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. a_code parameter fixed bin(17,0) dcl 33 ref 22 93 98 access constant fixed bin(17,0) initial dcl 41 ref 139 addr builtin function dcl 73 ref 135 137 138 148 arg_count_ 000074 constant entry external dcl 63 ref 98 astep 000104 automatic pointer dcl 36 set ref 152* 153* baseno builtin function dcl 73 ref 140 143 152 152 155 baseptr builtin function dcl 73 ref 155 code 000100 automatic fixed bin(17,0) dcl 33 in procedure "terminate_proc" set ref 98* 101* 120 121 122 123 124 125 126 127 128 129 130 133 code 3 000110 automatic fixed bin(17,0) level 2 in structure "message" dcl 75 in procedure "terminate_proc" set ref 147* error_table_$bad_bar_sp 000040 external static fixed bin(35,0) dcl 48 ref 130 error_table_$bad_handler_access 000032 external static fixed bin(35,0) dcl 48 ref 126 error_table_$bad_linkage_access 000030 external static fixed bin(35,0) dcl 48 ref 143 error_table_$bad_stack_access 000026 external static fixed bin(35,0) dcl 48 ref 125 error_table_$fim_fault 000014 external static fixed bin(35,0) dcl 48 ref 121 134 error_table_$no_fim_flag 000034 external static fixed bin(35,0) dcl 48 ref 127 error_table_$no_handler 000016 external static fixed bin(35,0) dcl 48 ref 122 error_table_$not_ring_0 000020 external static fixed bin(35,0) dcl 48 ref 123 error_table_$oob_stack 000036 external static fixed bin(35,0) dcl 48 ref 140 error_table_$signaller_fault 000024 external static fixed bin(35,0) dcl 48 ref 124 134 135 error_table_$termination_requested 000042 external static fixed bin(35,0) dcl 48 ref 129 131 error_table_$unable_to_do_io 000022 external static fixed bin(35,0) dcl 48 ref 128 fb71 based fixed bin(71,0) dcl 36 set ref 148* fd 1 based structure level 2 packed packed unaligned dcl 2-56 fi_num 1(30) based bit(5) level 2 packed packed unaligned dcl 2-56 ref 139 fixed builtin function dcl 73 ref 139 140 140 143 143 152 152 get_ptrs_$given_segno 000100 constant entry external dcl 63 ref 152 lockname 000106 automatic char(4) dcl 36 set ref 110* 112* 113* 114* 115 115* lot_ptr 26 based pointer level 2 dcl 1-26 ref 143 mc based structure level 1 dcl 2-12 mcp 000116 automatic pointer dcl 2-10 set ref 135* 137* 138 140 143 message 000110 automatic structure level 1 dcl 75 name 2 000110 automatic char(4) level 2 dcl 75 set ref 88* 94* 148 oosb 1(15) based bit(1) level 3 packed packed unaligned dcl 2-56 ref 140 pc_wired$unwire 000102 constant entry external dcl 63 ref 153 pds$apt_ptr 000064 external static pointer dcl 54 ref 107 pds$fim_data 000062 external static fixed bin(17,0) dcl 54 set ref 137 pds$processid 000050 external static bit(36) dcl 54 set ref 104 112 113 114 150* pds$signal_data 000060 external static fixed bin(17,0) dcl 54 set ref 135 pds$stack_0_ptr 000052 external static pointer dcl 54 ref 152 152 155 pds$term_channel 000044 external static fixed bin(71,0) dcl 54 set ref 148* pds$term_proc 000046 external static fixed bin(17,0) dcl 54 set ref 148* prds$idle_ptr 000066 external static pointer dcl 54 ref 107 prs based pointer array level 2 dcl 2-12 ref 140 143 pxss$force_stop 000106 constant entry external dcl 63 ref 158 pxss$stop 000104 constant entry external dcl 63 ref 150 pxss$wakeup 000110 constant entry external dcl 63 ref 148 rcode 000101 automatic fixed bin(17,0) dcl 33 set ref 121* 122* 123* 124* 125* 126* 127* 128* 129* 130* 131* 133* 134 134 135 140* 143* 147 sb 000114 automatic pointer dcl 1-24 set ref 155* 156 156 sb_num constant fixed bin(17,0) initial dcl 41 ref 143 scu based structure level 1 dcl 2-56 in procedure "terminate_proc" scu 30 based bit(36) array level 2 in structure "mc" packed packed unaligned dcl 2-12 in procedure "terminate_proc" set ref 138 scup 000120 automatic pointer dcl 2-54 set ref 138* 139 140 140 143 sp constant fixed bin(17,0) initial dcl 41 ref 140 sst$ptl 000010 external static bit(36) dcl 45 ref 112 stack_begin_ptr 22 based pointer level 2 dcl 1-26 ref 156 stack_end_ptr 24 based pointer level 2 dcl 1-26 set ref 156* stack_header based structure level 1 dcl 1-26 state 000102 automatic fixed bin(17,0) dcl 36 set ref 148* 150* syserr 000070 constant entry external dcl 63 ref 104 107 115 tc_data$apt_lock 000056 external static bit(36) dcl 54 ref 114 tc_data$initializer_id 000054 external static bit(36) dcl 54 ref 104 tpr 2 based structure level 2 packed packed unaligned dcl 2-56 tsr 2(03) based bit(15) level 3 packed packed unaligned dcl 2-56 ref 140 143 tty_buf$slock 000012 external static bit(36) dcl 46 ref 113 tty_lock$cleanup_locks 000072 constant entry external dcl 63 ref 118 verify_lock 000076 constant entry external dcl 63 ref 111 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ITP_MODIFIER internal static bit(6) initial packed unaligned dcl 3-56 ITS_MODIFIER internal static bit(6) initial packed unaligned dcl 3-55 abx internal static fixed bin(17,0) initial dcl 2-42 apx internal static fixed bin(17,0) initial dcl 2-42 bbx internal static fixed bin(17,0) initial dcl 2-42 bpx internal static fixed bin(17,0) initial dcl 2-42 call_offset internal static fixed bin(17,0) initial dcl 1-78 entry_offset internal static fixed bin(17,0) initial dcl 1-78 itp based structure level 1 dcl 3-18 itp_unsigned based structure level 1 dcl 3-43 its based structure level 1 dcl 3-5 its_unsigned based structure level 1 dcl 3-30 lbx internal static fixed bin(17,0) initial dcl 2-42 lpx internal static fixed bin(17,0) initial dcl 2-42 push_offset internal static fixed bin(17,0) initial dcl 1-78 return_no_pop_offset internal static fixed bin(17,0) initial dcl 1-78 return_offset internal static fixed bin(17,0) initial dcl 1-78 sbx internal static fixed bin(17,0) initial dcl 2-42 scux based structure level 1 dcl 2-207 spx internal static fixed bin(17,0) initial dcl 2-42 stack_header_overlay based fixed bin(17,0) array dcl 1-94 tv_offset internal static fixed bin(17,0) initial dcl 1-72 NAMES DECLARED BY EXPLICIT CONTEXT. common 000100 constant label dcl 98 ref 91 init_failure 000071 constant entry external dcl 93 terminate_proc 000057 constant entry external dcl 22 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1156 1270 556 1166 Length 1564 556 112 260 377 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME terminate_proc 134 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME terminate_proc 000100 code terminate_proc 000101 rcode terminate_proc 000102 state terminate_proc 000104 astep terminate_proc 000106 lockname terminate_proc 000110 message terminate_proc 000114 sb terminate_proc 000116 mcp terminate_proc 000120 scup terminate_proc THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. arg_count_ get_ptrs_$given_segno pc_wired$unwire pxss$force_stop pxss$stop pxss$wakeup syserr tty_lock$cleanup_locks verify_lock THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_bar_sp error_table_$bad_handler_access error_table_$bad_linkage_access error_table_$bad_stack_access error_table_$fim_fault error_table_$no_fim_flag error_table_$no_handler error_table_$not_ring_0 error_table_$oob_stack error_table_$signaller_fault error_table_$termination_requested error_table_$unable_to_do_io pds$apt_ptr pds$fim_data pds$processid pds$signal_data pds$stack_0_ptr pds$term_channel pds$term_proc prds$idle_ptr sst$ptl tc_data$apt_lock tc_data$initializer_id tty_buf$slock LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000054 88 000064 91 000066 93 000067 94 000076 98 000100 101 000115 104 000116 107 000143 110 000171 111 000173 112 000200 113 000207 114 000215 115 000222 118 000252 120 000257 121 000261 122 000267 123 000275 124 000303 125 000311 126 000317 127 000325 128 000333 129 000341 130 000347 131 000355 132 000360 133 000361 134 000362 135 000367 137 000374 138 000376 139 000400 140 000405 143 000424 147 000441 148 000443 150 000457 152 000470 153 000507 155 000525 156 000535 158 000537 201 000543 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved