S80A ERRORS COMPILING A COBOL PROGRAM

Document ID : KB000016193
Last Modified Date : 14/02/2018
Show Technical Document Details
Question:

I have an application that needed to be compiled (cobol).  All but one of those programs worked, 
but 1 program abended with a S80A or S878.  Why can't my program compile?

Answer:

Analyasis from a developer:

The job ran out of below the line storage.  A large amount of below the line storage (almost 6MB) was allocated by the program which is executed from the Endevor processor step.  The very same program got the S80A storage abend while trying to allocate some more below the line storage.  Most of the below the line storage allocated by the program was filled up with COBOL source code (approximately 74,000 line of COBOL code).  I assume the program is being used to generate COBOL code. The reason why it is happening only for one element is most probably that this particular element generates very large COBOL source.  When running the program step inside an Endevor processor, Endevor itself uses some below the line storage in the same address space for the inner workings.  Below the line storage available for an address space is typically 7-8 MB.  Some of it is occupied by Endevor and most if it is the program task.  When running the same program from JCL (outside of Endevor) there is slightly more below the line storage available because of the absence of Endevor's own storage.  That is why the step finishes with a RC=0 in plain JCL.  There is nothing we can tweak on the Endevor side to reduce the below the line storage usage.  In fact, if you try to process elements which would produce slightly larger COBOL code, it will also fail in plain JCL.  

The options you have available are:

1) If the program is vendor code get in touch with them to find out ways of how to eliminate or reduce the usage of below the line storage.  

Maybe there is a parameter or configuration option to redirect the generated COBOL source code to above the line storage.  Or maybe it is possible to use pre-allocted DD SYSOUTxx to get more space for the generated code.

 

2) You can modify your processor and instead of calling the the program directly, add a step to send a job with the program step to the internal reader.  This way the step will execute in a seperate job, i.e. seperate address space.

Ideally, you would add an additional step to the processor which will wait for the program job to finish.