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 <[email protected]> On Behalf Of Joseph Reichman Sent: Tuesday, October 29, 2019 11:32 AM To: [email protected] 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 <[email protected] > 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 >> <[email protected]> >> 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 <[email protected]> On >> Behalf Of scott Ford >> Sent: Tuesday, October 29, 2019 9:35 AM >> To: [email protected] >> 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 >> <[email protected]> >> 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 <[email protected]> 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 <[email protected]> On >>> Behalf Of Joe Monk >>>>> Sent: Tuesday, October 29, 2019 3:34 AM >>>>> To: [email protected] >>>>> 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 >>>>> <[email protected]> >>>>> 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 <[email protected]> On >>>>>> Behalf Of Jon Perryman >>>>>> Sent: Monday, October 28, 2019 8:38 PM >>>>>> To: [email protected] >>>>>> 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 >>>>>> < [email protected] <mailto:[email protected]> > 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 [email protected] with the message: INFO IBM-MAIN
