The programs tranmain (Figure 1) and trandll (Figure 2 ) were used to produce a Language Environment dump. The Language Environment dump produced by running these program is shown in Example dump of calling between XPLINK and non-XPLINK programs. The dump shows XPLINK-compiled routines calling NOXPLINK-compiled routines, and NOXPLINK-compiled routines calling XPLINK-compiled routines. The program tranmain was compiled XPLINK and trandll was compiled NOXPLINK. Each was link-edited as a separate program object with the sidedeck from the other. Explanations for some of the sections are in Finding XPLINK information in a Language Environment dump.
#pragma runopts(TRACE(ON,1M,NODUMP,LE=1),XPLINK(ON),TERMTHDACT(UADUMP))
#include <stdio.h>
#pragma export(tran2)
int tran1(int, int, int, long double, int);
int tran3(int, int, int, long double, int);
void main(void) {
int parm1 = 0x11111111;
int parm2 = 0x22222222;
int parm3 = 0x33333333;
long double parm4 = 1234.56789;
int parm5 = 0x55555555;
int retval;
printf("Main: Call Tran1\n");
retval = tran1(parm1,parm2,parm3,parm4,parm5);
printf("Main: Return value from Tran1 = %d\n",retval);
}
int tran2(int parm1,int parm2,int parm3,long double parm4,int parm5) {
int retval;
printf("Tran2: Call Tran3\n");
retval = tran3(parm1,parm2,parm3,parm4,parm5);
printf("Tran2: Return value from Tran3 = %d\n",retval);
return retval;
}
#include <stdio.h>
#include <ctest.h>
#include <leawi.h>
#pragma export(tran1)
#pragma export(tran3)
int tran2(int, int, int, long double, int);
int tran1(int parm1,int parm2,int parm3,long double parm4,int parm5) {
int retval;
printf("Tran1: Call Tran2\n");
retval = tran2(parm1,parm2,parm3,parm4,parm5);
printf("Tran1: Return value from Tran2 = %d\n",retval);
return retval;
}
int tran3(int parm1,int parm2,int parm3,long double parm4,int parm5) {
_INT4 code, timing;
code = 1001; /* Abend code to issue */
timing = 1;
printf("Tran3: About to ABEND\n");
CEE3ABD(&code,&timing);
return parm1 + parm2 + parm3;
}