Output listing

This topic contains an overview of the binder output listing. The binder creates the listing when you use the LIST binder option. It writes the listing to the data set that you defined by the DD SYSPRINT.

The listing consist of a number of categories. Some categories always appear in the listing, and others may appear depending on the options that you selected, or that were in effect.

Names that the binder generated appear as $PRIVxxxxxx rather than $PRIVATE. Private names that appear in the binder listing do not actually have that name in the program object. Their purpose in the listing is to permit association between various occurrences of the same private name within the listing. For purposes of rebindability, it is crucial that no sections have private names.

C++ names that appear in messages and listings are mangled names.

For the example listings in this topic, the files USERID.PLAN9.OBJ(CU1) and /u/userid/plan9/cu2.o were bound together using the JCL shown in Figure 2. Figure 1 shows the corresponding source files:
Figure 1. Source files for listing example
/* file: USERID.PLAN9.C(CU1) */
/* compile with: LONGNAME RENT EXPORTALL CSECT("cu1")*/
#include <stdio.h>
int Ax=10;                                                    /* exported */
int ALongNamedThingVVWhichIsExported=11;      /* exported */
static int Az=12;
static int A1(void) {
   return Ax;
}
int ALongNamedThingFFWhichIsExported(void) {   /* exported */
  return Ax;
}
int A3(void) {              /* exported */
  return Ax + Az;
}
extern int b1(void);   /* statically bound, defined in plan9/cu2.C */
main() {
  int i;
  i = b1() + call_a3() + call_b1_in_cu2();
  printf("now returning\n");     /* printf statically bound from SCEELKEX */
  return i;
}
 /* file: cu2.C (C++ file) */
 /* compile with: CSECT(PROJ9) */
 extern b2(void);
 extern "C" c2(void);                                  /* imported from DLLC */
 extern     c3(void);                                   /* imported from DLLC */
 extern "C" int b1(void) {                            /* called from cu1.c */
   return b2();
 }
 int b2(void) {
   return c2() + c3();
 }
Figure 2. Listing example JCL
//BIND1    EXEC CBCB,
//         BPARM='LIST(ALL),MAP,XREF',
//         OUTFILE='USERID.PLAN9.LOADE(HELLO1),DISP=SHR'
//INOBJ    DD DISP=SHR,DSN=USERID.PLAN9.OBJ
//SYSDEFSD DD DISP=SHR,DSN=USERID.PLAN9.IMP
//SYSPRINT DD DISP=SHR,DSN=USERID.PLAN9.LISTINGS(CU1CU2R)
//SYSLIN   DD *
 INCLUDE INOBJ(CU1)
 INCLUDE '/u/userid/plan9/cu2.o'
 IMPORT CODE,DLLC,c1
 IMPORT CODE,DLLC,c2
 IMPORT CODE,DLLC,c3__Fv
 RENAME 'call_a3' 'A3'
 RENAME 'call_b1_in_cu2' 'b1'
 ENTRY CEESTART
 NAME CU1CU2(R)
/*