@Peter, thanks as always.
I had not noticed SPIEOVERRIDE. It would be a better approach than "remember
to turn off SPIE in LE."
There's not many AMODE 64 instructions -- basically load up a 64-bit pointer
and move the data below the bar. I wonder if perhaps FRR would be
appropriate. (Not a question for you; a question for me.)
There's little doubt about the behavior I saw, and in fact, I only set off
bit 31 in the SDWAPSW16, nothing else.
I'm on another problem at the moment but I will repeat the experiments for
sure at some point here.
L R3,SDWAXPAD Load SDWA extension ptrs
L R4,SDWAXEME-SDWAPTRS(,R4) Load ptr to 64-bit regs
USING SDWARC4,R4
*
NI SDWAPSW16+3,X'FE'
*
LR R1,R9 SDWA
SETRP RC=0 Percolate!
*
NOSDWA EQU *
DROP R9,R4
*
RETURN EQU *
LR R14,R8 Restore R14
BR R14 Return
Charles
-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[email protected]] On
Behalf Of Peter Relson
Sent: Tuesday, August 29, 2017 5:51 AM
To: [email protected]
Subject: Re: Can AMODE 31 C/C++ get a signal on a S0C1/4 in AMODE 64
assembler?
I do not pretend to know the answer to the initial question, but when
Charles mentioned updating the SDWA, that seems really problematic to me.
I tried a simple experiment:
-- Mainline sets 2 ESTAEXs
-- Mainline blows up
-- Newest ESTAEX routine gets control and updates the "AMODE 64" bit in the
PSWs of SDWAEC1, SDWAEC2, SDWAPSW16
-- That ESTAEX routine percolates
-- Older ESTAEX routine gets control. It finds the AMODE 64 bits on in all
of those PSWs.
This is what I expected because, for the most part, RTM builds the SDWA anew
for each recovey routine, from a protected copy so that changes made by one
ESTAE routine are not visible to the next (there are likely some exceptions,
but the PSWs are part of the re-build).
I have no explanation for why LE's behavior would change based on setting of
some bit that an ESTAE routine changed, unless that routine is itself
calling LE providing that SDWA. Oherwise, LE would have no idea that you
changed anything.
Probably a stupid question: since running AMODE 64 is pretty much outside
the bounds of 31-bit LE, have you considered protecting your AMODE 64 code
with your own recovery and having that recovery field any problem
appropriately? The ESTAEX SPIEOVERRIDE keyword can be used to make sure that
LE's (E)SPIE does not get control if a program interrupt occurs.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN