IEFBR14

From Wikipedia, the free encyclopedia

IEFBR14 is an IBM mainframe utility program that does nothing.

It runs in all IBM mainframe environments derived from OS/360, including z/OS.

To allocate or delete a dataset, a program (any program) needs to be executed in a batch environment. But if no other function is needed IBM supplies this program that effectively does nothing.

Example JCL would be :

//IEFBR14  JOB  ACCT,'DELETE DATASET',MSGCLASS=J,CLASS=A
//STEP0001 EXEC PGM=IEFBR14                       
//DELDD    DD DSN=xxxxx.yyyyy.zzzzz,
//            DISP=(MOD,DELETE,DELETE),UNIT=DASD

It consisted initially as a single instruction a "Branch to Register" 14. The mnemonic used in the IBM Assembler was BR and hence the name: IEF BR 14.

It didn't set the return code and hence a second instruction had to be add to clear the return code so that it would exit with the correct status.

The machine code for the modified program is:

        SR R15,R15  put zero into register 15 (return code)
        BR R14      branch to the address in register 14 (return to scheduler)

Contents

[edit] History of IEFBR14, from the RISKS Digest

From: John Pershing <PERSHNG@ibm.com>[1]
Date: 25 Jan 88 11:41:42 EST

You can't even necessarily write the null program without encountering problems...

There is an apocryphal story about the large number of attempts that were required in order to produce a "correct" version of MVS's null program, IEFBR14 (this was done back in the days when MVS was still called OS). As with all MVS programs, IEFBR14 is called using the standard system calling conventions, and all it has to do is return successfully.

The first version was something like this:

        IEFBR14 START
                BR    14       Return addr in R14 -- branch at it
                END

First bug: A program indicates its successful completion by zeroing register 15 before returning; this version of the null program "failed" every time. Try it again:

        IEFBR14 START
                SR    15,15    Zero out register 15
                BR    14       Return addr in R14 -- branch at it
                END

Much better. However, this caused some-or-other problems with the linkage editor, since the END statement didn't specify the primary entry point of the routine. Version three:

        IEFBR14 START
                SR    15,15    Zero out register 15
                BR    14       Return addr in R14 -- branch at it
                END   IEFBR14

At least now, the null program was functionally correct. However, dump analysis was impeded because the program didn't include its own name in the source code, as an "eyecatcher" (this is a time-honored convention). Null program, mark four:

        IEFBR14 START
                USING IEFBR14,15  Establish addressability
                B     GO          Skip over our name
                DC    AL1(L'ID)   Length of name
        ID      DC    C'IEFBR14'  Name itself
                DS    0H          Force alignment
        GO      SR    15,15       Zero out register 15
                BR    14          Return addr in R14 -- branch at it
                END   IEFBR14

The next change had something esoteric to do with save-area chaining conventions -- again, for the sake of conventions and to keep the dump analysis tools happy.

Note that the "null program" has tripled in size: both in terms of the number of source statements and in terms of the number of instructions executed!

[edit] See also

[edit] References

  1. ^ Pershing, John (1988-01-25). Safe programming languages. RISKS Digest. Retrieved on 2006-10-12.

[edit] External links

In other languages