Sample Language Environment dump with XPLINK-specific information

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.

Figure 1. Sample XPLINK-compiled program (tranmain) which calls a NOXPLINK-compiled program
#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;
}
Figure 2. Sample NOXPLINK-compiled program (trandll) which calls an XPLINK-compiled program
#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;
}