Hello PL/1 list,
is this true? Are there any special restrictions concerning PL/1 mains and LE
enclaves calling each other?
Please read my original post, too. Do you have any further suggestions?
Thank you, kind regards
Bernd
B.D. wrote:
Ran across that at a client. I believe that the PL/I manuals document that an LE
enabled program cannot call a PL/I MAIN.
On Tue, 27 Mar 2012 18:16:06 +0200 Bernd Oppolzer wrote:
> Hello all,
>
> we have a problem that is not easy to describe. Let me try it.
>
> We are building a test supporting system, which allows to do tests of
> software components. The system consists of the following modules or
> parts:
>
> A - driver, written in ASSEMBLER. The driver builds a LE enclave, so
> that it can call C subfunctions and the test objects, which are
> (normally) PL/1 routines
>
> B - driver supporting routine, written in C. This routine provides
> services OPEN, WRITE and CLOSE. It is called by the driver. On OPEN, it
> fetches a testcase list from the testcase database and builds a linked
> list in memory (in the LE heap). It also opens a log file for writing.
> On WRITE, it writes some protocol data on the log file. On CLOSE, it
> closes the log file.
>
> C - driver exit, written in ASSEMBLER. It is called at the beginning of
> the test object (at the entry point) by means of TRAP2 interrupts. It
> has access to the testcase list element that B took from the testcase
> database for the current testcase. It then calls D, passing the address
> of the testcase list element. D reads the testcase data, builds a
> parameter list for the testcase, and returns a parameter list. Then the
> driver exits resumes the test object at the position of the entry point
> (this way the test data is passed to the test object).
>
> D - is a C routine which reads the data from the testcase data base and
> builds the parameter list for the test object - because this is much
> easier to do in C than in ASSEMBLER.
>
> Now the problem:
>
> all works well, if the test object is a PL/1 subroutine and not a main
> program. Then the LE enclave built by A is used by B, passed to the test
> object, and used by D as well. There is no problem passing the LE
> environment through the TRAP2 interrupt.
>
> But:
>
> we also want to be able to test PL/1 main programs this way. The PL/1
> main programs are called by the driver the same way as the modules are
> called, but because they are started at CEESTART, a second LE enclave
> below the first enclave is built. Then C and D run below the second
> enclave. This is no problem so far, because there is no need to share
> ressources between the two enclaves; the only information exchange is
> through the testcase list element which belongs to the heap of the first
> enclave, and this is no problem, in our opinion.
>
> But:
>
> when we return from the test object and we try to execute the WRITE call
> to B in the first enclave, it fails in the prologue of B.
>
> We first thought that reg 12 had not be restored correctly, but this is
> not the case. Reg 12 is the same as before the call of the PL/1 main,
> points to the original CEECAA. Also, the save area (including NAB etc,
> the words behind offsets 72) are unchanged. But still, we get abends 0C4
> etc. in the prologue of B. But only in the PL/1 main case, if there is a
> second enclave, not in the other case.
>
> We fixed this problem by doing the WRITE and CLOSE calls not in the same
> (first) enclave as the OPEN call, but instead we did all the subsequent
> calls by an intermediate PL/1 main, that is: after the PL/1 test object
> main destroyed somehow our first enclave, we didn't use it any more, but
> instead constructed new enclaves for every subsequent call at the same
> level. But this doesn't look very sound to me.
>
> My question is: has somebody out there an idea, what has happened here
> and what might be a solution to our problem? Is it possible to have one
> LE enclave call another and on return from the second still have the
> first one usable? What are we getting wrong?
>
> Kind regards
>
> Bernd
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to listserv@bama.ua.edu with the message: INFO IBM-MAIN
--
Binyamin Dissen <bdissen@dissensoftware.com>
http://www.dissensoftware.com
Director, Dissen Software, Bar & Grill - Israel
|