/* cobol_fixup: proc(value_ptr); dcl val (7) fixed bin aligned based(value_ptr); This procedure is called by cobol_fix_driver_ once per compilation after code generation to resolve all "fixup directives". It is called with a pointer to the following structure: cobol_fixup also contains the following entry points: cobol_define_tag cobol_define_tag_nc cobol_equate_tag cobol_make_tagref cobol_make_fixup When called at the primary entry, cobol_fixup serially processes each element of the "fixup" table adding or subtracting the value indicated by "type" and/or tag_number to the upper or lower half of the word at "offset" words from the segment indicated by "base". Thus, when return is made, all components of the object segment are fully patched and ready to be joined into one object segment. No further appending may be done to any component. cobol_define_tag: entry(tagno); dcl tagno fixed bin; internal tag number (input) dcl cobol_reset_r$in_line entry; This entry causes a permanent association to be made between a specified internal tag number (tagno) and the current value of the "instruction counter" i.e. the location of the next instruction to be emitted. Any ongoing register optimization is ended at this point. If this is not desired, see the entry cobol_define_tag_nc. cobol_define_tag_nc: entry(tagno,locno); dcl tagno fixed bin; internal tag number (input) dcl locno fixed bin; wd offset in cobol_text_seg (input) This entry, given the location of an instruction (locno) and an internal tag number (tagno), causes a permanent association to be made between the two for fixup purposes. cobol_equate_tag: entry(token31_ptr); dcl token31_ptr ptr; ptr to a type 31 token (input) This entry is called with a pointer to a Type 31 (tag equivalency) token. It causes one internal tag number to be made equivalent to another (for fixup purposes). It is not necessary that either of the tags be previously defined. The format of the Type 31 token is a follows: token31.tagno1 will be given the value of token31.tagno2 when the internal procedure eval_equate is called by cobol_fixup$cobol_fixup. cobol_make_tagref: entry(tagno,locno,instr_ptr); dcl tagno fixed bin; internal tag number (input) dcl locno fixed bin; wd offset in cobol_text_seg (input) dcl instr_ptr ptr; ptr to instr wd if non-null (input) This entry is given the location of an instruction (locno) (presumably a transfer) and an internal tag number (tagno). If that tag has already been defined, then the address field of that instruction is set to make the proper reference with IC modification. Otherwise, a fixup directive is generated which will cause the address field to be set (during the fixup phase) to the address associated with the given internal tag number. The full 18 bit address field is always set with any previous contents overlaid. Also, the modifier field is always set to indicate IC modification. Normally instr_ptr is null. However, if it is not, the word which it is pointing to will be set rather than the actual memory location (in cobol_text_seg). However, the instruction offset given as locno is always used in calculating the relative address and in the fixup directive (if one is generated). Thus, the instruction at instr_ptr must be eventually emmitted at cobol_text_seg|locno; if instr_ptr is null, then the instruction must have already been emmitted at cobol_text_seg|locno. cobol_make_fixup: entry(fix_ptr); dcl fix_ptr ptr; pointer to fixup directive (input) */ */ ----------------------------------------------------------- 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 */