Hi

Probably no exact your case

We had a C++ application main program (LE enclave), we got some errors as tried to call from COBOL LE

We inserted a small LE conform assembler routine between the COBOL and C++, it issued a BPX1SDD DUB process and
an ATTACH to attach the C++ main program .


It is working in this way with COBOL and C++

On 3/27/2012 6:16 PM, 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 lists...@bama.ua.edu with the message: INFO IBM-MAIN



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

Reply via email to