I suggest investigating the CALLBACKANY compiler option.
On 17/07/2012, at 8:13 AM, Charles Mills <[email protected]> wrote:
> Does anyone know the answer to this?
>
> I have an assembler function whose address I know at run-time in C++. I
> define and store it like this
>
> void __cdecl (*entryPoint)(const char *);
> entryPoint = (void (__cdecl *)(const char *))(myVoidStar);
> printf("entryPoint is %p\n", entryPoint);
>
> Printf prints the correct address (DFFD058, FWIW) so I am good so far.
>
> I then call it with
> (entryPoint)(record);
>
> and I end up S0C6ing out in the weeds at 27F5023B.
>
> Here is the pseudo-assembler from the C++ compiler.
>
> 4400 C1AC 000114 | EX r0,HOOK..STMT
> 5870 D0C0 000114 | L r7,record(,r13,192)
> 5810 D0C8 000114 | L r1,#CEECAACRENT_2(,
> 5880 35DA 000114 | L r8,=Q(entryPoint)(,
> 4118 1000 000114 | LA r1,=Q(entryPoint)(r
> 5810 1000 000114 | L r1,entryPoint(,r1,0
> 58F0 1008 000114 | L r15,&EPA_&WSA(,r1,8
> 5800 100C 000114 | L r0,&EPA_&WSA(,r1,12
> 5000 C1F4 000114 | ST r0,_CEECAA_(,r12,50
> 4110 D098 000114 | LA r1,#MX_TEMP2(,r13,1
> 5070 D098 000114 | ST r7,#MX_TEMP2(,r13,1
> 4400 C1C0 000114 | EX r0,HOOK..CALLBGN
> 0DEF 000114 | BASR r14,r15
> 4400 C1C4 000114 | EX r0,HOOK..CALLRET
>
> Does anyone know what I should be declaring or doing differently?
>
> (If all else fails I will just write a stub in assembler to do this. I know
> how to L 15 BALR 14,15 in assembler <g>.)
>
> Charles
>
> ----------------------------------------------------------------------
> 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