Errors and warnings associated with loading

KEY ERRORS Usually error and warning messages are self-explanatory but sometimes it is not possible to convey the complexity of a failure or how it arose in a short error message, let alone what to do about it. In this section some of the less obvious errors and warnings will be enlarged upon. Most of the theoretical background to specific situations is dealt with in other sections and the explanations can be further expanded by referring to them.


KEY Note 1. Loader action on encountering mismatching data entry/data reference lengths. A data reference in an object file always has a length associated with it to tell the loader how long the expected data entry should be. If there is a data entry of the correct name already loaded but whose length does not match the data references expected value then the loader may either a) do nothing, b) issue a warning or c) terminate the load with an error. The action followed in any particular case depends both on the loadparms set for the load and the source language of the object file which is being loaded when the mismatch occurs. The rules followed by the loader are tabulated below:
1. All data entries except common entries. Loading conditions Ref len > Ent len REF len < Ent len Default(Cascade) FAIL WARN (except FORTE) LET WARN WARN (except FORTE) MIN or call on dynamic ref with default loadparms FAIL WARN (except FORTE) MIN+LET or call on dynamic ref with LOADPARM(LET) set WARN WARN (except FORTE)
2. Common entries (inc. FORTRAN blank common - F#BLCM). Loading conditions Ref len > Ent len REF len < Ent len Default(Cascade) * - LET * - MIN or call on dynamic ref with default loadparms FAIL WARN (except F#BLCM) MIN+LET or call on dynamic ref with LOADPARM(LET) set WARN WARN (except F#BLCM) * Common is created at the end of a cascade load if no data entry is found and is always made as long as the longest reference.
1. 'Unable to create USERSTACK - ' 'Create AUXSTACK fails - ' 'Create USER GLA fails - ' What happened: When you first run commands which are not in the subsystem, the loader will create up to 3 temporary files on your behalf as required. These are the user stack(T#USTK), the auxiliary stack(T#ASTK) and the user gla(T#UGLA). The attempt to create the file named in the error message failed. What to do: The second half of the message should indicate what the problem is - e.g. too many files connected, too little file space, etc. - and action should be taken accordingly. You cannot run whatever it is you wanted to run until the file which couldn't be created is created.
2. 'Extend USERGLA fails - ' What happened: When the user gla file T#UGLA is set up it is quite small but has the capacity to extend itself as necessary up to a certain system imposed limit. You have tried to exceed that limit. What to do: The most likely cause of this failure is trying to load a program which demands huge amounts of space from the gla, e.g. very large arrays or common blocks. You should find out why so much space is being requested and which object files are causing the problem. You can set up common blocks in separate data files using the command DATASPACE if you are using FORTRAN. Similarly, large internal arrays can be made external (e.g. %external in IMP, named common blocks in FORTRAN) and mapped on to data files with DATASPACE.
3. 'Base gla full - ' What happened: You have tried to 'permanently load' an object file and there is not enough space in the base gla file to satisfy the gla requirement of the file. This failure can occur if you use PRELOAD a lot. What to do: If there are several files already permanently loaded then if you no longer require them call RESETLOADER to unload them. This may release sufficient space on the base gla. Failing that, proceed as in 2. above.
4. 'Loader tables full' What happened: You have loaded so much software that the loader tables have completely filled up. This is an extremely unlikely failure. What to do: Inform your local advisory service. If you are loading FORTRAN it may be possible to suppress many of the entry points with the object file editor MODIFY.
5. 'Too little space for initialised stack' What happened: The user stack has a hardware imposed upper limit of 252K. OPTION(INITSTACKSIZE=nn) reserves whatever you request of this 252K to be used as initialised stack. The area is used by some languages, especially FORTRAN, to store variables between calls of routines. Your program has requested more initialised stack than you have set up. What to do: Increase the INITSTACKSIZE. If you turn on loader monitoring or ANALYSE or OBJANAL the object files you can find out how much initialised stack is being requested if you are not sure. If the problem is being caused by cumulative requests from a number of object files then LOADPARM(MIN) may be worth trying if you are currently on default loadparms and you think that all the files loaded may not be called. If you are still having problems and you are a FORTRAN user then it may be worth recompiling with PARM(MINSTACK).
6. 'Data ref ENTRY in FILE longer than entry and LOADPARM LET not set' What happened: You have a data entry called ENTRY already loaded. A reference to ENTRY has been found in FILE which expects the length of ENTRY to be bigger than it actually is. Since you have not specifically permitted this situation (by the command LOADPARM(LET)), it is treated as a fatal error. See table in note 1. What to do: You could set LOADPARM(LET), but this is potentially very dangerous since you may start overwriting other areas of store. This is one of the classic ways of getting address errors which are very difficult to trace. If you are using FORTRAN and the problem is mismatching common areas then you are probably using LOADPARM(MIN) or using PRELOAD. In both, the first file with a data reference to ENTRY will cause it to be created with the length specified in the file. If this is not the maximum length for ENTRY, then at some point this error will occur. You should always ensure that the longest reference gets loaded first. If you are not a FORTRAN user then the best plan is to modify the software so that data entries and their references have the same length.
7. 'Load initiated by dynamic call to ENTRY failed' What happened: Your program made a dynamic call to ENTRY but the load failed. What to do: There will be an error message immediately following this message which will give the reason for the failure. The most common is that the loader could not find a particular entry point.
8. 'Attempt to call unsatisfied ref ENTRY' What happened: A previous search for ENTRY failed but as LOADPARM(LET) was set the reference was made unresolved. You have tried to call it. What to do: Depends whether you expected the failure. You could provide a dummy entry point or use one of the alias facilities if you must persist. It would be better however to provide the expected software.
9. 'Inconsistent directory entry for ENTRY' What happened: When the loader searched for ENTRY it was not loaded but a reference to it was found in one of the directories in the search list. When the loader loaded the file which the directory said contained ENTRY it found that it wasn't there at all. This can happen when an object file is recompiled with different entries but the directory in which it is inserted is not updated. (Note that if you recompile an object file which is inserted in to your active directory then the active directory is automatically updated.) What to do: Find out which directory is inconsistent by repeating the load with monitoring turned on. If it's one of your own directories then update it, if it's a system directory e.g. PUBLIC, UKCLIB, ERCLIB, CONLIB, SUBSYS etc then tell the Advisory Service who will notify the relevant person otherwise send a TELL message or MAIL to the directory owner suggesting politely that the directory requires updating!


KEY WARNINGS 1. 'Warning - connect directory fails DIRECTORY NAME' What happened: At log on or when the active directory or searchdir list is changed the loader builds a new list of directories it must search when looking for entries. One of the files in the list could not be connected so it is not in the current search list.
2. 'Warning - Satisfying non-dynamic ref to ENTRY by entry at higher loadlevel. Ref made dynamic' What happened: The loader satisfied a static reference to ENTRY with an entry point from an object file which was certain to be unloaded before the file containing the reference. To ensure that the reference did not point to a file which was no longer loaded, the loader changed the characteristics of the reference to be dynamic. See below.
3. 'Warning - Code ref to ENTRY made dynamic while unloading' 'Warning - Data ref to ENTRY made dynamic while unloading' What happened: The file which contained entry point ENTRY has been unloaded but a reference to ENTRY has been found in an object file which is to remain loaded. The reference has been unfixed and turned into a dynamic reference. If the dynamic reference is called later then the loader will once again carry out a full search for ENTRY. A reference which generated warning 2. above while loading will produce this warning at unload time. Beware of dynamic data references.
4. 'Code ref ENTRY made dynamic' 'Data ref ENTRY made dynamic' What happened: You have set LOADPARM(MIN). A static reference to ENTRY has been made dynamic. Beware of dynamic data references.
5. 'Code ref ENTRY made unresolved' 'Data ref ENTRY made unresolved' What happened: You have set LOADPARM(LET). A static reference to ENTRY could not be satisfied after a full search so the reference has been changed to type unresolved to allow the run to proceed. If you attempt to call it you will get error 8. If this warning comes as an unpleasant surprise then check you have the object file containing ENTRY inserted in one of the directories in the search list. Also check for spelling inconsistencies.
6. 'n data ref(s) to ENTRY in FILE LONGER than current entry' 'n data ref(s) to ENTRY in FILE shorter than current entry' What happened: You have a data entry ENTRY already loaded. There are n references to this entry in the file you are currently trying to load (FILE). These references expect ENTRY to be longer or shorter - depending on which message you got - than it actually is.
What to do: This depends on the loading conditions at the time. Data references longer than the entry is by far the more serious condition (which is why 'LONGER' is output in capitals), since you may try to read from, or write to, an area of store outwith the defined scope of the data entry. It is very dangerous to proceed with a computation under these circumstances unless you are quite confident that there will be no problems. You will only get the 'LONGER' warning if you have LOADPARM(LET) set, otherwise such a condition will cause termination of the load with error 6. The 'shorter' condition is usually less serious. At least you won't be trampling over other areas of store, but nevertheless it is always worth looking into the reason for the mismatch. While not as immediately dangerous as the 'LONGER' condition it might still mean that the run will provide erroneous results. When in doubt, try to ensure that the lengths of all data references have the same length as the entry.

Warnings generated in loader monitoring

KEY 1. 'Warning - CODE relocated - crosses segment boundary' What happened: You are running an object file which is a member of a pd file. Its CODE area straddles a segment(256K) boundary. The loader is creating a file called T#CODE and copying the CODE and SST areas of the object file into it so that the file can be run. This is highly inefficient and you should reorganise your pd file.
2. 'Warning - CODE flagged as unshareable and relocated' What happened: The object file has told the loader that the CODE area is unshareable so the loader is taking the action described in 1. There is nothing you can do about this.
3. 'Warning - CODE not connected at preferred site' 'Warning - GLA not connected at preferred site' What happened: You are loading a bound object file but the shared(CODE) or unshared(GLA) areas respectively could not be connected at their preferred site. The site is either occupied by another file or you are trying to run a bound file which is a member of a pd file. The loader has to recalculate all the run time addresses for the named areas and plant them in the appropriate locations so there is a loss in efficiency. If you are going to run the file again, try DISCONNECT(.ALL) before you do to maximise the number of available sites.
4. 'Warning - ISTK not connected at preferred site' What happened: You are loading a bound object file but the initialised stack cannot occupy its preferred location. There is only one, fixed, location for the initialised stack since the user stack is connected at a fixed address. The warning was generated because you are either permanently loading a bound file or temporarily loading it and the preferred location is already in use. (See 'EMAS fundamentals' section for further explanation of allocation of initialised stack for permanently and temporarily loaded object files). Run time addresses which refer to initialised stack are recalculated with some loss in loading efficiency. It is not always possible to do anything about this, e.g. if you are loading >1 bound file, and even when it is it may not be worth doing.