Locating the PSW for a program check in a CICS TS system dump
You receive a program check that has an offset X'FFFFFFFF' in a CICS Transaction Server for z/OS (CICS TS) region. For example, DFHAP0001 An abend (code 0C4/AKEA) has occurred at offset X'FFFFFFFF' in module DFHAMP. The X'FFFFFFFF' indicates that CICS was unable to establish the location of the program check. So, you would like to locate the PSW and registers in your CICS system dump.
Resolving the problem
If you have a system dump from a CICS TS V4.1 region, see locating the PSW for a program check in a CICS TS 4.1 system dump.
If you have a system dump from a CICS TS V3.2 or lower region, see locating the PSW for a program check in a CICS TS V3 system dump.
If you have a system dump that contains your CICS TS V4.2, CICS TS V5.1, CICS TS V5.2, or CICS TS V5.3 address space, you can do the following to locate the PSW and the registers for the program check:
- Enter option 0 from the IPCS primary option menu to display the IPCS default values panel.
- Enter DSNAME('xxxxx.xxxxx.xxxx') to the right of Source where xxxxx.xxxxx.xxxx is the dump dataset name. Then enter Enter and F3 to return to the IPCS primary option menu.
- Enter option 6 from the IPCS primary option menu to display the IPCS Subcommand Entry panel.
- Enter IPCS command verbx dfhpdxxx 'ke' where xxx is the version and release for the CICS dump. The value of xxx is 670 for CICS TS V4.2, 680 for CICS TS V5.1, 690 for CICS TS V5.2, and 700 for CICS TS V5.3. This command will format the dump and display to the Kernel Domain KE_TASK Summary.
- Enter f *YES* to get to the running task that had the program check. There may be more than one. In the example below, there is one task with *YES* under ERROR (KE_NUM 0157).
- Make a note of the KE_NUM, TCA_ADDR and the TRANSID of the tasks in error.
- Enter f table to find the KE Domain Error Table Summary. This is a summary containing the last 50 abends in the region since it was started.
- Enter ip st sys on the command line to determine the local time and date that the dump was taken.
- Make a note of the ERR_NUM associated with the program check that has an ERR_TIME matching the time the dump was taken and a KE_NUM matching the KE_NUM found in the Kernel Domain KE_TASK Summary. If there is more than one program check for the same ERR_TIME and KE_NUM, focus on the first program check. The other program checks are probably a result of the first program check.
- Enter f 'Number: xxxxxxxx' where xxxxxxxx is the ERR_NUM of the program check (from Figure 1.2) you have decided to focus on. This will find the entry in the KE Domain Error table for the error number you specify.
- For CICS TS V4.2 or V5.x compare the addresses at offset X'4C' and offset X'134' in the KERNEL ERROR DATA. The addresses are the fourth word of the CICS PSW and the MVS PSW, respectively. If the addresses are different, use the MVS PSW and registers. Otherwise, use the CICS PSW and registers.
The CICS PSW starts at offset x'40' and is 4 words in length. The CICS registers, 0 through 15, start at offset X'68' and each register is 2 words in length.
The MVS PSW starts at offset x'128' and is 4 words in length. The MVS registers, 0 through 15, start at offset x'150' and each register is 2 words in length.
- Use F8 to scroll down to see the formatted CICS PSW and registers as shown in Figure 1.4 below. IPCS CICS VERBX will format the MVS PSW and registers if the MVS PSW is different from the CICS PSW. If the PSWs are the same as in this example, then CICS VERBX does not duplicate the information.
CICS VERBX will attempt to determine the failing module from the PSW and will display the module name and offset if possible. The offline dump formatter uses more information than the original failure message, and so often, when the original failure message is unhelpful (offset FFFFFFFF in module) the dump formatter will be more informative.
By scrolling down from the panel in Figure 1.4, you will often get the failing module printed from the start to the interrupt address plus 256 bytes. CICS VERBX will also assume the values in the general registers are addresses and print the storage before and after these addresses, using 64 bit, 31 bit, and 24 bit addresses.
Once you know the PSW, you can do the following to determine the module that the failure is occurring in:
- Enter option 1 from the IPCS primary option menu to Browse the dump data set.
- Enter nnnnnnnn into the Pointer Address field where nnnnnnnn is the fourth word of the PSW.
- If the storage displays, enter F7 to scroll up until you see an eye catcher for a load module. Load module names are usually followed by a date and time stamp. Calculate an offset within the module by subtracting the load point from the PSW address. This is the offset where the abend occurred.
- If "storage not available" displays, enter ip where nnnnnnnn. If the module has been loaded by the operating system from the LPA or Nucleus, this will display the module name and the offset within the module.
Now that you know the module name and the offset, search for a known problem on the CICS Support page or from your favorite search engine. Use keywords such as the following for a search argument: 'DFHAP0001 DFHAPDM 0C4'.
CICS/TS CICS TS CICS Transaction Server