On 2019-10-29 11:50 PM, Joseph Reichman wrote:
Peter thanks so much if I need a C main then this exercise in CELQPIPI is
irrelevant
We use CEEPIPI and don't use main. We use subroutines with the following
(this is C++ code)
#pragma linkage(FUWIPSTR, fetchable) // required for PIPI init_sub/call_sub
Now I need to figure out how to call a C main from non LE assembler as all of
my code is that
On Oct 29, 2019, at 11:45 AM, Farley, Peter x23353
<peter.far...@broadridge.com> wrote:
Joe,
From my somewhat limited experience with CEEPIPI (only to enable 31-bit COBOL
calls from 31-bit non-LE assembler subroutines called from 31-bit COBOL main),
it looks to me like your 64-bit assembler code needs to set up a CEEPIPI
INIT_SUB not an INIT_MAIN since you are calling the DLL as a subroutine.
You may also need to use a "stub" C main program to just call your assembler
64-bit code and then exit just to establish the C main environment, since as you found
the CELQPRLG doesn't allow you to make your assembler code look like a 64-bit C main.
HTH
Peter
-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of
Joseph Reichman
Sent: Tuesday, October 29, 2019 11:32 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Return code X'20' 32 from CELQPIPI INIT_MAIN
It was my understanding after a lot of digging that I couldn’t call 64 bit C
from assembler because the 64 bit LE assembler prologue macro CELQPRLG doesn’t
support main like CEEENTRY and there for the LE environment isn’t established I
just thought that CELQPIPI would do that for assembler but am having a hard
time getting that working with a 64 bit LE assembler Thanks
On Oct 29, 2019, at 11:26 AM, scott Ford <idfli...@gmail.com
wrote:
Joe,
I havent dont 64bit C ..but I would be surprised the guys here on the
listserv havent .
I understand 64bit in theory but working as a ISV my mgmt is stuck in
the Cobol back woods.
Scott
On Tue, Oct 29, 2019 at 9:42 AM Joseph Reichman
<reichman...@gmail.com>
wrote:
I am trying to call a AMODE 64 bit C DLL (exported function) from
assembler and because CELQPRLG (LE 64 bit prologue) doesn't support
main like CEEENTRY (MAIN=YES) Cannt seem do it I thought the
INIT_MAIN function for CELQPIPI would do the trick for me
Thanks
-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On
Behalf Of scott Ford
Sent: Tuesday, October 29, 2019 9:35 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Return code X'20' 32 from CELQPIPI INIT_MAIN
Joe:
What are you trying to accomplish exactly so we can better assist you ?
Scott
On Tue, Oct 29, 2019 at 8:52 AM Joseph Reichman
<reichman...@gmail.com>
wrote:
I guess I could do a series of calls to the exports things is they
all share a global area
Thanks
On Oct 29, 2019, at 8:47 AM, David Crayford <dcrayf...@gmail.com> wrote:
Why do you need a DLL? Can you just use PIPI to call a static program?
On 2019-10-29 8:15 PM, Joseph Reichman wrote:
This is add_entry I was using INIT_SUB, INIT_MAIN regardless
that’s a
good idea to try to use add_entry
After init_sub/MAIN
This is the program I trying to initiate as in Assembler LE 64 bit
prolog CELQPRLG does not have a main and I cannot call a 64 C DLL I
was thinking CELQPIPI would resolve these issues
Thanks
TEST64A CELQPRLG FETCHABLE=RENT,PSECT=MYPSECT,ENTNAME=TEST64A
YREGS
* LOAD EP=CEETEST
* LR R15,R0
* BASR R14,R15
CELQCALL opendata,(SYSADATA),WORKREG=10
XR R15,R15
CELQEPLG
SYSADATA DC CL8'SYSADATA'
* CEEPDDA opendata,SCOPE=IMPORT
PARM1 DC A(COMMANDS)
PARM2 DC A(FEEDBACK)
DS 0H
DC H'9'
COMMANDS DC C'AT ENTRY '
FEEDBACK DS CL12
CEEDSA SECTYPE=XPLINK PING OF THE DYNAMIC SAVE AREA
CEECAA MAPPING OF THE COMMON ANCHOR AREA
*LLPPA CEEPPA
WORKAREA DSECT
DS 0D
WORKSIZE EQU *-WORKAREA
* CEEEDB MAPPING OF THE ENCLAVE DATA BLOCK
END
-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On
Behalf Of Joe Monk
Sent: Tuesday, October 29, 2019 3:34 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Return code X'20' 32 from CELQPIPI INIT_MAIN
So .... according to:
"20 The routine_name contains only blanks and the routine_entry
was
zero.
The PreInit table was not updated."
https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos
.v
2r1.ceeam00/ceeam141.htm
Joe
On Mon, Oct 28, 2019 at 8:55 PM Joseph Reichman
<reichman...@gmail.com>
wrote:
The listing has the SYSSTATE set AMODE 64 The LISTPSW
indicates botH the EA and BA BITS of the PSW as one indicating
AMODE 64 at location F8 right before the call CELQPIPI
CEEWQPIP: LOADing CELQPIPI
CEEWQPIP: Doing CELQPIPI INIT_MAIN IKJ57024I AT +F6 TEST istpsw
IKJ57652I PSW LOCATED AT 8BA068
XRXXXTIE KEY XMWP AS CC PROGMASK EA BA INSTR ADDR
00000111 8 1101 00 00 0000 1 1
1F7010F6
TEST
t +f8
TEST
o
CEEWQLOD: Called to LOAD "TEST64A "
IKJ57024I AT +F8
TEST
The program is AMODE 64
________ TEST64A 00000D30 0001D6 00
64
ANY
This is a listing of the table
+CEEXPTBL DC CL8'CELQPTBL' Eyecatcher
+ DC A(CELQPIT0058) Number of e
+ DC F'16' Entry size
+ DC F'100' Version
ice routines
Source Statement HLASM R6
+ DC AL1(0)
+ DC 3X'00'
CELQPITY TEST64A,0 ically load CE
+ DC CL8'TEST64A' Name, set t
+ DC AD(0) Load dblwd
CELQPITS , End of CELQPIP
+CELQPIT0058 EQU 1 Number of e
*
Here is the listing of TEST64A
TEST64A CELQPRLG FETCHABLE=RENT,PSECT=MYPSECT,ENTNAME=TEST64A
YREGS
* LOAD EP=CEETEST
* LR R15,R0
* BASR R14,R15
CELQCALL opendata,(SYSADATA),WORKREG=10
XR R15,R15
CELQEPLG
SYSADATA DC CL8'SYSADATA'
* CEEPDDA opendata,SCOPE=IMPORT
PARM1 DC A(COMMANDS)
PARM2 DC A(FEEDBACK)
Here is the link
For TEST64A
//*****************************************************************
//* LINK EDIT THE PROGRAM *
//***************************************************************
*
*
//STEP0200 EXEC PGM=IEWL,COND=(0,LT,STEP0100),
// PARM='AMODE(64),LIST,MAP,XREF,CASE=MIXED,DYNAM=DLL'
//SYSPRINT DD SYSOUT=*
//SYSDEFSD DD SYSOUT=*
//OBJ DD DSN=&&HEXOBJ,DISP=(OLD,PASS)
//SYSLIB DD DISP=SHR,DSN=IBMUSER.DBGR.DLLLIB
// DD DISP=SHR,DSN=CEE.SCEEBND2
// DD DISP=SHR,DSN=CEE.SCEELKED
//SYSLMOD DD DISP=SHR,DSN=IBMUSER.DBGR.DLLLIB
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(3,2)),DSN=&SYSUT1
//SYSPRINT DD SYSOUT=*,DCB=(RECFM=FB,BLKSIZE=3509)
//SYSLIN DD *
IMPORT CODE64,'SYSADATA','opendata'
INCLUDE OBJ(TEST64A)
ENTRY TEST64A
NAME TEST64A(R)
84 *
85
*********************************************************************
*
86 *
00000000 00000000 000007B0 87 CEEWQPIP CSECT ,
88 CEEWQPIP AMODE
64
89 CEEWQPIP RMODE
31
90 SYSSTATE
AMODE64=YES
91+* THE VALUE
OF
SYSSTATE IS NOW SET TO ASCENV=P AMODE64=YES ARCHLX01-SYSSTATE
+ VL=2
OSREL=00000000
00000000 010E 92 SAM64 ,
93 *
94 *
95 * Standard
64-bit
entry linkage
96 *
-----------------------------
97 *
00000002 EBEC D008 0024 00000008 98 STMG
R14,R12,SAVF4SAG64RS14-SAVF4SA(R13) Save caller regs
00000008 0DB0 99 BASR
R11,0
Set up basereg
R:B 0000000A 100 USING
*,R11
Addressabliity
101 GETMAIN
RU,LV=DSA_L Obtain DSA
0000000A 103+ DS 0H
@P5C 01-GETMAIN
0000000A 104+IHB0002C DS 0H
01-GETMAIN
0000000A 5800 B36E 00000378 105+ L
0,=A(DSA_L) LOAD LENGTH 01-GETMAIN
0000000E 58F0 B372 0000037C 106+ L
15,=AL1(B'00000000',(0),(0),B'00000010') X01-GETMAIN
+
LOAD GETMAIN PARMS
00000012 1B11 107+ SR 1,1
ZERO RESERVED REG 1 01-GETMAIN
00000014 0A78 108+ SVC 120
ISSUE GETMAIN SVC 01-GETMAIN
00000016 E3D0 1080 0024 00000080 109 STG
R13,SAVF4SAPREV-SAVF4SA(,R1) Set backchain
i0000001C E310 D088 0024 00000088 110 STG
R1,SAVF4SANEXT-SAVF4SA(,R13) Set fwd chain
Sample AMODE64 PreInit DRIVER with service routines
Page 5
Active Usings: CEEWQPIP+X'A',R11
Loc Object Code Addr1 Addr2 Stmt Source Statement
HLASM R6.0 2019/10/28 20.02
00000022 D203 D004 B376 00000004 00000380 111 MVC
SAVF4SAID-SAVF4SA(R4,R13),=A(SAVF4SAID_VALUE) "F4SA"
00000028 B904 00D1 112 LGR
R13,R1 Set up DSAreg
R:D 00000000 113 USING
DSA,R13 Addressability
114 *
115 *
116 * Issue LOAD
for
CELQPIPI (will ABEND if LOAD fails)
117 *
-----------------------
118 *
119 WTO
'CEEWQPIP: LOADing CELQPIPI',ROUTCDE=11
0000002C 121+ CNOP 0,4
01-WTO
0000002C A715 0013 00000052 122+ BRAS
1,IHB0004A BRANCH AROUND MESSAGE @LCC 01-WTO
00000030 001E 123+ DC
AL2(30)
TEXT LENGTH @YA17152 01-WTO
00000032 8000 124+ DC
B'1000000000000000' MCSFLAGS 01-WTO
00000034 C3C5C5E6D8D7C9D7 125+ DC
C'CEEWQPIP: LOADing CELQPIPI' X01-WTO
0000003C 7A40D3D6C1C48995 +
MESSAGE TEXT @L6C
0000004E 0000 126+ DC
B'0000000000000000' DESCRIPTOR CODES 01-WTO
00000050 0020 127+ DC
B'0000000000100000' ROUTING CODES 01-WTO
00000052 128+IHB0004A DS 0H
01-WTO
00000052 0A23 129+ SVC 35
ISSUE SVC 35 @L6A 01-WTO
130 *
131 LOAD
EP=CELQPIPI LOAD LE main module
00000054 133+ CNOP 0,4
@L2P 01-LOAD
00000054 A7F5 0006 00000060 134+ BRAS
15,LOAD2_0006 BRANCH AROUND CONSTANT(S) 01-LOAD
00000058 135+LD2_0006 DS 0H
01-LOAD
00000058 C3C5D3D8D7C9D7C9 136+LE2_0006 DC
CL8'CELQPIPI' ENTRY POINT NAME 01-LOAD
00000060 137+LOAD2_0006 DS 0H
01-LOAD
00000060 4100 F000 00000000 138+ LA
0,LE2_0006-LD2_0006(,15) ADDR OF PARAMETER 01-LOAD
00000064 1B11 139+ SR 1,1
SHOW NO DCB PRESENT 01-LOAD
00000066 0A08 140+ SVC 8
01-LOAD
00000068 E300 B366 0080 00000370 141 NG
R0,=X'00000000FFFFFFFE' Clear low (AMODE64) bit
0000006E E300 D090 0024 00000090 142 STG
R0,CELQPIPI_EP Save CELQPIPI E.P. Address
143 *
144 *
145 * Set up
Service
Routine Vector and parm
146 *
--------------------------------------
147 *
00000074 D24F D0E0 B696 000000E0 000006A0 148 MVC
SV_DYNAMIC,SV_STATIC Copy over into DSA
0000007A 41F0 D1E8 000001E8 149 LA
R15,USER_AREA Point to 1000-byte user area
0000007E E3F0 D0E8 0024 000000E8 150 STG
R15,SV_UWORD SV user word -> user area
00000084 41F0 D0E0 000000E0 151 LA
R15,SV_DYNAMIC Address of modifiable SV
00000088 E3F0 D0A0 0024 000000A0 152 STG
R15,SERVICE_RTNS Save as parm for INIT_MAIN
153 *
154 *
155 * Do
CELQPIPI
INIT_MAIN
156 *
---------------------
157 *
158 WTO
'CEEWQPIP: Doing CELQPIPI INIT_MAIN',ROUTCDE=11
0000008E 0700 160+ CNOP 0,4
01-WTO
00000090 A715 0017 000000BE 161+ BRAS
1,IHB0008A BRANCH AROUND MESSAGE @LCC 01-WTO
00000094 0026 162+ DC
AL2(38)
TEXT LENGTH @YA17152 01-WTO
00000096 8000 163+ DC
B'1000000000000000' MCSFLAGS 01-WTO
00000098 C3C5C5E6D8D7C9D7 164+ DC
C'CEEWQPIP: Doing CELQPIPI INIT_MAIN' X01-WTO
000000A0 7A40C49689958740 +
MESSAGE TEXT @L6C
000000BA 0000 165+ DC
B'0000000000000000' DESCRIPTOR CODES 01-WTO
i000000BC 0020 166+ DC
B'0000000000100000' ROUTING CODES 01-WTO
Sample AMODE64 PreInit DRIVER with service routines
Page 6
Active Usings: CEEWQPIP+X'A',R11 DSA,R13
Loc Object Code Addr1 Addr2 Stmt Source Statement
HLASM R6.0 2019/10/28 20.02
000000BE 167+IHB0008A DS 0H
01-WTO
000000BE 0A23 168+ SVC 35
ISSUE SVC 35 @L6A 01-WTO
169 *
000000C0 B982 0000 170 XGR
R0,R0
000000C4 E3F0 D090 0004 00000090 171 LG
R15,CELQPIPI_EP Address of CELQPIPI E.P.
172 *
174 CALL
(15),
X
(INIT_MAIN, CELQPIPI INIT_MAIN request X
CEEXPTBL_ADDR, Address of CELQPIPI table X
SERVICE_RTNS, Address of service rtn vector X
TOKEN),
Token from INIT_MAIN X
MF=(E,CALL_PL)
000000CA 176+ DS 0H
01-CALL
000000CA 4110 D138 00000138 181+ LA
1,CALL_PL LOAD PARAMETER REG 1 03-IHBINNRR
000000CE 4100 B386 00000390 182+ LA
0,INIT_MAIN PICKUP PARAMETER 02-IHBOPLTX
000000D2 E300 1000 0024 00000000 183+ STG
0,0(0,1)
STORE INTO PARAM. LIST 02-IHBOPLTX
000000D8 4100 B57E 00000588 184+ LA
0,CEEXPTBL_ADDR PICKUP PARAMETER 02-IHBOPLTX
000000DC E300 1008 0024 00000008 185+ STG
0,8(0,1)
STORE INTO PARAM. LIST 02-IHBOPLTX
000000E2 4100 D0A0 000000A0 186+ LA
0,SERVICE_RTNS PICKUP PARAMETER 02-IHBOPLTX
000000E6 E300 1010 0024 00000010 187+ STG
0,16(0,1) STORE INTO PARAM. LIST 02-IHBOPLTX
000000EC 4100 D098 00000098 188+ LA
0,TOKEN
PICKUP PARAMETER 02-IHBOPLTX
000000F0 E300 1018 0024 00000018 189+ STG
0,24(0,1) STORE INTO PARAM. LIST 02-IHBOPLTX
000000F6 05EF 190+ BALR
14,15
BRANCH TO ENTRY POINT 01-CALL
191 *
192 *
193 * Check
results
of INIT_MAIN
194 *
000000F8 B902 002F 195 LTGR
-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On
Behalf Of Jon Perryman
Sent: Monday, October 28, 2019 8:38 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Return code X'20' 32 from CELQPIPI INIT_MAIN
The CALL macro supports 32 and 64 bit parm addresses. I believe
it defaults to 32 bit and the SYSSTATE macro is used to change it.
Does CELQPITY require 64 bit parm list? If so, make sure you have
SYSSTATE prior to the call. Also make sure SYSSTATE is before the
CALL MF=L.
I've never used TEST so I'm not familiar with the specifics. Your
listing below seems to show it running the program with AMODE=31
and the L commands only display fullwords. Did you switch to
AMODE64
before calling CELQPITY?
Jon.
On Monday, October 28, 2019, 05:08:58 PM PDT, Joseph Reichman
< reichman...@gmail.com <mailto:reichman...@gmail.com> > wrote:
Just tried it with the service_rtns parm exactly as it was in the
sample with the exception That the CELQPITY points to my 64 bit
assembler program TEST64A program and do X'20' DECIMAL 32
CALL (15),
X
(INIT_MAIN, CELQPIPI INIT_MAIN request X
CEEXPTBL_ADDR, Address of CELQPIPI table X
SERVICE_RTNS, Address of service rtn vector
X
TOKEN), Token from INIT_MAIN
X
MF=(E,CALL_PL)
I traced the CEEWQLOAD it loaded TEST64A which had bit 63 as a
one After the load
IKJ57382I ENTRY POINT AT 1F790140 AMODE=31 TEST L +F6
+F6 05EFB902 TEST AT +F6 TEST AT +F8 TEST GO
CEEWQPIP: LOADing CELQPIPI
CEEWQPIP: Doing CELQPIPI INIT_MAIN IKJ57024I AT +F6 TEST GO
CEEWQLOD: Called to LOAD "TEST64A " IKJ57024I AT +F8 TEST L 15R
15R
00000020
-----------------------------------------------------------------
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
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN