Index: mips/db_disasm.c =================================================================== RCS file: /cvsroot/src/sys/arch/mips/mips/db_disasm.c,v retrieving revision 1.32 diff -p -u -r1.32 db_disasm.c --- mips/db_disasm.c 6 Apr 2019 03:06:26 -0000 1.32 +++ mips/db_disasm.c 15 Aug 2020 04:39:24 -0000 @@ -47,6 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_disasm.c, #include +#include #include #include #include @@ -131,6 +132,7 @@ static const char * const spec3_name[64] [OP_SWRE] = "swre", [OP_PREFE] = "prefe", [OP_DBSHFL] = "dbshfl", + [OP_CACHE_R6] = "cache", [OP_LBUE] = "lbue", [OP_LHUE] = "lhue", [OP_LBE] = "lbe", @@ -225,7 +227,7 @@ db_disasm(db_addr_t loc, bool altfmt) * Take some care with addresses to not UTLB here as it * loses the current debugging context. KSEG2 not checked. */ - if (loc < MIPS_KSEG0_START) { + if (loc < (db_addr_t)MIPS_KSEG0_START) { if (ufetch_32((void *)loc, &instr) != 0) { db_printf("invalid address.\n"); return loc; @@ -507,10 +509,37 @@ db_disasm_insn(int insn, db_addr_t loc, } break; } - db_printf("%s\t%s,%s", - spec3_name[i.RType.func], - reg_name[i.RType.rs], - reg_name[i.RType.rt]); + switch (i.RType.func) { + case OP_LWLE: + case OP_LWRE: + case OP_CACHEE: + case OP_SBE: + case OP_SHE: + case OP_SCE: + case OP_SWE: + case OP_SWLE: + case OP_SWRE: + case OP_PREFE: + case OP_CACHE_R6: + case OP_LBUE: + case OP_LHUE: + case OP_LBE: + case OP_LHE: + case OP_LLE: + case OP_LWE: + db_printf("%s\t%s,%d(%s)", + spec3_name[i.RType.func], + reg_name[i.RType.rs], + i.S3OType.offset > 255 ? + -i.S3OType.offset : i.S3OType.offset, + reg_name[i.RType.rt]); + break; + default: + db_printf("%s\t%s,%s", + spec3_name[i.RType.func], + reg_name[i.RType.rs], + reg_name[i.RType.rt]); + } break; case OP_REGIMM: