MCIT Technical Newsletter #5

IEFBR14

        IEFBR14 is the mysterious IBM utility program that is usually used
     to create or delete files.  How does IEFBR14 create and delete files?  It Doesn't!
     IEFBR14 is simply an assembler program that consists of the following source code:

                SR   15,15         CLEAR RETURN CODE
                BR   14            RETURN TO CALLER

        The code in IEFBR14 is the minimum, although not the most efficient, that will
     create a 'do nothing' program and still satisfy the IBM standard calling
     convention.  The instruction, 'SR  15,15' simply clears general register 15 to
     zero.  Register 15 is the register where MVS expects the return code from a
     terminating program.  The instruction 'BR 14' transfers control to the address
     stored in general register 14, which by convention, is the return address in the
     calling program.  The calling program is normally the MVS initiator that was
     selected by the MVS task scheduler to process the job.  Note that the program
     IEFBR14 takes it's name from the 'BR 14' instruction.

        So how does IEFBR14 facilitate the creation and/or deletion of a file?  Before
     MVS initiates a task step, the allocation services address space (ALLOCAS) is
     called to allocate any data sets specified in the step's JCL.  Since it is allocation
     services that creates new data sets, the creation is done before control is
     transferred to IEFBR14.  Similarly, unallocation services (also ALLOCAS) is
     called when a step ends to perform the requested disposition of all allocated
     data sets according the 'DISP=...' parameter of the DD statement.

        Since all prgrams initiated by JCL are serviced by allocation and unallocation
     services, ANY program can be used to create and/or delete files.  Some
     installations utilize console message and/or memory dump programs that execute
     conditionally based on a previous steps' return codes.  By adding transient and/
     or GDG datasets to the abend step with a disposition of '(SHR,DELETE,DELETE)' can
     eliminate the need for manual intervention in cleaning up the job's data set
     environment before the job can be successfully restarted.