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
