2 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 * See the copyright notice in the ACK home directory, in the file "Copyright".
12 static char rcs_id[] = "$Id: ass60.c,v 2.7 1994/06/24 10:15:17 ceriel Exp $" ;
16 static char *typestr[] =
17 {"missing","const","procname","glosym","locsym","glosym+off","pseudo"};
18 static char *labstr[] = {"EMPTY","no","yes","seen","notpresent"};
19 static char formstr[] = { 'm','s','-','1','2','4','8' };
20 static char *r_data[] = { "null","glob","head","loc","adr" };
22 cons_t nicepr(typ,ap) addr_u *ap; {
29 return(int_cast ap->ad_lp);
31 return(ap->ad_df.df_gp - mglobs);
33 return(ap->ad_gp - mglobs);
37 return((pl-xprocs)+1000);
41 if ( typ>=VALLOW && typ<=VALHIGH ) return VAL1(typ) ;
47 char *pflags(flg) int flg ; {
52 if ( flg&OPESC ) *cp++ = 'e' ;
53 switch ( flg&OPRANGE ) {
54 case OP_NEG : *cp++ = 'N' ; break ;
55 case OP_POS : *cp++ = 'P' ; break ;
57 if ( flg&OPWORD ) *cp++ = 'w' ;
58 if ( flg&OPNZ ) *cp++ = 'o' ;
59 *cp++ = formstr[flg&OPTYPE] ;
70 register locl_t *lbhead;
74 extern char em_mnem[][4] ;
76 if (d_flag==0) return;
77 if ( (n==0 && d_flag) || (n==4 && d_flag>=2) || (n<100 && d_flag>=3) ) {
78 printf("\nEM1-assembler ***** pass %1d complete:\n",n);
79 printf("current size %ld\n",prog_size) ;
80 printf(" %9.9s%9.9s%14.14s%8.8s%8.8s\n", "instr_nr",
81 "type1","addr1","length","format");
82 for (ln = pstate.s_fline ; ln ;
83 ln = ln->l_next, n>=3 || n==0 ? i++ : i-- ) {
84 insno = ctrunc(ln->instr_num) ;
85 if ( insno==sp_fpseu ) {
86 i= ln->ad.ad_ln.ln_first ;
93 " %3.3s",em_mnem[insno]) ;
102 printf(" %9.9s%14ld",
103 typestr[ln->type1<VALLOW ? ln->type1 : CONST],
104 nicepr(ln->type1,&ln->ad)) ;
105 if ( ln->opoff != NO_OFF )
107 oplength(*(ln->opoff)),pflags(*(ln->opoff)));
110 printf("\n %8s%8s%8s%8s%8s\n","labnum","labid","minval","maxval",
112 for ( i = 0, lbhead= *pstate.s_locl ; i<LOCLABSIZE ; lbhead++,i++) {
113 if ( lbhead->l_defined!=EMPTY ) printf("%4d\n",i);
114 for (lbp= lbhead; lbp != lbp_cast 0; lbp= lbp->l_chain) {
115 if (lbp->l_defined!=EMPTY)
116 printf(" %8d%8d%8d%8d %-s\n",
117 lbp->l_hinum*LOCLABSIZE + i,
118 int_cast lbp,lbp->l_min,
119 lbp->l_max, labstr[lbp->l_defined]);
123 if ( ( (n==0 || n>=100) && d_flag) || (n<=1 && d_flag>=2) ) {
124 if ( n==0 || n==100 ) {
125 printf("File %s",curfile) ;
126 if ( archmode ) printf("(%.14s)",archhdr.ar_name);
129 printf("Local data labels:\n");
131 "\n\t%8.8s %8.8s %8.8s\n","g_name","g_status","g_addr");
132 for (gb = mglobs,i = 0;gb < &mglobs[oursize->n_mlab]; gb++, i++)
133 if (gb->g_name[0] != 0) {
134 printf("%5d\t%8.6s",i,gb->g_name);
135 printf(" %8o %8ld\n",gb->g_status,gb->g_val.g_addr);
137 printf("\n\nGlobal data labels\n");
138 printf("\n\t%8.8s %8.8s %8.8s\n",
139 "g_name","g_status","g_addr");
140 for (gb = xglobs,i = 0;gb < &xglobs[oursize->n_glab]; gb++, i++)
141 if (gb->g_name != 0) {
142 printf("%5d\t%8.6s",i,gb->g_name);
143 printf(" %8o %8ld\n",gb->g_status,gb->g_val.g_addr);
145 printf("\n\nLocal procedures\n");
146 printf("\n\t%8.8s%8s%8s\t%8s%8s\n",
147 "name","status","num","off","locals");
148 for (pl=mprocs;pl< &mprocs[oursize->n_mproc]; pl++)
150 printf("%4d\t%-8s%8o%8d",
151 pl-mprocs,pl->p_name,pl->p_status,pl->p_num);
152 if (pl->p_status&DEF)
153 printf("\t%8ld%8ld",proctab[pl->p_num].pr_off,
154 proctab[pl->p_num].pr_loc);
157 printf("\nGlobal procedures\n");
158 printf("\n\t%8s%8s%8s\t%8s%8s\n",
159 "name","status","num","off","locals");
160 for (pl=xprocs;pl< &xprocs[oursize->n_xproc]; pl++)
162 printf("%4d\t%-8s%8o%8d",
163 pl-xprocs,pl->p_name,pl->p_status,pl->p_num);
164 if (pl->p_status&DEF)
165 printf("\t%8ld%8ld",proctab[pl->p_num].pr_off,
166 proctab[pl->p_num].pr_loc);
170 register relc_t *rl ;
171 printf("\nData relocation\n") ;
172 printf("\n\t%10s %10s %10s\n","offset","type","value");
173 for ( rl=f_data ; rl ; rl= rl->r_next ) {
174 printf("\t%10ld %10s ",rl->r_off,r_data[rl->r_typ]);
178 printf("%10ld\n",rl->r_val.rel_i) ;
181 printf("%8.8s\n",rl->r_val.rel_gp->g_name) ;
184 printf("%10d\n",rl->r_val.rel_lp) ;
187 printf("\n"); break ;
190 printf("\n\nText relocation\n") ;
191 printf("\n\t%10s %10s %10s\n","offset","flags","value");
192 for ( rl=f_text; rl ; rl= rl->r_next ) {
193 printf("\t%10ld %10s ",
194 rl->r_off,pflags(opchoice[rl->r_typ&~RELMNS])) ;
195 if ( rl->r_typ&RELMNS )
196 printf("%10ld\n",rl->r_val.rel_i) ;