On Thu, 26 Jun 2014 16:17:56 -0700, Phil Smith <[email protected]> wrote:

>Walt Farrell wrote:
>>(It is also not clear where you got the ACEE address from in the first place; 
>>that is also important, and often done incorrectly in cross-memory code, and 
>>it would be good to see that code.)
>
>Good question. I'm convinced because I've verified that the ACEE eyecatcher is 
>visible back in the PC handler when I can "see" the HASN, and here's the code 
>that gets the ACEE, also from that module:
>
>         L     R4,PSAAOLD         callers ascb
>         USING ASCB,R4            short term addressability
>
>         L     R5,ASCBASXB        ascb extension
>         USING ASXB,R5
>         MVC   SRQEACEE,ASXBSENV  addr of ACEE in secondary space
>
>         ICM   R1,15,TCBSENV      ACEE this task
>         BZ    *+8                usually there
>         ST    R1,SRQEACEE        retain ESM preference

Thanks. Here's what I think.

(1) After the L R4,PSAAOLD you will have the ASCB for the home address space in 
R4.

(2) After the L R5,ASCBASXB you will have an ASXB address in R5. 

(3) After the MVC  SRQEACEE,ASXBXENV you will have an address space ACEE 
address in SRQEACEE.

(4) After the ICM R1,15,TCBSENV you will have either 0 or the address of a TCB 
ACEE in R1.

But here's the important part. After steps (2) through (4), you will not have 
the _home_ address space's addresses, but the _primary_ address space's 
addresses, because you have not properly setup the ALETs to point to the home 
address space. 

In an earlier message I mentioned that debugging cross-memory code is 
difficult, and this is the main reason. The ASCBs are in common. But the ASXB, 
TCBs, and ACEEs for an address space are in that address space, and to get the 
right ones you need ALETs when you're cross-memory, unless you want the ones 
for the primary address space.

The really tricky aspect of all this is that the ASXB for each address space is 
generally (in my experience) at the same virtual address. So, if you load 
ASCBASXB from the _home_ address space's ASCB and look at it without ALET 
qualification, you'll look at the _primary_ address space's ASXB, because they 
are both at the same virtual address, just in different address spaces. 

The same applies, generally, for the address space ACEE. ASXBSENV will 
generally have the same value in multiple address spaces. So, there's a pretty 
good chance that if you pick up the wrong ASXB, and grab its ASXBSENV, you'll 
get an address that points to an ACEE. It won't be the ACEE you want (it will 
be your server's ACEE, in primary), but it will be an ACEE and if you look at 
ACEEACEE it will say "ACEE". 

The same thing happens with TCBs (the jobstep TCB is probably at the same 
address in each address space), and _if_ TCBSENV for the jobstep task points at 
an ACEE it is likely to be at the same address in both address spaces. That is 
not necessarily true of other TCBs, and of the ACEEs they may point to. But it 
may be true, and if you're using the wrong ALETs then when you think you're 
picking up TCBSENV from _home_ you may pick it up from one of your TCBs in 
_primary_. 

So the first thing you need to make sure of is that you're always using the 
proper ALET when you use the control blocks that are not in common, and when 
you're trying to debug a problem you need to make sure which address space 
you're looking at. It can be very tricky.

-- 
Walt

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to