COMPILATION LISTING OF SEGMENT ring_1_patch_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/12/82 1245.8 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 12 /* Modified 1/29/75 by Larry Johnson to fix ring number in to_ptr */ 13 14 ring_1_patch_: proc; 15 16 /* External Procedures */ 17 18 dcl cu_$level_get entry returns (fixed bin), 19 cu_$level_set entry (fixed bin), 20 hcs_$fs_get_mode entry (ptr, fixed bin (5), fixed bin (35)), 21 hcs_$initiate entry(char(*) aligned, char(*) aligned, char(*) aligned, fixed bin, fixed bin, ptr, fixed bin(35)), 22 hcs_$get_max_length_seg entry (ptr, fixed bin (18), fixed bin (35)), 23 hcs_$terminate_noname entry (ptr, fixed bin (35)); 24 25 /* External Variables */ 26 27 dcl error_table_$argerr ext fixed bin (35), 28 error_table_$moderr ext fixed bin (35); 29 30 /* Builtin Functions */ 31 32 dcl (bit, addr, fixed, null, rel, ptr) builtin; 33 34 /* Text References */ 35 36 dcl segno fixed bin int static init (0), 37 path fixed bin int static init (1); 38 39 /* Automatic Variables */ 40 41 dcl a_dir char (*), /* arguments */ 42 a_ename char (*), 43 a_offset fixed bin, 44 a_fp ptr, 45 a_n fixed bin, 46 a_code fixed bin (35), 47 a_tp ptr; 48 49 dcl segptr ptr, 50 to_ptr ptr, 51 from_ptr ptr; 52 53 dcl entry_point fixed bin, 54 offset fixed bin, 55 n fixed bin, 56 save_ring fixed bin; 57 58 dcl max_length fixed bin (18); /* max size of this segment */ 59 60 dcl mode fixed bin (5); 61 62 dcl code fixed bin (35); 63 64 dcl dir char (168) aligned, 65 ename char (32) aligned; 66 67 /* Based Storage */ 68 69 dcl move (n) bit (36) aligned based; 70 1 1 /* BEGIN INCLUDE FILE its.incl.pl1 1 2* modified 27 July 79 by JRDavis to add its_unsigned 1 3* Internal format of ITS pointer, including ring-number field for follow-on processor */ 1 4 1 5 dcl 1 its based aligned, /* declaration for ITS type pointer */ 1 6 2 pad1 bit (3) unaligned, 1 7 2 segno bit (15) unaligned, /* segment number within the pointer */ 1 8 2 ringno bit (3) unaligned, /* ring number within the pointer */ 1 9 2 pad2 bit (9) unaligned, 1 10 2 its_mod bit (6) unaligned, /* should be 43(8) */ 1 11 1 12 2 offset bit (18) unaligned, /* word offset within the addressed segment */ 1 13 2 pad3 bit (3) unaligned, 1 14 2 bit_offset bit (6) unaligned, /* bit offset within the word */ 1 15 2 pad4 bit (3) unaligned, 1 16 2 mod bit (6) unaligned; /* further modification */ 1 17 1 18 dcl 1 itp based aligned, /* declaration for ITP type pointer */ 1 19 2 pr_no bit (3) unaligned, /* number of pointer register to use */ 1 20 2 pad1 bit (27) unaligned, 1 21 2 itp_mod bit (6) unaligned, /* should be 41(8) */ 1 22 1 23 2 offset bit (18) unaligned, /* word offset from pointer register word offset */ 1 24 2 pad2 bit (3) unaligned, 1 25 2 bit_offset bit (6) unaligned, /* bit offset relative to new word offset */ 1 26 2 pad3 bit (3) unaligned, 1 27 2 mod bit (6) unaligned; /* further modification */ 1 28 1 29 1 30 dcl 1 its_unsigned based aligned, /* just like its, but with unsigned binary */ 1 31 2 pad1 bit (3) unaligned, 1 32 2 segno fixed bin (15) unsigned unaligned, 1 33 2 ringno fixed bin (3) unsigned unaligned, 1 34 2 pad2 bit (9) unaligned, 1 35 2 its_mod bit (6) unaligned, 1 36 1 37 2 offset fixed bin (18) unsigned unaligned, 1 38 2 pad3 bit (3) unaligned, 1 39 2 bit_offset fixed bin (6) unsigned unaligned, 1 40 2 pad4 bit (3) unaligned, 1 41 2 mod bit (6) unaligned; 1 42 1 43 dcl 1 itp_unsigned based aligned, /* just like itp, but with unsigned binary where appropriate */ 1 44 2 pr_no fixed bin (3) unsigned unaligned, 1 45 2 pad1 bit (27) unaligned, 1 46 2 itp_mod bit (6) unaligned, 1 47 1 48 2 offset fixed bin (18) unsigned unaligned, 1 49 2 pad2 bit (3) unaligned, 1 50 2 bit_offset fixed bin (6) unsigned unaligned, 1 51 2 pad3 bit (3) unaligned, 1 52 2 mod bit (6) unaligned; 1 53 1 54 1 55 dcl ITS_MODIFIER bit (6) unaligned internal static options (constant) init ("43"b3); 1 56 dcl ITP_MODIFIER bit (6) unaligned internal static options (constant) init ("41"b3); 1 57 1 58 /* END INCLUDE FILE its.incl.pl1 */ 71 72 73 /* 74* 75**/ 76 pathname: entry (a_dir, a_ename, a_offset, a_fp, a_n, a_code); 77 78 entry_point = path; /* indicate through which entry point we came */ 79 dir = a_dir; /* copy dir name */ 80 ename = a_ename; /* copy entry name */ 81 offset = a_offset; /* copy offset */ 82 83 go to common; 84 85 ptr: entry (a_fp, a_tp, a_n, a_code); 86 87 entry_point = segno; /* indicate through which entry point we came */ 88 to_ptr = a_tp; /* copy pointer to location to be patched */ 89 addr (to_ptr) -> its.ringno = "001"b; 90 91 common: /* copy arguments common to both entry points */ 92 from_ptr = a_fp; /* copy pointer to new data */ 93 n = a_n; /* copy number of words to be patched */ 94 code = 0; /* clear status code */ 95 96 save_ring = cu_$level_get (); /* save validation level */ 97 call cu_$level_set (1); /* set validation level to 1 */ 98 99 if entry_point = path then do; /* if we entered through the pathname entry point */ 100 call hcs_$initiate (dir, ename, "", 0, 0, segptr, code); 101 if segptr = null then go to finish; /* get a pointer to the segment */ 102 to_ptr = ptr (segptr, offset); /* get location to be patched */ 103 end; 104 105 else segptr = ptr (to_ptr, 0); 106 107 if n <= 0 then go to arg_err; /* check number of words to be changed */ 108 109 /* check exceeding max length of segment */ 110 call hcs_$get_max_length_seg(from_ptr, max_length, code); 111 if code ^= 0 then go to term; 112 113 if fixed(rel(from_ptr), 18) + n > max_length then go to arg_err; 114 115 call hcs_$get_max_length_seg(to_ptr, max_length, code); 116 if code ^= 0 then go to term; 117 118 if fixed(rel(to_ptr), 18) + n > max_length then go to arg_err; 119 120 call hcs_$fs_get_mode (segptr, mode, code); /* check mode */ 121 if code ^= 0 then go to term; 122 if (bit (mode, 5) & "00010"b) = "0"b /* need write permission */ 123 then go to access_error; 124 125 to_ptr -> move = from_ptr -> move; /* make the patch */ 126 127 term: if entry_point = path then /* terminate the segment if we initiated it */ 128 call hcs_$terminate_noname (segptr, code); 129 130 finish: call cu_$level_set (save_ring); /* restore the validation level we entered with */ 131 a_code = code; /* copy the status code */ 132 return; 133 134 arg_err: code = error_table_$argerr; 135 go to term; 136 137 access_error: 138 code = error_table_$moderr; 139 go to term; 140 141 end ring_1_patch_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/12/82 1112.9 ring_1_patch_.pl1 >spec>on>11/12/82>ring_1_patch_.pl1 71 1 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(35,0) dcl 41 set ref 76 85 131* a_dir parameter char unaligned dcl 41 ref 76 79 a_ename parameter char unaligned dcl 41 ref 76 80 a_fp parameter pointer dcl 41 ref 76 85 91 a_n parameter fixed bin(17,0) dcl 41 ref 76 85 93 a_offset parameter fixed bin(17,0) dcl 41 ref 76 81 a_tp parameter pointer dcl 41 ref 85 88 addr builtin function dcl 32 ref 89 bit builtin function dcl 32 ref 122 code 000114 automatic fixed bin(35,0) dcl 62 set ref 94* 100* 110* 111 115* 116 120* 121 127* 131 134* 137* cu_$level_get 000010 constant entry external dcl 18 ref 96 cu_$level_set 000012 constant entry external dcl 18 ref 97 130 dir 000115 automatic char(168) dcl 64 set ref 79* 100* ename 000167 automatic char(32) dcl 64 set ref 80* 100* entry_point 000106 automatic fixed bin(17,0) dcl 53 set ref 78* 87* 99 127 error_table_$argerr 000024 external static fixed bin(35,0) dcl 27 ref 134 error_table_$moderr 000026 external static fixed bin(35,0) dcl 27 ref 137 fixed builtin function dcl 32 ref 113 118 from_ptr 000104 automatic pointer dcl 49 set ref 91* 110* 113 125 hcs_$fs_get_mode 000014 constant entry external dcl 18 ref 120 hcs_$get_max_length_seg 000020 constant entry external dcl 18 ref 110 115 hcs_$initiate 000016 constant entry external dcl 18 ref 100 hcs_$terminate_noname 000022 constant entry external dcl 18 ref 127 its based structure level 1 dcl 1-5 max_length 000112 automatic fixed bin(18,0) dcl 58 set ref 110* 113 115* 118 mode 000113 automatic fixed bin(5,0) dcl 60 set ref 120* 122 move based bit(36) array dcl 69 set ref 125* 125 n 000110 automatic fixed bin(17,0) dcl 53 set ref 93* 107 113 118 125 null builtin function dcl 32 ref 101 offset 000107 automatic fixed bin(17,0) dcl 53 set ref 81* 102 path constant fixed bin(17,0) initial dcl 36 ref 78 99 127 ptr builtin function dcl 32 ref 102 105 rel builtin function dcl 32 ref 113 118 ringno 0(18) based bit(3) level 2 packed unaligned dcl 1-5 set ref 89* save_ring 000111 automatic fixed bin(17,0) dcl 53 set ref 96* 130* segno constant fixed bin(17,0) initial dcl 36 ref 87 segptr 000100 automatic pointer dcl 49 set ref 100* 101 102 105* 120* 127* to_ptr 000102 automatic pointer dcl 49 set ref 88* 89 102* 105 115* 118 125 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ITP_MODIFIER internal static bit(6) initial unaligned dcl 1-56 ITS_MODIFIER internal static bit(6) initial unaligned dcl 1-55 itp based structure level 1 dcl 1-18 itp_unsigned based structure level 1 dcl 1-43 its_unsigned based structure level 1 dcl 1-30 NAMES DECLARED BY EXPLICIT CONTEXT. access_error 000373 constant label dcl 137 ref 122 arg_err 000367 constant label dcl 134 ref 107 113 118 common 000131 constant label dcl 91 ref 83 finish 000355 constant label dcl 130 ref 101 pathname 000027 constant entry external dcl 76 ptr 000103 constant entry external dcl 85 ring_1_patch_ 000013 constant entry external dcl 14 term 000341 constant label dcl 127 ref 111 116 121 135 139 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 530 560 377 540 Length 756 377 30 161 130 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ring_1_patch_ 174 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ring_1_patch_ 000100 segptr ring_1_patch_ 000102 to_ptr ring_1_patch_ 000104 from_ptr ring_1_patch_ 000106 entry_point ring_1_patch_ 000107 offset ring_1_patch_ 000110 n ring_1_patch_ 000111 save_ring ring_1_patch_ 000112 max_length ring_1_patch_ 000113 mode ring_1_patch_ 000114 code ring_1_patch_ 000115 dir ring_1_patch_ 000167 ename ring_1_patch_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$level_get cu_$level_set hcs_$fs_get_mode hcs_$get_max_length_seg hcs_$initiate hcs_$terminate_noname THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$argerr error_table_$moderr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000012 76 000020 78 000056 79 000060 80 000066 81 000073 83 000075 85 000076 87 000117 88 000121 89 000125 91 000131 93 000134 94 000136 96 000137 97 000146 99 000157 100 000162 101 000224 102 000230 103 000234 105 000235 107 000237 110 000241 111 000254 113 000256 115 000264 116 000277 118 000301 120 000307 121 000322 122 000324 125 000332 127 000341 130 000355 131 000364 132 000366 134 000367 135 000372 137 000373 139 000376 ----------------------------------------------------------- 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