>I still don't envision a plausible scenario in which a problem is avoided
>by excluding that range of addresses. Supply context.
Many start a conversion to AMODE 64 by changing to AMODE 64 without
adequate analysis of their data. Maybe they even clear all the high
halves.
If there was "L" to load a pointer field, then a subsequent reference in
AMODE 64 would fail if the pointer had bit 0 on. Obviously the "L" in this
case should be changed to LLGT. It was to help these cases jump out at you
that the BAR was defined. This is in a way similar to setting up the
x'7FFFF000' page of an address space not to be addressable. Instead of
initializing a pointer to 0, you could initialize it 7FFFF000 (if you're
AMODE 31) and then if you mistakenly use it without setting it, you blow
up instead of accessing the PSA (which, true, would now get a ZAD event if
PER ZAD is active). You might also see 7FFFFBAD as an address used for the
same purpose (of course it doesn't accomplish its purpose if the offset >=
x'453').
To the question about the ambiguity of 00000000_80001000: it could be
considered ambiguous to Java which is given access to storage within the
bar. We normal users steer clear of that area.
>I understand that BASSM sets bit 63 of the return address to indicate
>that the return address is to AMODE 64. Does Content Supervision
>follow the same convention, setting bit 63 when LOADing an AMODE 64
>module?
Well, there is no "return address" for LOAD, but the returned entry point
output from LOAD is intended to be suitable for use in BASSM.
So an AMODE 64 entry point wil have bit 63 on so that you can use BASSM
(and if you want to use it on BASR, you must clear that bit). The value
placed into reg 14 is for use on BSM.
>Hmmm. I believe I can declare an ENTRY at an odd offset from the CSECT.
>(It had better be data, not a branch target.) I can make that ENTRY an
>ALIAS for my module. When I LOAD it, how can I tell if it the address
>returned with bit 63 set indicates an AMODE 64 CSECT or an actual odd
>address.
>
>Perhaps the answer is, "Don't do that!"
This is an excellent observation. And it is exactly correct, including the
"answer".
If you are an AMODE 64 then do not create an alias or an entry point that
is odd.
This should have been documented long ago but was not. We intend to do so,
but have not quite figured out where. Feel free to suggest "where".
It applies only to AMODE 64,RMODE 24 (or AMODE 64, RMODE 31 if above-16M
storage is not available) vs AMODE 24.
-- AMODE 31, any RMODE: the answer would have bit 32 on
-- AMODE 64, RMODE 31 (at least when storage is available), some bit 33-39
would be non-0
-- AMODE 64, RMODE 64 (some day), some bit 0-31 would be non-0
-- AMODE 64, RMODE 24 (or AMODE 24 for an odd address) bits 0-39 would be
0, bit 63 would be 1
The caveat to be documented is: If your module is AMODE 64, do not create
an alias or entry point that is at an odd offset from the beginning.
(You might say that if you happen to "know" that it's at an odd offset,
then it's OK to do so.)
Peter Relson
z/OS Core Technology Design