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

Reply via email to