The FORTRAN statement:
EXTERNAL A,B,C,D
declares procedures A,B,C, and D as external global symbols to be passed as formal arguments in a subsequent subroutine call such as:
CALL FANCY(32,C)
The F4V44 FORTRAN compiler generates a word for each external global symbol called a transfer vector. Transfer vectors should be modified by the loader to contain the run-time addresses of the external procedures to which they refer. Thus, external globals may be addressed using a single indirect reference. If A,B,C and D are all FORTRAN subroutines, the transfer vectors are properly updated to point to the entry points of the routines. It appears, however, that transfer vectors corresponding to MACRO procedures are not set at all, but left zero! No diagnostic is issued by F4V44 or LOADER.
The effect of this bug is that references to an external MACRO procedure are, in effect, references to location 0. Usually, the reference is a JMS 0, causing an IOPS error.
The bug may be avoided by writing a trivial FORTRAN procedure which calls the MACRO procedure and returns. The FORTRAN procedure must be declared external.