/* Begin include file definition_dcls.incl.pl1 BIM 1981 */ /****^ HISTORY COMMENTS: 1) change(86-05-02,Elhard), approve(86-05-02,MCR7391), audit(86-07-18,DGHowe), install(86-11-20,MR12.0-1222): Modified to add indirect bit to definition flags, add msf_map_relp to the definition header, declare the msf_map, and add structures and constants for deferred initialization. 2) change(86-06-24,DGHowe), approve(86-06-24,MCR7420), audit(86-08-05,Schroth), install(86-11-20,MR12.0-1222): added the structures for pointer initialization. pointer_init_template. changed list_template_entry END HISTORY COMMENTS */ /* Modified: */ /* 13 Dec 1982 by Lee A. Newcomb to put definition_header.hash_table_relp */ /* after unused half-word instead of before it. */ /* 1 March 1983 by M. Weaver to add list template init type */ /* format: style3,idind25 */ /* everything for the definition section */ declare ( CLASS_TEXT init (0), /* text section definition */ CLASS_LINKAGE init (1), /* linkage section definition */ CLASS_SYMBOL init (2), /* symbol section definition */ CLASS_SEGNAME init (3), /* segment name definition */ CLASS_STATIC init (4), /* static section definition */ CLASS_SYSTEM init (5), /* valid only in self links, not def class */ CLASS_HEAP init (6) /* valid only in self links, not def class */ ) fixed bin (3) unsigned internal static options (constant); declare CLASS_NAMES (0:6) character (12) internal static options (constant) init ("text", "linkage", "symbol", "segname", "static", "system", "heap"); declare SYMBOLIC_SECTION_NAMES (0:6) character (8) init ("*text", "*link", "*symbol", *, "*static", "*system", "*heap") internal static options (constant); declare 1 definition_flags unaligned based, 2 new bit (1), /* should be "1"b */ 2 ignore bit (1), /* cannot snap link to this */ 2 entry bit (1), /* can tra here */ 2 retain bit (1), /* binder respects this */ 2 argcount bit (1), /* OBSOLETE */ 2 descriptors bit (1), /* OBSOLETE */ 2 indirect bit (1), /* target is a pointer to actual target */ 2 unused bit (8); /* Must be zero */ /* Header of the definition section */ declare def_header_ptr pointer; declare 1 definition_header aligned based (def_header_ptr), 2 def_list_relp fixed bin (18) unsigned unaligned, /* first definition, reloc def18 */ 2 msf_map_relp fixed bin (18) unsigned unaligned, /* msf_map if any, or 0 if none. reloc def18 unless none */ 2 hash_table_relp fixed bin (18) unsigned unaligned, /* def hash table, if any, or 0 if none. reloc def18 unless none */ 2 flags unaligned like definition_flags; /* both new and ignore must be "1"b here */ /* A non class=3 definition. See segname_definition below for class=3 */ declare def_ptr pointer; declare 1 definition aligned based (def_ptr), 2 forward_relp unal fixed bin (18) unsigned, /* offset of next def */ 2 backward_relp unal fixed bin (18) unsigned, /* offset of previous def */ 2 thing_relp unal fixed bin (18) unsigned, /* offset in section specified by class of thing this defines */ 2 flags unaligned like definition_flags, 2 class unal fixed bin (3) unsigned, /* Type of definition */ 2 name_relp unal fixed bin (18) unsigned, /* offset of ACC for symbol */ 2 segname_relp unal fixed bin (18) unsigned; /* offset of segname def to which this belongs */ /* Class=3, segname definition */ declare segname_ptr pointer; declare 1 segname_definition aligned based (segname_ptr), 2 forward_relp unal fixed bin (18) unsigned, /* offset of next def */ 2 backward_relp unal fixed bin (18) unsigned, /* offset of previous def */ 2 next_segname_relp unal fixed bin (18) unsigned, /* offset of next segname def */ 2 flags unaligned like definition_flags, 2 class unal fixed bin (3) unsigned, /* 3 for segname */ 2 name_relp unal fixed bin (18) unsigned, /* offset of ACC for symbol */ 2 first_relp unal fixed bin (18) unsigned; /* see following : */ /* Definition blocks are chained off of segname definitions. segname_definition.first_relp is one of three things: (1) the def section offset of the first ordinary (class^=3) definition belonging to this segname block. In the case where there are more than one segname's on a block, all their first_relp will point to the same place. (2) if there are no ordinary definitions associated with this segname, then it is the def section offset of the next segname. (3) if there are no ordinary definitions in the block, and it is the last block, then it points to a word containing 0. Thus the end of a list of synonym segnames can be detected by forward_relp pointing to a class=3 definition whose first_relp is not the same as the current definitions first_relp. */ /* All the definitions are linked through the forward and backward thread variables. The end of the chain can is indicated by forward pointing to a zero word. */ declare exp_ptr pointer; declare 1 exp_word based (exp_ptr) aligned, /* expression word in link definition */ 2 type_relp fixed bin (18) unsigned unal, /* pointer (rel to defs) of type pair structure */ 2 expression fixed bin (17) unal; /* constant expression to be added in when snapping link */ declare ( LINK_SELF_BASE init (1), /* *section|0+expression,modifier */ /* which section determined by segname_relp */ LINK_OBSOLETE_2 init (2), /* not used */ LINK_REFNAME_BASE init (3), /* refname|0+expression,modifier */ LINK_REFNAME_OFFSETNAME init (4), /* refname|offsetname+expression,modifier */ LINK_SELF_OFFSETNAME init (5), /* *section|offsetname+expression,modifier */ LINK_CREATE_IF_NOT_FOUND init (6), /* OBSOLETE: like LINK_REFNAME_OFFSETNAME except that it will create instead of taking linkage_error */ SECTION_TEXT init (0), /* *text */ SECTION_LINK init (1), /* *link */ SECTION_SYMBOL init (2), /* *symbol */ SECTION_UNUSED init (3), /* reserved */ SECTION_STATIC init (4), /* *static */ SECTION_SYSTEM init (5), /* *system */ SECTION_HEAP init (6) /* *heap */ ) fixed bin (18) unsigned unaligned internal static options (constant); /* use CLASS_NAMES for section names */ declare LINK_TYPE_NAMES (1:6) init ("absolute in section", "unused", "absolute off of refname", "symbolic off of refname", "symbolic in section", "symbolic off of refname; create") character (32) varying internal static options (constant); declare type_ptr pointer; declare 1 type_pair based (type_ptr) aligned,/* type pair in link definition */ 2 type fixed bin (18) unsigned unal, /* see above */ 2 trap_relp fixed bin (18) unsigned unal, /* pointer (rel to defs) to the trap word */ /* unless LINK_SELF_OFFSETNAME off of *system or create link */ 2 segname_relp fixed bin (18) unsigned unal, /* pointer (rel to defs) to ACC reference name for segment referenced, /*or section code for SELF links */ 2 offsetname_relp fixed bin (18) unsigned unal; /* for OFFSETNAME links, ACC string of name of location. */ /* for others, must be ZERO */ /* Link Trap Pair */ declare link_trap_ptr pointer; declare 1 link_trap_pair aligned based (link_trap_ptr), 2 call_relp fixed bin (18) unsigned unaligned, /* LINK18, link to thing to call */ 2 info_relp fixed bin (18) unsigned unaligned; /* LINK18, link to argument list */ /* initialization info for *system or *heap link */ /* NOTE -------------------------------------------------- the following structures defining initialization information are also defined in fortran_storage.incl.pl1 system_link_init_info.incl.pl1 and should be kept equivalent ------------------------------------------------------- */ declare ( INIT_NO_INIT init (0), INIT_COPY_INFO init (3), INIT_DEFINE_AREA init (4), INIT_LIST_TEMPLATE init (5), INIT_DEFERRED init (6) ) fixed bin internal static options (constant); /* for type = 0 or 4 */ declare link_init_ptr pointer; declare 1 link_init aligned based (link_init_ptr), 2 n_words fixed bin (35), /* number to invent */ 2 type fixed bin; /* see types above */ /* for type=3, there is data to copy */ declare 1 link_init_copy_info aligned based (link_init_ptr), 2 header aligned like link_init, 2 initial_data (link_init_n_words refer (link_init_copy_info.header.n_words)) bit (36) aligned; declare link_init_n_words fixed bin; /* for type = 5, there is a list template to copy */ declare 1 link_init_list_template aligned based (link_init_ptr), 2 header aligned like link_init, 2 pad bit (18) unaligned, 2 n_words_in_list fixed bin (18) unsigned unaligned, 2 template (link_init_n_words_in_list refer (link_init_list_template.n_words_in_list)); declare link_init_n_words_in_list fixed bin; /* A list template consists of a series of entries with the following description, concatenated together. n_bits and datum are bit items, to permit a wide range of inputs. 1. A 'repeat' of '0' signifies skipping of 'n_bits' bits. 2. A 'n_bits' of '0' signifies the last item of the list. COMMON, VLA's, and LA's are presumed to start at the base pointer of their particular storage section. */ declare 1 list_template_entry aligned based, 2 n_bits fixed bin (35) aligned, /* size of datum */ 2 mbz bit (3) unaligned, /* future expansion */ 2 init_type fixed bin (3) unsigned unaligned, /* 0 normal init, 1 ptr init, 2 packed ptr init */ 2 repeat fixed bin (30) unsigned unaligned, /* number of times to repeat datum */ 2 datum bit (link_init_n_bits_in_datum refer (list_template_entry.n_bits)); /* the pointer_init_template represents the initialization information for ITS and packed pointers. Both pointer types require the entire 72 bit structure. */ dcl 1 pointer_init_template based, 2 ptr_type fixed bin (18) unsigned unaligned, /* 0 text section, 1 linkage section, 2 static section */ 2 section_offset fixed bin (18) unsigned unaligned, /* offset to item in specified section */ 2 word_offset fixed bin (18) unsigned unaligned, /* offset from section item to target in words */ 2 mbz bit (12) unaligned, 2 bit_offset fixed bin (6) unsigned unaligned; /* offset from section item|word offset to target in bits */ declare link_init_n_bits_in_datum fixed bin (35); /* for type = 6, the init_info resides in another MSF component */ /* target_relp is a linkage section offset to a partial link to */ /* the base of the linkage section of the component containing */ /* the actual init_info. link_relp is the offset of the actual */ /* link within that linkage section. */ declare 1 link_init_deferred aligned based (link_init_ptr), 2 header aligned like link_init, 2 target_relp fixed bin (18) unsigned unaligned, 2 link_relp fixed bin (18) unsigned unaligned; /* Definition section hash table */ declare def_ht_ptr pointer; declare 1 definition_ht aligned based (def_ht_ptr), 2 n_entries fixed bin, 2 table (def_ht_n_entries refer (definition_ht.n_entries)) aligned, 3 def_relp fixed bin (18) unsigned unaligned, 3 unused bit (18) unaligned; declare def_ht_n_entries fixed bin; /* Component name ht */ declare comp_ht_ptr pointer; declare 1 component_ht aligned based (comp_ht_ptr), 2 n_entries fixed bin, 2 table (comp_ht_n_entries refer (component_ht.n_entries)) aligned, 3 def_relp fixed bin (18) unsigned unaligned, /* hashed segname */ 3 block_hdr_relp fixed bin (18) unsigned unaligned; /* first segname def of block containing def_relp */ declare comp_ht_n_entries fixed bin; /* Duplicate name table */ declare dup_table_ptr pointer; declare 1 duplicate_table aligned based (dup_table_ptr), 2 mbz bit (18) unaligned, /* to tell it from a definition */ 2 n_names fixed bin (18) unsigned unaligned, /* n in table */ 2 table (dup_table_n_names refer (duplicate_table.n_names)) aligned, 3 def_relp fixed bin (18) unsigned unaligned, 3 block_hdr_relp fixed bin (18) unsigned unaligned; declare dup_table_n_names fixed bin; /* The msf_map is found in the definition section of an */ /* object MSF component. It is used by the linker to */ /* determine whether a segment is a component of an object */ /* MSF or a standard single-segment object. */ dcl msf_map_ptr ptr; dcl 01 msf_map aligned based (msf_map_ptr), 02 version char (8), 02 component_count fixed bin (15) unsigned, 02 my_component fixed bin (15) unsigned; dcl msf_map_version_1 char (8) static options (constant) init ("msfmp1.0"); declare acc_string_ptr pointer; declare 1 acc_string aligned based (acc_string_ptr), 2 count fixed bin (9) unsigned unaligned, 2 string character (max (3, acc_string_length) refer (acc_string.count)) unaligned, 2 mbz bit (0) aligned; /* this causes the statement */ /* unspec (acc_string) = ""b to zero out */ /* the last word, if the string is not of length 0mod4 */ declare acc_string_length fixed bin (21); /* end include file definitions_dcls.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 */