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.
/* 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();
}
//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)
/*