Hi Paul, To link two object files together you feed the linker a source file that has statements comparable to what you would input to the binder on z/OS. Use INCLUDE statements etc.
The .obj files that z390 produces should be portable to z/OS. But they won't run unless you assemble with the correct system maclibs for the target OS. Beware of legal issues! I doubt that the load module format is documented anywhere. Someone would have reverse engineer from the source in the z390 repository. If you have not done so already, you may want to look into the z390 test facility, zCics, zVSAM, and zSort. I'll be happy to answer other questions you may have, but let's take them off this list, please. Kind regards, Abe === On 16/08/2025 10:01, Paul Edwards wrote: > Hi Abe. > > Indeed, I have been using z390 for the last 2 days and it's > going pretty well. > > Still waiting for my membership to be approved here: > > https://groups.google.com/g/z390 > > I also couldn't find out how to link two object files together. > > But that's OK, because I will be using pdld for that anyway. > > > As such, I have created what is hopefully a z/OS load module here: > > https://pdos.org/rm64test.zip > > There is a doit.bat that shows how it was created. > > It uses a freshly-built pdld.exe to create the pdptest.exe z/OS > load module (in iebcopy + ftp rdw format). > > Hopefully this is a valid RMODE 64 load module, if someone > would like to try it out. > > > I also raised (at github) an unrelated issue I found on the way. > > Also I would like to know where the 390 executable format is documented, > mainly the first 32 bytes: > > C:\z390_1.8.3\demo>hexdump hello.390 > 000000 31303032 54463F3F 000000A0 00000000 1002TF??........ > 000010 00000000 90ECD00C 45FF0068 00000000 ........E..h.... > 000020 00000000 00000000 00000000 00000000 ................ > 000030 00000000 00000000 00000000 00000000 ................ > 000040 00000000 00000000 00000000 00000000 ................ > 000050 00000000 00000000 00000000 00000000 ................ > 000060 00000000 C4C5D4D6 40404040 F0F861F1 ........@@@@..a. > 000070 F661F2F5 F1F54BF5 F9404040 50FD0008 .a....K..@@@P... > 000080 50DF0004 18DFA715 000A000F 0000C8C5 P............... > 000090 D3D3D640 E6D6D9D3 C4F60A23 41F00000 ...@.......#A... > 0000A0 58D0D004 58E0D00C 982CD01C 07FEF6F6 X...X....,...... > 0000B0 F6F6F6F6 .... > > C:\z390_1.8.3\demo> > > > Thanks. Paul. > > > > > On Sat, 16 Aug 2025 07:19:16 +0200, Abe Kornelis <[email protected]> wrote: > >> Paul, >> >> z390 has already been mentioned in this thread. >> There's a web site at www.z390.org - but it has not seen enough >> maintenance for quite a while, unfortunately. >> Current version can be obtained from github.com/z390development/z390 >> You can either clone the repo or download from the "Releases". >> >> Kind regards & Happy programming, >> Abe Kornelis >> ========== >> >> >> On 15/08/2025 05:38, Paul Edwards wrote: >>> On Thu, 14 Aug 2025 20:26:14 -0400, Joseph Reichman <[email protected]> >>> wrote: >>> >>> Hi Joseph. >>> >>> I am interested in RMODE 64 on z/OS too. And have >>> some questions too. >>> >>> >>> Page 196 shows that RMODE 64 exists as a concept: >>> >>> https://publib.boulder.ibm.com/epubs/pdf/iea2b2b1.pdf >>> >>> On page 199 I can see V() references in the RLD. >>> >>> Where are VD() references documented? >>> >>> >>> >>> >>>> It seems you can run a program that is rmode64 >>>> With synchx linkx and attachx >>> Does this mean that you can't go EXEC PGM= >>> and have the program potentially go above 4 GiB? >>> >>> >>> Page 291 shows that AMODE=64 exists, but not RMODE=64 >>> But perhaps if the RMODE is ANY, z/OS can further check >>> the internals of the load module and decide to locate >>> it above 4 GiB? >>> >>> >>> I don't have direct access to z/OS. Would someone be >>> able to assemble this (it may need corrections) and >>> give me the object code for ONE and TWO, plus the >>> resulting load module unloaded with IEBCOPY and >>> transferred with ftp binary with locsite rdw >>> >>> Thanks. Paul. >>> >>> >>> >>> //PDPMVS JOB CLASS=C,REGION=0K,TIME=1440 >>> //* >>> //PDPASM PROC LIST='NOLIST' >>> //ASM EXEC PGM=ASMA90, >>> // PARM='DECK,&LIST,TERM' >>> //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR,DCB=BLKSIZE=32720 >>> // DD DSN=&&amp;MACLIB,DISP=(OLD,PASS) >>> // DD DSN=SYS1.MODGEN,DISP=SHR >>> //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(20,10)) >>> //SYSUT2 DD UNIT=SYSALLDA,SPACE=(CYL,(20,10)) >>> //SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(20,10)) >>> //SYSTERM DD SYSOUT=* >>> //SYSPRINT DD SYSOUT=* >>> //SYSLIN DD DUMMY >>> //SYSGO DD DUMMY >>> //SYSPUNCH DD DSN=&&amp;OBJSET,UNIT=SYSALLDA,SPACE=(80,(9000,9000)), >>> // DISP=(MOD,PASS) >>> //* >>> // PEND >>> //CREATE EXEC PGM=IEFBR14 >>> //DD13 DD DSN=&&amp;LOADLIB,DISP=(,PASS), >>> // DCB=(RECFM=U,LRECL=0,BLKSIZE=6144), >>> // SPACE=(CYL,(10,10,20)),UNIT=SYSALLDA >>> //DD14 DD DSN=&&amp;MACLIB,DISP=(,PASS), >>> // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160), >>> // SPACE=(CYL,(10,10,20)),UNIT=SYSALLDA >>> //* >>> //ONE EXEC PDPASM,LIST='LIST' >>> //SYSIN DD * >>> *********************************************************************** >>> * * >>> * This program written by Paul Edwards. * >>> * Released to the public domain * >>> * * >>> *********************************************************************** >>> *********************************************************************** >>> * * >>> * ONE - call TWO to set R15 * >>> * * >>> *********************************************************************** >>> * >>> PRINT GEN >>> * YREGS was not part of the SYS1.MACLIB shipped with MVS 3.8j >>> * so may not be available, so do our own defines instead. >>> * YREGS >>> R0 EQU 0 >>> R1 EQU 1 >>> R2 EQU 2 >>> R3 EQU 3 >>> R4 EQU 4 >>> R5 EQU 5 >>> R6 EQU 6 >>> R7 EQU 7 >>> R8 EQU 8 >>> R9 EQU 9 >>> R10 EQU 10 >>> R11 EQU 11 >>> R12 EQU 12 >>> R13 EQU 13 >>> R14 EQU 14 >>> R15 EQU 15 >>> SUBPOOL EQU 0 >>> CSECT >>> * >>> ENTRY ONE >>> ONE DS 0H >>> SAVE (14,12),,ONE >>> LR R10,R15 >>> USING ONE,R10 >>> LR R9,R13 >>> LA R13,SAVEAREA >>> LG R15,=VD(TWO) >>> LGR R0,R14 >>> BALR R14,R15 >>> LGR R14,R0 >>> LR R13,R9 >>> * LA R15,0 >>> RETURN (14,12),RC=(15) >>> SAVEAREA DS 19F >>> END >>> /* >>> //TWO EXEC PDPASM,LIST='LIST' >>> //SYSIN DD * >>> *********************************************************************** >>> * * >>> * This program written by Paul Edwards. * >>> * Released to the public domain * >>> * * >>> *********************************************************************** >>> *********************************************************************** >>> * * >>> * return 5 in R15 * >>> * * >>> *********************************************************************** >>> * >>> PRINT GEN >>> * YREGS was not part of the SYS1.MACLIB shipped with MVS 3.8j >>> * so may not be available, so do our own defines instead. >>> * YREGS >>> R0 EQU 0 >>> R1 EQU 1 >>> R2 EQU 2 >>> R3 EQU 3 >>> R4 EQU 4 >>> R5 EQU 5 >>> R6 EQU 6 >>> R7 EQU 7 >>> R8 EQU 8 >>> R9 EQU 9 >>> R10 EQU 10 >>> R11 EQU 11 >>> R12 EQU 12 >>> R13 EQU 13 >>> R14 EQU 14 >>> R15 EQU 15 >>> SUBPOOL EQU 0 >>> CSECT >>> * >>> ENTRY TWO >>> TWO DS 0H >>> LA R15,5 >>> BR R14 >>> END >>> /* >>> //* >>> //LKED EXEC PGM=IEWL,PARM='MAP,LIST,AMODE=64,RMODE=ANY' >>> //SYSLIN DD DSN=&&amp;OBJSET,DISP=(OLD,DELETE) >>> //*SYSLIB not needed >>> //SYSLMOD DD DSN=&&amp;LOADLIB(PDPTEST),DISP=(OLD,PASS) >>> //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(2,1)) >>> //SYSPRINT DD SYSOUT=* >>> //SYSABEND DD SYSOUT=* >>> //SYSIN DD * >>> /* >>> //* >>> //PDPTEST EXEC PGM=PDPTEST,PARM='', >>> // COND=(4,LT,LKED) >>> //STEPLIB DD DSN=&&amp;LOADLIB,DISP=(OLD,PASS) >>> //SYSPRINT DD SYSOUT=* >>> //SYSTERM DD SYSOUT=* >>> //SYSABEND DD SYSOUT=* >>> //SYSIN DD DUMMY >>> //* >>> // >>> >>> ---------------------------------------------------------------------- >>> For IBM-MAIN subscribe / signoff / archive access instructions, >>> send email to [email protected] with the message: INFO IBM-MAIN >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, >> send email to [email protected] with the message: INFO IBM-MAIN > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
