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