Troubleshooting
Problem
At z/OS 2.5, a change was made to several non-programming interface (IBM-only) fields in the first page of the Prefixed Save Area (PSA) storage, which resides at virtual storage address 0 on any central processor (CP). This storage is sometimes referred to as “low core”. This change was intentional and necessary and did not affect any Programming Interface (PI) fields. However, the change has exposed errors in application programs which historically have been perceived as working, but in fact have been inadvertently accessing and using the content of these IBM-only fields. Typically, this happens as a result of the erroneous program using an instruction base register content of zero rather than the intended value, leading to an access of storage at some displacement into low core. If one of these changed fields is the target of the inadvertent access, the erroneous program may experience different results when executing on z/OS 2.5 or a newer release than it did when executing on z/OS 2.4 .
As an example, let’s assume the following instruction sequence in a program:
L R5,MYBLOCK@ Retrieve address of my control block from a location in storage
L R6,4(,R5) Load the content of the field at offset +4 into my control block
LTR R6,R6 Test whether loaded value is zero
BNZ EXITPGM If non-zero, exit program
In this instruction sequence, if the content of storage area MYBLOCK@ is zero (perhaps due to the field not yet being initialized), this would lead to an inadvertent access of low core by the second load instruction. At z/OS 2.4, a non-zero value would have been loaded into register 6, with the result being that the program would have branched to label EXITPGM. At z/OS 2.5 and newer releases, register 6 would be loaded with a value of 0, resulting in the program continuing execution instead, likely with unexpected results. In either case (at z/OS 2.4 or newer releases), the program was not performing correctly, but at z/OS 2.4, the errant behavior could have gone undetected due to the difference in the data inadvertently retrieved from the low core storage access.
This example demonstrates an assembler program that is in error. However applications written in a higher level language may experience such a problem as well. For example, in COBOL, a coding problem that could lead to an inadvertent access of low core storage would be LINKAGE SECTION items (other than parameters) not having addressability, leaving the associated BLL cell (the pointer to the item) having a value of zero.
Symptom
Diagnosing The Problem
L R15,16(,0)
Document Location
Worldwide
Was this topic helpful?
Document Information
Modified date:
05 February 2025
UID
ibm17162097