COMPILATION LISTING OF SEGMENT link_trap_caller_ 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 0957.6 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(86-05-02,Elhard), approve(86-05-02,MCR7391), 17* audit(86-07-18,DGHowe), install(86-11-20,MR12.0-1222): 18* Modified to trap damaged_object_msf_ condition and return a code to 19* caller. 20* END HISTORY COMMENTS */ 21 22 23 /* format: style3,^indnoniterdo */ 24 link_trap_caller_: 25 proc (dummy_ptr, mcptr, header_ptr, def_ptr, type_ptr, link_ptr, ecode_ptr); 26 27 /* This procedure is "called" from the linker so that it can call trap procedures 28* in the original faulting ring. It is always called with 7 arguments, but 29* only mcptr and header_ptr are relevant for traps-at-first-reference. 30* Only mcptr is really necessary, but the others are 31* needed at some point and the linker already had their values. 32**/ 33 /* coded by M. B. Weaver 5/17/73 */ 34 /* modified 1/2/83 by M. Weaver to handle traps for VLA common */ 35 /* modified 2/5/85 by M. Weaver to reset aborted first reference traps */ 36 37 declare dummy_ptr ptr; /* dummy pointer so that mcptr is second arg so cleanup handler will work */ 38 declare (mcptr, header_ptr, def_ptr, type_ptr, link_ptr, ecode_ptr) 39 ptr; 40 declare (trap_ptr, call_ptr_ptr, arg_ptr_ptr, fr_ptr, nsp) 41 ptr; 42 declare call_ptr ptr based; 43 44 declare trap_proc entry variable options (variable); 45 declare cu_$make_entry_value 46 entry (pointer, entry); 47 declare i fixed bin; 48 declare indirect bit (6) aligned static init ("010000"b) options (constant); 49 declare ecode fixed bin (35) based; 50 declare ec fixed bin (35); 51 declare ( 52 error_table_$bad_first_ref_trap, 53 error_table_$bad_trap_before_link, 54 error_table_$inconsistent_object_msf, 55 error_table_$no_vla_support 56 ) ext fixed bin (35); 57 58 59 declare (addr, addrel, baseptr, null) 60 builtin; 61 62 declare cleanup condition; 63 declare object_msf_damaged_ condition; 64 65 declare cu_$stack_frame_ptr entry () returns (ptr); 66 declare nonlocal_goto_$same_ring 67 entry (ptr, ptr); 68 declare signal_ ext entry options (variable); 69 declare hcs_$make_entry entry (ptr, char (*), char (*), entry, fixed bin (35)); 70 declare term_$nomakeunknown entry (ptr, fixed bin (35)); 71 72 declare 1 fr_traps based aligned, /* describes first reference trap array */ 73 2 dcl_vers fixed bin, 74 2 n_traps fixed bin, 75 2 trap_ptrs (1000) aligned, 76 3 call_ptr bit (18) unaligned, 77 3 arg_ptr bit (18) unaligned; 78 79 declare 1 instr (0:1) based aligned, 80 2 address bit (18) unal, 81 2 op_code bit (12) unal, 82 2 mod bit (6) unal; 83 84 /* */ 85 if def_ptr = null 86 then do; /* first reference trap case */ 87 /* here header_ptr points to the base of the linkage section being 88* linked to */ 89 90 fr_ptr = 91 addrel (header_ptr, header_ptr -> header.original_linkage_ptr -> virgin_linkage_header.first_ref_relp) 92 ; /* get ptr to trap structure */ 93 94 header_ptr -> its.pad4 = "0"b; /* don't want to go through this again */ 95 96 if fr_ptr -> fr_traps.dcl_vers ^= 1 97 then do; /* not something we know about */ 98 ec = error_table_$bad_first_ref_trap; 99 sig_err: 100 if mcptr ^= null 101 then do; /* must abort; signal linkage_error */ 102 mcptr -> mc.errcode = ec; 103 call signal_ ("linkage_error", mcptr); 104 end; 105 else ecode_ptr -> ecode = ec; /* linker was called; can return code */ 106 end; 107 108 else do; 109 on cleanup call term_$nomakeunknown (baseptr (header_ptr -> header.stats.segment_number), ec); 110 /* reset first ref trap if aborted */ 111 on object_msf_damaged_ begin; 112 ec = error_table_$inconsistent_object_msf; 113 goto sig_err; 114 end; 115 116 do i = 1 to fr_ptr -> fr_traps.n_traps; /* call all trap procedures */ 117 call_ptr_ptr = addrel (header_ptr, fr_ptr -> fr_traps.call_ptr (i)); 118 if fr_ptr -> fr_traps.arg_ptr (i) ^= ""b 119 then arg_ptr_ptr = addrel (header_ptr, fr_ptr -> fr_traps.arg_ptr (i)); 120 else arg_ptr_ptr = null; 121 call cu_$make_entry_value (call_ptr_ptr -> call_ptr, trap_proc); 122 call trap_proc (arg_ptr_ptr); 123 end; 124 revert object_msf_damaged_; 125 end; 126 127 end; 128 129 else if header_ptr = null /* VLA common trap */ 130 then do; 131 call hcs_$make_entry (null, "fortran_storage_", "resolve_VLA_COMMON_link", trap_proc, ec); 132 if ec ^= 0 133 then do; 134 ec = error_table_$no_vla_support; 135 go to sig_err; 136 end; 137 call trap_proc (link_ptr, def_ptr, type_ptr, ec); 138 if ec ^= 0 139 then go to sig_err; 140 else if mcptr ^= null /* following code should be the same */ 141 then do; /* as adjust_mc proc in link_snap */ 142 143 /* This code modifies the hardware machine conditions so that they may be 144* restarted without retaking the linkage fault. */ 145 146 scup = addr (mcptr -> mc.scu (0)); /* get ptr to SCU data */ 147 addr (scu.even_inst) -> instr (0).address = scu.ca; 148 addr (scu.even_inst) -> instr (0).mod = indirect; 149 end; 150 end; 151 152 else do; /* trap before link case */ 153 trap_ptr = addrel (def_ptr, type_ptr -> type_pair.trap_ptr); 154 call_ptr_ptr = addrel (header_ptr, trap_ptr -> trap_word.call_ptr); 155 if trap_ptr -> trap_word.arg_ptr ^= ""b 156 then arg_ptr_ptr = addrel (header_ptr, trap_ptr -> trap_word.arg_ptr); 157 else arg_ptr_ptr = null (); 158 call cu_$make_entry_value (call_ptr_ptr -> call_ptr, trap_proc); 159 call trap_proc (arg_ptr_ptr, mcptr, link_ptr); 160 if link_ptr -> link.ft2 ^= "100011"b 161 then do; /* link was not snapped; will loop if try to restart */ 162 ec = error_table_$bad_trap_before_link; 163 go to sig_err; 164 end; 165 end; 166 167 /* now return to proc that invoked linker; if there was a fault, 168* restore mc (refetch bit has already been turned on); otherwise just "return" */ 169 170 if mcptr = null 171 then do; /* return to caller of linker */ 172 sp = cu_$stack_frame_ptr (); /* get ptr to current stack frame */ 173 nsp = sp -> stack_frame.prev_sp -> stack_frame.prev_sp; 174 call nonlocal_goto_$same_ring (nsp, nsp -> stack_frame.return_ptr); 175 end; 176 177 else return; /* and let signaller restore mc */ 178 /* */ 1 1 /* */ 1 2 /* BEGIN INCLUDE FILE mc.incl.pl1 Created Dec 72 for 6180 - WSS. */ 1 3 /* Modified 06/07/76 by Greenberg for mc.resignal */ 1 4 /* Modified 07/07/76 by Morris for fault register data */ 1 5 /* Modified 08/28/80 by J. A. Bush for the DPS8/70M CVPU */ 1 6 /* Modified '82 to make values constant */ 1 7 1 8 /* words 0-15 pointer registers */ 1 9 1 10 dcl mcp ptr; 1 11 1 12 dcl 1 mc based (mcp) aligned, 1 13 2 prs (0:7) ptr, /* POINTER REGISTERS */ 1 14 (2 regs, /* registers */ 1 15 3 x (0:7) bit (18), /* index registers */ 1 16 3 a bit (36), /* accumulator */ 1 17 3 q bit (36), /* q-register */ 1 18 3 e bit (8), /* exponent */ 1 19 3 pad1 bit (28), 1 20 3 t bit (27), /* timer register */ 1 21 3 pad2 bit (6), 1 22 3 ralr bit (3), /* ring alarm register */ 1 23 1 24 2 scu (0:7) bit (36), 1 25 1 26 2 mask bit (72), /* mem controller mask at time of fault */ 1 27 2 ips_temp bit (36), /* Temporary storage for IPS info */ 1 28 2 errcode fixed bin (35), /* fault handler's error code */ 1 29 2 fim_temp, 1 30 3 unique_index bit (18) unal, /* unique index for restarting faults */ 1 31 3 resignal bit (1) unal, /* recompute signal name with fcode below */ 1 32 3 fcode bit (17) unal, /* fault code used as index to FIM table and SCT */ 1 33 2 fault_reg bit (36), /* fault register */ 1 34 2 pad2 bit (1), 1 35 2 cpu_type fixed bin (2) unsigned, /* L68 = 0, DPS8/70M = 1 */ 1 36 2 ext_fault_reg bit (15), /* extended fault reg for DPS8/70M CPU */ 1 37 2 fault_time bit (54), /* time of fault */ 1 38 1 39 2 eis_info (0:7) bit (36)) unaligned; 1 40 1 41 1 42 dcl (apx fixed bin init (0), 1 43 abx fixed bin init (1), 1 44 bpx fixed bin init (2), 1 45 bbx fixed bin init (3), 1 46 lpx fixed bin init (4), 1 47 lbx fixed bin init (5), 1 48 spx fixed bin init (6), 1 49 sbx fixed bin init (7)) internal static options (constant); 1 50 1 51 1 52 1 53 1 54 dcl scup ptr; 1 55 1 56 dcl 1 scu based (scup) aligned, /* SCU DATA */ 1 57 1 58 1 59 /* WORD (0) */ 1 60 1 61 (2 ppr, /* PROCEDURE POINTER REGISTER */ 1 62 3 prr bit (3), /* procedure ring register */ 1 63 3 psr bit (15), /* procedure segment register */ 1 64 3 p bit (1), /* procedure privileged bit */ 1 65 1 66 2 apu, /* APPENDING UNIT STATUS */ 1 67 3 xsf bit (1), /* ext seg flag - IT modification */ 1 68 3 sdwm bit (1), /* match in SDW Ass. Mem. */ 1 69 3 sd_on bit (1), /* SDW Ass. Mem. ON */ 1 70 3 ptwm bit (1), /* match in PTW Ass. Mem. */ 1 71 3 pt_on bit (1), /* PTW Ass. Mem. ON */ 1 72 3 pi_ap bit (1), /* Instr Fetch or Append cycle */ 1 73 3 dsptw bit (1), /* Fetch of DSPTW */ 1 74 3 sdwnp bit (1), /* Fetch of SDW non paged */ 1 75 3 sdwp bit (1), /* Fetch of SDW paged */ 1 76 3 ptw bit (1), /* Fetch of PTW */ 1 77 3 ptw2 bit (1), /* Fetch of pre-paged PTW */ 1 78 3 fap bit (1), /* Fetch of final address paged */ 1 79 3 fanp bit (1), /* Fetch of final address non-paged */ 1 80 3 fabs bit (1), /* Fetch of final address absolute */ 1 81 1 82 2 fault_cntr bit (3), /* number of retrys of EIS instructions */ 1 83 1 84 1 85 /* WORD (1) */ 1 86 1 87 2 fd, /* FAULT DATA */ 1 88 3 iro bit (1), /* illegal ring order */ 1 89 3 oeb bit (1), /* out of execute bracket */ 1 90 3 e_off bit (1), /* no execute */ 1 91 3 orb bit (1), /* out of read bracket */ 1 92 3 r_off bit (1), /* no read */ 1 93 3 owb bit (1), /* out of write bracket */ 1 94 3 w_off bit (1), /* no write */ 1 95 3 no_ga bit (1), /* not a gate */ 1 96 3 ocb bit (1), /* out of call bracket */ 1 97 3 ocall bit (1), /* outward call */ 1 98 3 boc bit (1), /* bad outward call */ 1 99 3 inret bit (1), /* inward return */ 1 100 3 crt bit (1), /* cross ring transfer */ 1 101 3 ralr bit (1), /* ring alarm register */ 1 102 3 am_er bit (1), /* associative memory fault */ 1 103 3 oosb bit (1), /* out of segment bounds */ 1 104 3 paru bit (1), /* processor parity upper */ 1 105 3 parl bit (1), /* processor parity lower */ 1 106 3 onc_1 bit (1), /* op not complete type 1 */ 1 107 3 onc_2 bit (1), /* op not complete type 2 */ 1 108 1 109 2 port_stat, /* PORT STATUS */ 1 110 3 ial bit (4), /* illegal action lines */ 1 111 3 iac bit (3), /* illegal action channel */ 1 112 3 con_chan bit (3), /* connect channel */ 1 113 1 114 2 fi_num bit (5), /* (fault/interrupt) number */ 1 115 2 fi_flag bit (1), /* 1 => fault, 0 => interrupt */ 1 116 1 117 1 118 /* WORD (2) */ 1 119 1 120 2 tpr, /* TEMPORARY POINTER REGISTER */ 1 121 3 trr bit (3), /* temporary ring register */ 1 122 3 tsr bit (15), /* temporary segment register */ 1 123 1 124 2 pad2 bit (9), 1 125 1 126 2 cpu_no bit (3), /* CPU number */ 1 127 1 128 2 delta bit (6), /* tally modification DELTA */ 1 129 1 130 1 131 /* WORD (3) */ 1 132 1 133 2 word3 bit (18), 1 134 1 135 2 tsr_stat, /* TSR STATUS for 1,2,&3 word instructions */ 1 136 3 tsna, /* Word 1 status */ 1 137 4 prn bit (3), /* Word 1 PR number */ 1 138 4 prv bit (1), /* Word 1 PR valid bit */ 1 139 3 tsnb, /* Word 2 status */ 1 140 4 prn bit (3), /* Word 2 PR number */ 1 141 4 prv bit (1), /* Word 2 PR valid bit */ 1 142 3 tsnc, /* Word 3 status */ 1 143 4 prn bit (3), /* Word 3 PR number */ 1 144 4 prv bit (1), /* Word 3 PR valid bit */ 1 145 1 146 2 tpr_tbr bit (6), /* TPR.TBR field */ 1 147 1 148 1 149 /* WORD (4) */ 1 150 1 151 2 ilc bit (18), /* INSTRUCTION COUNTER */ 1 152 1 153 2 ir, /* INDICATOR REGISTERS */ 1 154 3 zero bit (1), /* zero indicator */ 1 155 3 neg bit (1), /* negative indicator */ 1 156 3 carry bit (1), /* carryry indicator */ 1 157 3 ovfl bit (1), /* overflow indicator */ 1 158 3 eovf bit (1), /* eponent overflow */ 1 159 3 eufl bit (1), /* exponent underflow */ 1 160 3 oflm bit (1), /* overflow mask */ 1 161 3 tro bit (1), /* tally runout */ 1 162 3 par bit (1), /* parity error */ 1 163 3 parm bit (1), /* parity mask */ 1 164 3 bm bit (1), /* ^bar mode */ 1 165 3 tru bit (1), /* truncation mode */ 1 166 3 mif bit (1), /* multi-word instruction mode */ 1 167 3 abs bit (1), /* absolute mode */ 1 168 3 hex bit (1), /* hexadecimal exponent mode */ 1 169 3 pad bit (3), 1 170 1 171 1 172 /* WORD (5) */ 1 173 1 174 2 ca bit (18), /* COMPUTED ADDRESS */ 1 175 1 176 2 cu, /* CONTROL UNIT STATUS */ 1 177 3 rf bit (1), /* on first cycle of repeat instr */ 1 178 3 rpt bit (1), /* repeat instruction */ 1 179 3 rd bit (1), /* repeat double instruction */ 1 180 3 rl bit (1), /* repeat link instruciton */ 1 181 3 pot bit (1), /* IT modification */ 1 182 3 pon bit (1), /* return type instruction */ 1 183 3 xde bit (1), /* XDE from Even location */ 1 184 3 xdo bit (1), /* XDE from Odd location */ 1 185 3 poa bit (1), /* operation preparation */ 1 186 3 rfi bit (1), /* tells CPU to refetch instruction */ 1 187 3 its bit (1), /* ITS modification */ 1 188 3 if bit (1), /* fault occured during instruction fetch */ 1 189 1 190 2 cpu_tag bit (6)) unaligned, /* computed tag field */ 1 191 1 192 1 193 /* WORDS (6,7) */ 1 194 1 195 2 even_inst bit (36), /* even instruction of faulting pair */ 1 196 1 197 2 odd_inst bit (36); /* odd instruction of faulting pair */ 1 198 1 199 1 200 1 201 1 202 1 203 1 204 /* ALTERNATE SCU DECLARATION */ 1 205 1 206 1 207 dcl 1 scux based (scup) aligned, 1 208 1 209 (2 pad0 bit (36), 1 210 1 211 2 fd, /* GROUP II FAULT DATA */ 1 212 3 isn bit (1), /* illegal segment number */ 1 213 3 ioc bit (1), /* illegal op code */ 1 214 3 ia_am bit (1), /* illegal address - modifier */ 1 215 3 isp bit (1), /* illegal slave procedure */ 1 216 3 ipr bit (1), /* illegal procedure */ 1 217 3 nea bit (1), /* non existent address */ 1 218 3 oobb bit (1), /* out of bounds */ 1 219 3 pad bit (29), 1 220 1 221 2 pad2 bit (36), 1 222 1 223 2 pad3a bit (18), 1 224 1 225 2 tsr_stat (0:2), /* TSR STATUS as an ARRAY */ 1 226 3 prn bit (3), /* PR number */ 1 227 3 prv bit (1), /* PR valid bit */ 1 228 1 229 2 pad3b bit (6)) unaligned, 1 230 1 231 2 pad45 (0:1) bit (36), 1 232 1 233 2 instr (0:1) bit (36); /* Instruction ARRAY */ 1 234 1 235 1 236 1 237 /* END INCLUDE FILE mc.incl.pl1 */ 179 180 /* */ 2 1 /* BEGIN INCLUDE FILE linkdcl.incl.pl1 --- last modified 15 Nov 1971 by C Garman */ 2 2 2 3 /* Last Modified (Date and Reason): 2 4* 6/75 by M.Weaver to add virgin_linkage_header declaration 2 5* 6/75 by S.Webber to comment existing structures better 2 6* 9/77 by M. Weaver to add run_depth to link 2 7* 2/83 by M. Weaver to add linkage header flags and change run_depth precision 2 8**/ 2 9 2 10 /* format: style3 */ 2 11 dcl 1 link based aligned, /* link pair in linkage section */ 2 12 2 head_ptr bit (18) unal, /* rel pointer to beginning of linkage section */ 2 13 2 ringno bit (3) unal, 2 14 2 mbz bit (6) unal, 2 15 2 run_depth fixed bin (2) unal, /* run unit depth, filled when link is snapped */ 2 16 2 ft2 bit (6) unal, /* fault tag. 46(8) if not snapped, 43(8) if snapped */ 2 17 2 exp_ptr bit (18) unal, /* pointer (rel to defs) of expression word */ 2 18 2 mbz2 bit (12) unal, 2 19 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 2 20 2 21 dcl 1 exp_word based aligned, /* expression word in link definition */ 2 22 2 type_ptr bit (18) unal, /* pointer (rel to defs) of type pair structure */ 2 23 2 exp bit (18) unal; /* constant expression to be added in when snapping link */ 2 24 2 25 dcl 1 type_pair based aligned, /* type pair in link definition */ 2 26 2 type bit (18) unal, /* type of link. may be 1,2,3,4,5, or 6 */ 2 27 2 trap_ptr bit (18) unal, /* pointer (rel to defs) to the trap word */ 2 28 2 seg_ptr bit (18) unal, /* pointer to ACC reference name for segment referenced */ 2 29 2 ext_ptr bit (18) unal; /* pointer (rel to defs) of ACC segdef name */ 2 30 2 31 dcl 1 header based aligned, /* linkage block header */ 2 32 2 def_ptr ptr, /* pointer to definition section */ 2 33 2 symbol_ptr ptr unal, /* pointer to symbol section in object segment */ 2 34 2 original_linkage_ptr 2 35 ptr unal, /* pointer to linkage section in object segment */ 2 36 2 unused bit (72), 2 37 2 stats, 2 38 3 begin_links bit (18) unal, /* offset (rel to this section) of first link */ 2 39 3 block_length bit (18) unal, /* number of words in this linkage section */ 2 40 3 segment_number 2 41 bit (18) unal, /* text segment number associated with this section */ 2 42 3 static_length bit (18) unal; /* number of words of static for this segment */ 2 43 2 44 dcl 1 linkage_header_flags 2 45 aligned based, /* overlay of def_ptr for flags */ 2 46 2 pad1 bit (28) unaligned, /* flags are in first word */ 2 47 2 static_vlas bit (1) unaligned, /* static section "owns" some LA/VLA segments */ 2 48 2 perprocess_static 2 49 bit (1) unaligned, /* 1 copy of static section is used by all tasks/run units */ 2 50 2 pad2 bit (6) unaligned; 2 51 2 52 dcl 1 virgin_linkage_header 2 53 aligned based, /* template for linkage header in object segment */ 2 54 2 pad bit (30) unaligned, /* is filled in by linker */ 2 55 2 defs_in_link bit (6) unaligned, /* =o20 if defs in linkage (nonstandard) */ 2 56 2 def_offset bit (18) unaligned, /* offset of definition section */ 2 57 2 first_ref_relp bit (18) unaligned, /* offset of trap-at-first-reference offset array */ 2 58 2 filled_in_later bit (144), 2 59 2 link_begin bit (18) unaligned, /* offset of first link */ 2 60 2 linkage_section_lng 2 61 bit (18) unaligned, /* length of linkage section */ 2 62 2 segno_pad bit (18) unaligned, /* will be segment number of copied linkage */ 2 63 2 static_length bit (18) unaligned; /* length of static section */ 2 64 2 65 2 66 dcl 1 trap_word based aligned, /* trap word in link definition */ 2 67 2 call_ptr bit (18) unal, /* pointer (rel to link) of link to trap procedure */ 2 68 2 arg_ptr bit (18) unal; /* pointer (rel to link) of link to arg info for trap proc */ 2 69 2 70 dcl 1 name based aligned, /* storage of ASCII names in definitions */ 2 71 2 nchars bit (9) unaligned, /* number of characters in name */ 2 72 2 char_string char (31) unaligned; /* 31-character name */ 2 73 2 74 /* END INCLUDE FILE linkdcl.incl.pl1 */ 181 182 183 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 */ 184 185 186 /* */ 4 1 /* BEGIN INCLUDE FILE ... stack_frame.incl.pl1 ... */ 4 2 4 3 /* format: off */ 4 4 4 5 /* Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr and pl1_ps_ptr */ 4 6 /* Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager bit & main_proc bit */ 4 7 /* Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr */ 4 8 /* Modified: 03/01/84, S. Herbst - Added RETURN_PTR_MASK */ 4 9 4 10 4 11 /****^ HISTORY COMMENTS: 4 12* 1) change(86-09-15,Kissel), approve(86-09-15,MCR7473), 4 13* audit(86-10-01,Fawcett), install(86-11-03,MR12.0-1206): 4 14* Modified to add constants for the translator_id field in the stack_frame 4 15* structure. 4 16* END HISTORY COMMENTS */ 4 17 4 18 4 19 dcl RETURN_PTR_MASK bit (72) int static options (constant) /* mask to be AND'd with stack_frame.return_ptr */ 4 20 init ("777777777777777777000000"b3); /* when copying, to ignore bits that a call fills */ 4 21 /* with indicators (nonzero for Fortran hexfp caller) */ 4 22 /* say: unspec(ptr) = unspec(stack_frame.return_ptr) & RETURN_PTR_MASK; */ 4 23 4 24 dcl TRANSLATOR_ID_PL1V2 bit (18) internal static options (constant) init ("000000"b3); 4 25 dcl TRANSLATOR_ID_ALM bit (18) internal static options (constant) init ("000001"b3); 4 26 dcl TRANSLATOR_ID_PL1V1 bit (18) internal static options (constant) init ("000002"b3); 4 27 dcl TRANSLATOR_ID_SIGNAL_CALLER bit (18) internal static options (constant) init ("000003"b3); 4 28 dcl TRANSLATOR_ID_SIGNALLER bit (18) internal static options (constant) init ("000004"b3); 4 29 4 30 4 31 dcl sp pointer; /* pointer to beginning of stack frame */ 4 32 4 33 dcl stack_frame_min_length fixed bin static init(48); 4 34 4 35 4 36 dcl 1 stack_frame based(sp) aligned, 4 37 2 pointer_registers(0 : 7) ptr, 4 38 2 prev_sp pointer, 4 39 2 next_sp pointer, 4 40 2 return_ptr pointer, 4 41 2 entry_ptr pointer, 4 42 2 operator_and_lp_ptr ptr, /* serves as both */ 4 43 2 arg_ptr pointer, 4 44 2 static_ptr ptr unaligned, 4 45 2 support_ptr ptr unal, /* only used by fortran I/O */ 4 46 2 on_unit_relp1 bit(18) unaligned, 4 47 2 on_unit_relp2 bit(18) unaligned, 4 48 2 translator_id bit(18) unaligned, /* Translator ID (see constants above) 4 49* 0 => PL/I version II 4 50* 1 => ALM 4 51* 2 => PL/I version I 4 52* 3 => signal caller frame 4 53* 4 => signaller frame */ 4 54 2 operator_return_offset bit(18) unaligned, 4 55 2 x(0: 7) bit(18) unaligned, /* index registers */ 4 56 2 a bit(36), /* accumulator */ 4 57 2 q bit(36), /* q-register */ 4 58 2 e bit(36), /* exponent */ 4 59 2 timer bit(27) unaligned, /* timer */ 4 60 2 pad bit(6) unaligned, 4 61 2 ring_alarm_reg bit(3) unaligned; 4 62 4 63 4 64 dcl 1 stack_frame_flags based(sp) aligned, 4 65 2 pad(0 : 7) bit(72), /* skip over prs */ 4 66 2 xx0 bit(22) unal, 4 67 2 main_proc bit(1) unal, /* on if frame belongs to a main procedure */ 4 68 2 run_unit_manager bit(1) unal, /* on if frame belongs to run unit manager */ 4 69 2 signal bit(1) unal, /* on if frame belongs to logical signal_ */ 4 70 2 crawl_out bit(1) unal, /* on if this is a signal caller frame */ 4 71 2 signaller bit(1) unal, /* on if next frame is signaller's */ 4 72 2 link_trap bit(1) unal, /* on if this frame was made by the linker */ 4 73 2 support bit(1) unal, /* on if frame belongs to a support proc */ 4 74 2 condition bit(1) unal, /* on if condition established in this frame */ 4 75 2 xx0a bit(6) unal, 4 76 2 xx1 fixed bin, 4 77 2 xx2 fixed bin, 4 78 2 xx3 bit(25) unal, 4 79 2 old_crawl_out bit (1) unal, /* on if this is a signal caller frame */ 4 80 2 old_signaller bit(1) unal, /* on if next frame is signaller's */ 4 81 2 xx3a bit(9) unaligned, 4 82 2 xx4(9) bit(72) aligned, 4 83 2 v2_pl1_op_ret_base ptr, /* When a V2 PL/I program calls an operator the 4 84* * operator puts a pointer to the base of 4 85* * the calling procedure here. (text base ptr) */ 4 86 2 xx5 bit(72) aligned, 4 87 2 pl1_ps_ptr ptr; /* ptr to ps for this frame; also used by fio. */ 4 88 4 89 /* format: on */ 4 90 4 91 /* END INCLUDE FILE ... stack_frame.incl.pl1 */ 187 188 189 190 end link_trap_caller_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0804.6 link_trap_caller_.pl1 >spec>install>1110>link_trap_caller_.pl1 179 1 12/15/83 1100.4 mc.incl.pl1 >ldd>include>mc.incl.pl1 181 2 07/27/83 0910.0 linkdcl.incl.pl1 >ldd>include>linkdcl.incl.pl1 184 3 11/26/79 1320.6 its.incl.pl1 >ldd>include>its.incl.pl1 187 4 11/07/86 1550.3 stack_frame.incl.pl1 >ldd>include>stack_frame.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. addr builtin function dcl 59 ref 146 147 148 addrel builtin function dcl 59 ref 90 117 118 153 154 155 address based bit(18) array level 2 packed packed unaligned dcl 79 set ref 147* arg_ptr 2(18) based bit(18) array level 3 in structure "fr_traps" packed packed unaligned dcl 72 in procedure "link_trap_caller_" ref 118 118 arg_ptr 0(18) based bit(18) level 2 in structure "trap_word" packed packed unaligned dcl 2-66 in procedure "link_trap_caller_" ref 155 155 arg_ptr_ptr 000104 automatic pointer dcl 40 set ref 118* 120* 122* 155* 157* 159* baseptr builtin function dcl 59 ref 109 109 ca 5 based bit(18) level 2 packed packed unaligned dcl 1-56 ref 147 call_ptr 2 based bit(18) array level 3 in structure "fr_traps" packed packed unaligned dcl 72 in procedure "link_trap_caller_" ref 117 call_ptr based pointer dcl 42 in procedure "link_trap_caller_" set ref 121* 158* call_ptr based bit(18) level 2 in structure "trap_word" packed packed unaligned dcl 2-66 in procedure "link_trap_caller_" ref 154 call_ptr_ptr 000102 automatic pointer dcl 40 set ref 117* 121 154* 158 cleanup 000120 stack reference condition dcl 62 ref 109 cu_$make_entry_value 000010 constant entry external dcl 45 ref 121 158 cu_$stack_frame_ptr 000022 constant entry external dcl 65 ref 172 dcl_vers based fixed bin(17,0) level 2 dcl 72 ref 96 def_ptr parameter pointer dcl 38 set ref 24 85 137* 153 dummy_ptr parameter pointer dcl 37 ref 24 ec 000117 automatic fixed bin(35,0) dcl 50 set ref 98* 102 105 109* 112* 131* 132 134* 137* 138 162* ecode based fixed bin(35,0) dcl 49 set ref 105* ecode_ptr parameter pointer dcl 38 ref 24 105 errcode 43 based fixed bin(35,0) level 2 packed packed unaligned dcl 1-12 set ref 102* error_table_$bad_first_ref_trap 000012 external static fixed bin(35,0) dcl 51 ref 98 error_table_$bad_trap_before_link 000014 external static fixed bin(35,0) dcl 51 ref 162 error_table_$inconsistent_object_msf 000016 external static fixed bin(35,0) dcl 51 ref 112 error_table_$no_vla_support 000020 external static fixed bin(35,0) dcl 51 ref 134 even_inst 6 based bit(36) level 2 dcl 1-56 set ref 147 148 first_ref_relp 1(18) based bit(18) level 2 packed packed unaligned dcl 2-52 ref 90 fr_ptr 000106 automatic pointer dcl 40 set ref 90* 96 116 117 118 118 fr_traps based structure level 1 dcl 72 ft2 0(30) based bit(6) level 2 packed packed unaligned dcl 2-11 ref 160 hcs_$make_entry 000030 constant entry external dcl 69 ref 131 header based structure level 1 dcl 2-31 header_ptr parameter pointer dcl 38 ref 24 90 90 94 109 109 117 118 129 154 155 i 000116 automatic fixed bin(17,0) dcl 47 set ref 116* 117 118 118* indirect constant bit(6) initial dcl 48 ref 148 instr based structure array level 1 dcl 79 its based structure level 1 dcl 3-5 link based structure level 1 dcl 2-11 link_ptr parameter pointer dcl 38 set ref 24 137* 159* 160 mc based structure level 1 dcl 1-12 mcptr parameter pointer dcl 38 set ref 24 99 102 103* 140 146 159* 170 mod 0(30) based bit(6) array level 2 packed packed unaligned dcl 79 set ref 148* n_traps 1 based fixed bin(17,0) level 2 dcl 72 ref 116 nonlocal_goto_$same_ring 000024 constant entry external dcl 66 ref 174 nsp 000110 automatic pointer dcl 40 set ref 173* 174* 174 null builtin function dcl 59 ref 85 99 120 129 131 131 140 157 170 object_msf_damaged_ 000126 stack reference condition dcl 63 ref 111 124 original_linkage_ptr 3 based pointer level 2 packed packed unaligned dcl 2-31 ref 90 pad4 1(27) based bit(3) level 2 packed packed unaligned dcl 3-5 set ref 94* prev_sp 20 based pointer level 2 dcl 4-36 ref 173 173 return_ptr 24 based pointer level 2 dcl 4-36 set ref 174* scu based structure level 1 dcl 1-56 in procedure "link_trap_caller_" scu 30 based bit(36) array level 2 in structure "mc" packed packed unaligned dcl 1-12 in procedure "link_trap_caller_" set ref 146 scup 000134 automatic pointer dcl 1-54 set ref 146* 147 147 148 segment_number 7 based bit(18) level 3 packed packed unaligned dcl 2-31 ref 109 109 signal_ 000026 constant entry external dcl 68 ref 103 sp 000136 automatic pointer dcl 4-31 set ref 172* 173 stack_frame based structure level 1 dcl 4-36 stats 6 based structure level 2 dcl 2-31 term_$nomakeunknown 000032 constant entry external dcl 70 ref 109 trap_proc 000112 automatic entry variable dcl 44 set ref 121* 122 131* 137 158* 159 trap_ptr 0(18) based bit(18) level 2 in structure "type_pair" packed packed unaligned dcl 2-25 in procedure "link_trap_caller_" ref 153 trap_ptr 000100 automatic pointer dcl 40 in procedure "link_trap_caller_" set ref 153* 154 155 155 trap_ptrs 2 based structure array level 2 dcl 72 trap_word based structure level 1 dcl 2-66 type_pair based structure level 1 dcl 2-25 type_ptr parameter pointer dcl 38 set ref 24 137* 153 virgin_linkage_header based structure level 1 dcl 2-52 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 RETURN_PTR_MASK internal static bit(72) initial packed unaligned dcl 4-19 TRANSLATOR_ID_ALM internal static bit(18) initial packed unaligned dcl 4-25 TRANSLATOR_ID_PL1V1 internal static bit(18) initial packed unaligned dcl 4-26 TRANSLATOR_ID_PL1V2 internal static bit(18) initial packed unaligned dcl 4-24 TRANSLATOR_ID_SIGNALLER internal static bit(18) initial packed unaligned dcl 4-28 TRANSLATOR_ID_SIGNAL_CALLER internal static bit(18) initial packed unaligned dcl 4-27 abx internal static fixed bin(17,0) initial dcl 1-42 apx internal static fixed bin(17,0) initial dcl 1-42 bbx internal static fixed bin(17,0) initial dcl 1-42 bpx internal static fixed bin(17,0) initial dcl 1-42 exp_word based structure level 1 dcl 2-21 itp based structure level 1 dcl 3-18 itp_unsigned based structure level 1 dcl 3-43 its_unsigned based structure level 1 dcl 3-30 lbx internal static fixed bin(17,0) initial dcl 1-42 linkage_header_flags based structure level 1 dcl 2-44 lpx internal static fixed bin(17,0) initial dcl 1-42 mcp automatic pointer dcl 1-10 name based structure level 1 dcl 2-70 sbx internal static fixed bin(17,0) initial dcl 1-42 scux based structure level 1 dcl 1-207 spx internal static fixed bin(17,0) initial dcl 1-42 stack_frame_flags based structure level 1 dcl 4-64 stack_frame_min_length internal static fixed bin(17,0) initial dcl 4-33 NAMES DECLARED BY EXPLICIT CONTEXT. link_trap_caller_ 000043 constant entry external dcl 24 sig_err 000074 constant label dcl 99 ref 113 135 138 163 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 732 766 537 742 Length 1232 537 34 230 172 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME link_trap_caller_ 136 external procedure is an external procedure. on unit on line 109 72 on unit on unit on line 111 64 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME link_trap_caller_ 000100 trap_ptr link_trap_caller_ 000102 call_ptr_ptr link_trap_caller_ 000104 arg_ptr_ptr link_trap_caller_ 000106 fr_ptr link_trap_caller_ 000110 nsp link_trap_caller_ 000112 trap_proc link_trap_caller_ 000116 i link_trap_caller_ 000117 ec link_trap_caller_ 000134 scup link_trap_caller_ 000136 sp link_trap_caller_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ent_var_desc call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$make_entry_value cu_$stack_frame_ptr hcs_$make_entry nonlocal_goto_$same_ring signal_ term_$nomakeunknown THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_first_ref_trap error_table_$bad_trap_before_link error_table_$inconsistent_object_msf error_table_$no_vla_support LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 24 000035 85 000050 90 000055 94 000065 96 000067 98 000072 99 000074 102 000101 103 000105 104 000126 105 000127 106 000132 109 000133 111 000171 112 000205 113 000210 116 000213 117 000223 118 000233 120 000245 121 000247 122 000257 123 000267 124 000271 127 000272 129 000273 131 000277 132 000340 134 000342 135 000345 137 000346 138 000371 140 000373 146 000400 147 000404 148 000406 150 000410 153 000411 154 000420 155 000426 157 000437 158 000441 159 000451 160 000470 162 000476 163 000501 170 000502 172 000507 173 000516 174 000522 175 000533 177 000534 190 000535 ----------------------------------------------------------- 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