Hello - I'm experiencing an 46D-18 abend under certain conditions when running a supervisor mode multi-tcb CEEPIPI job step. Under other conditions the 46D-18 does not occur.
Any assistance or advice would be appreciated. Per the system completion codes documentation, a 46D-18 occurs when an ESPIE is issued in supervisor mode or when the program issuing the ESPIE had a PSW storage key that did not match the TCB storage key. All HLL programs are either C or C++. All assembler programs are reentrant The only #pragma present is to set the fetchable attribute. Each invocation of CEEPIPI specifies TRAP(ON,NOSPIE),INTERRUPT(OFF),NOTEST as part of the runtime options. The //STEPLIB references only 1 dataset. It is a PDSE. It is in the list of APF authorized libraries. Issuing MODESET MODE=SUP does not cause an abend. The program invoked by JCL is linked AC(1). Let's call this program JCLMAIN. It is assembler. 4 TCBs are created via the ATTACHX macro. Let's call the related load modules INIT, READ, PROCESS and WRITE Each attached TCB setups up its own CEEPIPI environment. The PROCESS load module is linked AC(1). The read, process and write tasks interact with each other via a queue and are coordinated with a combination of WAIT/POST and Pause/Release services. CEEPIPI for the PROCESS TCB is initialized as a SUB_DP environment with a service vector to handle LOAD, DELETE, GET, FREE and MESSAGE. Exception handling is not yet handled in the service vector. The PROCESS TCB uses either call_sub_addr_nochk or call_sub_addr_nochk2 to invokes the C/C++ program. call_sub_addr_nochk and call_sub_addr_nochk2 are documented in the Language Environment Vendor Interfaces (SA22-7568) manual. Only nochk or nochk2 is used at any one time. I've tested with both with no difference in outcome. Conditions under which this works: 1) This works when MODESET is never issued and the entire process is problem state. THis has been run from a load library that is not APF authorized and it works. 2) This works when the JCLMAIN issues MODESET MODE=SUP,KEY=NZERO prior to any sub-tasks being attached and then issuing MODESET MODE=PROB,KEY=NZERO after all tasks are detached. Conditions under which this fails: 1) This fails and the 46D-18 occurs when JCLMAIN reamins in problem state at all times and attaches all sub-tasks. The PROCESS TCB issues MODESET MODE=SUP,KEY=NZERO prior to calling CEEPIPI to setup the SUB_DP environment. The PROCESS TCB is the only TCB which enters supervisor state. This has me perplexed because the run ops provided to CEEPIPI has TRAP(ON,NOSPIE),INTERRUPT(OFF),NOTEST. The TRAP(ON,NOSPIE) is supposed to cause LE to issue an ESTAE instead of an ESPIE. You might be asking, why I'm doing this. The answer is that eventually, I want to be able to run the C/C++ programs that are setup in the SUB_DP environment under an SRB. This is documented in Language Environment Vendor Interfaces (SA22-7568). This will allow me to offload C/C++ code to a zIIP engine. Let me know if more details are needed. Please contact me off list if you have information that can only be shared in private. Thanks, Sam ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
