What it means
Every 0Cx abend is a program check: the last digit tells you which kind. For 0C1 the processor fetched an operation code it does not recognise, and no recovery routine handled it.
Compilers do not generate invalid instructions, so the real question is how the program got to that address. Usually it branched into data, zeroed storage or a module that is not the one the caller expected.
Typical causes
- A CALL to an entry point that resolved to zero or to the wrong module.
- A return through a save area or return address that was overwritten.
- A module link-edited with unresolved external references.
- A storage overlay, such as a table overflow, that wrote over saved addresses.
- An old or mismatched copy of a called module picked up from STEPLIB.
How to fix it
- Note the PSW address and check whether it falls inside any known module.
- Use the CEEDUMP traceback to find the last program that was really in control.
- Check the binder (link-edit) output for unresolved references and warnings.
- Confirm which copy of each module was loaded from the libraries in the step.
- If no module changed, suspect a storage overlay and rerun a test build with SSRANGE.
Example
Illustrative only; names and values are invented.
IEA995I SYMPTOM DUMP OUTPUT
SYSTEM COMPLETION CODE=0C1 REASON CODE=00000001
IEF450I ORDJOB01 STEP040 - ABEND=S0C1 U0000 REASON=00000001