COMPILATION LISTING OF SEGMENT lm_per_system_init_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 01/03/85 1652.7 mst Thu Options: optimize list 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* Per-System Initialization Program for Locking 9**/ 10 11 /* HISTORY: 12* 13*Written by J. Bongiovanni, 01/15/82. 14*Modified: 15*12/15/82 by J. Bongiovanni: for multi-segment lock table. 16*03/31/83 by BIM: Renamed, made per-transaction, fast lock included. 17*08/06/83 by Lee A. Newcomb: removed obsolete code args. from calls 18* to dm_per_system_ entries. 19*11/30/83 by L. A. Newcomb: Added NORMAL_LOCK_SEG_SIZE temporarily until the 20* lock seg size can be integrated into the configuration file. 21*05/01/84 by R. Michael Tague: Split dm_lm_meters structure from 22* dm_lm_system_data, added %include dm_lm_meters. 23*10/17/84 by Stanford S. Cox: For DM program standards, and to allow quit, 24* alrm, and cput ips when testing. 25**/ 26 /* format: style3 */ 27 lm_per_system_init_: 28 proc (p_code); 29 30 /* Parameter */ 31 32 dcl p_code fixed bin (35) parameter; /* Standard error code */ 33 34 /* Automatic */ 35 36 dcl freex fixed bin; 37 dcl hashx fixed bin; 38 39 /* Static */ 40 41 dcl HASH_TABLE_ENTRIES fixed bin int static options (constant) init (256); 42 dcl HASH_MASK bit (36) aligned int static options (constant) init ("000000000377"b3); 43 dcl IPS_NAMES (3) char (32) int static options (constant) init ("quit", "alrm", "cput"); 44 dcl MAX_LOCK_SEGMENTS fixed bin int static options (constant) init (100); 45 46 /* The next two should be eliminated in favor of a config file parameter. */ 47 dcl TEST_LOCK_SEG_SIZE fixed bin (19) int static options (constant) init (1024 * 4); 48 /* use 4K seg. */ 49 dcl NORMAL_LOCK_SEG_SIZE 50 fixed bin (19) int static options (constant) init (1024 * 16); 51 /* use 16K seg. */ 52 53 /* External */ 54 55 dcl dm_system_data_$lock_ips_mask 56 bit (36) aligned external; 57 dcl dm_system_data_$max_n_transactions 58 fixed bin external; 59 dcl sys_info$data_management_ringno 60 fixed bin external; 61 dcl sys_info$max_seg_size 62 fixed bin (19) external; 63 64 /* Entry */ 65 66 dcl lm_init_fast_lock_data_ 67 entry (fixed bin (35)); 68 dcl create_ips_mask_ entry (ptr, fixed bin, bit (36) aligned); 69 dcl dm_per_system_$create 70 entry (char (*), ptr); 71 dcl get_ring_ entry () returns (fixed bin (3)); 72 dcl sub_err_ entry () options (variable); 73 74 /* Builtin */ 75 76 dcl addr builtin; 77 dcl divide builtin; 78 dcl fixed builtin; 79 dcl hbound builtin; 80 dcl size builtin; 81 dcl wordno builtin; 82 83 dcl ME char (32) init ("lm_per_system_init_") int static options (constant); 84 85 p_code = 0; 86 call lm_init_fast_lock_data_ (p_code); 87 if p_code ^= 0 88 then return; 89 90 lock_segno = 1; 91 call dm_per_system_$create (LOCK_SEGNAME || lock_segno, lock_seg_ptr); 92 lock_seg.version = LOCK_SEG_VERSION_1; 93 lock_seg.n_transaction_table_entries = dm_system_data_$max_n_transactions; 94 95 lock_seg.lock = 0; 96 97 /* If we're in test mode, set the segment size small so we get lots of them. */ 98 99 if get_ring_ () = sys_info$data_management_ringno 100 then do; 101 lock_seg.lock_seg_size = NORMAL_LOCK_SEG_SIZE; 102 dm_system_data_$lock_ips_mask = "0"b; 103 end; 104 else do; 105 lock_seg.lock_seg_size = TEST_LOCK_SEG_SIZE; 106 call create_ips_mask_ (addr (IPS_NAMES), hbound (IPS_NAMES, 1), dm_system_data_$lock_ips_mask); 107 end; 108 109 lock_seg.n_hash_table_entries = HASH_TABLE_ENTRIES; 110 lock_seg.hash_mask = HASH_MASK; 111 lock_seg.meters.version = LOCK_METERS_VERSION_1; 112 113 lock_seg.transaction_table_offset = wordno (addr (lock_seg.transaction_table)); 114 lock_seg.hash_table_offset = wordno (addr (lock_seg.hash_table)); 115 116 lock_hash_table_ptr = addr (lock_seg.hash_table); 117 do hashx = 1 to lock_seg.n_hash_table_entries; 118 lock_hash_table.buckets (hashx) = NULL_VPTR; 119 end; 120 121 lock_block_array_ptr = addr (lock_seg.free); 122 n_lock_blocks = divide (lock_seg.lock_seg_size - fixed (wordno (lock_block_array_ptr)), size (lock_block), 17); 123 lock_seg.free_list_ptr = VPTR (lock_block_array_ptr); 124 lock_free_block_ptr = addr (lock_block_array (1)); 125 do freex = 1 to n_lock_blocks; 126 lock_free_block.free_fp = VPTR (addr (lock_block_array (freex))); 127 lock_free_block_ptr = addr (lock_block_array (freex)); 128 lock_free_block.seg_inx = 1; 129 lock_free_block.type = TYPE_FREE; 130 end; 131 lock_free_block.free_fp = NULL_VPTR; 132 133 lock_seg.n_lock_blocks = n_lock_blocks; 134 lock_seg.lock_array_offset = wordno (lock_block_array_ptr); 135 lock_seg.n_lock_segments = 1; 136 lock_seg.max_lock_segments = MAX_LOCK_SEGMENTS; 137 138 return; 139 140 /* Internal Procedure to create a lock virtual pointer to an object in 141* this segment. */ 142 143 VPTR: 144 proc (vptr_p_lock_ptr) returns (1 like lock_virtual_ptr); 145 146 dcl vptr_p_lock_ptr ptr parameter; 147 148 dcl 1 vptr_lock_virtual_ptr 149 aligned like lock_virtual_ptr; 150 151 vptr_lock_virtual_ptr.seg_inx = 1; 152 vptr_lock_virtual_ptr.offset = wordno (vptr_p_lock_ptr); 153 return (vptr_lock_virtual_ptr); 154 155 end VPTR; 156 1 1 /* BEGIN INCLUDE FILE - dm_lm_system_data.incl.pl1 */ 1 2 1 3 /* format: style3,idind25 */ 1 4 /* HISTORY: 1 5* 1 6*Written by Benson Margulies, 4/83. 1 7*Modified: 1 8*04/24/84 by R. Michael Tague: moved the meters structure definition to 1 9* dm_lm_meters.incl.pl1. Added this history section. 1 10*05/01/84 by R. Michael Tague: removed the %include dm_lm_meters. 1 11*10/17/84 by Stanford S. Cox: Added version constant, and changed 1 12* transaction_table to use a refer extent (to allow outer ring reference). 1 13**/ 1 14 1 15 dcl lock_seg_ptr ptr; 1 16 dcl lock_transaction_table_ptr 1 17 ptr; 1 18 dcl lock_hash_table_ptr ptr; 1 19 dcl lock_aux_seg_ptr ptr; 1 20 dcl lock_block_ptr ptr; 1 21 dcl lock_block_array_ptr ptr; 1 22 dcl lock_free_block_ptr ptr; 1 23 dcl lock_object_ptr ptr; 1 24 dcl lock_owner_ptr ptr; 1 25 dcl lock_segments_ptr ptr; 1 26 dcl lock_waiter_ptr ptr; 1 27 dcl lock_deadlock_ptr ptr; 1 28 1 29 dcl n_lock_blocks fixed bin; 1 30 dcl n_lock_deadlock fixed bin; 1 31 1 32 dcl LOCK_SEG_VERSION_1 char (8) aligned init ("locksg 1") int static options (constant); 1 33 1 34 dcl 1 lock_seg aligned based (lock_seg_ptr), 1 35 /* Per-system lock data */ 1 36 2 version char (8) aligned, 1 37 2 header aligned, 1 38 3 lock fixed bin (71), /* Fast Lock on system lock operations */ 1 39 3 n_lock_segments fixed bin, /* Number of segments in system lock data */ 1 40 3 lock_seg_size fixed bin (19), /* Number of words per segment */ 1 41 3 max_lock_segments fixed bin, /* Maximum number of segments */ 1 42 3 n_transaction_table_entries 1 43 fixed bin, /* Size of transaction table */ 1 44 3 n_hash_table_entries 1 45 fixed bin, /* Size of hash table */ 1 46 3 hash_mask bit (36) aligned, /* Used by hashing routine */ 1 47 3 free_list_ptr aligned like lock_virtual_ptr, 1 48 /* Thread of free blocks */ 1 49 3 transaction_table_offset 1 50 fixed bin (18) unsigned aligned, 1 51 /* Offset of transaction table */ 1 52 3 hash_table_offset fixed bin (18) unsigned aligned, 1 53 /* Offset of hash table */ 1 54 3 n_lock_blocks fixed bin, /* Number of blocks crated */ 1 55 3 lock_array_offset fixed bin (18) unsigned aligned, 1 56 /* Offset of block array */ 1 57 2 transaction_table (0 refer (lock_seg.n_transaction_table_entries)) aligned like lock_transaction_table, 1 58 2 hash_table aligned like lock_hash_table, 1 59 2 meters aligned like lock_meters, 1 60 2 free fixed bin (71); /* Free space */ 1 61 1 62 dcl 1 lock_aux_seg aligned based (lock_aux_seg_ptr), 1 63 /* Other than first segment */ 1 64 2 n_lock_blocks fixed bin, /* Number of blocks in this segment */ 1 65 2 lock_array_offset fixed bin (18) unsigned aligned, 1 66 /* Offset of block array */ 1 67 2 free fixed bin (71); /* Free space */ 1 68 1 69 dcl 1 lock_transaction_table aligned based (lock_transaction_table_ptr), 1 70 /* Process table entry */ 1 71 2 deadlock_inx fixed bin, /* Index used for deadlock detection */ 1 72 2 process_id bit (36) aligned, /* Multics process identifier */ 1 73 2 txn_id bit (36) aligned, /* Current transaction ID */ 1 74 2 ev_channel fixed bin (71), 1 75 2 own_ptr aligned like lock_virtual_ptr, 1 76 /* First in thread of owning blocks */ 1 77 2 wait_ptr aligned like lock_virtual_ptr; 1 78 /* Waiting block */ 1 79 1 80 dcl 1 lock_hash_table aligned based (lock_hash_table_ptr), 1 81 2 buckets (lock_seg.n_hash_table_entries) aligned like lock_virtual_ptr; 1 82 1 83 1 84 dcl 1 lock_block aligned based (lock_block_ptr), 1 85 /* Generic block */ 1 86 2 seg_inx fixed bin unal, 1 87 2 type fixed bin unal, 1 88 2 pad (5) bit (36) aligned; 1 89 1 90 dcl 1 lock_block_array (n_lock_blocks) aligned like lock_block based (lock_block_array_ptr); 1 91 1 92 dcl 1 lock_free_block aligned based (lock_free_block_ptr), 1 93 /* Free block */ 1 94 2 seg_inx fixed bin unal, 1 95 2 type fixed bin unal, /* TYPE_FREE */ 1 96 2 free_fp aligned like lock_virtual_ptr, 1 97 /* Thread of free blocks */ 1 98 2 pad (4) bit (36) aligned; 1 99 1 100 dcl 1 lock_object aligned based (lock_object_ptr), 1 101 /* That which is locked */ 1 102 2 seg_inx fixed bin unal, 1 103 2 type fixed bin unal, /* TYPE_OBJECT */ 1 104 2 uid bit (36) aligned, /* Page File UID */ 1 105 2 ci_no fixed bin (35), /* Control Interval (-1 => Page File) */ 1 106 2 owners_ptr aligned like lock_virtual_ptr, 1 107 /* First in thread of owning blocks */ 1 108 2 waiters_ptr aligned like lock_virtual_ptr, 1 109 /* First in thread of waiting blocks */ 1 110 2 ht_fp aligned like lock_virtual_ptr; 1 111 /* Hash Table thread */ 1 112 1 113 dcl 1 lock_owner aligned based (lock_owner_ptr), 1 114 /* Owner of a lock */ 1 115 2 seg_inx fixed bin unal, 1 116 2 type fixed bin unal, /* TYPE_OWNER */ 1 117 2 lock_ptr aligned like lock_virtual_ptr, 1 118 /* Pointer to lock_object */ 1 119 2 mode fixed bin, /* Type of lock */ 1 120 2 owners_fp aligned like lock_virtual_ptr, 1 121 /* Thread of owners */ 1 122 2 transaction_fp aligned like lock_virtual_ptr, 1 123 /* Thread of locks owned by this transaction */ 1 124 2 transaction_ptr aligned like lock_virtual_ptr; 1 125 /* Pointer to transaction table entry */ 1 126 1 127 1 128 dcl 1 lock_waiter aligned based (lock_waiter_ptr), 1 129 /* Waiter for a lock */ 1 130 2 seg_inx fixed bin unal, 1 131 2 type fixed bin unal, /* TYPE_WAITER */ 1 132 2 lock_ptr aligned like lock_virtual_ptr, 1 133 /* Pointer to lock_object */ 1 134 2 mode fixed bin, /* Desired mode */ 1 135 2 waiters_fp aligned like lock_virtual_ptr, 1 136 /* Thread of waiters */ 1 137 2 transaction_ptr aligned like lock_virtual_ptr, 1 138 /* Process table entry of this proces */ 1 139 2 pad bit (36) aligned; 1 140 1 141 1 142 dcl 1 lock_segments aligned based (lock_segments_ptr), 1 143 2 seg_baseptr (lock_seg.n_lock_segments) ptr unal; 1 144 1 145 dcl 1 lock_virtual_ptr aligned based, 1 146 2 seg_inx fixed bin unal, 1 147 2 offset fixed bin (18) unsigned unal; 1 148 1 149 dcl 1 lock_deadlock aligned based (lock_deadlock_ptr), 1 150 2 wait_own (n_lock_deadlock, n_lock_deadlock) bit (1) unaligned; 1 151 1 152 declare 1 lock_deadlock_36 aligned based (lock_deadlock_ptr), 1 153 2 wait_own (36, 36) bit (1) unaligned; 1 154 1 155 declare 1 lock_deadlock_72 aligned based (lock_deadlock_ptr), 1 156 2 wait_own (72, 72) bit (1) unaligned; 1 157 /* (x,y) ON => x waiting for lock owned by y */ 1 158 1 159 declare lock_deadlock_txn_ids_ptr 1 160 pointer; 1 161 declare lock_deadlock_txn_ids (n_lock_deadlock) bit (36) aligned based (lock_deadlock_txn_ids_ptr); 1 162 dcl ( 1 163 TYPE_FREE init (1), 1 164 TYPE_OBJECT init (2), 1 165 TYPE_OWNER init (3), 1 166 TYPE_WAITER init (4), 1 167 MAX_TYPE init (4) 1 168 ) fixed bin int static options (constant); 1 169 1 170 1 171 dcl 1 NULL_VPTR aligned int static options (constant), 1 172 2 seg_inx fixed bin unal init (-1), 1 173 2 offset fixed bin (18) unsigned unal init (0); 1 174 1 175 1 176 dcl LOCK_BLOCK_SIZE fixed bin int static options (constant) init (6); 1 177 /* Size of all lock blocks */ 1 178 1 179 dcl LOCK_SEGNAME char (9) int static options (constant) init ("lock_seg_"); 1 180 1 181 dcl lock_segno pic "999"; 1 182 1 183 dcl ( 1 184 LOCK_MESSAGE_DEADLOCK init (1243657) 1 185 ) fixed bin (71) int static options (constant); 1 186 1 187 1 188 /* END INCLUDE FILE - dm_lm_system_data.incl.pl1 */ 157 2 1 /* BEGIN INCLUDE FILE - dm_lm_meters.incl.pl1 * 2 2* 2 3*/* format: style3,idind25 */ 2 4 2 5 /* DESCRIPTION: 2 6* 2 7* This is the lock manager meters structure. 2 8**/ 2 9 /* HISTORY: 2 10*Written by R. Michael Tague, 4/24/84. 2 11*Modified: 2 12*05/01/84 by R. Michael Tague: Collected all of the meters together into 2 13* the meters structure. 2 14**/ 2 15 2 16 dcl lock_meters_ptr ptr; 2 17 dcl LOCK_METERS_VERSION_1 char (8) aligned int static options (constant) 2 18 init ("LMMETER1"); 2 19 2 20 dcl 1 lock_meters aligned based (lock_meters_ptr), 2 21 2 version char (8), 2 22 2 lm_meters aligned, 2 23 3 lock_calls fixed bin (35), 2 24 3 unlock_all_calls fixed bin (35), 2 25 3 waits fixed bin (35), 2 26 3 deadlock_checks fixed bin (35), 2 27 3 real_deadlock_checks 2 28 fixed bin (35), 2 29 3 deadlock_checks_36 fixed bin (35), 2 30 3 deadlock_checks_72 fixed bin (35), 2 31 3 deadlock_self_youngest 2 32 fixed bin (35), 2 33 3 deadlock_other_youngest 2 34 fixed bin (35), 2 35 3 file_locks_by_mode (2:6) fixed bin (35), 2 36 3 ci_locks_by_mode (2:3) fixed bin (35), 2 37 3 allocates fixed bin (35), 2 38 3 frees fixed bin (35), 2 39 3 dup_file_locks_by_mode 2 40 (2:6) fixed bin (35), 2 41 3 dup_ci_locks_by_mode 2 42 (2:3) fixed bin (35), 2 43 3 pad (11) fixed bin (35); 2 44 2 45 /* END INCLUDE FILE - dm_lm_meters.incl.pl1 */ 158 3 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 159 160 end lm_per_system_init_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 01/03/85 1151.2 lm_per_system_init_.pl1 >spec>temp>famis1>lm_per_system_init_.pl1 157 1 01/03/85 1003.9 dm_lm_system_data.incl.pl1 >spec>temp>famis1>dm_lm_system_data.incl.pl1 158 2 01/03/85 1003.8 dm_lm_meters.incl.pl1 >spec>temp>famis1>dm_lm_meters.incl.pl1 159 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.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. HASH_MASK constant bit(36) initial dcl 42 ref 110 HASH_TABLE_ENTRIES constant fixed bin(17,0) initial dcl 41 ref 109 IPS_NAMES 000012 constant char(32) initial array unaligned dcl 43 set ref 106 106 106 106 LOCK_METERS_VERSION_1 000002 constant char(8) initial dcl 2-17 ref 111 LOCK_SEGNAME 000004 constant char(9) initial unaligned dcl 1-179 ref 91 LOCK_SEG_VERSION_1 000010 constant char(8) initial dcl 1-32 ref 92 MAX_LOCK_SEGMENTS constant fixed bin(17,0) initial dcl 44 ref 136 NORMAL_LOCK_SEG_SIZE constant fixed bin(19,0) initial dcl 49 ref 101 NULL_VPTR 000000 constant structure level 1 dcl 1-171 ref 118 131 TEST_LOCK_SEG_SIZE constant fixed bin(19,0) initial dcl 47 ref 105 TYPE_FREE constant fixed bin(17,0) initial dcl 1-162 ref 129 addr builtin function dcl 76 ref 106 106 113 114 116 121 124 126 126 127 buckets based structure array level 2 dcl 1-80 set ref 118* create_ips_mask_ 000020 constant entry external dcl 68 ref 106 divide builtin function dcl 77 ref 122 dm_per_system_$create 000022 constant entry external dcl 69 ref 91 dm_system_data_$lock_ips_mask 000010 external static bit(36) dcl 55 set ref 102* 106* dm_system_data_$max_n_transactions 000012 external static fixed bin(17,0) dcl 57 ref 93 fixed builtin function dcl 78 ref 122 free based fixed bin(71,0) level 2 dcl 1-34 set ref 121 free_fp 1 based structure level 2 dcl 1-92 set ref 126* 131* free_list_ptr 12 based structure level 3 dcl 1-34 set ref 123* freex 000100 automatic fixed bin(17,0) dcl 36 set ref 125* 126 126 127* get_ring_ 000024 constant entry external dcl 71 ref 99 hash_mask 11 based bit(36) level 3 dcl 1-34 set ref 110* hash_table based structure level 2 dcl 1-34 set ref 114 116 hash_table_offset 14 based fixed bin(18,0) level 3 unsigned dcl 1-34 set ref 114* hashx 000101 automatic fixed bin(17,0) dcl 37 set ref 117* 118* hbound builtin function dcl 79 ref 106 106 header 2 based structure level 2 dcl 1-34 lm_init_fast_lock_data_ 000016 constant entry external dcl 66 ref 86 lock 2 based fixed bin(71,0) level 3 dcl 1-34 set ref 95* lock_array_offset 16 based fixed bin(18,0) level 3 unsigned dcl 1-34 set ref 134* lock_block based structure level 1 dcl 1-84 ref 122 lock_block_array based structure array level 1 dcl 1-90 set ref 124 126 126 127 lock_block_array_ptr 000106 automatic pointer dcl 1-21 set ref 121* 122 123* 124 126 126 127 134 lock_block_ptr automatic pointer dcl 1-20 ref 122 lock_free_block based structure level 1 dcl 1-92 lock_free_block_ptr 000110 automatic pointer dcl 1-22 set ref 124* 126 127* 128 129 131 lock_hash_table based structure level 1 dcl 1-80 lock_hash_table_ptr 000104 automatic pointer dcl 1-18 set ref 116* 118 lock_meters based structure level 1 dcl 2-20 lock_seg based structure level 1 dcl 1-34 lock_seg_ptr 000102 automatic pointer dcl 1-15 set ref 91* 92 93 95 101 105 109 110 111 111 113 113 114 114 116 117 121 121 122 123 133 134 135 136 lock_seg_size 5 based fixed bin(19,0) level 3 dcl 1-34 set ref 101* 105* 122 lock_segno 000113 automatic picture(3) unaligned dcl 1-181 set ref 90* 91 lock_transaction_table based structure level 1 dcl 1-69 lock_virtual_ptr based structure level 1 dcl 1-145 max_lock_segments 6 based fixed bin(17,0) level 3 dcl 1-34 set ref 136* meters based structure level 2 dcl 1-34 n_hash_table_entries 10 based fixed bin(17,0) level 3 dcl 1-34 set ref 109* 111 117 121 n_lock_blocks 000112 automatic fixed bin(17,0) dcl 1-29 in procedure "lm_per_system_init_" set ref 122* 125 133 n_lock_blocks 15 based fixed bin(17,0) level 3 in structure "lock_seg" dcl 1-34 in procedure "lm_per_system_init_" set ref 133* n_lock_segments 4 based fixed bin(17,0) level 3 dcl 1-34 set ref 135* n_transaction_table_entries 7 based fixed bin(17,0) level 3 dcl 1-34 set ref 93* 111 114 116 121 p_code parameter fixed bin(35,0) dcl 32 set ref 27 85* 86* 87 seg_inx based fixed bin(17,0) level 2 packed unaligned dcl 1-92 set ref 128* size builtin function dcl 80 ref 122 sys_info$data_management_ringno 000014 external static fixed bin(17,0) dcl 59 ref 99 transaction_table 20 based structure array level 2 dcl 1-34 set ref 113 transaction_table_offset 13 based fixed bin(18,0) level 3 unsigned dcl 1-34 set ref 113* type 0(18) based fixed bin(17,0) level 2 packed unaligned dcl 1-92 set ref 129* version based char(8) level 3 in structure "lock_seg" dcl 1-34 in procedure "lm_per_system_init_" set ref 111* version based char(8) level 2 in structure "lock_seg" dcl 1-34 in procedure "lm_per_system_init_" set ref 92* vptr_lock_virtual_ptr 000124 automatic structure level 1 dcl 148 set ref 153 vptr_p_lock_ptr parameter pointer dcl 146 ref 143 152 wordno builtin function dcl 81 ref 113 114 122 134 152 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CANT_RESTART internal static bit(36) initial dcl 3-7 ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 LOCK_BLOCK_SIZE internal static fixed bin(17,0) initial dcl 1-176 LOCK_MESSAGE_DEADLOCK internal static fixed bin(71,0) initial dcl 1-183 MAX_TYPE internal static fixed bin(17,0) initial dcl 1-162 ME internal static char(32) initial unaligned dcl 83 TYPE_OBJECT internal static fixed bin(17,0) initial dcl 1-162 TYPE_OWNER internal static fixed bin(17,0) initial dcl 1-162 TYPE_WAITER internal static fixed bin(17,0) initial dcl 1-162 lock_aux_seg based structure level 1 dcl 1-62 lock_aux_seg_ptr automatic pointer dcl 1-19 lock_deadlock based structure level 1 dcl 1-149 lock_deadlock_36 based structure level 1 dcl 1-152 lock_deadlock_72 based structure level 1 dcl 1-155 lock_deadlock_ptr automatic pointer dcl 1-27 lock_deadlock_txn_ids based bit(36) array dcl 1-161 lock_deadlock_txn_ids_ptr automatic pointer dcl 1-159 lock_meters_ptr automatic pointer dcl 2-16 lock_object based structure level 1 dcl 1-100 lock_object_ptr automatic pointer dcl 1-23 lock_owner based structure level 1 dcl 1-113 lock_owner_ptr automatic pointer dcl 1-24 lock_segments based structure level 1 dcl 1-142 lock_segments_ptr automatic pointer dcl 1-25 lock_transaction_table_ptr automatic pointer dcl 1-16 lock_waiter based structure level 1 dcl 1-128 lock_waiter_ptr automatic pointer dcl 1-26 n_lock_deadlock automatic fixed bin(17,0) dcl 1-30 sub_err_ 000000 constant entry external dcl 72 sys_info$max_seg_size external static fixed bin(19,0) dcl 61 NAMES DECLARED BY EXPLICIT CONTEXT. VPTR 000355 constant entry internal dcl 143 ref 123 126 lm_per_system_init_ 000060 constant entry external dcl 27 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 540 566 413 550 Length 1022 413 26 217 125 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME lm_per_system_init_ 109 external procedure is an external procedure. VPTR internal procedure shares stack frame of external procedure lm_per_system_init_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME lm_per_system_init_ 000100 freex lm_per_system_init_ 000101 hashx lm_per_system_init_ 000102 lock_seg_ptr lm_per_system_init_ 000104 lock_hash_table_ptr lm_per_system_init_ 000106 lock_block_array_ptr lm_per_system_init_ 000110 lock_free_block_ptr lm_per_system_init_ 000112 n_lock_blocks lm_per_system_init_ 000113 lock_segno lm_per_system_init_ 000124 vptr_lock_virtual_ptr VPTR THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. create_ips_mask_ dm_per_system_$create get_ring_ lm_init_fast_lock_data_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_system_data_$lock_ips_mask dm_system_data_$max_n_transactions sys_info$data_management_ringno CONSTANTS 000376 aa 000004000000 000377 aa 000000000000 000400 aa 600000000041 000401 aa 000152000000 000402 aa 600000000041 000403 aa 000147000000 000404 aa 000004000000 000405 aa 000000000000 000406 aa 600000000041 000407 aa 000106000000 000410 aa 600000000041 000411 aa 000147000000 000412 aa 070 323 000 000 8Ó 000002 aa 114 115 115 105 LMME 000003 aa 124 105 122 061 TER1 000004 aa 154 157 143 153 lock 000005 aa 137 163 145 147 _seg 000006 aa 137 000 000 000 _ 000010 aa 154 157 143 153 lock 000011 aa 163 147 040 061 sg 1 000012 aa 161 165 151 164 quit 000013 aa 040 040 040 040 000014 aa 040 040 040 040 000015 aa 040 040 040 040 000016 aa 040 040 040 040 000017 aa 040 040 040 040 000020 aa 040 040 040 040 000021 aa 040 040 040 040 000022 aa 141 154 162 155 alrm 000023 aa 040 040 040 040 000024 aa 040 040 040 040 000025 aa 040 040 040 040 000026 aa 040 040 040 040 000027 aa 040 040 040 040 000030 aa 040 040 040 040 000031 aa 040 040 040 040 000032 aa 143 160 165 164 cput 000033 aa 040 040 040 040 000034 aa 040 040 040 040 000035 aa 040 040 040 040 000036 aa 040 040 040 040 000037 aa 040 040 040 040 000040 aa 040 040 040 040 000041 aa 040 040 040 040 000042 aa 464000000000 000043 aa 524000000014 000044 aa 053060060061 000045 aa 404000000003 000046 aa 404000000043 000050 aa 000000000000 000051 aa 000000000000 000052 aa 506000000002 000053 aa 406000000021 000054 aa 606000000022 BEGIN PROCEDURE lm_per_system_init_ ENTRY TO lm_per_system_init_ STATEMENT 1 ON LINE 27 lm_per_system_init_: proc (p_code); 000055 at 000001000046 000056 ta 000055000000 000057 da 000121300000 000060 aa 000160 6270 00 eax7 112 000061 aa 7 00034 3521 20 epp2 pr7|28,* 000062 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000063 aa 000002000000 000064 aa 000000000000 STATEMENT 1 ON LINE 85 p_code = 0; 000065 aa 6 00032 3735 20 epp7 pr6|26,* 000066 aa 7 00002 4501 20 stz pr7|2,* p_code STATEMENT 1 ON LINE 86 call lm_init_fast_lock_data_ (p_code); 000067 aa 7 00002 3521 20 epp2 pr7|2,* p_code 000070 aa 6 00130 2521 00 spri2 pr6|88 000071 aa 6 00126 6211 00 eax1 pr6|86 000072 aa 004000 4310 07 fld 2048,dl 000073 la 4 00016 3521 20 epp2 pr4|14,* lm_init_fast_lock_data_ 000074 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 87 if p_code ^= 0 then return; 000075 aa 6 00032 3735 20 epp7 pr6|26,* 000076 aa 7 00002 2361 20 ldq pr7|2,* p_code 000077 aa 0 00631 6011 00 tnz pr0|409 return STATEMENT 1 ON LINE 90 lock_segno = 1; 000100 aa 6 00113 4501 00 stz pr6|75 lock_segno 000101 aa 100 004 024 404 mvne (ic),(ic),(pr) 000102 aa 777743 01 0004 desc9ls -29,4,0 000044 = 053060060061 000103 aa 000311 00 0002 desc9a 201,2 000412 = 070323000000 000104 aa 6 00113 00 0003 desc9a pr6|75,3 lock_segno STATEMENT 1 ON LINE 91 call dm_per_system_$create (LOCK_SEGNAME || lock_segno, lock_seg_ptr); 000105 aa 040 100 100 404 mlr (ic),(pr),fill(040) 000106 aa 777677 00 0011 desc9a -65,9 000004 = 154157143153 000107 aa 6 00126 00 0011 desc9a pr6|86,9 000110 aa 040 100 100 500 mlr (pr),(pr),fill(040) 000111 aa 6 00113 00 0003 desc9a pr6|75,3 lock_segno 000112 aa 6 00130 20 0003 desc9a pr6|88(1),3 000113 aa 6 00126 3521 00 epp2 pr6|86 000114 aa 6 00134 2521 00 spri2 pr6|92 000115 aa 6 00102 3521 00 epp2 pr6|66 lock_seg_ptr 000116 aa 6 00136 2521 00 spri2 pr6|94 000117 aa 777724 3520 04 epp2 -44,ic 000043 = 524000000014 000120 aa 6 00140 2521 00 spri2 pr6|96 000121 aa 777721 3520 04 epp2 -47,ic 000042 = 464000000000 000122 aa 6 00142 2521 00 spri2 pr6|98 000123 aa 6 00132 6211 00 eax1 pr6|90 000124 aa 010000 4310 07 fld 4096,dl 000125 aa 6 00044 3701 20 epp4 pr6|36,* 000126 la 4 00022 3521 20 epp2 pr4|18,* dm_per_system_$create 000127 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 92 lock_seg.version = LOCK_SEG_VERSION_1; 000130 aa 777660 2370 04 ldaq -80,ic 000010 = 154157143153 163147040061 000131 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000132 aa 7 00000 7551 00 sta pr7|0 lock_seg.version 000133 aa 7 00001 7561 00 stq pr7|1 lock_seg.version STATEMENT 1 ON LINE 93 lock_seg.n_transaction_table_entries = dm_system_data_$max_n_transactions; 000134 aa 6 00044 3701 20 epp4 pr6|36,* 000135 la 4 00012 2361 20 ldq pr4|10,* dm_system_data_$max_n_transactions 000136 aa 7 00007 7561 00 stq pr7|7 lock_seg.n_transaction_table_entries STATEMENT 1 ON LINE 95 lock_seg.lock = 0; 000137 aa 777711 2370 04 ldaq -55,ic 000050 = 000000000000 000000000000 000140 aa 7 00002 7571 00 staq pr7|2 lock_seg.lock STATEMENT 1 ON LINE 99 if get_ring_ () = sys_info$data_management_ringno then do; 000141 aa 6 00125 3521 00 epp2 pr6|85 000142 aa 6 00130 2521 00 spri2 pr6|88 000143 aa 6 00126 6211 00 eax1 pr6|86 000144 aa 004000 4310 07 fld 2048,dl 000145 la 4 00024 3521 20 epp2 pr4|20,* get_ring_ 000146 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out 000147 aa 6 00125 2361 00 ldq pr6|85 000150 aa 6 00044 3701 20 epp4 pr6|36,* 000151 la 4 00014 1161 20 cmpq pr4|12,* sys_info$data_management_ringno 000152 aa 000006 6010 04 tnz 6,ic 000160 STATEMENT 1 ON LINE 101 lock_seg.lock_seg_size = NORMAL_LOCK_SEG_SIZE; 000153 aa 040000 2360 07 ldq 16384,dl 000154 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000155 aa 7 00005 7561 00 stq pr7|5 lock_seg.lock_seg_size STATEMENT 1 ON LINE 102 dm_system_data_$lock_ips_mask = "0"b; 000156 la 4 00010 4501 20 stz pr4|8,* dm_system_data_$lock_ips_mask STATEMENT 1 ON LINE 103 end; 000157 aa 000022 7100 04 tra 18,ic 000201 STATEMENT 1 ON LINE 104 else do; STATEMENT 1 ON LINE 105 lock_seg.lock_seg_size = TEST_LOCK_SEG_SIZE; 000160 aa 010000 2360 07 ldq 4096,dl 000161 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000162 aa 7 00005 7561 00 stq pr7|5 lock_seg.lock_seg_size STATEMENT 1 ON LINE 106 call create_ips_mask_ (addr (IPS_NAMES), hbound (IPS_NAMES, 1), dm_system_data_$lock_ips_mask); 000163 aa 777627 3714 04 epp5 -105,ic 000012 = 161165151164 000164 aa 6 00144 6515 00 spri5 pr6|100 000165 aa 000003 2360 07 ldq 3,dl 000166 aa 6 00125 7561 00 stq pr6|85 000167 aa 6 00144 3521 00 epp2 pr6|100 000170 aa 6 00134 2521 00 spri2 pr6|92 000171 aa 6 00125 3521 00 epp2 pr6|85 000172 aa 6 00136 2521 00 spri2 pr6|94 000173 la 4 00010 3521 20 epp2 pr4|8,* dm_system_data_$lock_ips_mask 000174 aa 6 00140 2521 00 spri2 pr6|96 000175 aa 6 00132 6211 00 eax1 pr6|90 000176 aa 014000 4310 07 fld 6144,dl 000177 la 4 00020 3521 20 epp2 pr4|16,* create_ips_mask_ 000200 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 107 end; STATEMENT 1 ON LINE 109 lock_seg.n_hash_table_entries = HASH_TABLE_ENTRIES; 000201 aa 000400 2360 07 ldq 256,dl 000202 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000203 aa 7 00010 7561 00 stq pr7|8 lock_seg.n_hash_table_entries STATEMENT 1 ON LINE 110 lock_seg.hash_mask = HASH_MASK; 000204 aa 000377 2350 07 lda 255,dl 000205 aa 7 00011 7551 00 sta pr7|9 lock_seg.hash_mask STATEMENT 1 ON LINE 111 lock_seg.meters.version = LOCK_METERS_VERSION_1; 000206 aa 7 00007 2361 00 ldq pr7|7 lock_seg.n_transaction_table_entries 000207 aa 000003 7360 00 qls 3 000210 aa 000000 6260 06 eax6 0,ql 000211 aa 000020 0760 07 adq 16,dl 000212 aa 7 00010 0761 00 adq pr7|8 lock_seg.n_hash_table_entries 000213 aa 000000 6270 06 eax7 0,ql 000214 aa 777566 2370 04 ldaq -138,ic 000002 = 114115115105 124105122061 000215 aa 7 00000 7551 17 sta pr7|0,7 lock_seg.version 000216 aa 7 00001 7561 17 stq pr7|1,7 lock_seg.version STATEMENT 1 ON LINE 113 lock_seg.transaction_table_offset = wordno (addr (lock_seg.transaction_table)); 000217 aa 7 00020 3715 00 epp5 pr7|16 lock_seg.transaction_table 000220 aa 5 00000 6361 00 eaq pr5|0 000221 aa 000022 7720 00 qrl 18 000222 aa 7 00013 7561 00 stq pr7|11 lock_seg.transaction_table_offset STATEMENT 1 ON LINE 114 lock_seg.hash_table_offset = wordno (addr (lock_seg.hash_table)); 000223 aa 7 00020 3535 16 epp3 pr7|16,6 lock_seg.hash_table 000224 aa 3 00000 6361 00 eaq pr3|0 000225 aa 000022 7720 00 qrl 18 000226 aa 7 00014 7561 00 stq pr7|12 lock_seg.hash_table_offset STATEMENT 1 ON LINE 116 lock_hash_table_ptr = addr (lock_seg.hash_table); 000227 aa 7 00020 3515 16 epp1 pr7|16,6 lock_seg.hash_table 000230 aa 6 00104 2515 00 spri1 pr6|68 lock_hash_table_ptr STATEMENT 1 ON LINE 117 do hashx = 1 to lock_seg.n_hash_table_entries; 000231 aa 7 00010 2361 00 ldq pr7|8 lock_seg.n_hash_table_entries 000232 aa 6 00114 7561 00 stq pr6|76 000233 aa 000001 2360 07 ldq 1,dl 000234 aa 6 00101 7561 00 stq pr6|65 hashx 000235 aa 000000 0110 03 nop 0,du 000236 aa 6 00144 2535 00 spri3 pr6|100 000237 aa 6 00150 6515 00 spri5 pr6|104 000240 aa 6 00101 2361 00 ldq pr6|65 hashx 000241 aa 6 00114 1161 00 cmpq pr6|76 000242 aa 000006 6054 04 tpnz 6,ic 000250 STATEMENT 1 ON LINE 118 lock_hash_table.buckets (hashx) = NULL_VPTR; 000243 aa 6 00104 3735 20 epp7 pr6|68,* lock_hash_table_ptr 000244 aa 777777 2350 03 lda 262143,du 000245 aa 7 77777 7551 06 sta pr7|-1,ql lock_hash_table.buckets STATEMENT 1 ON LINE 119 end; 000246 aa 6 00101 0541 00 aos pr6|65 hashx 000247 aa 777767 7100 04 tra -9,ic 000236 STATEMENT 1 ON LINE 121 lock_block_array_ptr = addr (lock_seg.free); 000250 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000251 aa 7 00007 2361 00 ldq pr7|7 lock_seg.n_transaction_table_entries 000252 aa 000003 7360 00 qls 3 000253 aa 000020 0760 07 adq 16,dl 000254 aa 7 00010 0761 00 adq pr7|8 lock_seg.n_hash_table_entries 000255 aa 000046 0760 07 adq 38,dl 000256 aa 000001 0760 07 adq 1,dl 000257 aa 777776 3760 07 anq 262142,dl 000260 aa 7 00000 3715 06 epp5 pr7|0,ql lock_seg.free 000261 aa 6 00106 6515 00 spri5 pr6|70 lock_block_array_ptr STATEMENT 1 ON LINE 122 n_lock_blocks = divide (lock_seg.lock_seg_size - fixed (wordno (lock_block_array_ptr)), size (lock_block), 17); 000262 aa 5 00000 6361 00 eaq pr5|0 lock_block_array_ptr 000263 aa 000022 7720 00 qrl 18 000264 aa 6 00147 7561 00 stq pr6|103 000265 aa 7 00005 2361 00 ldq pr7|5 lock_seg.lock_seg_size 000266 aa 6 00147 1761 00 sbq pr6|103 000267 aa 000006 5060 07 div 6,dl 000270 aa 6 00112 7561 00 stq pr6|74 n_lock_blocks STATEMENT 1 ON LINE 123 lock_seg.free_list_ptr = VPTR (lock_block_array_ptr); 000271 aa 000113 3520 04 epp2 75,ic 000404 = 000004000000 000272 aa 000063 6700 04 tsp4 51,ic 000355 000273 aa 6 00147 2351 00 lda pr6|103 000274 aa 6 00102 3735 20 epp7 pr6|66,* lock_seg_ptr 000275 aa 7 00012 5511 60 stba pr7|10,60 lock_seg.seg_inx 000276 aa 6 00147 2351 00 lda pr6|103 000277 aa 7 00012 5511 14 stba pr7|10,14 lock_seg.offset STATEMENT 1 ON LINE 124 lock_free_block_ptr = addr (lock_block_array (1)); 000300 aa 6 00106 3715 20 epp5 pr6|70,* lock_block_array 000301 aa 6 00110 6515 00 spri5 pr6|72 lock_free_block_ptr STATEMENT 1 ON LINE 125 do freex = 1 to n_lock_blocks; 000302 aa 6 00112 2361 00 ldq pr6|74 n_lock_blocks 000303 aa 6 00115 7561 00 stq pr6|77 000304 aa 000001 2360 07 ldq 1,dl 000305 aa 6 00100 7561 00 stq pr6|64 freex 000306 aa 6 00100 2361 00 ldq pr6|64 freex 000307 aa 6 00115 1161 00 cmpq pr6|77 000310 aa 000027 6054 04 tpnz 23,ic 000337 STATEMENT 1 ON LINE 126 lock_free_block.free_fp = VPTR (addr (lock_block_array (freex))); 000311 aa 000006 4020 07 mpy 6,dl 000312 aa 6 00106 3735 20 epp7 pr6|70,* lock_block_array_ptr 000313 aa 7 77772 3735 06 epp7 pr7|-6,ql lock_block_array 000314 aa 6 00152 6535 00 spri7 pr6|106 000315 aa 000061 3520 04 epp2 49,ic 000376 = 000004000000 000316 aa 000037 6700 04 tsp4 31,ic 000355 000317 aa 6 00147 2351 00 lda pr6|103 000320 aa 6 00110 3735 20 epp7 pr6|72,* lock_free_block_ptr 000321 aa 7 00001 5511 60 stba pr7|1,60 lock_free_block.seg_inx 000322 aa 6 00147 2351 00 lda pr6|103 000323 aa 7 00001 5511 14 stba pr7|1,14 lock_free_block.offset STATEMENT 1 ON LINE 127 lock_free_block_ptr = addr (lock_block_array (freex)); 000324 aa 6 00100 2361 00 ldq pr6|64 freex 000325 aa 000006 4020 07 mpy 6,dl 000326 aa 6 00106 3715 20 epp5 pr6|70,* lock_block_array_ptr 000327 aa 5 77772 3715 06 epp5 pr5|-6,ql lock_block_array 000330 aa 6 00110 6515 00 spri5 pr6|72 lock_free_block_ptr STATEMENT 1 ON LINE 128 lock_free_block.seg_inx = 1; 000331 aa 000001 2350 03 lda 1,du 000332 aa 5 00000 5511 60 stba pr5|0,60 lock_free_block.seg_inx STATEMENT 1 ON LINE 129 lock_free_block.type = TYPE_FREE; 000333 aa 000001 2350 07 lda 1,dl 000334 aa 5 00000 5511 14 stba pr5|0,14 lock_free_block.type STATEMENT 1 ON LINE 130 end; 000335 aa 6 00100 0541 00 aos pr6|64 freex 000336 aa 777750 7100 04 tra -24,ic 000306 STATEMENT 1 ON LINE 131 lock_free_block.free_fp = NULL_VPTR; 000337 aa 6 00110 3735 20 epp7 pr6|72,* lock_free_block_ptr 000340 aa 777777 2350 03 lda 262143,du 000341 aa 7 00001 7551 00 sta pr7|1 lock_free_block.free_fp STATEMENT 1 ON LINE 133 lock_seg.n_lock_blocks = n_lock_blocks; 000342 aa 6 00112 2361 00 ldq pr6|74 n_lock_blocks 000343 aa 6 00102 3715 20 epp5 pr6|66,* lock_seg_ptr 000344 aa 5 00015 7561 00 stq pr5|13 lock_seg.n_lock_blocks STATEMENT 1 ON LINE 134 lock_seg.lock_array_offset = wordno (lock_block_array_ptr); 000345 aa 6 00106 6361 20 eaq pr6|70,* lock_block_array_ptr 000346 aa 000022 7720 00 qrl 18 000347 aa 5 00016 7561 00 stq pr5|14 lock_seg.lock_array_offset STATEMENT 1 ON LINE 135 lock_seg.n_lock_segments = 1; 000350 aa 000001 2360 07 ldq 1,dl 000351 aa 5 00004 7561 00 stq pr5|4 lock_seg.n_lock_segments STATEMENT 1 ON LINE 136 lock_seg.max_lock_segments = MAX_LOCK_SEGMENTS; 000352 aa 000144 2360 07 ldq 100,dl 000353 aa 5 00006 7561 00 stq pr5|6 lock_seg.max_lock_segments STATEMENT 1 ON LINE 138 return; 000354 aa 0 00631 7101 00 tra pr0|409 return STATEMENT 1 ON LINE 160 end lm_per_system_init_; BEGIN PROCEDURE VPTR ENTRY TO VPTR STATEMENT 1 ON LINE 143 VPTR: proc (vptr_p_lock_ptr) returns (1 like lock_virtual_ptr); 000355 aa 6 00116 6501 00 spri4 pr6|78 000356 aa 6 00120 2521 00 spri2 pr6|80 STATEMENT 1 ON LINE 151 vptr_lock_virtual_ptr.seg_inx = 1; 000357 aa 000001 2350 03 lda 1,du 000360 aa 6 00124 5511 60 stba pr6|84,60 vptr_lock_virtual_ptr.seg_inx STATEMENT 1 ON LINE 152 vptr_lock_virtual_ptr.offset = wordno (vptr_p_lock_ptr); 000361 aa 2 00002 3735 20 epp7 pr2|2,* vptr_p_lock_ptr 000362 aa 7 00000 3735 20 epp7 pr7|0,* vptr_p_lock_ptr 000363 aa 7 00000 6361 00 eaq pr7|0 vptr_p_lock_ptr 000364 aa 000022 7720 00 qrl 18 000365 aa 6 00124 5521 14 stbq pr6|84,14 vptr_lock_virtual_ptr.offset STATEMENT 1 ON LINE 153 return (vptr_lock_virtual_ptr); 000366 aa 6 00154 5511 60 stba pr6|108,60 000367 aa 6 00154 5521 14 stbq pr6|108,14 000370 aa 2 00004 3715 20 epp5 pr2|4,* 000371 aa 000044 7270 07 lxl7 36,dl 000372 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 000373 aa 6 00154 00 0017 descb pr6|108,x7 000374 aa 5 00000 00 0017 descb pr5|0,x7 000375 aa 6 00116 6101 00 rtcd pr6|78 STATEMENT 1 ON LINE 155 end VPTR; END PROCEDURE VPTR END PROCEDURE lm_per_system_init_ ----------------------------------------------------------- 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