COMPILATION LISTING OF SEGMENT create_root_dir 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 0949.1 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* *********************************************************** */ 8 create_root_dir: 9 procedure (Dp); 10 11 dcl Dp ptr parameter; 12 13 /* Written by C. Hornig, February 1982. */ 14 15 dcl active_hardcore_data$alloc_sizes (2) fixed bin external; 16 dcl active_hardcore_data$nalloc_sizes fixed bin external; 17 dcl active_hardcore_data$cold_boot_switch bit (1) aligned external; 18 dcl active_hardcore_data$dir_arearp fixed bin (18) external; 19 dcl pvt$root_lvid bit (36) aligned external; 20 dcl pvt$root_pvid bit (36) aligned external; 21 dcl sys_info$default_dir_max_length fixed bin external; 22 23 dcl allocate_dir_ht_ entry (ptr, fixed bin, fixed bin (35)); 24 dcl fs_alloc$init entry (pointer, fixed bin, pointer, fixed bin); 25 dcl lock$dir_lock_write entry (pointer, fixed bin (35)); 26 dcl lock$dir_unlock entry (pointer); 27 dcl syserr$error_code entry options (variable); 28 29 dcl code fixed bin (35); 30 31 dp = Dp; 32 dir.uid = "777777777777"b3; 33 call lock$dir_lock_write (dp, code); /* Lock the root. */ 34 if code ^= 0 then call syserr$error_code (1, code, "create_root_dir: lock error on ^p.", dp); 35 36 active_hardcore_data$cold_boot_switch = "1"b; /* set flag indicating cold boot */ 37 dir.pvid = pvt$root_pvid; /* get info left by init_pvt */ 38 dir.sons_lvid = pvt$root_lvid; 39 dir.master_dir = "1"b; 40 41 /* The below calculations set the relative pointers in the directory structure. They are based 42* on the assumption that directories have a max length of ROOT_MAX_SIZE and that 43* the relative pointers in the directory have been set in active_hardcore_data. 44**/ 45 dir.arearp = bit (active_hardcore_data$dir_arearp, 18); 46 call fs_alloc$init (pointer (dp, dir.arearp), 47 (sys_info$default_dir_max_length - active_hardcore_data$dir_arearp), 48 addr (active_hardcore_data$alloc_sizes), active_hardcore_data$nalloc_sizes); 49 call allocate_dir_ht_ (dp, 0, code); 50 if code ^= 0 then call syserr$error_code (1, code, "create_root_dir: allocating hash table"); 51 call lock$dir_unlock (dp); /* Unlock the root */ 52 return; 53 1 1 /* BEGIN INCLUDE FILE ... dir_header.incl.pl1 */ 1 2 /* Modified 8/74 for NSS */ 1 3 /* Modified 8/76 to add version number and hash table rel pointer for variable hash table sizes */ 1 4 /* Modified 3/82 BIM for change pclock */ 1 5 /* format: style3 */ 1 6 1 7 /* Template for the directory header. Length = 64 words. */ 1 8 1 9 dcl dp ptr; 1 10 1 11 dcl 1 dir based (dp) aligned, 1 12 1 13 2 modify bit (36), /* Process ID of last modifier */ 1 14 2 type bit (18) unaligned, /* type of object = dir header */ 1 15 2 size fixed bin (17) unaligned, /* size of header in words */ 1 16 2 dtc (3), /* date-time checked by salvager array */ 1 17 3 date bit (36), /* the date */ 1 18 3 error bit (36), /* what errors were discovered */ 1 19 1 20 2 uid bit (36), /* uid of the directory - copied from branch */ 1 21 1 22 2 pvid bit (36), /* phys vol id of the dir - copied from branch */ 1 23 1 24 2 sons_lvid bit (36), /* log vol id for inf non dir seg - copied from branch */ 1 25 1 26 2 access_class bit (72), /* security attributes of dir - copied from branch */ 1 27 1 28 (2 vtocx fixed bin (17), /* vtoc entry index of the dir - copied from branch */ 1 29 2 version_number fixed bin (17), /* version number of header */ 1 30 1 31 2 entryfrp bit (18), /* rel ptr to beginning of entry list */ 1 32 2 pad2 bit (18), 1 33 1 34 2 entrybrp bit (18), /* rel ptr to end of entry list */ 1 35 2 pad3 bit (18), 1 36 1 37 2 pers_frp bit (18), /* rel ptr to start of person name list */ 1 38 2 proj_frp bit (18), /* rel ptr to start of project name list */ 1 39 1 40 2 pers_brp bit (18), /* rel ptr to end of person name list */ 1 41 2 proj_brp bit (18), /* rel ptr to end of project name list */ 1 42 1 43 2 seg_count fixed bin (17), /* number of non-directory branches */ 1 44 2 dir_count fixed bin (17), /* number of directory branches */ 1 45 1 46 2 lcount fixed bin (17), /* number of links */ 1 47 2 acle_total fixed bin (17), /* total number of ACL entries in directory */ 1 48 1 49 2 arearp bit (18), /* relative pointer to beginning of allocation area */ 1 50 2 per_process_sw bit (1), /* indicates dir contains per process segments */ 1 51 2 master_dir bit (1), /* TRUE if this is a master dir */ 1 52 2 force_rpv bit (1), /* TRUE if segs must be on RPV */ 1 53 2 rehashing bit (1), /* TRUE if hash table is being constructed */ 1 54 2 pad4 bit (14), 1 55 1 56 2 iacl_count (0:7), 1 57 3 seg fixed bin (17), /* number of initial acl entries for segs */ 1 58 3 dir fixed bin (17), /* number of initial acl entries for dir */ 1 59 1 60 2 iacl (0:7), /* pointer to initial ACLs for each ring */ 1 61 3 seg_frp bit (18), /* rel ptr to start of initial ACL for segs */ 1 62 3 seg_brp bit (18), /* rel ptr to end of initial ACL for segs */ 1 63 1 64 3 dir_frp bit (18), /* rel ptr to start of initial for dirs */ 1 65 3 dir_brp bit (18), /* rel ptr to end of initial ACL for dirs */ 1 66 1 67 2 htsize fixed bin (17), /* size of hash table */ 1 68 2 hash_table_rp bit (18), /* rel ptr to start of hash table */ 1 69 1 70 2 htused fixed bin (17), /* no. of used places in hash table */ 1 71 2 pad6 fixed bin (17), 1 72 1 73 2 tree_depth fixed bin (17), /* number of levels from root of this dir */ 1 74 2 pad7 bit (18)) unaligned, 1 75 1 76 2 dts bit (36), /* date-time directory last salvaged */ 1 77 1 78 2 master_dir_uid bit (36), /* uid of superior master dir */ 1 79 2 change_pclock fixed bin (35), /* up one each call to sum$dirmod */ 1 80 2 pad8 (11) bit (36), /* pad to make it a 64 word header */ 1 81 2 checksum bit (36), /* checksummed from uid on */ 1 82 2 owner bit (36); /* uid of parent dir */ 1 83 1 84 dcl version_number_2 fixed bin int static options (constant) init (2); 1 85 1 86 /* END INCLUDE FILE ... dir_header.incl.pl1 */ 54 55 56 /* BEGIN MESSAGE DOCUMENTATION 57* 58* Message: 59* create_root_dir: lock error on PPP 60* 61* S: $crash 62* 63* T: $init 64* 65* M: The supervisor was unable to lock the root. 66* $err 67* 68* A: $recover 69* $boot_tape 70* 71* 72* Message: 73* create_root_dir: allocating hash table ERROR_MESSAGE 74* 75* S: $crash 76* 77* T: Cold boot of Multics hierarchy. 78* 79* M: $err 80* An error has occurred allocating the hash table for the root directory. 81* 82* A: Reboot with a different version of the system. 83* 84* 85* END MESSAGE DOCUMENTATION */ 86 87 end create_root_dir; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0826.9 create_root_dir.pl1 >spec>install>1112>create_root_dir.pl1 54 1 05/24/82 1005.0 dir_header.incl.pl1 >ldd>include>dir_header.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. Dp parameter pointer dcl 11 ref 8 31 active_hardcore_data$alloc_sizes 000010 external static fixed bin(17,0) array dcl 15 set ref 46 46 active_hardcore_data$cold_boot_switch 000014 external static bit(1) dcl 17 set ref 36* active_hardcore_data$dir_arearp 000016 external static fixed bin(18,0) dcl 18 ref 45 46 active_hardcore_data$nalloc_sizes 000012 external static fixed bin(17,0) dcl 16 set ref 46* allocate_dir_ht_ 000026 constant entry external dcl 23 ref 49 arearp 24 based bit(18) level 2 packed packed unaligned dcl 1-11 set ref 45* 46 46 code 000100 automatic fixed bin(35,0) dcl 29 set ref 33* 34 34* 49* 50 50* dir based structure level 1 dcl 1-11 dp 000102 automatic pointer dcl 1-9 set ref 31* 32 33* 34* 37 38 39 45 46 46 46 46 49* 51* fs_alloc$init 000030 constant entry external dcl 24 ref 46 lock$dir_lock_write 000032 constant entry external dcl 25 ref 33 lock$dir_unlock 000034 constant entry external dcl 26 ref 51 master_dir 24(19) based bit(1) level 2 packed packed unaligned dcl 1-11 set ref 39* pvid 11 based bit(36) level 2 dcl 1-11 set ref 37* pvt$root_lvid 000020 external static bit(36) dcl 19 ref 38 pvt$root_pvid 000022 external static bit(36) dcl 20 ref 37 sons_lvid 12 based bit(36) level 2 dcl 1-11 set ref 38* sys_info$default_dir_max_length 000024 external static fixed bin(17,0) dcl 21 ref 46 syserr$error_code 000036 constant entry external dcl 27 ref 34 50 uid 10 based bit(36) level 2 dcl 1-11 set ref 32* NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. version_number_2 internal static fixed bin(17,0) initial dcl 1-84 NAME DECLARED BY EXPLICIT CONTEXT. create_root_dir 000033 constant entry external dcl 8 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 46 46 bit builtin function ref 45 pointer builtin function ref 46 46 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 420 460 232 430 Length 660 232 40 164 166 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME create_root_dir 122 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME create_root_dir 000100 code create_root_dir 000102 dp create_root_dir 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. allocate_dir_ht_ fs_alloc$init lock$dir_lock_write lock$dir_unlock syserr$error_code THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. active_hardcore_data$alloc_sizes active_hardcore_data$cold_boot_switch active_hardcore_data$dir_arearp active_hardcore_data$nalloc_sizes pvt$root_lvid pvt$root_pvid sys_info$default_dir_max_length LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 8 000030 31 000040 32 000044 33 000046 34 000056 36 000112 37 000115 38 000120 39 000122 45 000124 46 000131 49 000155 50 000171 51 000221 52 000230 ----------------------------------------------------------- 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