Home | History | Annotate | Line # | Download | only in vax
db_disasm.c revision 1.1
      1 #include <sys/param.h>
      2 #include <sys/proc.h>
      3 #include <sys/reboot.h>
      4 
      5 #include <ddb/db_variables.h>
      6 
      7 #include <machine/db_machdep.h>
      8 
      9 
     10 
     11 struct vax_insn {
     12 	char	*insn;
     13 	int 	nargs;
     14 } instr[] = {
     15 	"halt",	0,
     16 	"nop",	0,
     17 	"rei",	0,
     18 	"bpt",	0,
     19 	"ret",	0,
     20 	"rsb",	0,
     21 	"ldpctx",	0,
     22 	"svpctx",	0,
     23 	"cvtps",	4,
     24 	"cvtsp",	4,
     25 	"index",	6,
     26 	"crc",	4,
     27 	"prober",	3,
     28 	"probew",	3,
     29 	"insque",	2,
     30 	"remque",	2,
     31 	"",	-1,
     32 	"",	-1,
     33 	"",	-1,
     34 	"",	-1,
     35 	"",	-1,
     36 	"",	-1,
     37 	"",	-1,
     38 	"",	-1,
     39 	"",	-1,
     40 	"",	-1,
     41 	"",	-1,
     42 	"",	-1,
     43 	"",	-1,
     44 	"",	-1,
     45 	"",	-1,
     46 	"",	-1,
     47 	"",	-1,
     48 	"",	-1,
     49 	"",	-1,
     50 	"",	-1,
     51 	"",	-1,
     52 	"",	-1,
     53 	"",	-1,
     54 	"",	-1,
     55 	"",	-1,
     56 	"",	-1,
     57 	"",	-1,
     58 	"",	-1,
     59 	"",	-1,
     60 	"",	-1,
     61 	"",	-1,
     62 	"",	-1,
     63 	"",	-1,
     64 	"",	-1,
     65 	"",	-1,
     66 	"",	-1,
     67 	"",	-1,
     68 	"",	-1,
     69 	"",	-1,
     70 	"",	-1,
     71 	"",	-1,
     72 	"",	-1,
     73 	"",	-1,
     74 	"",	-1,
     75 	"",	-1,
     76 	"",	-1,
     77 	"",	-1,
     78 	"",	-1,
     79 	"",	-1,
     80 	"",	-1,
     81 	"",	-1,
     82 	"",	-1,
     83 	"",	-1,
     84 	"",	-1,
     85 	"",	-1,
     86 	"",	-1,
     87 	"",	-1,
     88 	"",	-1,
     89 	"",	-1,
     90 	"",	-1,
     91 	"",	-1,
     92 	"",	-1,
     93 	"",	-1,
     94 	"",	-1,
     95 	"",	-1,
     96 	"",	-1,
     97 	"",	-1,
     98 	"",	-1,
     99 	"",	-1,
    100 	"",	-1,
    101 	"",	-1,
    102 	"",	-1,
    103 	"",	-1,
    104 	"",	-1,
    105 	"",	-1,
    106 	"",	-1,
    107 	"",	-1,
    108 	"",	-1,
    109 	"",	-1,
    110 	"",	-1,
    111 	"",	-1,
    112 	"",	-1,
    113 	"",	-1,
    114 	"",	-1,
    115 	"",	-1,
    116 	"",	-1,
    117 	"",	-1,
    118 	"",	-1,
    119 	"",	-1,
    120 	"",	-1,
    121 	"",	-1,
    122 	"",	-1,
    123 	"",	-1,
    124 	"",	-1,
    125 	"",	-1,
    126 	"",	-1,
    127 	"",	-1,
    128 	"",	-1,
    129 	"",	-1,
    130 	"",	-1,
    131 	"",	-1,
    132 	"",	-1,
    133 	"",	-1,
    134 	"",	-1,
    135 	"",	-1,
    136 	"",	-1,
    137 	"",	-1,
    138 	"",	-1,
    139 	"",	-1,
    140 	"",	-1,
    141 	"",	-1,
    142 	"",	-1,
    143 	"",	-1,
    144 	"",	-1,
    145 	"",	-1,
    146 	"",	-1,
    147 	"",	-1,
    148 	"",	-1,
    149 	"",	-1,
    150 	"",	-1,
    151 	"",	-1,
    152 	"",	-1,
    153 	"",	-1,
    154 	"",	-1,
    155 	"",	-1,
    156 	"",	-1,
    157 	"",	-1,
    158 	"",	-1,
    159 	"",	-1,
    160 	"",	-1,
    161 	"",	-1,
    162 	"",	-1,
    163 	"",	-1,
    164 	"",	-1,
    165 	"",	-1,
    166 	"",	-1,
    167 	"",	-1,
    168 	"",	-1,
    169 	"",	-1,
    170 	"",	-1,
    171 	"",	-1,
    172 	"",	-1,
    173 	"",	-1,
    174 	"",	-1,
    175 	"",	-1,
    176 	"",	-1,
    177 	"",	-1,
    178 	"",	-1,
    179 	"",	-1,
    180 	"",	-1,
    181 	"",	-1,
    182 	"",	-1,
    183 	"",	-1,
    184 	"",	-1,
    185 	"",	-1,
    186 	"",	-1,
    187 	"",	-1,
    188 	"",	-1,
    189 	"",	-1,
    190 	"",	-1,
    191 	"",	-1,
    192 	"",	-1,
    193 	"",	-1,
    194 	"",	-1,
    195 	"",	-1,
    196 	"",	-1,
    197 	"",	-1,
    198 	"",	-1,
    199 	"",	-1,
    200 	"",	-1,
    201 	"",	-1,
    202 	"",	-1,
    203 	"",	-1,
    204 	"",	-1,
    205 	"",	-1,
    206 	"",	-1,
    207 	"",	-1,
    208 	"",	-1,
    209 	"",	-1,
    210 	"",	-1,
    211 	"",	-1,
    212 	"",	-1,
    213 	"",	-1,
    214 	"",	-1,
    215 	"",	-1,
    216 	"",	-1,
    217 	"",	-1,
    218 	"",	-1,
    219 	"",	-1,
    220 	"",	-1,
    221 	"",	-1,
    222 	"",	-1,
    223 	"",	-1,
    224 	"",	-1,
    225 	"",	-1,
    226 	"",	-1,
    227 	"",	-1,
    228 	"",	-1,
    229 	"",	-1,
    230 	"",	-1,
    231 	"",	-1,
    232 	"",	-1,
    233 	"",	-1,
    234 	"",	-1,
    235 	"",	-1,
    236 	"",	-1,
    237 	"",	-1,
    238 	"",	-1,
    239 	"",	-1,
    240 	"",	-1,
    241 	"",	-1,
    242 	"",	-1,
    243 	"",	-1,
    244 	"",	-1,
    245 	"",	-1,
    246 	"",	-1,
    247 	"",	-1,
    248 	"",	-1,
    249 	"",	-1,
    250 	"",	-1,
    251 	"",	-1,
    252 	"",	-1,
    253 	"",	-1,
    254 	"",	-1,
    255 	"",	-1,
    256 	"",	-1,
    257 	"",	-1,
    258 	"",	-1,
    259 	"",	-1,
    260 	"",	-1,
    261 	"",	-1,
    262 	"",	-1,
    263 	"",	-1,
    264 	"",	-1,
    265 	"",	-1,
    266 	"",	-1,
    267 	"",	-1,
    268 	"",	-1,
    269 	"",	-1,
    270 	"",	-1,
    271 	"",	-1,
    272 	"",	-1,
    273 	"",	-1,
    274 	"",	-1,
    275 	"",	-1,
    276 	"",	-1,
    277 	"",	-1,
    278 	"",	-1,
    279 	"",	-1,
    280 	"",	-1,
    281 	"",	-1,
    282 	"",	-1,
    283 	"",	-1,
    284 	"",	-1,
    285 	"",	-1,
    286 	"",	-1,
    287 };
    288 
    289 
    290 /*
    291  * Disassemble instruction at 'loc'.  'altfmt' specifies an
    292  * (optional) alternate format.  Return address of start of
    293  * next instruction.
    294  */
    295 db_addr_t
    296 db_disasm(loc, altfmt)
    297         db_addr_t       loc;
    298         boolean_t       altfmt;
    299 {
    300 	char *i_pl;
    301 	int inr, i;
    302 
    303 	i_pl = loc;
    304 	inr = *i_pl;
    305 
    306 	if (instr[*i_pl].nargs < 0) {
    307 		printf("Ok{nd instruktion: %2x",*i_pl&0xff);
    308 		i_pl++;
    309 	} else {
    310 		printf("\t%s\t",instr[inr].insn);
    311 		i_pl++;
    312 		for (i=0;i<instr[inr].nargs;i++) {
    313 			i_pl = argprint(i_pl);
    314 			if (i<instr[inr].nargs-1)
    315 				printf(",");
    316 		}
    317 	}
    318 
    319 
    320 
    321         return i_pl;
    322 }
    323 
    324 argprint(plats)
    325 	char *plats;
    326 {
    327 	switch (*plats&0xf0) {
    328 	case 0x00:
    329 	case 0x10:
    330 	case 0x20:
    331 	case 0x30:
    332 		printf("$%x",*plats++);
    333 		break;
    334 
    335 	case 0xe0:
    336 		if (*plats++&15 == 15) {
    337 			printf("%8x",*(unsigned *)plats + plats);
    338 			plats += 4;
    339 		} else {
    340 			printf("Oinpl. s{tt.");
    341 		}
    342 		break;
    343 	default:
    344 		printf("Oinpl. s{tt.");
    345 	}
    346 	return plats;
    347 }
    348