COMPILATION LISTING OF SEGMENT set_kst_attributes 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 1042.5 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 set_kst_attributes: proc (a_segno, a_kstap, a_code); 14 15 priv = "0"b; 16 17 highly_privileged: entry (a_segno, a_kstap, a_code); 18 19 /* 20* 21* Written 03/26/76 by R. Bratt 22* 23* This procedure allows a sufficiently privileged user to change the segment use attributes 24* stored in his kst. 25* 26* Privileged users may set: allow_write, explicit_deact_ok, tpd, and audit. 27* Highly privileged users may also set: tms, and tus. 28* 29**/ 30 31 dcl a_segno fixed bin (17), 32 a_kstap ptr, 33 a_code fixed bin (35); 34 35 dcl segno fixed bin (17), 36 code fixed bin (35), 37 1 ksta aligned like kst_attributes, 38 priv bit (1) aligned init ("1"b); 39 40 dcl dseg$ ext, 41 error_table_$action_not_performed ext fixed bin (35); 42 43 dcl get_kstep entry (fixed bin (17), ptr, fixed bin (35)), 44 setfaults$disconnect entry (fixed bin (17)); 45 46 segno = a_segno; 47 unspec (ksta) = unspec (a_kstap -> kst_attributes); 48 call get_kstep (segno, kstep, code); 49 if code ^= 0 50 then do; 51 a_code = code; 52 return; 53 end; 54 if ^priv & (ksta.set.tms | ksta.set.tus) 55 then do; 56 a_code = error_table_$action_not_performed; 57 return; 58 end; 59 if ksta.set.allow_write 60 then do; 61 kste.allow_write = ksta.value.allow_write; 62 sdwp = addr (addr (dseg$) -> sdwa (segno)); /* Get ptr to SDW */ 63 string (sdw.access) = kste.access & ("11"b || kste.allow_write); 64 call setfaults$disconnect (segno); 65 end; 66 if ksta.set.tms 67 then kste.tms = ksta.value.tms; 68 if ksta.set.tus 69 then kste.tus = ksta.value.tus; 70 if ksta.set.tpd 71 then kste.tpd = ksta.value.tpd; 72 if ksta.set.audit 73 then kste.audit = ksta.value.audit; 74 if ksta.set.explicit_deactivate_ok 75 then kste.explicit_deact_ok = ksta.value.explicit_deactivate_ok; 76 a_code = 0; 77 return; 78 79 /* */ 80 1 1 /* START OF: kst.incl.pl1 * * * * * */ 1 2 1 3 /* 1 4*Modified March 1976 by R. Bratt 1 5*Modified November 1984 to remove hdr, Keith Loepere. */ 1 6 1 7 1 8 /****^ HISTORY COMMENTS: 1 9* 1) change(86-08-08,GDixon), approve(86-08-08,MCR7388), 1 10* audit(86-09-02,Farley), install(86-09-08,MR12.0-1150): 1 11* Add warning on use of kste.entryp. 1 12* END HISTORY COMMENTS */ 1 13 1 14 1 15 dcl pds$kstp ext ptr, 1 16 (kstp, kstep) ptr; 1 17 1 18 dcl 1 kst aligned based (kstp), /* KST header declaration */ 1 19 2 lowseg fixed bin (17), /* lowest segment number described by kst */ 1 20 2 highseg fixed bin (17), /* highest segment number described by kst */ 1 21 2 highest_used_segno fixed bin (17), /* highest segment number yet used */ 1 22 2 lvs fixed bin (8), /* number of private LVs this process is connected to */ 1 23 2 time_of_bootload fixed bin (71), /* bootload time during prelinking */ 1 24 2 garbage_collections fixed bin (17) unaligned, /* KST garbage collections */ 1 25 2 entries_collected fixed bin (17) unaligned, /* KST entries recovered by garbage collection */ 1 26 2 free_list bit (18) unaligned, /* relative pointer to first free kste */ 1 27 2 prelinked_ring (7) bit (1) unaligned, /* rings prelinked in process */ 1 28 2 template bit (1) unaligned, /* this is a template kst if set */ 1 29 2 allow_256K_connect bit (1) unaligned, /* can use 256K segments */ 1 30 2 unused_2 bit (9) unaligned, 1 31 2 uid_hash_bucket (0 : 127) bit (18) unaligned, /* hash buckets */ 1 32 2 kst_entry (0 refer (kst.lowseg):0 refer (kst.highseg)) aligned like kste, /* kst entries */ 1 33 2 lv (1:256) bit (36), /* private logical volume connection list */ 1 34 2 end_of_kst bit (36); 1 35 1 36 dcl 1 kste based (kstep) aligned, /* KST entry declaration */ 1 37 2 fp bit (18) unaligned, /* forward rel pointer */ 1 38 2 segno fixed bin (17) unaligned, /* segment number of this kste */ 1 39 2 usage_count (0:7) fixed bin (8) unaligned, /* outstanding initiates/ring */ 1 40 2 entryp ptr unaligned, /* branch pointer */ 1 41 /* See WARNING below for requirements to use entryp. */ 1 42 2 uid bit (36) aligned, /* unique identifier */ 1 43 2 access_information unaligned, 1 44 3 dtbm bit (36), /* date time branch modified */ 1 45 3 extended_access bit (33), /* extended access from the branch */ 1 46 3 access bit (3), /* rew */ 1 47 3 ex_rb (3) bit (3), /* ring brackets from branch */ 1 48 2 pad1 bit (3) unaligned, 1 49 2 flags unaligned, 1 50 3 dirsw bit (1), /* directory switch */ 1 51 3 allow_write bit (1), /* set if initiated with write permission */ 1 52 3 priv_init bit (1), /* privileged initiation */ 1 53 3 tms bit (1), /* transparent modification switch */ 1 54 3 tus bit (1), /* transparent usage switch */ 1 55 3 tpd bit (1), /* transparent paging device switch */ 1 56 3 audit bit (1), /* audit switch */ 1 57 3 explicit_deact_ok bit (1), /* set if I am willing to have a user force deactivate */ 1 58 3 pad bit (3), 1 59 2 infcount fixed bin (12) unaligned; /* _i_f dirsw _t_h_e_n inferior count _e_l_s_e lv index */ 1 60 1 61 1 62 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 63 /* */ 1 64 /* WARNING: Before using kste.entryp to get a pointer to the directory */ 1 65 /* entry associated with the kst entry, you must first validate its value */ 1 66 /* by calling sum$getbranch or sum$getbranch_root_my. This call also locks */ 1 67 /* the containing directory. The containing directory must remain locked */ 1 68 /* during the entire period when kste.entryp and the directory entry are */ 1 69 /* being referenced. Once the directory is unlocked, kste.entryp can no */ 1 70 /* longer be used to get a pointer to the entry within the unlocked */ 1 71 /* directory since the dir entry could have been moved within the directory */ 1 72 /* by another processor. */ 1 73 /* */ 1 74 /* If you only need a pointer to the directory containing the associated */ 1 75 /* dir entry (but not to the dir entry itself), you can use: */ 1 76 /* pointer (kste.entryp, 0) */ 1 77 /* without calling sum to lock the directory and validate entryp. GDixon */ 1 78 /* */ 1 79 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 80 1 81 /* END OF: kst.incl.pl1 * * * * * */ 81 82 83 /* */ 84 2 1 /* BEGIN INCLUDE FILE kst_attributes.incl.pl1 WRITTEN 03/26/76 by R. Bratt */ 2 2 2 3 dcl kstap ptr; 2 4 2 5 dcl 1 kst_attributes aligned based (kstap), 2 6 2 set unaligned, /* SPECIFIES WHICH ATTRIBUTES TO SET */ 2 7 3 (allow_write, 2 8 tms, 2 9 tus, 2 10 tpd, 2 11 audit, 2 12 explicit_deactivate_ok) bit (1), 2 13 3 pad bit (39), 2 14 2 value unaligned, /* SPECIFIES THE VALUE OF THE ATTRIBUTES TO BE SET */ 2 15 3 (allow_write, /* allow write permission in sdw */ 2 16 tms, /* don't update dtm */ 2 17 tus, /* don't update dtu */ 2 18 tpd, /* don't put on PD */ 2 19 audit, /* audit */ 2 20 explicit_deactivate_ok) bit (1), /* allow demand deactivation */ 2 21 3 pad bit (30); 2 22 2 23 /* END INCLUDE FILE kst_attributes.incl.pl1 */ 85 86 87 /* */ 88 3 1 /* BEGIN INCLUDE FILE ... sdw.incl.pl1 ... last modified 12 May 1976 */ 3 2 3 3 dcl sdwp ptr; 3 4 3 5 dcl 1 sdw based (sdwp) aligned, /* Segment Descriptor Word */ 3 6 3 7 (2 add bit (24), /* main memory address of page table */ 3 8 2 (r1, r2, r3) bit (3), /* ring brackets for the segment */ 3 9 2 df bit (1), /* directed fault bit (0 => fault) */ 3 10 2 df_no bit (2), /* directed fault number */ 3 11 3 12 2 pad1 bit (1), 3 13 2 bound bit (14), /* boundary field (in 16 word blocks) */ 3 14 2 access, /* access bits */ 3 15 3 read bit (1), /* read permission bit */ 3 16 3 execute bit (1), /* execute permission bit */ 3 17 3 write bit (1), /* write permission bit */ 3 18 3 privileged bit (1), /* privileged bit */ 3 19 2 unpaged bit (1), /* segment is unpaged if this is 1 */ 3 20 2 entry_bound_sw bit (1), /* if this is 0 the entry bound is checked by hardware */ 3 21 2 cache bit (1), /* cache enable bit */ 3 22 2 entry_bound bit (14)) unaligned; /* entry bound */ 3 23 3 24 dcl 1 sdwa (0: 1) based (sdwp) aligned like sdw; /* SDW array (descriptor segment) */ 3 25 3 26 /* END INCLUDE FILE sdw.incl.pl1 */ 89 90 91 end set_kst_attributes; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0800.6 set_kst_attributes.pl1 >spec>install>1110>set_kst_attributes.pl1 81 1 09/18/86 1308.1 kst.incl.pl1 >ldd>include>kst.incl.pl1 85 2 04/29/76 1104.2 kst_attributes.incl.pl1 >ldd>include>kst_attributes.incl.pl1 89 3 09/14/76 0759.8 sdw.incl.pl1 >ldd>include>sdw.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 31 set ref 13 17 51* 56* 76* a_kstap parameter pointer dcl 31 ref 13 17 47 a_segno parameter fixed bin(17,0) dcl 31 ref 13 17 46 access 6(33) based bit(3) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" ref 63 access 1(15) based structure level 2 in structure "sdw" packed packed unaligned dcl 3-5 in procedure "set_kst_attributes" set ref 63* access_information 5 based structure level 2 packed packed unaligned dcl 1-36 allow_write 1(09) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 61 allow_write 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 59 allow_write 7(13) based bit(1) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" set ref 61* 63 audit 7(18) based bit(1) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" set ref 72* audit 0(04) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 72 audit 1(13) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 72 code 000101 automatic fixed bin(35,0) dcl 35 set ref 48* 49 51 dseg$ 000010 external static fixed bin(17,0) dcl 40 set ref 62 error_table_$action_not_performed 000012 external static fixed bin(35,0) dcl 40 ref 56 explicit_deact_ok 7(19) based bit(1) level 3 packed packed unaligned dcl 1-36 set ref 74* explicit_deactivate_ok 0(05) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 74 explicit_deactivate_ok 1(14) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 74 flags 7(12) based structure level 2 packed packed unaligned dcl 1-36 get_kstep 000014 constant entry external dcl 43 ref 48 kst_attributes based structure level 1 dcl 2-5 ref 47 ksta 000102 automatic structure level 1 dcl 35 set ref 47* kste based structure level 1 dcl 1-36 kstep 000106 automatic pointer dcl 1-15 set ref 48* 61 63 63 66 68 70 72 74 priv 000105 automatic bit(1) initial dcl 35 set ref 15* 35* 54 sdw based structure level 1 dcl 3-5 sdwa based structure array level 1 dcl 3-24 set ref 62 sdwp 000110 automatic pointer dcl 3-3 set ref 62* 63 segno 000100 automatic fixed bin(17,0) dcl 35 set ref 46* 48* 62 64* set 000102 automatic structure level 2 packed packed unaligned dcl 35 setfaults$disconnect 000016 constant entry external dcl 43 ref 64 tms 1(10) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 66 tms 0(01) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 54 66 tms 7(15) based bit(1) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" set ref 66* tpd 7(17) based bit(1) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" set ref 70* tpd 1(12) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 70 tpd 0(03) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 70 tus 1(11) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 68 tus 0(02) 000102 automatic bit(1) level 3 in structure "ksta" packed packed unaligned dcl 35 in procedure "set_kst_attributes" set ref 54 68 tus 7(16) based bit(1) level 3 in structure "kste" packed packed unaligned dcl 1-36 in procedure "set_kst_attributes" set ref 68* value 1(09) 000102 automatic structure level 2 packed packed unaligned dcl 35 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. kst based structure level 1 dcl 1-18 kstap automatic pointer dcl 2-3 kstp automatic pointer dcl 1-15 pds$kstp external static pointer dcl 1-15 NAMES DECLARED BY EXPLICIT CONTEXT. highly_privileged 000026 constant entry external dcl 17 set_kst_attributes 000014 constant entry external dcl 13 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 62 62 string builtin function ref 63 unspec builtin function ref 47 47 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 330 350 231 340 Length 566 231 20 202 77 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME set_kst_attributes 86 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME set_kst_attributes 000100 segno set_kst_attributes 000101 code set_kst_attributes 000102 ksta set_kst_attributes 000105 priv set_kst_attributes 000106 kstep set_kst_attributes 000110 sdwp set_kst_attributes THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_kstep setfaults$disconnect THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dseg$ error_table_$action_not_performed LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 35 000004 13 000010 15 000022 17 000023 46 000034 47 000037 48 000046 49 000061 51 000063 52 000065 54 000066 56 000104 57 000110 59 000111 61 000114 62 000122 63 000127 64 000144 66 000152 68 000162 70 000172 72 000203 74 000214 76 000225 77 000227 ----------------------------------------------------------- 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