05/05/86 Linkage Errors Linkage errors occur when the Multics dynamic linker is unable to find an external reference. Usually the system error handler prints a message indicating what was wrong; this help file explains some of the possible problems in more detail. Segment not found: One of the most common messages is "Segment not found.". This usually happens because the target segment doesn't exist, or the name was misspelled, or there is insufficient access. If none of these reasons apply, the user should check the search rules (using the print_search_rules command). External symbol not found: Another common message is "External symbol not found.". This means that the linker found the segment but could not find the specified entry point or externally referenceable data. This could be due to misspelling or to an error or omission in the target segment. In particular, if the segment is bound, the bindfile should be checked, since not all the entry points in the component segments are necessarily retained after binding. Linkage section not found: The message "Linkage section not found." usually means that the target found is not an object segment and hence has no entry points or externally referenceable data. Such segments can be referenced only by names ending in "$". Variable or common too big: The message "External variable or common block is not the same size as other uses of the same name." means that the latest reference to a common block or external variable (one to be created by the linker) specified a larger size than that already allocated. Type "help external_storage.gi" for more information about this case. Duplicate entry name: The message "Duplicate entry name in bound segment." means that there is more than one entry point with the same name and the linker cannot resolve the reference. This happens with bound segments when the segment name used does not specify which component is meant and several components have entry points with the same name. Either the reference should be made more precise or the target segment should be rebound with the bindfile changed to include the referenced name as a synonym on the desired component. No room for allocations: The message "There is no room to make requested allocations." means that the size associated with a common block of external variable to be created is too large; in this case, the program must be changed. Allocation not performed: The message "Allocation could not be performed." occurring when attempting to allocate space for an external variable, means that the area used by the linker has been clobbered. If the process doesn't terminate first, try telling the linker to use a different area by using the set_user_storage command, giving it the name of another area. The create_area command can be used to create the area, which should be extensible. Illegal link info: Sometimes the program making the reference has been clobbered; usually recompilation cures the problem. The messages associated with this case are: "Illegal type code in type pair block." "Illegal self reference type." Bad definitions: The messages "Looping searching definitions." and "Bad class code in definitions." usually mean that target has been clobbered and should be recompiled. The message "Bad definitions pointer in linkage." means that the copy of the referencing segment's linkage section, which contains the actual snapped links, etc., has been clobbered. Terminating the referencing segment and starting over may work, although it is likely that enough damage has been done that a new_proc may be necessary. Bad fault tag 2 location: Occasionally the linker is invoked because the processor encounters the link fault bit pattern at a location other than an unsnapped link. When the linker detects this, it returns one of the following messages: "Attempt to execute instruction containing a fault tag 2." "Attempt to indirect through word pair containing a fault tag 2 in the odd word." Malformed list template entry: The message "A compiler has generated incorrect list template initialization ..." implies that the initialization information for an external variable has been damaged in some manner. The routines containing the erroneous structure should be recompiled. Invalid Pointer Target: The message "Unable to initialize a pointer used as the initial of an external variable." implies that the target of a pointer initialization can not be initialized. This can be caused by an error occurring in the initialization structure or by the segment containing the initialization information being damaged. This can also be caused by not being able to find the target specified by the initialziation information. The latter case is most likely to happen with references to external variables that are not defined within the (possibly multi-segment) object. The user should check all such references and the links generated by the compiler and either correct the reference or make sure that the link target is accessible. If no such error is found, the program should be recompiled. The problem may actually have occurred in a different variable from the one associated with the message. If an external variable references another external variable, the initialization of the second may be completed before the initialization of the first, with any errors being reported with the first. Segment Unknown: The message "Segment not known to process." implies that the execution environment has been damaged. The user should initiate the segments required for their execution or perform a new_proc. Inconsistent object MSF: The message "Object MSF is inconsistent" states that a component of an Object MSF has been damamged. The segment in question should be recreated. First reference trap: The message "A first reference trap was found..." specifies that the first reference traps for the executing segment have not been executed. The segment should be terminated and then initiated again with a -fc. Resolve linkage error: There is a command which can often be used to snap a link to an arbitrary target; type "resolve_linkage_error new_target_name; start" to continue with the desired reference. This is most useful for misspelling cases or when the search rules weren't adequate. It does not work for common blocks or external variables to be created. ----------------------------------------------------------- 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