/**** START OF: ocu_structures.incl.pl1 * * * * * */ /****^ HISTORY COMMENTS: 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): Originally written to define the structures used internally be ocu_ during object segment definition and generation. 2) change(86-12-19,Elhard), approve(86-12-19,PBF7505), audit(86-12-22,DGHowe), install(87-01-05,MR12.0-1256): Changed declaration of list_template initialization to explicitly declare template words as bit (36) rather than letting them default to fixed bin (17) to prevent size errors in debugging versions. END HISTORY COMMENTS */ /*** ****************************************************************/ /*** */ /*** Name: ocu_structures */ /*** Function: these structures are the intermediate structures */ /*** used by ocu_ to maintain object segment info */ /*** until the object segment is created. */ /*** */ /*** ****************************************************************/ /*** ****************************************************************/ /*** */ /*** Name: ocu_data */ /*** Function: This data structure maintains the general data */ /*** for the object segment and pointers to the info */ /*** structures for the various sections. */ /*** */ /*** ****************************************************************/ dcl ocu_datap ptr; dcl ocu_data_version_1 char (8) static options (constant) init ("ocu_ 1.0"); dcl 01 ocu_data aligned based (ocu_datap), 02 version char (8), 02 flags aligned, 03 bound bit (1) unaligned, 03 relocatable bit (1) unaligned, 03 procedure bit (1) unaligned, 03 separate_static bit (1) unaligned, 03 perprocess_static bit (1) unaligned, 03 no_hash_table bit (1) unaligned, 03 mbz bit (30) unaligned, 02 target aligned, 03 dir char (168) unaligned, 03 entry char (32) unaligned, 03 segp ptr, 03 bc fixed bin (24), 03 acinfop ptr, 02 msf_info aligned, 03 component_count fixed bin, 03 my_component fixed bin, 02 lengths aligned, 03 text fixed bin (18) unsigned, 03 defs fixed bin (18) unsigned, 03 link fixed bin (18) unsigned, 03 stat fixed bin (18) unsigned, 03 symb fixed bin (18) unsigned, 02 text_infop ptr, 02 text_relinfop ptr, 02 def_infop ptr, 02 string_map_infop ptr, 02 string_segp ptr, 02 exp_word_infop ptr, 02 type_pair_infop ptr, 02 trap_pair_infop ptr, 02 init_infop ptr, 02 init_segp ptr, 02 static_infop ptr, 02 link_infop ptr, 02 firstref_trap_infop ptr, 02 symbol_infop ptr, 02 symbol_relinfop ptr; /*** ****************************************************************/ /*** */ /*** Name: ocu_data_ptrs */ /*** Function: This data structure is identical to the ocu_data */ /*** structure except that the pointers to the other */ /*** extensible structures are replaced by an array of */ /*** pointers to be used by the get_temp_segments_ */ /*** and release_temp_segments_ subroutines. */ /*** */ /*** ****************************************************************/ dcl 01 ocu_data_ptrs aligned based (ocu_datap), 02 version char (8), 02 flags aligned, 03 bound bit (1) unaligned, 03 relocatable bit (1) unaligned, 03 procedure bit (1) unaligned, 03 separate_static bit (1) unaligned, 03 perprocess_static bit (1) unaligned, 03 no_hash_table bit (1) unaligned, 03 mbz bit (30) unaligned, 02 target aligned, 03 dir char (168) unaligned, 03 entry char (32) unaligned, 03 segp ptr, 03 bc fixed bin (24), 03 acinfop ptr, 02 msf_map aligned, 03 component_count fixed bin, 03 my_component fixed bin, 02 lengths aligned, 03 text fixed bin (18) unsigned, 03 defs fixed bin (18) unsigned, 03 link fixed bin (18) unsigned, 03 stat fixed bin (18) unsigned, 03 symb fixed bin (18) unsigned, 02 temp_segs (15) ptr; /*** ****************************************************************/ /*** */ /*** Name: text_info */ /*** Function: This structure contains the block of words which */ /*** make up the text section. */ /*** */ /*** ****************************************************************/ dcl 01 text_info aligned based, 02 header aligned, 03 N_text_words fixed bin, 03 text_relinfol fixed bin (21), 02 text_word (0 refer (text_info.N_text_words)) bit (36); /*** ****************************************************************/ /*** */ /*** Name: relinfo_str */ /*** Function: This string contains the relocation info for the */ /*** text or symbol word arrays. The relinfo is */ /*** stored in a separate segment since these sections */ /*** could conceivably be close to a full segment in */ /*** size. */ /*** */ /*** ****************************************************************/ dcl relinfo_strl fixed bin (21); dcl relinfo_strp ptr; dcl relinfo_str char (relinfo_strl) based (relinfo_strp); /*** ****************************************************************/ /*** */ /*** Name: def_info */ /*** Function: This structure contains the definition list for */ /*** the object segment. No threading information is */ /*** included as this will be synthesized when the */ /*** object is closed and the real definition section */ /*** is constructed. */ /*** */ /*** ****************************************************************/ dcl 01 def_info aligned based, 02 header aligned, 03 N_defs fixed bin, 02 def (0 refer (def_info.N_defs)) like def_entry; dcl 01 def_entry aligned based, 02 strx fixed bin, 02 class fixed bin, 02 offset fixed bin, 02 flags aligned, 03 ignore bit (1) unaligned, 03 entry bit (1) unaligned, 03 retain bit (1) unaligned, 03 indirect bit (1) unaligned, 03 duplicate bit (1) unaligned, 03 mbz bit (13) unaligned, 02 dup_tbl_relp fixed bin (18) unsigned unaligned; /*** ****************************************************************/ /*** */ /*** Name: string_map_info */ /*** Function: This structure defines the ACC strings to be */ /*** placed in the definition section. All references */ /*** to strings in other structures are stores as the */ /*** stringmap index of the appropriate string. The */ /*** actual text is stored in a separate segment and */ /*** individual strings identified as a start point */ /*** and length. */ /*** */ /*** ****************************************************************/ dcl 01 string_map_info aligned based, 02 header aligned, 03 string_segl fixed bin (21), 03 N_strings fixed bin, 02 string dim (0 refer (string_map_info.N_strings)) like string_map_entry; dcl 01 string_map_entry aligned based, 02 start_offset fixed bin (18) unsigned, 02 length fixed bin (18) unsigned, 02 relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: exp_word_info */ /*** Function: This structure maintains an array of expression */ /*** words to be inserted into the definition section. */ /*** Expression words are referenced in the associated */ /*** link by an array index in this array. The type */ /*** pair associated with this expression word is */ /*** identified by index in the type_pairs structure. */ /*** */ /*** ****************************************************************/ dcl 01 exp_word_info aligned based, 02 header aligned, 03 N_exp_words fixed bin, 02 exp_wd (0 refer (exp_word_info.N_exp_words)) like exp_word_entry; dcl 01 exp_word_entry aligned based, 02 expression fixed bin (18) unsigned, 02 type_pairx fixed bin (18) unsigned, 02 relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: type_pair_info */ /*** Function: This structure contains an array of type pairs to */ /*** be inserted into the definition section. Each */ /*** type pair entry contains the type, and class */ /*** (only for type=1 and type=5), init_info table */ /*** index (only for type=5), trap table index (only */ /*** for type^=5, hopefully not ever), segname */ /*** stringmap index (only for type=3 and type=4), and */ /*** offsetname stringmap index (only for type=4 and */ /*** type=5). */ /*** */ /*** ****************************************************************/ dcl 01 type_pair_info aligned based, 02 header aligned, 03 N_type_pairs fixed bin, 02 type_pr (0 refer (type_pair_info.N_type_pairs)) like type_pair_entry; dcl 01 type_pair_entry aligned based, 02 type fixed bin (18) unsigned, 02 init_infox fixed bin (18) unsigned, 02 segnamex fixed bin (18) unsigned, 02 offsetnamex fixed bin (18) unsigned, 02 relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: trap_pair_info */ /*** Function: This structure contains trap pairs for specifying */ /*** trap-before-links. Hopefully, this will never be */ /*** used, but since it is still documented, it should */ /*** be supported. */ /*** */ /*** ****************************************************************/ dcl 01 trap_pair_info aligned based, 02 header aligned, 03 N_trap_pairs fixed bin, 02 trap_pair (0 refer (trap_pair_info.N_trap_pairs)) like trap_pair_entry; dcl 01 trap_pair_entry aligned based, 02 call_relp fixed bin (18) unsigned, 02 info_relp fixed bin (18) unsigned, 02 relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: init_info */ /*** Function: This structure defines the init_info to be used */ /*** for each type-5, class-5, (*system) link. Each */ /*** entry defines a single initialization info. Since */ /*** init_infos are of variable length, the actual */ /*** init_info blocks supplied are appended back to */ /*** back in another segment (pointed to by */ /*** ocu_data.init_segp), and the init_info array */ /*** giving start word and length. */ /*** */ /*** ****************************************************************/ dcl 01 init_info aligned based, 02 header aligned, 03 init_segl fixed bin, 03 N_inits fixed bin, 02 init (0 refer (init_info.N_inits)) like init_entry; dcl 01 init_entry aligned based, 02 start fixed bin (18) unsigned, 02 length fixed bin (18) unsigned, 02 relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: text_seg */ /*** Function: This is the character string used to contain the */ /*** actual text of the strings in the stringmap. */ /*** */ /*** ****************************************************************/ dcl text_segl fixed bin (21); dcl text_segp ptr; dcl text_seg char (text_segl) based (text_segp); /*** ****************************************************************/ /*** */ /*** Name: static_info */ /*** Function: This structure defines the block of words that */ /*** will make up the static section. No relocation */ /*** information is required. */ /*** */ /*** ****************************************************************/ dcl 01 static_info aligned based, 02 header aligned, 03 N_static_words fixed bin, 02 static_word dim (0 refer (static_info.N_static_words)) bit (36); /*** ****************************************************************/ /*** */ /*** Name: link_info */ /*** Function: This structure defines the information required */ /*** to construct the linkage section. It contains */ /*** the information to be inserted as the link array. */ /*** Each link entry contains the index of the */ /*** exp_word entry for this link as well as the link */ /*** modifier. No header information or header offset */ /*** is included as this will be calculated when the */ /*** real linkage section is produced. */ /*** */ /*** ****************************************************************/ dcl 01 link_info aligned based, 02 header aligned, 03 N_links fixed bin, 02 link (0 refer (link_info.N_links)) like link_entry; dcl 01 link_entry aligned based, 02 exp_wordx fixed bin (18) unsigned, 02 type fixed bin (18) unsigned, 02 component fixed bin (18) unsigned, 02 offset fixed bin (18) unsigned, 02 modifier bit (6); /*** ****************************************************************/ /*** */ /*** Name: firstref_trap_info */ /*** Function: This structure contains the information required */ /*** to construct a first reference trap block in the */ /*** linkage section if one is required. Each trap */ /*** entry contains a relpointer to the call link, */ /*** which must be relocated to account for the static */ /*** section, as other linkage references, and a */ /*** relpointer to the info link (likewise), or 0 if */ /*** no info link is required. */ /*** */ /*** ****************************************************************/ dcl 01 firstref_trap_info aligned based, 02 header aligned, 03 N_traps fixed bin, 02 trap (0 refer (firstref_trap_info.N_traps)) like firstref_trap_entry; dcl 01 firstref_trap_entry aligned based, 02 call_relp fixed bin (18) unsigned, 02 info_relp fixed bin (18) unsigned; /*** ****************************************************************/ /*** */ /*** Name: symbol_info */ /*** Function: This data structure contains the words which will */ /*** make up the symbol section and the associated */ /*** relocation info for each halfword. Note that the */ /*** relocation info itself should not be included in */ /*** the symbol words emitted as it will be generated */ /*** by ocu_. Also note that the first thing in the */ /*** symbol section is assumed to be a standard symbol */ /*** header, so that the relocation relp values can be */ /*** properly inserted. */ /*** */ /*** ****************************************************************/ dcl 01 symbol_info aligned based (ocu_data.symbol_infop), 02 header aligned, 03 N_symbol_words fixed bin, 03 symbol_relinfol fixed bin (21), 02 symbol_word (0 refer (symbol_info.N_symbol_words)) bit (36); /*** ****************************************************************/ /*** */ /*** Name: relinfo_blocks */ /*** Function: this is the relocation info bit strings to be */ /*** inserted into the symbol section. */ /*** */ /*** ****************************************************************/ dcl 01 relinfo_blocks aligned based, 02 header aligned, 03 no_relinfo bit (1), 03 n_bits fixed bin, 03 section dim (1:4), 04 start_offset fixed bin, 04 n_bits fixed bin, 02 relbits bit (0 refer (relinfo_blocks.header.n_bits)) aligned; dcl Rel_text fixed bin static options (constant) init (1); dcl Rel_defs fixed bin static options (constant) init (2); dcl Rel_link fixed bin static options (constant) init (3); dcl Rel_symb fixed bin static options (constant) init (4); /*** ****************************************************************/ /*** */ /*** Name: relinfo */ /*** Function: This structure is the structure of the relocation */ /*** information as stored in the object segment and */ /*** as used in the creation time relocation info */ /*** storage. */ /*** */ /*** ****************************************************************/ dcl 01 relinfo aligned based, 02 header aligned, 03 decl_vers fixed bin, 03 n_bits fixed bin, 02 relbits bit (0 refer (relinfo.n_bits)) aligned; /*** ****************************************************************/ /*** */ /*** Name: init_list_template */ /*** Function: This structure is the link_init_list_template */ /*** init info block restructured so a like attribute */ /*** can be used without contortions. */ /*** */ /*** ****************************************************************/ dcl 01 init_list_template aligned based, 02 full_header aligned, 03 header aligned like link_init, 03 pad bit (18) unaligned, 03 n_words_in_list fixed bin (18) unsigned unaligned, 02 template (0 refer (init_list_template.n_words_in_list)) bit (36); /*** ****************************************************************/ /*** */ /*** Name: template_entry */ /*** Function: This structure is the list_template_entry */ /*** reorganized so that a like attribute declaration */ /*** can be used without contortions. */ /*** */ /*** ****************************************************************/ dcl 01 template_entry aligned based, 02 header aligned, 03 n_bits fixed bin (35) aligned, 03 mbz bit (3) unaligned, 03 init_type fixed bin (3) unsigned unaligned, 03 repeat fixed bin (30) unsigned unaligned, 02 datum bit (0 refer (list_template_entry.n_bits)); /*** ****************************************************************/ /*** */ /*** Name: msf_symbol_scn */ /*** Function: This structure is the symbol section for creating */ /*** component 0 of an object MSF. It contains the */ /*** minimal information required for component 0 to */ /*** be a real live object segment. */ /*** */ /*** ****************************************************************/ dcl 01 msf_symbol_scn aligned based, 02 header aligned, 03 decl_version fixed bin, 03 identifier char (8) aligned, 03 gen_number fixed bin, 03 gen_created fixed bin (71), 03 object_created fixed bin (71), 03 generator char (8), 03 gen_version unaligned, 04 offset fixed bin (18) unsigned, 04 size fixed bin (18) unsigned, 03 userid unaligned, 04 offset fixed bin (18) unsigned, 04 size fixed bin (18) unsigned, 03 comment unaligned, 04 offset fixed bin (18) unsigned, 04 size fixed bin (18) unsigned, 03 text_boundary fixed bin (18) unsigned unaligned, 03 stat_boundary fixed bin (18) unsigned unaligned, 03 source_map fixed bin (18) unsigned unaligned, 03 area_pointer fixed bin (18) unsigned unaligned, 03 backpointer fixed bin (18) unsigned unaligned, 03 block_size fixed bin (18) unsigned unaligned, 03 next_block fixed bin (18) unsigned unaligned, 03 rel_text fixed bin (18) unsigned unaligned, 03 rel_def fixed bin (18) unsigned unaligned, 03 rel_link fixed bin (18) unsigned unaligned, 03 rel_symbol fixed bin (18) unsigned unaligned, 03 mini_truncate fixed bin (18) unsigned unaligned, 03 maxi_truncate fixed bin (18) unsigned unaligned, 02 user aligned char (user_length refer(msf_symbol_scn.header.userid.size)), 02 version aligned char (version_length refer(msf_symbol_scn.header.gen_version.size)); dcl user_length fixed bin; dcl version_length fixed bin; /*** ****************************************************************/ /*** */ /*** Name: msf_info */ /*** Function: this structure is used to retain the list of */ /*** components in the MSF */ /*** */ /*** ****************************************************************/ dcl 01 msf_info aligned based, 02 header aligned, 03 containing_dir char (168) unaligned, 03 gen_info aligned, 04 gen_created fixed bin (71), 04 generator char (8), 04 gen_number fixed bin, 04 gen_version char (512) varying, 03 N_components fixed bin, 02 component dim (0 refer (msf_info.N_components)), 03 segp ptr, 03 bc fixed bin (24), 03 text_relp fixed bin (18) unsigned, 03 defn_relp fixed bin (18) unsigned, 03 link_relp fixed bin (18) unsigned, 03 stat_relp fixed bin (18) unsigned, 03 symb_relp fixed bin (18) unsigned; /**** END OF: ocu_structures.incl.pl1 * * * * * */ */ ----------------------------------------------------------- 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 */