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
- ^ Pershing, John (1988-01-25). Safe programming languages. RISKS Digest. Retrieved on 2006-10-12.