Home | History | Annotate | Line # | Download | only in vax
db_disasm.c revision 1.2
      1  1.2    jtc /*	$NetBSD: db_disasm.c,v 1.2 1995/11/30 00:59:34 jtc Exp $ */
      2  1.2    jtc /*
      3  1.2    jtc  * Copyright (c) 1995 Ludd, University of Lule}, Sweden.
      4  1.2    jtc  * All rights reserved.
      5  1.2    jtc  *
      6  1.2    jtc  * Redistribution and use in source and binary forms, with or without
      7  1.2    jtc  * modification, are permitted provided that the following conditions
      8  1.2    jtc  * are met:
      9  1.2    jtc  * 1. Redistributions of source code must retain the above copyright
     10  1.2    jtc  *    notice, this list of conditions and the following disclaimer.
     11  1.2    jtc  * 2. Redistributions in binary form must reproduce the above copyright
     12  1.2    jtc  *    notice, this list of conditions and the following disclaimer in the
     13  1.2    jtc  *    documentation and/or other materials provided with the distribution.
     14  1.2    jtc  * 3. All advertising materials mentioning features or use of this software
     15  1.2    jtc  *    must display the following acknowledgement:
     16  1.2    jtc  *      This product includes software developed at Ludd, University of
     17  1.2    jtc  *      Lule}, Sweden and its contributors.
     18  1.2    jtc  * 4. The name of the author may not be used to endorse or promote products
     19  1.2    jtc  *    derived from this software without specific prior written permission
     20  1.2    jtc  *
     21  1.2    jtc  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  1.2    jtc  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  1.2    jtc  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  1.2    jtc  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  1.2    jtc  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  1.2    jtc  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  1.2    jtc  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  1.2    jtc  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  1.2    jtc  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  1.2    jtc  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  1.2    jtc  */
     32  1.2    jtc 
     33  1.2    jtc 
     34  1.1  ragge #include <sys/param.h>
     35  1.1  ragge #include <sys/proc.h>
     36  1.1  ragge #include <sys/reboot.h>
     37  1.1  ragge 
     38  1.1  ragge #include <ddb/db_variables.h>
     39  1.1  ragge 
     40  1.1  ragge #include <machine/db_machdep.h>
     41  1.1  ragge 
     42  1.1  ragge 
     43  1.1  ragge 
     44  1.1  ragge struct vax_insn {
     45  1.1  ragge 	char	*insn;
     46  1.1  ragge 	int 	nargs;
     47  1.1  ragge } instr[] = {
     48  1.1  ragge 	"halt",	0,
     49  1.1  ragge 	"nop",	0,
     50  1.1  ragge 	"rei",	0,
     51  1.1  ragge 	"bpt",	0,
     52  1.1  ragge 	"ret",	0,
     53  1.1  ragge 	"rsb",	0,
     54  1.1  ragge 	"ldpctx",	0,
     55  1.1  ragge 	"svpctx",	0,
     56  1.1  ragge 	"cvtps",	4,
     57  1.1  ragge 	"cvtsp",	4,
     58  1.1  ragge 	"index",	6,
     59  1.1  ragge 	"crc",	4,
     60  1.1  ragge 	"prober",	3,
     61  1.1  ragge 	"probew",	3,
     62  1.1  ragge 	"insque",	2,
     63  1.1  ragge 	"remque",	2,
     64  1.1  ragge 	"",	-1,
     65  1.1  ragge 	"",	-1,
     66  1.1  ragge 	"",	-1,
     67  1.1  ragge 	"",	-1,
     68  1.1  ragge 	"",	-1,
     69  1.1  ragge 	"",	-1,
     70  1.1  ragge 	"",	-1,
     71  1.1  ragge 	"",	-1,
     72  1.1  ragge 	"",	-1,
     73  1.1  ragge 	"",	-1,
     74  1.1  ragge 	"",	-1,
     75  1.1  ragge 	"",	-1,
     76  1.1  ragge 	"",	-1,
     77  1.1  ragge 	"",	-1,
     78  1.1  ragge 	"",	-1,
     79  1.1  ragge 	"",	-1,
     80  1.1  ragge 	"",	-1,
     81  1.1  ragge 	"",	-1,
     82  1.1  ragge 	"",	-1,
     83  1.1  ragge 	"",	-1,
     84  1.1  ragge 	"",	-1,
     85  1.1  ragge 	"",	-1,
     86  1.1  ragge 	"",	-1,
     87  1.1  ragge 	"",	-1,
     88  1.1  ragge 	"",	-1,
     89  1.1  ragge 	"",	-1,
     90  1.1  ragge 	"",	-1,
     91  1.1  ragge 	"",	-1,
     92  1.1  ragge 	"",	-1,
     93  1.1  ragge 	"",	-1,
     94  1.1  ragge 	"",	-1,
     95  1.1  ragge 	"",	-1,
     96  1.1  ragge 	"",	-1,
     97  1.1  ragge 	"",	-1,
     98  1.1  ragge 	"",	-1,
     99  1.1  ragge 	"",	-1,
    100  1.1  ragge 	"",	-1,
    101  1.1  ragge 	"",	-1,
    102  1.1  ragge 	"",	-1,
    103  1.1  ragge 	"",	-1,
    104  1.1  ragge 	"",	-1,
    105  1.1  ragge 	"",	-1,
    106  1.1  ragge 	"",	-1,
    107  1.1  ragge 	"",	-1,
    108  1.1  ragge 	"",	-1,
    109  1.1  ragge 	"",	-1,
    110  1.1  ragge 	"",	-1,
    111  1.1  ragge 	"",	-1,
    112  1.1  ragge 	"",	-1,
    113  1.1  ragge 	"",	-1,
    114  1.1  ragge 	"",	-1,
    115  1.1  ragge 	"",	-1,
    116  1.1  ragge 	"",	-1,
    117  1.1  ragge 	"",	-1,
    118  1.1  ragge 	"",	-1,
    119  1.1  ragge 	"",	-1,
    120  1.1  ragge 	"",	-1,
    121  1.1  ragge 	"",	-1,
    122  1.1  ragge 	"",	-1,
    123  1.1  ragge 	"",	-1,
    124  1.1  ragge 	"",	-1,
    125  1.1  ragge 	"",	-1,
    126  1.1  ragge 	"",	-1,
    127  1.1  ragge 	"",	-1,
    128  1.1  ragge 	"",	-1,
    129  1.1  ragge 	"",	-1,
    130  1.1  ragge 	"",	-1,
    131  1.1  ragge 	"",	-1,
    132  1.1  ragge 	"",	-1,
    133  1.1  ragge 	"",	-1,
    134  1.1  ragge 	"",	-1,
    135  1.1  ragge 	"",	-1,
    136  1.1  ragge 	"",	-1,
    137  1.1  ragge 	"",	-1,
    138  1.1  ragge 	"",	-1,
    139  1.1  ragge 	"",	-1,
    140  1.1  ragge 	"",	-1,
    141  1.1  ragge 	"",	-1,
    142  1.1  ragge 	"",	-1,
    143  1.1  ragge 	"",	-1,
    144  1.1  ragge 	"",	-1,
    145  1.1  ragge 	"",	-1,
    146  1.1  ragge 	"",	-1,
    147  1.1  ragge 	"",	-1,
    148  1.1  ragge 	"",	-1,
    149  1.1  ragge 	"",	-1,
    150  1.1  ragge 	"",	-1,
    151  1.1  ragge 	"",	-1,
    152  1.1  ragge 	"",	-1,
    153  1.1  ragge 	"",	-1,
    154  1.1  ragge 	"",	-1,
    155  1.1  ragge 	"",	-1,
    156  1.1  ragge 	"",	-1,
    157  1.1  ragge 	"",	-1,
    158  1.1  ragge 	"",	-1,
    159  1.1  ragge 	"",	-1,
    160  1.1  ragge 	"",	-1,
    161  1.1  ragge 	"",	-1,
    162  1.1  ragge 	"",	-1,
    163  1.1  ragge 	"",	-1,
    164  1.1  ragge 	"",	-1,
    165  1.1  ragge 	"",	-1,
    166  1.1  ragge 	"",	-1,
    167  1.1  ragge 	"",	-1,
    168  1.1  ragge 	"",	-1,
    169  1.1  ragge 	"",	-1,
    170  1.1  ragge 	"",	-1,
    171  1.1  ragge 	"",	-1,
    172  1.1  ragge 	"",	-1,
    173  1.1  ragge 	"",	-1,
    174  1.1  ragge 	"",	-1,
    175  1.1  ragge 	"",	-1,
    176  1.1  ragge 	"",	-1,
    177  1.1  ragge 	"",	-1,
    178  1.1  ragge 	"",	-1,
    179  1.1  ragge 	"",	-1,
    180  1.1  ragge 	"",	-1,
    181  1.1  ragge 	"",	-1,
    182  1.1  ragge 	"",	-1,
    183  1.1  ragge 	"",	-1,
    184  1.1  ragge 	"",	-1,
    185  1.1  ragge 	"",	-1,
    186  1.1  ragge 	"",	-1,
    187  1.1  ragge 	"",	-1,
    188  1.1  ragge 	"",	-1,
    189  1.1  ragge 	"",	-1,
    190  1.1  ragge 	"",	-1,
    191  1.1  ragge 	"",	-1,
    192  1.1  ragge 	"",	-1,
    193  1.1  ragge 	"",	-1,
    194  1.1  ragge 	"",	-1,
    195  1.1  ragge 	"",	-1,
    196  1.1  ragge 	"",	-1,
    197  1.1  ragge 	"",	-1,
    198  1.1  ragge 	"",	-1,
    199  1.1  ragge 	"",	-1,
    200  1.1  ragge 	"",	-1,
    201  1.1  ragge 	"",	-1,
    202  1.1  ragge 	"",	-1,
    203  1.1  ragge 	"",	-1,
    204  1.1  ragge 	"",	-1,
    205  1.1  ragge 	"",	-1,
    206  1.1  ragge 	"",	-1,
    207  1.1  ragge 	"",	-1,
    208  1.1  ragge 	"",	-1,
    209  1.1  ragge 	"",	-1,
    210  1.1  ragge 	"",	-1,
    211  1.1  ragge 	"",	-1,
    212  1.1  ragge 	"",	-1,
    213  1.1  ragge 	"",	-1,
    214  1.1  ragge 	"",	-1,
    215  1.1  ragge 	"",	-1,
    216  1.1  ragge 	"",	-1,
    217  1.1  ragge 	"",	-1,
    218  1.1  ragge 	"",	-1,
    219  1.1  ragge 	"",	-1,
    220  1.1  ragge 	"",	-1,
    221  1.1  ragge 	"",	-1,
    222  1.1  ragge 	"",	-1,
    223  1.1  ragge 	"",	-1,
    224  1.1  ragge 	"",	-1,
    225  1.1  ragge 	"",	-1,
    226  1.1  ragge 	"",	-1,
    227  1.1  ragge 	"",	-1,
    228  1.1  ragge 	"",	-1,
    229  1.1  ragge 	"",	-1,
    230  1.1  ragge 	"",	-1,
    231  1.1  ragge 	"",	-1,
    232  1.1  ragge 	"",	-1,
    233  1.1  ragge 	"",	-1,
    234  1.1  ragge 	"",	-1,
    235  1.1  ragge 	"",	-1,
    236  1.1  ragge 	"",	-1,
    237  1.1  ragge 	"",	-1,
    238  1.1  ragge 	"",	-1,
    239  1.1  ragge 	"",	-1,
    240  1.1  ragge 	"",	-1,
    241  1.1  ragge 	"",	-1,
    242  1.1  ragge 	"",	-1,
    243  1.1  ragge 	"",	-1,
    244  1.1  ragge 	"",	-1,
    245  1.1  ragge 	"",	-1,
    246  1.1  ragge 	"",	-1,
    247  1.1  ragge 	"",	-1,
    248  1.1  ragge 	"",	-1,
    249  1.1  ragge 	"",	-1,
    250  1.1  ragge 	"",	-1,
    251  1.1  ragge 	"",	-1,
    252  1.1  ragge 	"",	-1,
    253  1.1  ragge 	"",	-1,
    254  1.1  ragge 	"",	-1,
    255  1.1  ragge 	"",	-1,
    256  1.1  ragge 	"",	-1,
    257  1.1  ragge 	"",	-1,
    258  1.1  ragge 	"",	-1,
    259  1.1  ragge 	"",	-1,
    260  1.1  ragge 	"",	-1,
    261  1.1  ragge 	"",	-1,
    262  1.1  ragge 	"",	-1,
    263  1.1  ragge 	"",	-1,
    264  1.1  ragge 	"",	-1,
    265  1.1  ragge 	"",	-1,
    266  1.1  ragge 	"",	-1,
    267  1.1  ragge 	"",	-1,
    268  1.1  ragge 	"",	-1,
    269  1.1  ragge 	"",	-1,
    270  1.1  ragge 	"",	-1,
    271  1.1  ragge 	"",	-1,
    272  1.1  ragge 	"",	-1,
    273  1.1  ragge 	"",	-1,
    274  1.1  ragge 	"",	-1,
    275  1.1  ragge 	"",	-1,
    276  1.1  ragge 	"",	-1,
    277  1.1  ragge 	"",	-1,
    278  1.1  ragge 	"",	-1,
    279  1.1  ragge 	"",	-1,
    280  1.1  ragge 	"",	-1,
    281  1.1  ragge 	"",	-1,
    282  1.1  ragge 	"",	-1,
    283  1.1  ragge 	"",	-1,
    284  1.1  ragge 	"",	-1,
    285  1.1  ragge 	"",	-1,
    286  1.1  ragge 	"",	-1,
    287  1.1  ragge 	"",	-1,
    288  1.1  ragge 	"",	-1,
    289  1.1  ragge 	"",	-1,
    290  1.1  ragge 	"",	-1,
    291  1.1  ragge 	"",	-1,
    292  1.1  ragge 	"",	-1,
    293  1.1  ragge 	"",	-1,
    294  1.1  ragge 	"",	-1,
    295  1.1  ragge 	"",	-1,
    296  1.1  ragge 	"",	-1,
    297  1.1  ragge 	"",	-1,
    298  1.1  ragge 	"",	-1,
    299  1.1  ragge 	"",	-1,
    300  1.1  ragge 	"",	-1,
    301  1.1  ragge 	"",	-1,
    302  1.1  ragge 	"",	-1,
    303  1.1  ragge 	"",	-1,
    304  1.1  ragge 	"",	-1,
    305  1.1  ragge 	"",	-1,
    306  1.1  ragge 	"",	-1,
    307  1.1  ragge 	"",	-1,
    308  1.1  ragge 	"",	-1,
    309  1.1  ragge 	"",	-1,
    310  1.1  ragge 	"",	-1,
    311  1.1  ragge 	"",	-1,
    312  1.1  ragge 	"",	-1,
    313  1.1  ragge 	"",	-1,
    314  1.1  ragge 	"",	-1,
    315  1.1  ragge 	"",	-1,
    316  1.1  ragge 	"",	-1,
    317  1.1  ragge 	"",	-1,
    318  1.1  ragge 	"",	-1,
    319  1.1  ragge 	"",	-1,
    320  1.1  ragge };
    321  1.1  ragge 
    322  1.1  ragge 
    323  1.1  ragge /*
    324  1.1  ragge  * Disassemble instruction at 'loc'.  'altfmt' specifies an
    325  1.1  ragge  * (optional) alternate format.  Return address of start of
    326  1.1  ragge  * next instruction.
    327  1.1  ragge  */
    328  1.1  ragge db_addr_t
    329  1.1  ragge db_disasm(loc, altfmt)
    330  1.1  ragge         db_addr_t       loc;
    331  1.1  ragge         boolean_t       altfmt;
    332  1.1  ragge {
    333  1.1  ragge 	char *i_pl;
    334  1.1  ragge 	int inr, i;
    335  1.1  ragge 
    336  1.2    jtc 	i_pl = (char *)loc;
    337  1.1  ragge 	inr = *i_pl;
    338  1.1  ragge 
    339  1.1  ragge 	if (instr[*i_pl].nargs < 0) {
    340  1.1  ragge 		printf("Ok{nd instruktion: %2x",*i_pl&0xff);
    341  1.1  ragge 		i_pl++;
    342  1.1  ragge 	} else {
    343  1.1  ragge 		printf("\t%s\t",instr[inr].insn);
    344  1.1  ragge 		i_pl++;
    345  1.1  ragge 		for (i=0;i<instr[inr].nargs;i++) {
    346  1.2    jtc 			i_pl = (char *)argprint(i_pl);
    347  1.1  ragge 			if (i<instr[inr].nargs-1)
    348  1.1  ragge 				printf(",");
    349  1.1  ragge 		}
    350  1.1  ragge 	}
    351  1.1  ragge 
    352  1.1  ragge 
    353  1.1  ragge 
    354  1.2    jtc         return (int)i_pl;
    355  1.1  ragge }
    356  1.1  ragge 
    357  1.1  ragge argprint(plats)
    358  1.1  ragge 	char *plats;
    359  1.1  ragge {
    360  1.1  ragge 	switch (*plats&0xf0) {
    361  1.1  ragge 	case 0x00:
    362  1.1  ragge 	case 0x10:
    363  1.1  ragge 	case 0x20:
    364  1.1  ragge 	case 0x30:
    365  1.1  ragge 		printf("$%x",*plats++);
    366  1.1  ragge 		break;
    367  1.1  ragge 
    368  1.1  ragge 	case 0xe0:
    369  1.1  ragge 		if (*plats++&15 == 15) {
    370  1.1  ragge 			printf("%8x",*(unsigned *)plats + plats);
    371  1.1  ragge 			plats += 4;
    372  1.1  ragge 		} else {
    373  1.1  ragge 			printf("Oinpl. s{tt.");
    374  1.1  ragge 		}
    375  1.1  ragge 		break;
    376  1.1  ragge 	default:
    377  1.1  ragge 		printf("Oinpl. s{tt.");
    378  1.1  ragge 	}
    379  1.2    jtc 	return (int)plats;
    380  1.1  ragge }
    381