If a system dump is taken, follow the save area chain to find out
the name of the failing routine and whether IBM® owns it. Following are the procedures for
locating the name of the failing routine, which is the primary entry
point name.
- Find the entry point associated with the current save area. The
entry point address (EPA), located in the previous save area at displacement X'10',
decimal 16, points to it.
- Determine the entry point type, of which there are four:
Entry point type is… |
If… |
Language Environment conforming |
The entry point plus 4 is X'00C3C5C5'. |
Language Environment conforming
OPLINK |
The entry point plus 4 is X'01C3C5C5'. OPLINK linkage
conventions are used. |
C/C++ |
The entry point plus 5 is X'CE'. |
Nonconforming |
The entry point is none of the above. Nonconforming entry points
are for routines that follow the linking convention in which the name
is at the beginning of the routine. X'47F0Fxxx' is the instruction
to branch around the routine name. |
For routines with Language Environment-conforming
and C/C++ entry
points, Language Environment provides
program prolog areas (PPAs). PPA1 contains the entry point name and
the address of the PPA2; PPA2 contains pointers to the timestamp,
where release level keyword information is found, and to the PPA1
associated with the primary entry point of the routine.
- If the entry point type of the failing routine is Language Environment-conforming,
go to step 3.
- If the entry point type is C/C++, go
to step 5.
- If the entry point type is nonconforming, go to step 6.
- If the entry point type is Language Environment-conforming,
find the entry point name for the Language Environment or COBOL program.
- Use an offset of X'C' from the entry point to locate
the address of the PPA1.
- In the PPA1, locate the offset to the length of the name. If OPLINK,
then multiply the offset by 2 to locate the actual offset to the length
of the name.
Note: Enterprise COBOL V5.1 and later releases
use OPLINK.
- Add this offset to the PPA1 address to find the halfword containing
the length of the name, followed by the entry point name.
The
entry point name appears in EBCDIC, with the translated version in
the right-hand margin of the system dump.
- Find the Language Environment or COBOL program
name.
- Find the address of PPA2 at X'04' from the start of
PPA1. For Enterprise COBOL V5.1 or later releases, find a signed offset
at X'04' from the start of PPA1, then add this offset to the entry
point address to obtain the address of PPA2.
- Find the address of the compilation unit's primary
entry point at X'10' in the PPA2. For Enterprise COBOL V5.1 and later
releases, find a signed offset at X'10' in the PPA2, then add this
offset to the address of PPA2 to obtain the compilation unit's primary
entry point.
- Find the entry point name associated with the primary entry point
as described above. The primary entry point name is the routine name.
See
z/OS Language Environment Vendor Interfaces for
details of:
- the non-XPLINK Language Environment-conforming
PPA1 and PPA2.
- the XPLINK Language Environment-conforming
PPA1, and the XPLINK PPA1 optional area fields.
- the non-XPLINK Language Environment PPA2.
- the Language Environment PPA2:
Compile Unit Block for XPLINK.
- the PPA2 timestamp and version information.
- If the entry point type is C/C++, find
the C/C++ routine
name.
- Use the entry point plus 4 to locate the offset to the entry point
name in the PPA1 (see Figure 1 ).
- Use this offset to find the length-of-name byte followed by the
routine name.
The routine name appears in EBCDIC, with the translated
version in the right-hand margin.
- If the entry point type is nonconforming, find the PL/I routine
name.
- Find the one byte length immediately preceding the entry point.
This is the length of the routine name.
- Go back the number of bytes specified in the name length. This
is the beginning of the routine name.
- If the entry point type is nonconforming, find the name of the
routine other than PL/I.
- Use the entry point plus 4 as the location of the entry point
name.
- Use the next byte as the length of the name. The name directly
follows the length of name byte. The entry point name appears in EBCDIC
with the translated version in the right-hand margin.
Figure 2 shows a nonconforming entry
point type. Nonconforming entry points that can appear do not necessarily
follow this linking convention. The location of data in these save
areas can be unpredictable.
Figure 2. Nonconforming entry point type with sample
dump 020000 = 47F0F00C 06D3C9E2 E3C9E300 90ECD00C E0B |.00..LISTIT.....|
020010 = 18CF41B0 C29850BD 000850DB 000418DB |....Bq&...&.....|
020020 = 4510C052 E3E8D7D3 C9D54040 01020034 |....TYPLIN ....|
020030 = C200001E C5D5E3C5 D940D5E4 D4C2C5D9 |B...ENTER NUMBER|
020040 = 40D6C640 D9C5C3D6 D9C4E240 D6D940C1 | OF RECORDS OR A|
020050 = D3D30ACA 00020058 4510C06C E6C1C9E3 |LL.........%WAIT|
020060 = D9C44040 010202F0 E4000000 0ACA0002 |RD ...0U.......|