Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-17 Thread Farley, Peter x23353
Sam,

Thanks for the confirmation, that's what I just figured out from re-reading the 
FM.

Peter

-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Sam Siegel
Sent: Friday, March 17, 2017 11:47 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

There are two tables which contain the programs: 1) The PreInit table
coded with CEEXPIT, CEEXPITY and CEEXPITS macros; 2) The table
maintained by LE.

During the LE initialization process, a table is constructed in
storage controlled by LE.  The information in the PreInit table is
copied over.

The add_entry function updates the LE constructed table, not the user
constructed table.  Notice that the add_entry, delete_entry,
identify_entry, identify_environment and identify_attribute use the
environment token, not the table address as function arguments.

Please read the add_entry doc again.  You will see that it
specifically says that the "LE maintained table"

On Fri, Mar 17, 2017 at 8:16 AM, Farley, Peter x23353
<peter.far...@broadridge.com> wrote:
> Gord,
>
> That's what I have coded so far, but here is what happens:
>
> 1.  The (init_sub) returns RC=8, but based on the ASMPIPI example I let 
> that go as not a fatal error since the pre-init table has only empty entries
> 2.  The first (add_entry) succeeds RC=0 in R15, but the pre-init table is 
> not updated at all (see debugging display below).  The program being added 
> was compiled with Enterprise COBOL V4.2 so it is certainly a valid LE HLL 
> subroutine.
>
> So why does the (add_entry) not update the pre-init table?  What am I doing 
> wrong here?
>
> Peter
>
> The pre-init table is defined with four empty entries like this:
>
> PPTBLCEEXPIT  ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITS ,
>
> Debugging display (thank you Cole Software!) right after (add_entry) 
> succeeds, sanitized (names are not what I actually use here):
>
> XDC ===> d testpipi+4b8 2;d testpipi+4b8? 4;d testpipi+4308 2;d 
> testpipi+4308+c?
> _  _EF48 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI+4B8, @R14+3A, 
> @R1+50, @R12+4B8,
> _   TESTPIPI+4B8, PRIVATE+CF48
> _  +4B8  8fB70992D0   *..k}*  
> <=== EP address of TESTSUBR and pre-init 
> table index returned by (add_entry)
> _  _370992D0 8f (A.S.TSOUSERE) --- TESTSUBR+0, XPRIVATE+8992D0
> _+0  8f  47F0F028 00C3C5C5 0288 0014  *.00..CEE...h*  
>  <=== TESTSUBR module in storage
> _   +10  8f  47F0F001 98CEAC00 37099386   *.00.q.lf*
> _   +20  8f   0DFF 90ECD00C 4110F038  *..}. .0.*
> _   +30  8f  98EFF04C 07FF 370992D0   *q.0<..k}*
> _  _00012D98 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI +4308, 
> TESTPIPI+4308, PRIVATE+10D98
> _ +4308  8f80042508 0003  **  
>  <=== Address of CEEPIPI, two other 
> constants, address of pre-init table
> _ +4310  8f  0009 00012EE4  3711BDB8  *...U..].*
> _  _00012EE4 8f (A.S.TDPEFARE) --- TESTPIPI.TESTPIPI +4454, 
> TESTPIPI+4454, PRIVATE+10EE4
> _ +4454  8f   C3C5C5E7 D7E3C2D3 0004  *CEEXPTBL*  
> <=== Pre-init table after (add_entry) succeeds (RC = 
> 0)
> _ +4460  8f  0010 0002  40404040  **
> _ +4470  8f  40404040   40404040  **
> _ +4480  8f  40404040   40404040  **
> _ +4490  8f  40404040   40404040  **
> _ +44A0  8f  40404040   00278000  **
>
>
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On 
> Behalf Of Gord Tomlin
> Sent: Thursday, March 16, 2017 5:41 PM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler 
> main programs
>
> On 2017-03-16 16:11, Farley, Peter x23353 wrote:
>> Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
>> (init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
>> first, before any entries at all appear in the table?
>
> We do INIT_SUB, followed by ADD_ENTRY calls for all the routines to be
> called via CEEPIPI. Then we do CALL_SUB for any routine using the index
> returned by ADD_ENTRY.

--


This message and any attach

Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-17 Thread Sam Siegel
There are two tables which contain the programs: 1) The PreInit table
coded with CEEXPIT, CEEXPITY and CEEXPITS macros; 2) The table
maintained by LE.

During the LE initialization process, a table is constructed in
storage controlled by LE.  The information in the PreInit table is
copied over.

The add_entry function updates the LE constructed table, not the user
constructed table.  Notice that the add_entry, delete_entry,
identify_entry, identify_environment and identify_attribute use the
environment token, not the table address as function arguments.

Please read the add_entry doc again.  You will see that it
specifically says that the "LE maintained table"

On Fri, Mar 17, 2017 at 8:16 AM, Farley, Peter x23353
<peter.far...@broadridge.com> wrote:
> Gord,
>
> That's what I have coded so far, but here is what happens:
>
> 1.  The (init_sub) returns RC=8, but based on the ASMPIPI example I let 
> that go as not a fatal error since the pre-init table has only empty entries
> 2.  The first (add_entry) succeeds RC=0 in R15, but the pre-init table is 
> not updated at all (see debugging display below).  The program being added 
> was compiled with Enterprise COBOL V4.2 so it is certainly a valid LE HLL 
> subroutine.
>
> So why does the (add_entry) not update the pre-init table?  What am I doing 
> wrong here?
>
> Peter
>
> The pre-init table is defined with four empty entries like this:
>
> PPTBLCEEXPIT  ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITY ,
>  CEEXPITS ,
>
> Debugging display (thank you Cole Software!) right after (add_entry) 
> succeeds, sanitized (names are not what I actually use here):
>
> XDC ===> d testpipi+4b8 2;d testpipi+4b8? 4;d testpipi+4308 2;d 
> testpipi+4308+c?
> _  _EF48 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI+4B8, @R14+3A, 
> @R1+50, @R12+4B8,
> _   TESTPIPI+4B8, PRIVATE+CF48
> _  +4B8  8fB70992D0   *..k}*  
> <=== EP address of TESTSUBR and pre-init 
> table index returned by (add_entry)
> _  _370992D0 8f (A.S.TSOUSERE) --- TESTSUBR+0, XPRIVATE+8992D0
> _+0  8f  47F0F028 00C3C5C5 0288 0014  *.00..CEE...h*  
>  <=== TESTSUBR module in storage
> _   +10  8f  47F0F001 98CEAC00 37099386   *.00.q.lf*
> _   +20  8f   0DFF 90ECD00C 4110F038  *..}. .0.*
> _   +30  8f  98EFF04C 07FF 370992D0   *q.0<..k}*
> _  _00012D98 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI +4308, 
> TESTPIPI+4308, PRIVATE+10D98
> _ +4308  8f80042508 0003  **  
>  <=== Address of CEEPIPI, two other 
> constants, address of pre-init table
> _ +4310  8f  0009 00012EE4  3711BDB8  *...U..].*
> _  _00012EE4 8f (A.S.TDPEFARE) --- TESTPIPI.TESTPIPI +4454, 
> TESTPIPI+4454, PRIVATE+10EE4
> _ +4454  8f   C3C5C5E7 D7E3C2D3 0004  *CEEXPTBL*  
> <=== Pre-init table after (add_entry) succeeds (RC = 
> 0)
> _ +4460  8f  0010 0002  40404040  **
> _ +4470  8f  40404040   40404040  **
> _ +4480  8f  40404040   40404040  **
> _ +4490  8f  40404040   40404040  **
> _ +44A0  8f  40404040   00278000  **
>
>
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On 
> Behalf Of Gord Tomlin
> Sent: Thursday, March 16, 2017 5:41 PM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler 
> main programs
>
> On 2017-03-16 16:11, Farley, Peter x23353 wrote:
>> Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
>> (init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
>> first, before any entries at all appear in the table?
>
> We do INIT_SUB, followed by ADD_ENTRY calls for all the routines to be
> called via CEEPIPI. Then we do CALL_SUB for any routine using the index
> returned by ADD_ENTRY.
>
> --
>
>
> This message and any attachments are intended only for the use of the 
> addressee and may contain information that is privileged and confidential. If 
> the reader of the message is not the intended recipient or an authorized 
> representative of the intended recipient, you are hereby notified that any 
> dissemination of this communication is strictly prohibited. If you have 

Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-17 Thread Farley, Peter x23353
Never mind.  Re-reading the Fine Manual I think I just found the answer to my 
question:

(init_sub) takes as an argument a user-supplied pre-init table, but does not 
modify the user copy of  the table.  Instead, it copies the user entries into a 
"Language Environment-maintained table".

Similarly, when (add_entry) succeeds it adds the new entry into the "Language 
Environment-maintained table" (although it does not actually say so in so many 
words).

So the "user supplied" pre-init table is used to size and initialize the 
"Language Environment-maintained table" but is never actually updated by 
(init_sub) or (add_entry), nor is the user-supplied table ever used by 
(call_sub).

Have I got it right now?

Peter

-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Farley, Peter x23353
Sent: Friday, March 17, 2017 11:16 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

Gord,

That's what I have coded so far, but here is what happens:

1.  The (init_sub) returns RC=8, but based on the ASMPIPI example I let 
that go as not a fatal error since the pre-init table has only empty entries
2.  The first (add_entry) succeeds RC=0 in R15, but the pre-init table is 
not updated at all (see debugging display below).  The program being added was 
compiled with Enterprise COBOL V4.2 so it is certainly a valid LE HLL 
subroutine.

So why does the (add_entry) not update the pre-init table?  What am I doing 
wrong here?

Peter

The pre-init table is defined with four empty entries like this:

PPTBLCEEXPIT  ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITS ,

Debugging display (thank you Cole Software!) right after (add_entry) succeeds, 
sanitized (names are not what I actually use here):

XDC ===> d testpipi+4b8 2;d testpipi+4b8? 4;d testpipi+4308 2;d 
testpipi+4308+c? 
_  _EF48 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI+4B8, @R14+3A, 
@R1+50, @R12+4B8, 
_   TESTPIPI+4B8, PRIVATE+CF48  
   
_  +4B8  8fB70992D0   *..k}*
  <=== EP address of TESTSUBR and pre-init 
table index returned by (add_entry)
_  _370992D0 8f (A.S.TSOUSERE) --- TESTSUBR+0, XPRIVATE+8992D0  
 
_+0  8f  47F0F028 00C3C5C5 0288 0014  *.00..CEE...h*
   <=== TESTSUBR module in storage
_   +10  8f  47F0F001 98CEAC00 37099386   *.00.q.lf*
 
_   +20  8f   0DFF 90ECD00C 4110F038  *..}. .0.*
 
_   +30  8f  98EFF04C 07FF 370992D0   *q.0<..k}*
 
_  _00012D98 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI +4308, 
TESTPIPI+4308, PRIVATE+10D98
_ +4308  8f80042508 0003  **
   <=== Address of CEEPIPI, two other constants, 
address of pre-init table
_ +4310  8f  0009 00012EE4  3711BDB8  *...U..].*
 
_  _00012EE4 8f (A.S.TDPEFARE) --- TESTPIPI.TESTPIPI +4454, 
TESTPIPI+4454, PRIVATE+10EE4
_ +4454  8f   C3C5C5E7 D7E3C2D3 0004  *CEEXPTBL*
  <=== Pre-init table after (add_entry) succeeds (RC = 0)
_ +4460  8f  0010 0002  40404040  **
 
_ +4470  8f  40404040   40404040  **
 
_ +4480  8f  40404040   40404040  **
 
_ +4490  8f  40404040   40404040  **
 
_ +44A0  8f  40404040   00278000  **
 


-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Gord Tomlin
Sent: Thursday, March 16, 2017 5:41 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

On 2017-03-16 16:11, Farley, Peter x23353 wrote:
> Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
> (init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
> first, before any entries at all appear in the table?

We do INIT_SUB, followed by ADD_ENTRY calls for all the routines to be called 
via CEEPIPI. Then we do CALL_SUB for any routine using the index returned by 
ADD_ENTRY.

--


This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the

Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-17 Thread Farley, Peter x23353
Gord,

That's what I have coded so far, but here is what happens:

1.  The (init_sub) returns RC=8, but based on the ASMPIPI example I let 
that go as not a fatal error since the pre-init table has only empty entries
2.  The first (add_entry) succeeds RC=0 in R15, but the pre-init table is 
not updated at all (see debugging display below).  The program being added was 
compiled with Enterprise COBOL V4.2 so it is certainly a valid LE HLL 
subroutine.

So why does the (add_entry) not update the pre-init table?  What am I doing 
wrong here?

Peter

The pre-init table is defined with four empty entries like this:

PPTBLCEEXPIT  ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITY ,
 CEEXPITS ,

Debugging display (thank you Cole Software!) right after (add_entry) succeeds, 
sanitized (names are not what I actually use here):

XDC ===> d testpipi+4b8 2;d testpipi+4b8? 4;d testpipi+4308 2;d 
testpipi+4308+c? 
_  _EF48 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI+4B8, @R14+3A, 
@R1+50, @R12+4B8, 
_   TESTPIPI+4B8, PRIVATE+CF48  
   
_  +4B8  8fB70992D0   *..k}*
  <=== EP address of TESTSUBR and pre-init 
table index returned by (add_entry)
_  _370992D0 8f (A.S.TSOUSERE) --- TESTSUBR+0, XPRIVATE+8992D0  
 
_+0  8f  47F0F028 00C3C5C5 0288 0014  *.00..CEE...h*
   <=== TESTSUBR module in storage
_   +10  8f  47F0F001 98CEAC00 37099386   *.00.q.lf*
 
_   +20  8f   0DFF 90ECD00C 4110F038  *..}. .0.*
 
_   +30  8f  98EFF04C 07FF 370992D0   *q.0<..k}*
 
_  _00012D98 8f (A.S.TSOUSERE) --- TESTPIPI.TESTPIPI +4308, 
TESTPIPI+4308, PRIVATE+10D98
_ +4308  8f80042508 0003  **
   <=== Address of CEEPIPI, two other constants, 
address of pre-init table
_ +4310  8f  0009 00012EE4  3711BDB8  *...U..].*
 
_  _00012EE4 8f (A.S.TDPEFARE) --- TESTPIPI.TESTPIPI +4454, 
TESTPIPI+4454, PRIVATE+10EE4
_ +4454  8f   C3C5C5E7 D7E3C2D3 0004  *CEEXPTBL*
  <=== Pre-init table after (add_entry) succeeds (RC = 0)
_ +4460  8f  0010 0002  40404040  **
 
_ +4470  8f  40404040   40404040  **
 
_ +4480  8f  40404040   40404040  **
 
_ +4490  8f  40404040   40404040  **
 
_ +44A0  8f  40404040   00278000  **
 


-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Gord Tomlin
Sent: Thursday, March 16, 2017 5:41 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

On 2017-03-16 16:11, Farley, Peter x23353 wrote:
> Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
> (init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
> first, before any entries at all appear in the table?

We do INIT_SUB, followed by ADD_ENTRY calls for all the routines to be 
called via CEEPIPI. Then we do CALL_SUB for any routine using the index 
returned by ADD_ENTRY.

--


This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.


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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Gord Tomlin

On 2017-03-16 16:11, Farley, Peter x23353 wrote:

Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
(init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
first, before any entries at all appear in the table?


We do INIT_SUB, followed by ADD_ENTRY calls for all the routines to be 
called via CEEPIPI. Then we do CALL_SUB for any routine using the index 
returned by ADD_ENTRY.


--

Regards, Gord Tomlin
Action Software International
(a division of Mazda Computer Corporation)
Tel: (905) 470-7113, Fax: (905) 470-6507

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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Bernd Oppolzer

Hi,

if the COBOL subroutines are compiled using NORENT, there could be another
possibility; we used this at my former customer's site.

The ASSEMBLER main program could call a dummy COBOL main,
which does nothing (but builds the LE environment) and calls again the
ASSEMBLER main at a secondary entry point. Now the enclave is present,
and from now on the ASSEMBLER main can do its work and call the
COBOL subroutines. The COBOL subroutines, IMO, only need the correct
value in register 12 (the pointer to the Common Anchor Area of LE) and some
values in the save areas must be set up correctly (next available byte 
pointer); you will

have to copy these values from the save area that the COBOL main did build.

You will see what you have to do if you look at the prologue code of the
COBOL functions.

Things are different, if the COBOL routines are compiled using RENT; 
that is,

if they have writable static areas; then you need something like CEEFETCH -
a normal call using V address constant (or LINK or LOAD macro) will not be
sufficient.

At the end, the ASSEMBLER main line (secondary entry) returns to the
COBOL dummy main; this dummy main terminates the enclave and then
it returns to the ASSEMBLER "real" main line.

This worked for us; every ASSEMBLER main program was built this way
and had a dummy HLL main program linked to it (it was PL/1, in fact),
and this was how the main programs built LE enclaves, so that PL/1 and
C subroutines could be called later (if necessary).

The call to the HLL subroutines was done by a special CALL macro which
did the necessary preparations, so that the subroutines found the LE 
enclave.


Kind regards

Bernd



Am 16.03.2017 um 18:57 schrieb Farley, Peter x23353:

Hi All,

We are preparing for the transition from COBOL V4.2 to COBOL V5.2.  Existing 
non-LE-enabled assembler main programs need to change from using IGZERRE 
initialization to using CEEPIPI enclave initialization to allow calling 
multiple COBOL subroutines, sometimes calling a subroutine more than once per 
batch step execution.

We do know that the assembler main programs really ought to be converted to 
LE-enabled to make things better, but that is beyond available programmer 
resources and time at the moment.  It may be scheduled later, but in the 
meantime we need a quicker solution.  We already use a set of assembler macros 
to hide the initialization and loading and calling of COBOL programs from 
non-LE-enabled main programs, so I am modifying the macros to use CEEPIPI rules 
instead so that programs can just be re-translated to accomplish the change.

Now to my questions:

The (call_sub) function of CEEPIPI to call a subroutine states that "The next call 
to (call_sub) initializes a new enclave", which is obviously CPU expensive.

The (call_sub_addr) function of CEEPIPI to call a subroutine does not have this 
statement.  Does this mean I can use the following sequence of calls and only 
have one enclave created and reused for each called subroutine?

CEEPIPI ( (init_sub), . . . )

LOAD EP=SUBPGM1
Save address for CEEPIPI
LOAD EP=SUBPGM2
Save address for CEEPIPI

CEEPIPI ( (call_sub_addr), (addr-for-SUBPGM1), . . . )

CEEPIPI ( (call_sub_addr), (addr-for-SUBPGM2), . . . )

Etc.

CEEPIPI ( (term), . . . )

Or do I need to use the CEEPIPI initialization function (init_sub_dp) instead 
of (init_sub) to accomplish multiple (call_sub_addr)'s with only one enclave 
initialization?

TIA for your help in understanding the rules here.

Peter
--


This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.

--
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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread John McKown
On Thu, Mar 16, 2017 at 3:11 PM, Farley, Peter x23353 <
peter.far...@broadridge.com> wrote:

> Doesn't use of (add_entry) presume that you add to the table BEFORE you
> call (init_subr) or (init_subr_dp)?  What if initialization is set up to be
> done first, before any entries at all appear in the table?
>

​​I'm not 100% sure, but since you're supplying a "token", which you get
from the init_sub or init_subp call, I ​don't think you​ can do it BEFORE
one of the "init_" calls. Also, remember that COBOL is an LE language. And
it can do dynamic calls without knowing the name before hand. Looking at
one portion, it appears that the "add_entry" can do the z/OS LOAD for you:

"routine_entry (input/output)
The routine entry address that is added to the PreInit table. If
routine_entry is zero on input, routine_name is used as the load name. On
output, routine_entry is set to the load address of routine_name.

The high-order bit of the entry_point address must be set to indicate the
addressing mode for the routine. If the high-order bit is OFF, the routine
is called in 24 bit addressing mode and the address must be a valid 24 bit
address. If the high-order bit is ON, the routine is called in 31 bit
addressing mode and the address must be a valid 31 bit address.
"​



>
> Can initialization happen with a "dummy" LE-enabled subroutine in the
> table and then calls be made using (call_subr_addr) without any
> corresponding table entry for the module(s) to be called?
>

​You talking to me? [grin]. I have no idea, but from what I can read, I get
the impression that whatever CEEPIPI function you use to call a routine,
the name of that routine must be in the LE pre-init table.



>
> Peter
>
>




-- 
"Irrigation of the land with seawater desalinated by fusion power is
ancient. It's called 'rain'." -- Michael McClary, in alt.fusion

Maranatha! <><
John McKown

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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Farley, Peter x23353
Doesn't use of (add_entry) presume that you add to the table BEFORE you call 
(init_subr) or (init_subr_dp)?  What if initialization is set up to be done 
first, before any entries at all appear in the table?

Can initialization happen with a "dummy" LE-enabled subroutine in the table and 
then calls be made using (call_subr_addr) without any corresponding table entry 
for the module(s) to be called?

Peter

-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of John McKown
Sent: Thursday, March 16, 2017 4:00 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

On Thu, Mar 16, 2017 at 2:52 PM, Farley, Peter x23353 <
peter.far...@broadridge.com> wrote:

> I thought I might need to use stert_seq and end_seq too.  Thanks for the
> advice.
>
> However, I am running into a little roadblock at the moment.  I set things
> up copying some of the sample program ASMPIPI listed in the LE Pgmrs Guide,
> but without any fixed program name in the ceexptbl entry since the
> initialization macro cannot know what program(s) will be called:
>
> PPTBLCEEXPIT  ,   PREINIT TABLE WITH INDEX
>  CEEXPITY 0,0 DYNAMICALLY LOADED RTNE, CALL-BY-ADDR
> *
>  CEEXPITS ,   END OF PREINIT TABLE
>
> Neither (init_sub) nor (init_sub_dp) will succeed with this ceexptbl, both
> of them fail with RC=8.
>
> Is there any way to set up a totally dynamic ceexptbl, with no actual
> entries for any LE-enabled HLL program, and still be able to initialize
> successfully?  If not, does it matter if the only entry in the ceexptbl is
> a dummy HLL program that will NOT be invoked via that table, but only other
> programs called via (call_subr_addr) with the address returned by a LOAD
> macro?
>

​add_entry:

https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.ceea200/cladde.htm
​
>
> Peter
>
-- 

This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.


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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread John McKown
On Thu, Mar 16, 2017 at 2:52 PM, Farley, Peter x23353 <
peter.far...@broadridge.com> wrote:

> I thought I might need to use stert_seq and end_seq too.  Thanks for the
> advice.
>
> However, I am running into a little roadblock at the moment.  I set things
> up copying some of the sample program ASMPIPI listed in the LE Pgmrs Guide,
> but without any fixed program name in the ceexptbl entry since the
> initialization macro cannot know what program(s) will be called:
>
> PPTBLCEEXPIT  ,   PREINIT TABLE WITH INDEX
>  CEEXPITY 0,0 DYNAMICALLY LOADED RTNE, CALL-BY-ADDR
> *
>  CEEXPITS ,   END OF PREINIT TABLE
>
> Neither (init_sub) nor (init_sub_dp) will succeed with this ceexptbl, both
> of them fail with RC=8.
>
> Is there any way to set up a totally dynamic ceexptbl, with no actual
> entries for any LE-enabled HLL program, and still be able to initialize
> successfully?  If not, does it matter if the only entry in the ceexptbl is
> a dummy HLL program that will NOT be invoked via that table, but only other
> programs called via (call_subr_addr) with the address returned by a LOAD
> macro?
>

​add_entry:

https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.ceea200/cladde.htm
​



>
> Peter
>


-- 
"Irrigation of the land with seawater desalinated by fusion power is
ancient. It's called 'rain'." -- Michael McClary, in alt.fusion

Maranatha! <><
John McKown

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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Farley, Peter x23353
I thought I might need to use stert_seq and end_seq too.  Thanks for the advice.

However, I am running into a little roadblock at the moment.  I set things up 
copying some of the sample program ASMPIPI listed in the LE Pgmrs Guide, but 
without any fixed program name in the ceexptbl entry since the initialization 
macro cannot know what program(s) will be called:

PPTBLCEEXPIT  ,   PREINIT TABLE WITH INDEX 
 CEEXPITY 0,0 DYNAMICALLY LOADED RTNE, CALL-BY-ADDR
*  
 CEEXPITS ,   END OF PREINIT TABLE 

Neither (init_sub) nor (init_sub_dp) will succeed with this ceexptbl, both of 
them fail with RC=8.

Is there any way to set up a totally dynamic ceexptbl, with no actual entries 
for any LE-enabled HLL program, and still be able to initialize successfully?  
If not, does it matter if the only entry in the ceexptbl is a dummy HLL program 
that will NOT be invoked via that table, but only other programs called via 
(call_subr_addr) with the address returned by a LOAD macro?

Peter

-Original Message-
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Bill Woodger
Sent: Thursday, March 16, 2017 3:24 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Need help understanding use of CEEPIPI from non-LE assembler main 
programs

You have an Assembler program, and once it has called and returned from one 
COBOL program, it goes on to call and return from other COBOL programs (or 
other invocations of the same program)?

You'll want to look at start_seq and end_seq.
--


This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.


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


Re: Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Bill Woodger
You have an Assembler program, and once it has called and returned from one 
COBOL program, it goes on to call and return from other COBOL programs (or 
other invocations of the same program)?

You'll want to look at start_seq and end_seq.

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


Need help understanding use of CEEPIPI from non-LE assembler main programs

2017-03-16 Thread Farley, Peter x23353
Hi All,

We are preparing for the transition from COBOL V4.2 to COBOL V5.2.  Existing 
non-LE-enabled assembler main programs need to change from using IGZERRE 
initialization to using CEEPIPI enclave initialization to allow calling 
multiple COBOL subroutines, sometimes calling a subroutine more than once per 
batch step execution.

We do know that the assembler main programs really ought to be converted to 
LE-enabled to make things better, but that is beyond available programmer 
resources and time at the moment.  It may be scheduled later, but in the 
meantime we need a quicker solution.  We already use a set of assembler macros 
to hide the initialization and loading and calling of COBOL programs from 
non-LE-enabled main programs, so I am modifying the macros to use CEEPIPI rules 
instead so that programs can just be re-translated to accomplish the change.

Now to my questions:

The (call_sub) function of CEEPIPI to call a subroutine states that "The next 
call to (call_sub) initializes a new enclave", which is obviously CPU expensive.

The (call_sub_addr) function of CEEPIPI to call a subroutine does not have this 
statement.  Does this mean I can use the following sequence of calls and only 
have one enclave created and reused for each called subroutine?

CEEPIPI ( (init_sub), . . . )

LOAD EP=SUBPGM1
Save address for CEEPIPI
LOAD EP=SUBPGM2
Save address for CEEPIPI

CEEPIPI ( (call_sub_addr), (addr-for-SUBPGM1), . . . )

CEEPIPI ( (call_sub_addr), (addr-for-SUBPGM2), . . . )

Etc.

CEEPIPI ( (term), . . . )

Or do I need to use the CEEPIPI initialization function (init_sub_dp) instead 
of (init_sub) to accomplish multiple (call_sub_addr)'s with only one enclave 
initialization?

TIA for your help in understanding the rules here.

Peter
--


This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.

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