Looking as the DUCT, it also contains an indication of base address space or
subspace.

I would think that an ASYNC exit/IRB would not useethe basespace indicater of
the current RB.

On Tue, 9 Apr 2013 16:17:25 -0500 Kenneth Wilkerson <redb...@austin.rr.com>
wrote:

:>You are certainly correct about the z/OS implementation of the TRAPx
:>instruction. I often wondered why the hardware designers decided to
:>implement it such that it inherits the user state and not a predefined state
:>and why they didn't provide a service to "register" trap interfaces so they
:>could be shared or the asynchronous exit issue could be solved. You have to
:>be able to acquire key 0 to even examine the DUCT let alone modify the DUCT
:>to define the required trap control blocks. This means, of course, that the
:>application creating the trap environment must be authorized.
:>
:> But despite these z/OS limitations,  in my mind, the asynchronous exit
:>issue is just a restriction. It's no bigger a restriction then the fact that
:>the TRAP can't be executed in HOME ASC (SAC 768) or Secondary ASC mode (SAC
:>256) or in transaction processing. Your scenario involves the asynchronous
:>exit also invoking a TRAPx instruction. So simply stated, asynchronous exits
:>cannot be debugged using the TRAPx instruction without a service to
:>determine if the TRAP control blocks are currently in use and perform a TRAP
:>stack function. But even this problem can be solved with a little extra code
:>(a PC routine) that stacks the current trap save area if it's in use. 
:>
:>Certainly, the TRAPx instruction has fewer limitations than other available
:>methods. Every method is going to have restrictions. In my asynchronous
:>exits, I typically simply update a control block and post a task to process
:>whatever it is that I'm trying to process. 
:>
:>Kenneth, TDF Architect
:>
:>-----Original Message-----
:>From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
:>Behalf Of Morrison, Peter
:>Sent: Tuesday, April 09, 2013 3:37 PM
:>To: IBM-MAIN@LISTSERV.UA.EDU
:>Subject: Use of the TRAPx Instructions
:>
:>I have had extensive experience with the use of the TRAPx (TRAP2/TRAP4)
:>instructions in a z/OS environment.
:>
:>z/OS offers no support for setting up to enable them.  Basically, you need
:>to anchor things in the DUCT (Dispatchable Unit Control Table).  There is
:>one DUCT set up for each TCB and SRB.  (Note that ONLY ONE DUCT is set up
:>for a TCB - not one DUCT per RB level.  THIS IS VERY IMPORTANT!) (preserving
:>a specifically formatted DUCT is important, but is not relevant to the
:>discussion below.  Just be aware that there are issues associated with it)
:>
:>Generally, you can regard TRAPx as a 'fancy branch'.  The target is the
:>routine whose address is set up in the control blocks.  The hardware saves
:>all state in the 'trap save area' first.
:>
:>BUT, there is a very significant problem when using TRAPx with z/OS!  When
:>your trap routine gets control, system state is as before the TRAPx
:>instructions was executed.  This includes the fact that interrupts are
:>probably enabled.  Why does this matter?  Because, in z/OS, in TCB mode, if
:>an interrupt occurs, processing of that interrupt could involved
:>de-scheduling the TCB, deciding to request a new RB level, and later,
:>redispatching the TCB, so that the new RB level will get control.  
:>
:>This can lead to the following scenario:
:>
:>1: TCB-mode code executes a TRAPx instruction
:>2: The hardware saves all state (PSW/Regs) in the Trap Save Area
:>3: The registered Trap handler routine is given control and starts
:>executing...
:>4: an interrupt occurs
:>5: During processing of the interrupt, the current TCB has a new RB level
:>stacked over it
:>6: The TCB is resumed.  Execution now is for the new RB level
:>7: The new code executes a TRAPx instruction
:>8: The hardware saves all state in the Trap Save Area.  BAZINGA!  The old
:>information is overwritten!
:>9: The registered trap handler routine is given control and starts
:>executing...
:>
:>Because the trap save area  has been overwritten, the lower-level handler,
:>when it resumes execution, is not using correct information.  There is not
:>even any way to know that this has occurred.
:>
:>While the situation CAN be circumvented by preventing asynchronous RB
:>stacking (there is a bit in the TCB for this), this can play havoc with
:>debugging as, for example, asynchronous exits to do with I/O won't
:>execute...
:>
:>For the above reason, use of TRAPx instructions as a way to implement
:>breakpoints in code that executes on z/OS in TCB mode is not a good idea...
:>
:>Peter Morrison
:>Principal Software Architect
:>CA
:>6 Eden Park Drive
:>North Ryde NSW 2113
:>Tel: 02 8898 2624
:>Fax: 02 8898 2600
:>peter.morri...@ca.com
:>
:>----------------------------------------------------------------------
:>For IBM-MAIN subscribe / signoff / archive access instructions, send email
:>to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
:>
:>----------------------------------------------------------------------
:>For IBM-MAIN subscribe / signoff / archive access instructions,
:>send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
Binyamin Dissen <bdis...@dissensoftware.com>
http://www.dissensoftware.com

Director, Dissen Software, Bar & Grill - Israel


Should you use the mailblocks package and expect a response from me,
you should preauthorize the dissensoftware.com domain.

I very rarely bother responding to challenge/response systems,
especially those from irresponsible companies.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to