LFD1

 
 

Letters from Dave

 
 

 
 

Accessing FASM Dataspaces

Is there a version of the DISPLAY command that allows both an address and an ALET to be specified?

I would like to peek into data spaces in other address spaces and get the following once I issue SET ASID xxxx:  DBC095E THE CONCEPT OF A "CURRENT" TASK IS UNDEFINED IN FOREIGN ADDRESS SPACE MODE

From Dave:


I think I need to illustrate for you what a "current task" is and how to break out and display constructs owned by "other" tasks. So here goes...


Some commands (such as LIST PSW, LIST REGS, LIST RBS, etc)
show information about objects (PSWs, registers, request blocks, etc)
that belong to the retry level Request Block (RB) queued to the current task (TCB).
These are the constructs created by and for the program you are currently debugging.

When you issue SET ASID xxx,
then clearly you are no longer interested in the "current" environment,
and instead want to see some other environment belonging in some other aspace.

Well, within any given aspace, there are numerous tasks (TCBs) each having one or more Request Blocks (RBs) queued from them. So...

To see the tasks in another aspace, either of the following will work:
SET ASID aspacereference   [such as 0003 or JES2 or some such]
LIST TASKS
or just
LIST TASKS aspacereference
Note, in both cases, the LIST TASKS command (re)creates a series of equates having names of the form TCB#nnn. These equates label the storage locations of the actual TCBs whose information is being displayed. These equates are helpful for the following commands.
FORMAT TCB#3 DATA
Not something you probably want to do, but this shows the storage for the aspace's "third" TCB.
-
LIST RBS TCB#3
This displays the request blocks queued to TCB#3. This IS something you want to do, because PSWs and registers are owned by Request Blocks.


Like the LIST TASKS command, the LIST RBS command (re)creates equates (RB#nnn) that label the storage locations of the request blocks being displayed. These equates are helpful in the following commands:
LIST PSW  RB#1
LIST PSWE RB#1
Displays the PSW owned by the program running under RB#1 under TCB#3.
-
LIST REGS   RB#1
LIST RWREGS RB#1
Ditto for the registers. I hope this helps you to understand the concept of "current task" and how to get away from it.


To show the dataspaces belonging to a particular aspace, use the LIST DSPACES aspaceref command. Example:

TCB#7 RB#1 ------------------------------------------------- z/XDC TPUT IN
Z21 ===>
l dspace jes2
   DATASPACES OWNED BY ADDRESS SPACE JES2 (ASID=001F)
   ASTE#  NAME      STOKEN             TYPE       SCOPE   ACCESS    #'ATEs
       1  00000IEF  80006000_000000C3  DATASPACE  SINGLE  PRIVATE     0

For more information, see HELP COMMANDS LIST DSPACE.


To show the access lists for either an aspace (i.e. that are queued from the PASN-AL)...

TCB#7 RB#1 ------------------------------------------------- z/XDC TPUT INTERFACE -------------------------
Z21 ===>
l accesslist jes2
   PASN-AL FOR ASPACE JES2 (001F)             OWNER     OWNER
   SEQ#  ALET      NAME      TYPE             NAME      ASID   SCOPE   I  FO  PVT  EAX   STOKEN
   1     01000002            DSPACE                                                0000
   2     01000003            DSPACE                                           X    0002
   3     01FF0004  SYSCOMDS  DSPACE           *MASTER*  0001   COMMON              0001  80000100_00000001
   4     01FF0005  IXLCBCAD  DSPACE           XCFAS     0006   COMMON              0001  80001000_00000010
   5     01FF0006  IXLCTCAD  DSPACE           XCFAS     0006   COMMON              0001  80001100_00000011
   6     01FF0007  CNZSCLOT  DSPACE           CONSOLE   000A   COMMON              0001  80002B00_0000002D
   7     01FF0008  CNZSCMDB  DSPACE           CONSOLE   000A   COMMON              0001  80002C00_0000002E
   8     01FF0009  IEAM000A  DSPACE           CONSOLE   000A   COMMON              0001  80003700_00000039
   9     01FF000A  IEECMCAD  DSPACE           *MASTER*  0001   COMMON              0001  80000102_00000001
   10    01FF000B  SYSZBPX1  DSPACE           OMVS      0010   COMMON              0001  80003900_0000003B
   11    01FF000C  SYSZBPXX  DSPACE           OMVS      0010   COMMON              0001  80003A00_0000003C
   12    01FF000D  CUNDS001  DSPACE           *MASTER*  0001   COMMON              0001  80003C00_0000003E
   13    01FF000E  IRR00001  DSPACE           *MASTER*  0001   COMMON              0001  80000301_00000004
   14    01FF000F  SYSANTMN  DSPACE           ANTMAIN   000C   COMMON              0001  80000402_00000008
   15    01FF0010  SYSDMO    DSPACE           DEVMAN    000E   COMMON              0001  80000502_00000009
   16    01FF0011  SYSAOM    DSPACE           DEVMAN    000E   COMMON              0001  80000702_0000000D
   17    01FF0012  CEACADS   DSPACE           CEA       001A   COMMON              0001  80001901_0000001A
   18    01FF0013  BPXDX001  DSPACE           OMVS      0010   COMMON              0001  80003E00_00000061
   19    01FF0014  SYSANT00  DSPACE           ANTAS000  000D   COMMON              0001  80000902_00000016
   20    01FF0015  JES2NIT   DSPACE           JES2AUX   0027   COMMON              0001  80005500_0000008B



To show the access lists for a particular task within an aspace (i.e. that are queued from the task's DU-AL)...
LIST TASK JES2    [I need this command because I'm gonna need the TCB#nnn equates]
LIST ACCESSLIST TCB#3
Example:

TCB#7 RB#1 ------------------------------------------------- z/XDC TPUT INTERFACE --------------------------
Z21 ===>
l accesslist tcb#7
   DU-AL FOR TCB#7                            OWNER     OWNER
   SEQ#  ALET      NAME      TYPE             NAME      ASID   SCOPE   I  FO  PVT  EAX   STOKEN
_  1     00000002  JES2      ASPACE (001F)                                         FFFF
   2     00010003  00000IEF 
DSPACE           JES2      001F   SINGLE              0001  80006000_000000C3
   3     00050004  ALLOCAS   ASPACE (0015)                             X           0001

Most times, the spaces are not accessible to z/XDC. When they are, two things happen:
  • 1) A shortcut entry field appears at the left. This allows you to display the space's storage (F or D etc) starting at location 00000000.
  • 2) For dataspaces, an equate is generated whose name is #dspacename. For example, if in the above example the dataspace named 00000IEF had been accessible, then an equate named #00000IEF would have been created.
When a dspace is accessible, you can display its storage in many ways. One is via the equate. Example: FORMAT #00000IEF+34C7EB displays location 004fC7EB within dataspace #00000IEF.


When a dataspace is not accessible you can try using the SET ACCESSTO DATASPACE STOKEN=xxxxx command to make it accessible. This command attempts to add the dataspace you the current task's DU-AL, and it creates an ALET that you can use for referencing its storage. (See HELP COMMANDS SET ACCESSTO).

This does not always work, but when it does, it's real helpful. When it doesn't, it will tell you exactly why it didn't. Example:

TCB#7 RB#1 ------------------------------------------------- z/XDC TPUT INTERFACE ----
Z21 ===>
set accessto dataspace stoken=80000E01_0000000F
_  ACCESS HAS BEEN ESTABLISHED TO THE DATASPACE NAMED IRR0000C -
THE ALET IS 00CF0005

Both the LIST DSPACE and LIST ACCESSLISTS commands display STOKEN values.
The LIST ACCESSLISTS command also displays ALETs.

The SET ACCESSTO command also creates an equate (#dspacename) that you can use for referencing the space's starting address.


Once you have an ALET, you can use that with several z/XDC commands (FORMAT, DISPLAY, ZAP, USING, EQU, etc) to display, change and format storage within the dataspace.

Also, when you you either the EQUATE command or the USING command to assign labels and maps into the dataspace, the space's ALET is assigned to the label or map. Thereafter, you can use the label or map fields to reference dataspace storage without having to provide the ALET again.

Examples: The above set accessto dataspace stoken=80000E01_0000000F command did two things:
  • It created an ALET (00CF0005) for referencing the dataspace.
  • It created an equate named #IRR0000C for referencing the start of the dataspace.
So you can reference location 000019E0 in any of the following ways:

FORMAT #IRR0000C+19E0

FORMAT 19E0~ALET(00CF0005)

EQUATE LOOKHERE #IRR0000C+19E0
[or] EQUATE LOOKHERE 19E0~ALET(00CF0005)
FORMAT LOOKHERE

DMAP MYMAPS.MYCBLOCK
USING MYCBLOCKS LOOKHERE
FORMAT .MYCBFIELD

ZAP AR0=00CF0005
ZAP R0,19E0

[or] ZAP R0,LOOKHERE
FORMAT AR0?

etc.


I hope this helps.
Dave Cole