31-bit pointers can be declared in C using this syntax:

char * __ptr32 ptr1;

Not sure if C++ will allow that, but if it does you can set your pointers up 
that way and pass them as 4-byte values instead of 8-byte values.  You can 
declare pointer arguments to your assembler routine in the same way.

I second John M.'s recommendation to use extern "C" for your assembler program 
declaration and the LIST compiler option to see exactly how the CALL to your 
assembler routine is bring set up.  That will tell you quite a lot of what you 
need to know.

HTH

Peter

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf 
Of Pierre Fichaud
Sent: Wednesday, May 29, 2019 10:52 AM
To: [email protected]
Subject: 64-bit C++ calling assembler

I have an assembler routine that gets called by 64-bit C++. The assembler 
routine uses CELQPRLG and CELQEPLG and calls DSNALI. The C++ function prototype 
has a variable number of arguments, the first being the number of parameters 
that follow in the argument list. The C++ program passes the count of 7 
followed by 7 31-bit pointers. These were dumped prior to the call. I forced an 
S0C3 at entry to the assembler routine. R01 contains a valid 64-bit address. It 
points to a doubleword containing 7. But the 7 31-bit addresses do NOT follow 
the value of 7. They are at +A8 from r01. I want to move the pointers into 
31-bit memory and call DSNALI to do a CONNECT (Hence a prior post about DB2 
manuals). I can't figure out what I've done wrong. There is precious little doc 
on this and it's in the LE bookshelf, LE Programming Guide for 64-bit Virtual 
Addressing Mode. Is there other doc somewhere else ? I've looked but can't find 
anything.

R01 points has 50_082FEBF8 and the 7 addresses are at 82FECA0.

 _82FEBF8                         00000000   00000007   !         ........ !
 _82FEC00   00000000   2B0DBB88   00000050   29E54920   ! .......h...&.V.. !
 _82FEC10   00000050   082FED20   00000000   00000000   ! ...&............ !
 _82FEC20   00000000   297ED1C6   00000050   29E55330   ! .....=JF...&.V.. !
 _82FEC30   00000000   2B1D1B60   00000000   2B0DB74A   ! .......-.......Ä !
 _82FEC40   00000000   2B0DBB88   00000000   281B72A0   ! .......h........ !
 _82FEC50   00000000   2B0DCD88   00000050   29D29640   ! .......h...&.Ko  !
 _82FEC60   00000050   29E2EB60   00000000   25218CF0   ! ...&.S.-.......0 !
 _82FEC70   00000000   2B14D808   00000000   2B1D152A   ! ......Q......... !
 _82FEC80   00000000   2B0DBB88   00000000   281B72A0   ! .......h........ !
 _82FEC90   00000000   2B0DCD88   00000050   29D29640   ! .......h...&.Ko  !
 _82FECA0   00000000   297ED0A2   00000000   297ED198   ! .....=üs.....=Jq !
 _82FECB0   00000000   297ED180   00000000   297ED184   ! .....=J......=Jd !
 _82FECC0   00000000   297ED188   00000000   297ED190   ! .....=Jh.....=J. !
 _82FECD0   00000000   297ED194   00000000   00000000   ! .....=Jm........ !

Registers at abend are :

    General purpose register values
       0-1  00000000_297ED194  00000050_082FEBF8
       2-3  00000000_297ED0A2  00000000_297ED198
       4-5  00000050_082FD940  00000000_00000000
       6-7  00000000_2B14B778  00000000_2B1D9088
       8-9  00000000_2B1D971E  00000000_281B72A0
      10-11 00000000_2B1D9B58  00000050_29E55330
      12-13 00000000_297ED188  00000000_297ED184
      14-15 00000000_297ED180  00000000_24D50010

Thanks in advance, Pierre.
--

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

Reply via email to