@Peter, I went around on the R0 question here a couple of years ago.

- No, I don't think there is a reliable way to get the entry R13 from within 
the C/C++ code. Obviously, if you could, then any other register is trivial.

- Yes, people suggested inline assembler. I rejected that approach -- it may be 
completely viable but I rejected it -- because

a. I am just not a fan of inline assembler. Call it personal preference. I 
think the syntax seems kludgey. I prefer an external module written in "real" 
assembler. I fully accept that this is just my personal opinion and others who 
think otherwise are just as valid.
b. IIRC the logic was a little bit unsupported. XLC is stable now, so it would 
probably be safe, but for me that was another nail in the coffin of the in-line 
assembler approach.

The code is exactly 11 executable instructions, four of them because I set up 
an eyecatcher that is not really necessary.

I do it without a save area. I branch to the C code with the assumption that 
the C code will ultimately return to *my caller* and not to me.

FWIW, I pass R0 in the EVALBLOCK data area, a totally "safe" spot that does not 
require a GETMAIN.

Charles

On Wed, 15 Nov 2023 17:54:44 +0000, Farley, Peter <peter.far...@broadridge.com> 
wrote:

>Isn’t there is some C library function (maybe unique to XLC/C++) that lets you 
>get the value of R13 (current DSA pointer)?  With that pointer value in hand, 
>couldn’t one chain up the DSA stack to get to the saved registers at entry, or 
>is that not possible?
>
>At worst, an inline ASM routine to copy the value of the current R13 to a C 
>pointer variable, then chain up the DSA stack?
>
>Peter
>
>From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of 
>Charles Mills
>Sent: Wednesday, November 15, 2023 12:39 PM
>To: IBM-MAIN@LISTSERV.UA.EDU
>Subject: Re: External Functions in C on z/OS
>
>
>I see, in my C++ projects, EFPL, ENVB, EVALB and SHVB structs that appear to 
>me to have been produced from IBM macros by the EDCDSECT tool.
>
>
>
>Have you looked for the IRX macros in SYS1.MACLIB?
>
>
>
>Are you familiar with EDCDSECT?
>
>
>
>Slightly changing the subject, to interface with ehe Rexx environment from a 
>called function you will need the entry R0, I found no great way to get that. 
>I had to write a tiny front end in assembler that passes R0 to a C/C++ main().
>
>
>
>Charles
>
>
>
>On Wed, 15 Nov 20 3 10:57:14 -0600, Eric Erickson <esf...@windstream.net> 
>wrote:
>
>
>
>>I've written quite a few callable external funitions for Rexx over the years. 
>>On z/OS I've always used assembler as we needed to access system services for 
>>a variety of tasks. I've written them in C for other platforms (OS/2 & 
>>Windows) over the years. I need to write some on z/OS, but I want to use C, 
>>but can not seem to find any examples or header files for the Rexx Control 
>>Blocks. I can't believe nobody has done this over the years? Is it even 
>>supported?
>
>
>
>--
>
>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

Reply via email to