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.