1 05/05/86 Linkage Errors
  2 
  3 Linkage errors occur when the Multics dynamic linker is unable to
  4 find an external reference.  Usually the system error handler
  5 prints a message indicating what was wrong; this help file
  6 explains some of the possible problems in more detail.
  7 
  8 
  9 Segment not found:
 10     One of the most common messages is "Segment not found.".  This
 11 usually happens because the target segment doesn't exist, or the
 12 name was misspelled, or there is insufficient access.  If none of
 13 these reasons apply, the user should check the search rules (using
 14 the print_search_rules command).
 15 
 16 
 17 External symbol not found:
 18     Another common message is "External symbol not found.".  This
 19 means that the linker found the segment but could not find the
 20 specified entry point or externally referenceable data.  This
 21 could be due to misspelling or to an error or omission in the
 22 target segment.  In particular, if the segment is bound, the
 23 bindfile should be checked, since not all the entry points in the
 24 component segments are necessarily retained after binding.
 25 
 26 
 27 Linkage section not found:
 28     The message "Linkage section not found." usually means that
 29 the target found is not an object segment and hence has no entry
 30 points or externally referenceable data.  Such segments can be
 31 referenced only by names ending in "$".
 32 
 33 
 34 Variable or common too big:
 35     The message "External variable or common block is not the same
 36 size as other uses of the same name." means that the latest
 37 reference to a common block or external variable (one to be
 38 created by the linker) specified a larger size than that already
 39 allocated.  Type "help external_storage.gi" for more information
 40 about this case.
 41 
 42 
 43 Duplicate entry name:
 44     The message "Duplicate entry name in bound segment." means
 45 that there is more than one entry point with the same name and the
 46 linker cannot resolve the reference.  This happens with bound
 47 segments when the segment name used does not specify which
 48 component is meant and several components have entry points with
 49 the same name.  Either the reference should be made more precise
 50 or the target segment should be rebound with the bindfile changed
 51 to include the referenced name as a synonym on the desired
 52 component.
 53 
 54 
 55 No room for allocations:
 56     The message "There is no room to make requested allocations."
 57 means that the size associated with a common block of external
 58 variable to be created is too large; in this case, the program
 59 must be changed.
 60 
 61 
 62 Allocation not performed:
 63     The message "Allocation could not be performed." occurring
 64 when attempting to allocate space for an external variable, means
 65 that the area used by the linker has been clobbered.  If the
 66 process doesn't terminate first, try telling the linker to use a
 67 different area by using the set_user_storage command, giving it
 68 the name of another area.  The create_area command can be used to
 69 create the area, which should be extensible.
 70 
 71 
 72 Illegal link info:
 73     Sometimes the program making the reference has been clobbered;
 74 usually recompilation cures the problem.  The messages associated
 75 with this case are:
 76  "Illegal type code in type pair block."
 77  "Illegal self reference type."
 78 
 79 
 80 Bad definitions:
 81     The messages "Looping searching definitions." and "Bad class
 82 code in definitions." usually mean that target has been clobbered
 83 and should be recompiled.
 84     The message "Bad definitions pointer in linkage." means that
 85 the copy of the referencing segment's linkage section, which
 86 contains the actual snapped links, etc., has been clobbered.
 87 Terminating the referencing segment and starting over may work,
 88 although it is likely that enough damage has been done that a
 89 new_proc may be necessary.
 90 
 91 
 92 Bad fault tag 2 location:
 93     Occasionally the linker is invoked because the processor
 94 encounters the link fault bit pattern at a location other than an
 95 unsnapped link.  When the linker detects this, it returns one of
 96 the following messages:
 97   "Attempt to execute instruction containing a fault tag 2."
 98   "Attempt to indirect through word pair containing a fault
 99    tag 2 in the odd word."
100 
101 
102 Malformed list template entry:
103     The message "A compiler has generated incorrect list template
104 initialization ..." implies that the initialization information
105 for an external variable has been damaged in some manner.  The
106 routines containing the erroneous structure should be recompiled.
107 
108 
109 Invalid Pointer Target:
110     The message "Unable to initialize a pointer used as the
111 initial of an external variable." implies that the target of a
112 pointer initialization can not be initialized.  This can be caused
113 by an error occurring in the initialization structure or by the
114 segment containing the initialization information being damaged.
115 This can also be caused by not being able to find the target
116 specified by the initialziation information.
117     The latter case is most likely to happen with references to
118 external variables that are not defined within the (possibly
119 multi-segment) object.  The user should check all such references
120 and the links generated by the compiler and either correct the
121 reference or make sure that the link target is accessible.  If no
122 such error is found, the program should be recompiled.
123 
124 
125    The problem may actually have occurred in a different variable
126 from the one associated with the message.  If an external variable
127 references another external variable, the initialization of the
128 second may be completed before the initialization of the first,
129 with any errors being reported with the first.
130 
131 
132 Segment Unknown:
133     The message "Segment not known to process." implies that the
134 execution environment has been damaged.  The user should initiate
135 the segments required for their execution or perform a new_proc.
136 
137 
138 Inconsistent object MSF:
139     The message "Object MSF is inconsistent" states that a
140 component of an Object MSF has been damamged. The segment in
141 question should be recreated.
142 
143 
144 First reference trap:
145     The message "A first reference trap was found..." specifies
146 that the first reference traps for the executing segment have not
147 been executed. The segment should be terminated and then initiated
148 again with a -fc.
149 
150 
151 Resolve linkage error:
152     There is a command which can often be used to snap a link to
153 an arbitrary target; type "resolve_linkage_error new_target_name;
154 start" to continue with the desired reference.  This is most
155 useful for misspelling cases or when the search rules weren't
156 adequate.  It does not work for common blocks or external
157 variables to be created.