IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Storage Violation help.


IBM Mainframe Forums -> CICS
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
shankarm

Active User


Joined: 17 May 2010
Posts: 175
Location: India

PostPosted: Thu Jan 24, 2013 2:25 pm
Reply with quote

Bill,

below is what i found from the job logs
Code:

00000A 0458                         409+         DC    AL2(DFHEIEND-DFHEISTG)



I dont know what the above means. sorry.. I'm new to assembler.

Code:

000180                               95+DFHEIUSR DS    0D       



The issue is resolved now. Below is what i did to resolve the issue,
Note: In the below description, i am talking about only one ASM pgm..

- I ran an EDF and found which is the module throwing the violation. In my case it a Assembler-CICS module.
- In my program (ASM pgm) i saw a lot of address variables(pointers) in the comm area, i know that the value for these pointers are assigned in the transaction.
-The transaction goes through 100+ programs. I assumed that the violation happened in the area pointed by one the pointers in the ASM program. As we know the memory is valid till a freemain is issues in the transaction and the current ASM program has pointers which is pointing to
the memory area getmained in the transaction. So when a 'CICS return' is issued in the program. All the pointers go void as the pointers are not passed to the calling program which Link's (CICS LINK) to the ASM pgm am referring to. As all the pointers are not valid after the cics return from the current ASM program, i thought an implicit freemain will be issued and when a free main is issued, am SCZ check is done by CICS before the freemain. As there was a violation, SCZ check failed and a storage violation is thrown.
-The above was my assumption and this was the point where i assumed something and misdirected all the experts in this forum.
- I assumed that a freemain will be issued implicitly but i was wrong. A getmain is valid till the transaction is complete or an explicit freemain is issued.
- But from the CICS trace i found that the violation happens in a free main.
- Bill pointed out in one of his post that an implicit freemain is issued for dynamic assembler storage (i.e.) variables in DSECT.
- So, i started to suspect the DSECT variables in ASM pgm.
- When i checked there was a mismatch in variable length. A varaible of lenght 8192 is defined in the linkage of a cobol program and the address was assigned to a pointer. The address in this pointer is later pointed by a DSAECT in the ASM program i was referring to. But the lenght of the DSECT was 8191 (one byte short).
-The Dsect was followed by CSECT. As per the above, 8192 was assigned to 8191. Hence the violation.
- I Just put a 'CL1' in the DSECT of the assembler program. which makes the DSECT 8192 lenght and the issue was resolved.


If you are reader and if you have any question or need any clarifications about the about post, please feel free to disturb me... any updates to this post will trigger a mail to me.. i will try to help you if i can.
Back to top
View user's profile Send private message
shankarm

Active User


Joined: 17 May 2010
Posts: 175
Location: India

PostPosted: Thu Jan 24, 2013 2:40 pm
Reply with quote

Eventhough the issue is resolved, I still have few unanswered questions...

If this one byte length difference was causing the violation, this violation must have occured a long time back. The ASM program i was referring to in the above post was last modified in 1984. Why was the program running for 25+ years without any issues.. but now abended??

Below are the comments from one of the experts .. he is experienced.. i dont actuelly understand what he is saying..

I wrote the below:

I told him that, there is a length difference in the load and i asked him if the production source is correct??
And also told him about the lenght difference and CL1 is told in the previous post..


I didn't do the below... hope this helps you..
He wrote:
Quote:

On Monday, I looked at the load modules for <ASM PGM> in PRODUCTION and TEST. The 8-byte difference in size(A70 vs A78) was due to a CICS stub, not your assembler program. The CSECT for <ASM PGM> was A2C in both load modules. I wouldn’t worry about the CICS stub, the old load module was assembled with an old release of CICS.

The thing to be concerned about are the DSECTS(normally implemented by copybooks, includes, etc.). These describe storage not yet acquired and will not impact the size of the generated load module. If you assemble a program with 2 different versions of a copybook, you will generate 2 load modules of the same size. But, the load module created using the wrong copybook will probably abend. What will change is the offset In the executable instruction, not the size of the load module.

I notice in your job out on SDSF(COMPLIE JOB43669) you used the NOALIGN assembler parameter. I would take out the CL1 and reassemble it with ALIGN. That should put <variable in DSECT> on a full word boundary.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> CICS

 


Similar Topics
Topic Forum Replies
No new posts CLIST - Virtual storage allocation error CLIST & REXX 5
No new posts CICS vs LE: STORAGE option CICS 0
No new posts Insufficient Storage ABENDS & Debugging 7
No new posts Interviewers are surprised with my an... Mainframe Interview Questions 6
No new posts is there an API to use cloud storage ... All Other Mainframe Topics 2
Search our Forums:

Back to Top