Module Name: src Committed By: martin Date: Fri Dec 12 19:07:46 UTC 2014
Modified Files: src/sys/arch/amd64/amd64 [netbsd-7]: db_disasm.c src/sys/arch/i386/i386 [netbsd-7]: db_disasm.c Log Message: Pull up following revision(s) (requested by msaitoh in ticket #313): sys/arch/amd64/amd64/db_disasm.c: revision 1.20 sys/arch/i386/i386/db_disasm.c: revision 1.41 sys/arch/i386/i386/db_disasm.c: revision 1.42 sys/arch/i386/i386/db_disasm.c: revision 1.43 sys/arch/i386/i386/db_disasm.c: revision 1.44 sys/arch/amd64/amd64/db_disasm.c: revision 1.17 sys/arch/amd64/amd64/db_disasm.c: revision 1.18 sys/arch/amd64/amd64/db_disasm.c: revision 1.19 KNF. No binary change. No functional change. - 0 -> NULL - Don't use cast. - Style fix. - Fix typos in comment. Fix bugs: - aaa and daa were reversed. Same as *BSDs. - fix operand order of shld and shrd. Same as *BSDs. Add support for sysenter, sysexit, vmptrld, vmptrst and getsec. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.16.28.1 src/sys/arch/amd64/amd64/db_disasm.c cvs rdiff -u -r1.40 -r1.40.38.1 src/sys/arch/i386/i386/db_disasm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/amd64/amd64/db_disasm.c diff -u src/sys/arch/amd64/amd64/db_disasm.c:1.16 src/sys/arch/amd64/amd64/db_disasm.c:1.16.28.1 --- src/sys/arch/amd64/amd64/db_disasm.c:1.16 Sun Jul 17 20:54:36 2011 +++ src/sys/arch/amd64/amd64/db_disasm.c Fri Dec 12 19:07:46 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: db_disasm.c,v 1.16 2011/07/17 20:54:36 joerg Exp $ */ +/* $NetBSD: db_disasm.c,v 1.16.28.1 2014/12/12 19:07:46 martin Exp $ */ /* * Mach Operating System @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.16 2011/07/17 20:54:36 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.16.28.1 2014/12/12 19:07:46 martin Exp $"); #ifndef _KERNEL #include <sys/types.h> @@ -108,11 +108,11 @@ __KERNEL_RCSID(0, "$NetBSD: db_disasm.c, #define Iq 36 /* word immediate, maybe 64bits */ struct inst { - const char *i_name; /* name */ + const char *i_name; /* name */ short i_has_modrm; /* has regmodrm byte */ short i_size; /* operand size */ int i_mode; /* addressing modes */ - const char *i_extra; /* pointer to extra opcode table */ + const void *i_extra; /* pointer to extra opcode table */ }; #define op1(x) (x) @@ -123,7 +123,7 @@ struct finst { const char *f_name; /* name for memory instruction */ int f_size; /* size for memory instruction */ int f_rrmode; /* mode for rr instruction */ - const char *f_rrname; /* name for rr instruction + const void *f_rrname; /* name for rr instruction (or pointer to table) */ }; @@ -167,13 +167,13 @@ const char * const db_Grp9[] = { "", "", "", - "", - "", + "vmptrld", + "vmptrst" }; const struct inst db_inst_0f0x[] = { -/*00*/ { "", true, NONE, op1(Ew), (const char *)db_Grp6 }, -/*01*/ { "", true, NONE, op1(Ew), (const char *)db_Grp7 }, +/*00*/ { "", true, NONE, op1(Ew), db_Grp6 }, +/*01*/ { "", true, NONE, op1(Ew), db_Grp7 }, /*02*/ { "lar", true, LONG, op2(E,R), 0 }, /*03*/ { "lsl", true, LONG, op2(E,R), 0 }, /*04*/ { "", false, NONE, 0, 0 }, @@ -191,7 +191,7 @@ const struct inst db_inst_0f0x[] = { /*0f*/ { "", false, NONE, 0, 0 }, /* 3DNow */ }; -const struct inst db_inst_0f2x[] = { +const struct inst db_inst_0f2x[] = { /*20*/ { "mov", true, LONG, op2(CR,E), 0 }, /* use E for reg */ /*21*/ { "mov", true, LONG, op2(DR,E), 0 }, /* since mod == 11 */ /*22*/ { "mov", true, LONG, op2(E,CR), 0 }, @@ -211,7 +211,7 @@ const struct inst db_inst_0f2x[] = { /*2f*/ { "", false, NONE, 0, 0 }, }; -const struct inst db_inst_0f3x[] = { +const struct inst db_inst_0f3x[] = { /*30*/ { "wrmsr", false, NONE, 0, 0 }, /*31*/ { "rdtsc", false, NONE, 0, 0 }, /*32*/ { "rdmsr", false, NONE, 0, 0 }, @@ -219,19 +219,19 @@ const struct inst db_inst_0f3x[] = { /*34*/ { "sysenter",false,NONE, 0, 0 }, /*35*/ { "sysexit",false, NONE, 0, 0 }, /*36*/ { "", false, NONE, 0, 0 }, -/*37*/ { "", false, NONE, 0, 0 }, +/*37*/ { "getsec",false, NONE, 0, 0 }, /*38*/ { "", false, NONE, 0, 0 }, /*39*/ { "", false, NONE, 0, 0 }, /*3a*/ { "", false, NONE, 0, 0 }, -/*3v*/ { "", false, NONE, 0, 0 }, +/*3b*/ { "", false, NONE, 0, 0 }, /*3c*/ { "", false, NONE, 0, 0 }, /*3d*/ { "", false, NONE, 0, 0 }, /*3e*/ { "", false, NONE, 0, 0 }, /*3f*/ { "", false, NONE, 0, 0 }, }; -const struct inst db_inst_0f4x[] = { +const struct inst db_inst_0f4x[] = { /*40*/ { "cmovo", true, LONG, op2(E,R), 0 }, /*41*/ { "cmovno", true, LONG, op2(E,R), 0 }, /*42*/ { "cmovc", true, LONG, op2(E,R), 0 }, @@ -250,7 +250,7 @@ const struct inst db_inst_0f4x[] = { /*4f*/ { "cmovnle",true, LONG, op2(E,R), 0 }, }; -const struct inst db_inst_0f8x[] = { +const struct inst db_inst_0f8x[] = { /*80*/ { "jo", false, NONE, op1(Dl), 0 }, /*81*/ { "jno", false, NONE, op1(Dl), 0 }, /*82*/ { "jb", false, NONE, op1(Dl), 0 }, @@ -270,7 +270,7 @@ const struct inst db_inst_0f8x[] = { /*8f*/ { "jnle", false, NONE, op1(Dl), 0 }, }; -const struct inst db_inst_0f9x[] = { +const struct inst db_inst_0f9x[] = { /*90*/ { "seto", true, NONE, op1(Eb), 0 }, /*91*/ { "setno", true, NONE, op1(Eb), 0 }, /*92*/ { "setb", true, NONE, op1(Eb), 0 }, @@ -290,13 +290,13 @@ const struct inst db_inst_0f9x[] = { /*9f*/ { "setnle",true, NONE, op1(Eb), 0 }, }; -const struct inst db_inst_0fax[] = { +const struct inst db_inst_0fax[] = { /*a0*/ { "push", false, NONE, op1(Si), 0 }, /*a1*/ { "pop", false, NONE, op1(Si), 0 }, /*a2*/ { "cpuid", false, NONE, 0, 0 }, /*a3*/ { "bt", true, LONG, op2(R,E), 0 }, -/*a4*/ { "shld", true, LONG, op3(Ib,E,R), 0 }, -/*a5*/ { "shld", true, LONG, op3(CL,E,R), 0 }, +/*a4*/ { "shld", true, LONG, op3(Ib,R,E), 0 }, +/*a5*/ { "shld", true, LONG, op3(CL,R,E), 0 }, /*a6*/ { "", false, NONE, 0, 0 }, /*a7*/ { "", false, NONE, 0, 0 }, @@ -304,15 +304,15 @@ const struct inst db_inst_0fax[] = { /*a9*/ { "pop", false, NONE, op1(Si), 0 }, /*aa*/ { "rsm", false, NONE, 0, 0 }, /*ab*/ { "bts", true, LONG, op2(R,E), 0 }, -/*ac*/ { "shrd", true, LONG, op3(Ib,E,R), 0 }, -/*ad*/ { "shrd", true, LONG, op3(CL,E,R), 0 }, +/*ac*/ { "shrd", true, LONG, op3(Ib,R,E), 0 }, +/*ad*/ { "shrd", true, LONG, op3(CL,R,E), 0 }, /*ae*/ { "fxsave",true, LONG, 0, 0 }, /*af*/ { "imul", true, LONG, op2(E,R), 0 }, }; -const struct inst db_inst_0fbx[] = { -/*b0*/ { "cmpxchg",true, BYTE, op2(R, E), 0 }, -/*b1*/ { "cmpxchg",true, LONG, op2(R, E), 0 }, +const struct inst db_inst_0fbx[] = { +/*b0*/ { "cmpxchg",true, BYTE, op2(R, E), 0 }, +/*b1*/ { "cmpxchg",true, LONG, op2(R, E), 0 }, /*b2*/ { "lss", true, LONG, op2(E, R), 0 }, /*b3*/ { "btr", true, LONG, op2(R, E), 0 }, /*b4*/ { "lfs", true, LONG, op2(E, R), 0 }, @@ -322,7 +322,7 @@ const struct inst db_inst_0fbx[] = { /*b8*/ { "", false, NONE, 0, 0 }, /*b9*/ { "", false, NONE, 0, 0 }, -/*ba*/ { "", true, LONG, op2(Ib, E), (const char *)db_Grp8 }, +/*ba*/ { "", true, LONG, op2(Ib, E), db_Grp8 }, /*bb*/ { "btc", true, LONG, op2(R, E), 0 }, /*bc*/ { "bsf", true, LONG, op2(E, R), 0 }, /*bd*/ { "bsr", true, LONG, op2(E, R), 0 }, @@ -330,15 +330,16 @@ const struct inst db_inst_0fbx[] = { /*bf*/ { "movsw", true, LONG, op2(E, R), 0 }, }; -const struct inst db_inst_0fcx[] = { -/*c0*/ { "xadd", true, BYTE, op2(R, E), 0 }, -/*c1*/ { "xadd", true, LONG, op2(R, E), 0 }, -/*c2*/ { "", false, NONE, 0, 0 }, -/*c3*/ { "", false, NONE, 0, 0 }, -/*c4*/ { "", false, NONE, 0, 0 }, -/*c5*/ { "", false, NONE, 0, 0 }, -/*c6*/ { "", false, NONE, 0, 0 }, -/*c7*/ { "", true, NONE, op1(E), (const char *)db_Grp9 }, +const struct inst db_inst_0fcx[] = { +/*c0*/ { "xadd", true, BYTE, op2(R, E), 0 }, +/*c1*/ { "xadd", true, LONG, op2(R, E), 0 }, +/*c2*/ { "", false, NONE, 0, 0 }, +/*c3*/ { "", false, NONE, 0, 0 }, +/*c4*/ { "", false, NONE, 0, 0 }, +/*c5*/ { "", false, NONE, 0, 0 }, +/*c6*/ { "", false, NONE, 0, 0 }, +/*c7*/ { "", true, NONE, op1(E), db_Grp9 }, + /*c8*/ { "bswap", false, LONG, op1(Ri), 0 }, /*c9*/ { "bswap", false, LONG, op1(Ri), 0 }, /*ca*/ { "bswap", false, LONG, op1(Ri), 0 }, @@ -351,21 +352,21 @@ const struct inst db_inst_0fcx[] = { const struct inst * const db_inst_0f[] = { db_inst_0f0x, - 0, + NULL, db_inst_0f2x, db_inst_0f3x, db_inst_0f4x, - 0, - 0, - 0, + NULL, + NULL, + NULL, db_inst_0f8x, db_inst_0f9x, db_inst_0fax, db_inst_0fbx, db_inst_0fcx, - 0, - 0, - 0 + NULL, + NULL, + NULL }; const char * const db_Esc92[] = { @@ -418,12 +419,12 @@ const struct finst db_Esc8[] = { const struct finst db_Esc9[] = { /*0*/ { "fld", SNGL, op1(STI), 0 }, /*1*/ { "", NONE, op1(STI), "fxch" }, -/*2*/ { "fst", SNGL, op1(X), (const char *)db_Esc92 }, -/*3*/ { "fstp", SNGL, op1(X), (const char *)db_Esc93 }, -/*4*/ { "fldenv", NONE, op1(X), (const char *)db_Esc94 }, -/*5*/ { "fldcw", NONE, op1(X), (const char *)db_Esc95 }, -/*6*/ { "fnstenv",NONE, op1(X), (const char *)db_Esc96 }, -/*7*/ { "fnstcw", NONE, op1(X), (const char *)db_Esc97 }, +/*2*/ { "fst", SNGL, op1(X), db_Esc92 }, +/*3*/ { "fstp", SNGL, op1(X), db_Esc93 }, +/*4*/ { "fldenv", NONE, op1(X), db_Esc94 }, +/*5*/ { "fldcw", NONE, op1(X), db_Esc95 }, +/*6*/ { "fnstenv",NONE, op1(X), db_Esc96 }, +/*7*/ { "fnstcw", NONE, op1(X), db_Esc97 }, }; const struct finst db_Esca[] = { @@ -431,7 +432,7 @@ const struct finst db_Esca[] = { /*1*/ { "fimul", WORD, 0, 0 }, /*2*/ { "ficom", WORD, 0, 0 }, /*3*/ { "ficomp", WORD, 0, 0 }, -/*4*/ { "fisub", WORD, op1(X), (const char *)db_Esca4 }, +/*4*/ { "fisub", WORD, op1(X), db_Esca4 }, /*5*/ { "fisubr", WORD, 0, 0 }, /*6*/ { "fidiv", WORD, 0, 0 }, /*7*/ { "fidivr", WORD, 0, 0 } @@ -442,7 +443,7 @@ const struct finst db_Escb[] = { /*1*/ { "", NONE, 0, 0 }, /*2*/ { "fist", WORD, 0, 0 }, /*3*/ { "fistp", WORD, 0, 0 }, -/*4*/ { "", WORD, op1(X), (const char *)db_Escb4 }, +/*4*/ { "", WORD, op1(X), db_Escb4 }, /*5*/ { "fld", EXTR, 0, 0 }, /*6*/ { "", WORD, 0, 0 }, /*7*/ { "fstp", EXTR, 0, 0 }, @@ -474,7 +475,7 @@ const struct finst db_Esce[] = { /*0*/ { "fiadd", LONG, op2(ST,STI), "faddp" }, /*1*/ { "fimul", LONG, op2(ST,STI), "fmulp" }, /*2*/ { "ficom", LONG, 0, 0 }, -/*3*/ { "ficomp", LONG, op1(X), (const char *)db_Esce3 }, +/*3*/ { "ficomp", LONG, op1(X), db_Esce3 }, /*4*/ { "fisub", LONG, op2(ST,STI), "fsubrp" }, /*5*/ { "fisubr", LONG, op2(ST,STI), "fsubp" }, /*6*/ { "fidiv", LONG, op2(ST,STI), "fdivrp" }, @@ -486,7 +487,7 @@ const struct finst db_Escf[] = { /*1*/ { "", LONG, 0, 0 }, /*2*/ { "fist", LONG, 0, 0 }, /*3*/ { "fistp", LONG, 0, 0 }, -/*4*/ { "fbld", NONE, op1(XA), (const char *)db_Escf4 }, +/*4*/ { "fbld", NONE, op1(XA), db_Escf4 }, /*5*/ { "fld", QUAD, 0, 0 }, /*6*/ { "fbstp", NONE, 0, 0 }, /*7*/ { "fstp", QUAD, 0, 0 }, @@ -530,18 +531,18 @@ const struct inst db_Grp3[] = { { "idiv", true, NONE, op2(E,A), 0 }, }; -const struct inst db_Grp4[] = { +const struct inst db_Grp4[] = { { "inc", true, BYTE, op1(E), 0 }, { "dec", true, BYTE, op1(E), 0 }, - { "", true, NONE, 0, 0 }, - { "", true, NONE, 0, 0 }, - { "", true, NONE, 0, 0 }, - { "", true, NONE, 0, 0 }, - { "", true, NONE, 0, 0 }, - { "", true, NONE, 0, 0 } + { "", true, NONE, 0, 0 }, + { "", true, NONE, 0, 0 }, + { "", true, NONE, 0, 0 }, + { "", true, NONE, 0, 0 }, + { "", true, NONE, 0, 0 }, + { "", true, NONE, 0, 0 } }; -const struct inst db_Grp5[] = { +const struct inst db_Grp5[] = { { "inc", true, LONG, op1(E), 0 }, { "dec", true, LONG, op1(E), 0 }, { "call", true, NONE, op1(Eind),0 }, @@ -549,7 +550,7 @@ const struct inst db_Grp5[] = { { "jmp", true, NONE, op1(Eind),0 }, { "ljmp", true, NONE, op1(Eind),0 }, { "push", true, LONG, op1(E), 0 }, - { "", true, NONE, 0, 0 } + { "", true, NONE, 0, 0 } }; const struct inst db_inst_table[256] = { @@ -596,7 +597,7 @@ const struct inst db_inst_table[256] = { /*24*/ { "and", false, BYTE, op2(I, A), 0 }, /*25*/ { "and", false, LONG, op2(I, A), 0 }, /*26*/ { "", false, NONE, 0, 0 }, -/*27*/ { "aaa", false, NONE, 0, 0 }, +/*27*/ { "daa", false, NONE, 0, 0 }, /*28*/ { "sub", true, BYTE, op2(R, E), 0 }, /*29*/ { "sub", true, LONG, op2(R, E), 0 }, @@ -614,7 +615,7 @@ const struct inst db_inst_table[256] = { /*34*/ { "xor", false, BYTE, op2(I, A), 0 }, /*35*/ { "xor", false, LONG, op2(I, A), 0 }, /*36*/ { "", false, NONE, 0, 0 }, -/*37*/ { "daa", false, NONE, 0, 0 }, +/*37*/ { "aaa", false, NONE, 0, 0 }, /*38*/ { "cmp", true, BYTE, op2(R, E), 0 }, /*39*/ { "cmp", true, LONG, op2(R, E), 0 }, @@ -702,10 +703,10 @@ const struct inst db_inst_table[256] = { /*7e*/ { "jle", false, NONE, op1(Db), 0 }, /*7f*/ { "jnle", false, NONE, op1(Db), 0 }, -/*80*/ { "", true, BYTE, op2(I, E), (const char *)db_Grp1 }, -/*81*/ { "", true, LONG, op2(I, E), (const char *)db_Grp1 }, -/*82*/ { "", true, BYTE, op2(Is,E), (const char *)db_Grp1 }, -/*83*/ { "", true, LONG, op2(Ibs,E), (const char *)db_Grp1 }, +/*80*/ { "", true, BYTE, op2(I, E), db_Grp1 }, +/*81*/ { "", true, LONG, op2(I, E), db_Grp1 }, +/*82*/ { "", true, BYTE, op2(Is,E), db_Grp1 }, +/*83*/ { "", true, LONG, op2(Ibs,E), db_Grp1 }, /*84*/ { "test", true, BYTE, op2(R, E), 0 }, /*85*/ { "test", true, LONG, op2(R, E), 0 }, /*86*/ { "xchg", true, BYTE, op2(R, E), 0 }, @@ -774,8 +775,8 @@ const struct inst db_inst_table[256] = { /*be*/ { "mov", false, LONG, op2(Iq, Ri), 0 }, /*bf*/ { "mov", false, LONG, op2(Iq, Ri), 0 }, -/*c0*/ { "", true, BYTE, op2(Ib, E), (const char *)db_Grp2 }, -/*c1*/ { "", true, LONG, op2(Ib, E), (const char *)db_Grp2 }, +/*c0*/ { "", true, BYTE, op2(Ib, E), db_Grp2 }, +/*c1*/ { "", true, LONG, op2(Ib, E), db_Grp2 }, /*c2*/ { "ret", false, NONE, op1(Iw), 0 }, /*c3*/ { "ret", false, NONE, 0, 0 }, /*c4*/ { "les", true, LONG, op2(E, R), 0 }, @@ -792,23 +793,23 @@ const struct inst db_inst_table[256] = { /*ce*/ { "into", false, NONE, 0, 0 }, /*cf*/ { "iret", false, NONE, 0, 0 }, -/*d0*/ { "", true, BYTE, op2(o1, E), (const char *)db_Grp2 }, -/*d1*/ { "", true, LONG, op2(o1, E), (const char *)db_Grp2 }, -/*d2*/ { "", true, BYTE, op2(CL, E), (const char *)db_Grp2 }, -/*d3*/ { "", true, LONG, op2(CL, E), (const char *)db_Grp2 }, +/*d0*/ { "", true, BYTE, op2(o1, E), db_Grp2 }, +/*d1*/ { "", true, LONG, op2(o1, E), db_Grp2 }, +/*d2*/ { "", true, BYTE, op2(CL, E), db_Grp2 }, +/*d3*/ { "", true, LONG, op2(CL, E), db_Grp2 }, /*d4*/ { "aam", true, NONE, 0, 0 }, /*d5*/ { "aad", true, NONE, 0, 0 }, /*d6*/ { "", false, NONE, 0, 0 }, /*d7*/ { "xlat", false, BYTE, op1(BX), 0 }, -/*d8*/ { "", true, NONE, 0, (const char *)db_Esc8 }, -/*d9*/ { "", true, NONE, 0, (const char *)db_Esc9 }, -/*da*/ { "", true, NONE, 0, (const char *)db_Esca }, -/*db*/ { "", true, NONE, 0, (const char *)db_Escb }, -/*dc*/ { "", true, NONE, 0, (const char *)db_Escc }, -/*dd*/ { "", true, NONE, 0, (const char *)db_Escd }, -/*de*/ { "", true, NONE, 0, (const char *)db_Esce }, -/*df*/ { "", true, NONE, 0, (const char *)db_Escf }, +/*d8*/ { "", true, NONE, 0, db_Esc8 }, +/*d9*/ { "", true, NONE, 0, db_Esc9 }, +/*da*/ { "", true, NONE, 0, db_Esca }, +/*db*/ { "", true, NONE, 0, db_Escb }, +/*dc*/ { "", true, NONE, 0, db_Escc }, +/*dd*/ { "", true, NONE, 0, db_Escd }, +/*de*/ { "", true, NONE, 0, db_Esce }, +/*df*/ { "", true, NONE, 0, db_Escf }, /*e0*/ { "loopne",false, NONE, op1(Db), 0 }, /*e1*/ { "loope", false, NONE, op1(Db), 0 }, @@ -834,8 +835,8 @@ const struct inst db_inst_table[256] = { /*f3*/ { "", false, NONE, 0, 0 }, /*f4*/ { "hlt", false, NONE, 0, 0 }, /*f5*/ { "cmc", false, NONE, 0, 0 }, -/*f6*/ { "", true, BYTE, 0, (const char *)db_Grp3 }, -/*f7*/ { "", true, LONG, 0, (const char *)db_Grp3 }, +/*f6*/ { "", true, BYTE, 0, db_Grp3 }, +/*f7*/ { "", true, LONG, 0, db_Grp3 }, /*f8*/ { "clc", false, NONE, 0, 0 }, /*f9*/ { "stc", false, NONE, 0, 0 }, @@ -843,11 +844,11 @@ const struct inst db_inst_table[256] = { /*fb*/ { "sti", false, NONE, 0, 0 }, /*fc*/ { "cld", false, NONE, 0, 0 }, /*fd*/ { "std", false, NONE, 0, 0 }, -/*fe*/ { "", true, NONE, 0, (const char *)db_Grp4 }, -/*ff*/ { "", true, NONE, 0, (const char *)db_Grp5 }, +/*fe*/ { "", true, NONE, 0, db_Grp4 }, +/*ff*/ { "", true, NONE, 0, db_Grp5 }, }; -const struct inst db_bad_inst = +const struct inst db_bad_inst = { "???", false, NONE, 0, 0 } ; @@ -962,7 +963,8 @@ db_addr_t db_disasm_esc(db_addr_t, int, * Read address at location and return updated location. */ db_addr_t -db_read_address(db_addr_t loc, u_int rex, int short_addr, int regmodrm, struct i_addr *addrp) +db_read_address(db_addr_t loc, u_int rex, int short_addr, int regmodrm, + struct i_addr *addrp) /* addrp: out */ { int mod, rm, sib, index, disp, ext; @@ -992,7 +994,7 @@ db_read_address(db_addr_t loc, u_int rex ext = ((rex & REX_b) != 0); switch (mod) { - case 0: + case 0: if (rm == 5) { get_value_inc(addrp->disp, loc, 4, false); addrp->base = 0; @@ -1001,12 +1003,12 @@ db_read_address(db_addr_t loc, u_int rex addrp->base = db_reg[ext][LONG][rm]; } break; - case 1: + case 1: get_value_inc(disp, loc, 1, true); addrp->disp = disp; addrp->base = db_reg[ext][LONG][rm]; break; - case 2: + case 2: get_value_inc(disp, loc, 4, false); addrp->disp = disp; addrp->base = db_reg[ext][LONG][rm]; @@ -1027,7 +1029,7 @@ db_read_address(db_addr_t loc, u_int rex ext = ((rex & REX_b) != 0); switch (mod) { - case 0: + case 0: if (rm == 5) { /* x86_64 RIP-relative addressing */ get_value_inc(addrp->disp, loc, 4, false); @@ -1037,12 +1039,12 @@ db_read_address(db_addr_t loc, u_int rex addrp->base = db_reg[ext][QUAD][rm]; } break; - case 1: + case 1: get_value_inc(disp, loc, 1, true); addrp->disp = disp; addrp->base = db_reg[ext][QUAD][rm]; break; - case 2: + case 2: get_value_inc(disp, loc, 4, false); addrp->disp = disp; addrp->base = db_reg[ext][QUAD][rm]; @@ -1081,7 +1083,8 @@ db_print_address(const char * seg, u_int * and return updated location. */ db_addr_t -db_disasm_esc(db_addr_t loc, int inst, u_int rex, int short_addr, int size, const char * seg) +db_disasm_esc(db_addr_t loc, int inst, u_int rex, int short_addr, int size, + const char * seg) { int regmodrm; const struct finst *fp; @@ -1094,59 +1097,59 @@ db_disasm_esc(db_addr_t loc, int inst, u mod = f_mod(regmodrm); if (mod != 3) { /* - * Normal address modes. - */ + * Normal address modes. + */ loc = db_read_address(loc, rex, short_addr, regmodrm, &address); db_printf("%s", fp->f_name); - switch(fp->f_size) { - case SNGL: + switch (fp->f_size) { + case SNGL: db_printf("s"); break; - case DBLR: + case DBLR: db_printf("l"); break; - case EXTR: + case EXTR: db_printf("t"); break; - case WORD: + case WORD: db_printf("s"); break; - case LONG: + case LONG: db_printf("l"); break; - case QUAD: + case QUAD: db_printf("q"); break; - default: + default: break; } db_printf("\t"); db_print_address(seg, rex, BYTE, &address); } else { /* - * 'reg-reg' - special formats - */ + * 'reg-reg' - special formats + */ switch (fp->f_rrmode) { - case op2(ST,STI): + case op2(ST,STI): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st,%%st(%d)",name,f_rm(regmodrm)); + db_printf("%s\t%%st,%%st(%d)", name, f_rm(regmodrm)); break; - case op2(STI,ST): + case op2(STI,ST): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st(%d),%%st",name, f_rm(regmodrm)); + db_printf("%s\t%%st(%d),%%st", name, f_rm(regmodrm)); break; - case op1(STI): + case op1(STI): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st(%d)",name, f_rm(regmodrm)); + db_printf("%s\t%%st(%d)", name, f_rm(regmodrm)); break; - case op1(X): - db_printf("%s", ((const char * const *)fp->f_rrname)[f_rm(regmodrm)]); + case op1(X): + db_printf("%s", ((const char * const *)fp->f_rrname)[f_rm(regmodrm)]); break; - case op1(XA): + case op1(XA): db_printf("%s\t%%ax", - ((const char * const *)fp->f_rrname)[f_rm(regmodrm)]); + ((const char * const *)fp->f_rrname)[f_rm(regmodrm)]); break; - default: + default: db_printf("<bad instruction>"); break; } @@ -1166,9 +1169,9 @@ db_disasm(db_addr_t loc, bool altfmt) int inst; int size; int short_addr; - const char * seg; - const struct inst * ip; - const char * i_name; + const char *seg; + const struct inst *ip; + const char *i_name; int i_size; int i_mode; int regmodrm = 0; @@ -1187,11 +1190,11 @@ db_disasm(db_addr_t loc, bool altfmt) #ifdef _KERNEL /* - * Don't try to disassemble the location if the mapping is invalid. - * If we do, we'll fault, and end up debugging the debugger! - * in the case of largepages, "pte" is really the pde and "pde" is - * really the entry for the pdp itself. - */ + * Don't try to disassemble the location if the mapping is invalid. + * If we do, we'll fault, and end up debugging the debugger! + * in the case of largepages, "pte" is really the pde and "pde" is + * really the entry for the pdp itself. + */ if ((vaddr_t)loc >= VM_MIN_KERNEL_ADDRESS) pte = kvtopte((vaddr_t)loc); else @@ -1209,48 +1212,48 @@ db_disasm(db_addr_t loc, bool altfmt) seg = 0; /* - * Get prefixes - */ + * Get prefixes + */ prefix = true; do { - if ((inst & 0xf0) == 0x40) { + if ((inst & 0xf0) == 0x40) { rex |= inst; } else switch (inst) { - case 0x66: /* data16 */ + case 0x66: /* data16 */ size = WORD; break; - case 0x67: + case 0x67: short_addr = true; break; - case 0x26: + case 0x26: seg = "%es"; break; - case 0x36: + case 0x36: seg = "%ss"; break; - case 0x2e: + case 0x2e: seg = "%cs"; break; - case 0x3e: + case 0x3e: seg = "%ds"; break; - case 0x64: + case 0x64: seg = "%fs"; break; - case 0x65: + case 0x65: seg = "%gs"; break; - case 0xf0: + case 0xf0: db_printf("lock "); break; - case 0xf2: + case 0xf2: db_printf("repne "); break; - case 0xf3: + case 0xf3: db_printf("repe "); /* XXX repe VS rep */ break; - default: + default: prefix = false; break; } @@ -1322,7 +1325,7 @@ db_disasm(db_addr_t loc, bool altfmt) if (size == WORD) db_printf("%s", i_name); else - db_printf("%s", ip->i_extra); + db_printf("%s", (const char *)ip->i_extra); } else { db_printf("%s", i_name); if (i_size != NONE) { @@ -1354,114 +1357,114 @@ db_disasm(db_addr_t loc, bool altfmt) db_printf(","); switch (i_mode & 0xFF) { - case E: + case E: db_print_address(seg, rex, size, &address); break; - case Eind: + case Eind: db_printf("*"); db_print_address(seg, rex, size, &address); break; - case Ed: + case Ed: db_print_address(seg, rex, LONG, &address); break; - case Ew: + case Ew: db_print_address(seg, rex, WORD, &address); break; - case Eb: + case Eb: db_print_address(seg, rex, BYTE, &address); break; - case R: { + case R: { int ext = ((rex & REX_r) != 0); db_printf("%s", db_reg[ext][size][f_reg(regmodrm)]); break; } - case Rw: { + case Rw: { int ext = ((rex & REX_r) != 0); db_printf("%s", db_reg[ext][WORD][f_reg(regmodrm)]); break; } - case Ri: { + case Ri: { int ext = ((rex & REX_b) != 0); db_printf("%s", db_reg[ext][size][f_rm(inst)]); break; } - case S: + case S: db_printf("%s", db_seg_reg[f_reg(regmodrm)]); break; - case Si: + case Si: db_printf("%s", db_seg_reg[f_reg(inst)]); break; - case A: + case A: db_printf("%s", db_reg[0][size][0]); /* acc */ break; - case BX: + case BX: if (seg) db_printf("%s:", seg); db_printf("(%s)", short_addr ? "%ebx" : "%rbx"); break; - case CL: + case CL: db_printf("%%cl"); break; - case DX: + case DX: db_printf("%%dx"); break; - case SI: + case SI: if (seg) db_printf("%s:", seg); db_printf("(%s)", short_addr ? "%esi" : "%rsi"); break; - case DI: + case DI: db_printf("%%es:(%s)", short_addr ? "%edi" : "%rdi"); break; - case CR: + case CR: db_printf("%%cr%d", f_reg(regmodrm)); break; - case DR: + case DR: db_printf("%%dr%d", f_reg(regmodrm)); break; - case TR: + case TR: db_printf("%%tr%d", f_reg(regmodrm)); break; - case Iq: + case Iq: if (size == QUAD) { get_value_inc(imm64, loc, 8, false); db_format_radix(tbuf, 24, imm64, true); db_printf("$%s", tbuf); break; } - case I: + case I: len = db_lengths[size]; get_value_inc(imm, loc, len, false);/* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Is: + case Is: len = db_lengths[size]; get_value_inc(imm, loc, len, true); /* signed */ db_format_radix(tbuf, 24, imm, true); db_printf("$%s", tbuf); break; - case Ib: + case Ib: get_value_inc(imm, loc, 1, false); /* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Ibs: + case Ibs: get_value_inc(imm, loc, 1, true); /* signed */ db_format_radix(tbuf, 24, imm, true); db_printf("$%s", tbuf); break; - case Iw: + case Iw: get_value_inc(imm, loc, 2, false); /* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Il: + case Il: get_value_inc(imm, loc, 4, false); db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case O: /* Only move %eax to/from absolute address */ + case O: /* Only move %eax to/from absolute address */ if (short_addr) get_value_inc(imm64, loc, 2, true); else @@ -1473,23 +1476,23 @@ db_disasm(db_addr_t loc, bool altfmt) db_printsym((db_addr_t)imm64, DB_STGY_ANY, db_printf); break; - case Db: + case Db: get_value_inc(displ, loc, 1, true); db_printsym((db_addr_t)(displ + loc), DB_STGY_XTRN, db_printf); break; - case Dl: + case Dl: get_value_inc(displ, loc, 4, true); db_printsym((db_addr_t)(displ + loc), DB_STGY_XTRN, db_printf); break; - case o1: + case o1: db_printf("$1"); break; - case o3: + case o3: db_printf("$3"); break; - case OS: + case OS: get_value_inc(imm, loc, 4, false); /* offset */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); Index: src/sys/arch/i386/i386/db_disasm.c diff -u src/sys/arch/i386/i386/db_disasm.c:1.40 src/sys/arch/i386/i386/db_disasm.c:1.40.38.1 --- src/sys/arch/i386/i386/db_disasm.c:1.40 Sat Mar 14 21:04:10 2009 +++ src/sys/arch/i386/i386/db_disasm.c Fri Dec 12 19:07:46 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: db_disasm.c,v 1.40 2009/03/14 21:04:10 dsl Exp $ */ +/* $NetBSD: db_disasm.c,v 1.40.38.1 2014/12/12 19:07:46 martin Exp $ */ /* * Mach Operating System @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.40 2009/03/14 21:04:10 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.40.38.1 2014/12/12 19:07:46 martin Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -100,7 +100,7 @@ struct inst { short i_has_modrm; /* has regmodrm byte */ short i_size; /* operand size */ int i_mode; /* addressing modes */ - const char *i_extra; /* pointer to extra opcode table */ + const void *i_extra; /* pointer to extra opcode table */ }; #define op1(x) (x) @@ -111,7 +111,7 @@ struct finst { const char *f_name; /* name for memory instruction */ int f_size; /* size for memory instruction */ int f_rrmode; /* mode for rr instruction */ - const char *f_rrname; /* name for rr instruction + const void *f_rrname; /* name for rr instruction (or pointer to table) */ }; @@ -160,8 +160,8 @@ const char * const db_Grp9[] = { }; const struct inst db_inst_0f0x[] = { -/*00*/ { "", true, NONE, op1(Ew), (const char *)db_Grp6 }, -/*01*/ { "", true, NONE, op1(Ew), (const char *)db_Grp7 }, +/*00*/ { "", true, NONE, op1(Ew), db_Grp6 }, +/*01*/ { "", true, NONE, op1(Ew), db_Grp7 }, /*02*/ { "lar", true, LONG, op2(E,R), 0 }, /*03*/ { "lsl", true, LONG, op2(E,R), 0 }, /*04*/ { "", false, NONE, 0, 0 }, @@ -179,7 +179,7 @@ const struct inst db_inst_0f0x[] = { /*0f*/ { "", false, NONE, 0, 0 }, }; -const struct inst db_inst_0f2x[] = { +const struct inst db_inst_0f2x[] = { /*20*/ { "mov", true, LONG, op2(CR,E), 0 }, /* use E for reg */ /*21*/ { "mov", true, LONG, op2(DR,E), 0 }, /* since mod == 11 */ /*22*/ { "mov", true, LONG, op2(E,CR), 0 }, @@ -199,27 +199,27 @@ const struct inst db_inst_0f2x[] = { /*2f*/ { "", false, NONE, 0, 0 }, }; -const struct inst db_inst_0f3x[] = { +const struct inst db_inst_0f3x[] = { /*30*/ { "wrmsr", false, NONE, 0, 0 }, /*31*/ { "rdtsc", false, NONE, 0, 0 }, /*32*/ { "rdmsr", false, NONE, 0, 0 }, /*33*/ { "rdpmc", false, NONE, 0, 0 }, -/*34*/ { "", false, NONE, 0, 0 }, -/*35*/ { "", false, NONE, 0, 0 }, +/*34*/ { "sysenter",false,NONE, 0, 0 }, +/*35*/ { "sysexit",false, NONE, 0, 0 }, /*36*/ { "", false, NONE, 0, 0 }, -/*37*/ { "", false, NONE, 0, 0 }, +/*37*/ { "getsec",false, NONE, 0, 0 }, /*38*/ { "", false, NONE, 0, 0 }, /*39*/ { "", false, NONE, 0, 0 }, /*3a*/ { "", false, NONE, 0, 0 }, -/*3v*/ { "", false, NONE, 0, 0 }, +/*3b*/ { "", false, NONE, 0, 0 }, /*3c*/ { "", false, NONE, 0, 0 }, /*3d*/ { "", false, NONE, 0, 0 }, /*3e*/ { "", false, NONE, 0, 0 }, /*3f*/ { "", false, NONE, 0, 0 }, }; -const struct inst db_inst_0f4x[] = { +const struct inst db_inst_0f4x[] = { /*40*/ { "cmovo", true, LONG, op2(E,R), 0 }, /*41*/ { "cmovno", true, LONG, op2(E,R), 0 }, /*42*/ { "cmovc", true, LONG, op2(E,R), 0 }, @@ -228,6 +228,7 @@ const struct inst db_inst_0f4x[] = { /*45*/ { "cmovnz", true, LONG, op2(E,R), 0 }, /*46*/ { "cmovbe", true, LONG, op2(E,R), 0 }, /*47*/ { "cmovmbe",true, LONG, op2(E,R), 0 }, + /*48*/ { "cmovs", true, LONG, op2(E,R), 0 }, /*49*/ { "cmovns", true, LONG, op2(E,R), 0 }, /*4a*/ { "cmovp", true, LONG, op2(E,R), 0 }, @@ -238,7 +239,7 @@ const struct inst db_inst_0f4x[] = { /*4f*/ { "cmovnle",true, LONG, op2(E,R), 0 }, }; -const struct inst db_inst_0f8x[] = { +const struct inst db_inst_0f8x[] = { /*80*/ { "jo", false, NONE, op1(Dl), 0 }, /*81*/ { "jno", false, NONE, op1(Dl), 0 }, /*82*/ { "jb", false, NONE, op1(Dl), 0 }, @@ -258,7 +259,7 @@ const struct inst db_inst_0f8x[] = { /*8f*/ { "jnle", false, NONE, op1(Dl), 0 }, }; -const struct inst db_inst_0f9x[] = { +const struct inst db_inst_0f9x[] = { /*90*/ { "seto", true, NONE, op1(Eb), 0 }, /*91*/ { "setno", true, NONE, op1(Eb), 0 }, /*92*/ { "setb", true, NONE, op1(Eb), 0 }, @@ -278,13 +279,13 @@ const struct inst db_inst_0f9x[] = { /*9f*/ { "setnle",true, NONE, op1(Eb), 0 }, }; -const struct inst db_inst_0fax[] = { +const struct inst db_inst_0fax[] = { /*a0*/ { "push", false, NONE, op1(Si), 0 }, /*a1*/ { "pop", false, NONE, op1(Si), 0 }, /*a2*/ { "cpuid", false, NONE, 0, 0 }, /*a3*/ { "bt", true, LONG, op2(R,E), 0 }, -/*a4*/ { "shld", true, LONG, op3(Ib,E,R), 0 }, -/*a5*/ { "shld", true, LONG, op3(CL,E,R), 0 }, +/*a4*/ { "shld", true, LONG, op3(Ib,R,E), 0 }, +/*a5*/ { "shld", true, LONG, op3(CL,R,E), 0 }, /*a6*/ { "", false, NONE, 0, 0 }, /*a7*/ { "", false, NONE, 0, 0 }, @@ -292,13 +293,13 @@ const struct inst db_inst_0fax[] = { /*a9*/ { "pop", false, NONE, op1(Si), 0 }, /*aa*/ { "rsm", false, NONE, 0, 0 }, /*ab*/ { "bts", true, LONG, op2(R,E), 0 }, -/*ac*/ { "shrd", true, LONG, op3(Ib,E,R), 0 }, -/*ad*/ { "shrd", true, LONG, op3(CL,E,R), 0 }, +/*ac*/ { "shrd", true, LONG, op3(Ib,R,E), 0 }, +/*ad*/ { "shrd", true, LONG, op3(CL,R,E), 0 }, /*ae*/ { "fxsave",true, LONG, 0, 0 }, /*af*/ { "imul", true, LONG, op2(E,R), 0 }, }; -const struct inst db_inst_0fbx[] = { +const struct inst db_inst_0fbx[] = { /*b0*/ { "cmpxchg",true, BYTE, op2(R, E), 0 }, /*b1*/ { "cmpxchg",true, LONG, op2(R, E), 0 }, /*b2*/ { "lss", true, LONG, op2(E, R), 0 }, @@ -310,7 +311,7 @@ const struct inst db_inst_0fbx[] = { /*b8*/ { "", false, NONE, 0, 0 }, /*b9*/ { "", false, NONE, 0, 0 }, -/*ba*/ { "", true, LONG, op2(Ib, E), (const char *)db_Grp8 }, +/*ba*/ { "", true, LONG, op2(Ib, E), db_Grp8 }, /*bb*/ { "btc", true, LONG, op2(R, E), 0 }, /*bc*/ { "bsf", true, LONG, op2(E, R), 0 }, /*bd*/ { "bsr", true, LONG, op2(E, R), 0 }, @@ -318,7 +319,7 @@ const struct inst db_inst_0fbx[] = { /*bf*/ { "movsw", true, LONG, op2(E, R), 0 }, }; -const struct inst db_inst_0fcx[] = { +const struct inst db_inst_0fcx[] = { /*c0*/ { "xadd", true, BYTE, op2(R, E), 0 }, /*c1*/ { "xadd", true, LONG, op2(R, E), 0 }, /*c2*/ { "", false, NONE, 0, 0 }, @@ -326,7 +327,8 @@ const struct inst db_inst_0fcx[] = { /*c4*/ { "", false, NONE, 0, 0 }, /*c5*/ { "", false, NONE, 0, 0 }, /*c6*/ { "", false, NONE, 0, 0 }, -/*c7*/ { "", true, NONE, op1(E), (const char *)db_Grp9 }, +/*c7*/ { "", true, NONE, op1(E), db_Grp9 }, + /*c8*/ { "bswap", false, LONG, op1(Ri), 0 }, /*c9*/ { "bswap", false, LONG, op1(Ri), 0 }, /*ca*/ { "bswap", false, LONG, op1(Ri), 0 }, @@ -339,21 +341,21 @@ const struct inst db_inst_0fcx[] = { const struct inst * const db_inst_0f[] = { db_inst_0f0x, - 0, + NULL, db_inst_0f2x, db_inst_0f3x, db_inst_0f4x, - 0, - 0, - 0, + NULL, + NULL, + NULL, db_inst_0f8x, db_inst_0f9x, db_inst_0fax, db_inst_0fbx, db_inst_0fcx, - 0, - 0, - 0 + NULL, + NULL, + NULL }; const char * const db_Esc92[] = { @@ -406,12 +408,12 @@ const struct finst db_Esc8[] = { const struct finst db_Esc9[] = { /*0*/ { "fld", SNGL, op1(STI), 0 }, /*1*/ { "", NONE, op1(STI), "fxch" }, -/*2*/ { "fst", SNGL, op1(X), (const char *)db_Esc92 }, -/*3*/ { "fstp", SNGL, op1(X), (const char *)db_Esc93 }, -/*4*/ { "fldenv", NONE, op1(X), (const char *)db_Esc94 }, -/*5*/ { "fldcw", NONE, op1(X), (const char *)db_Esc95 }, -/*6*/ { "fnstenv",NONE, op1(X), (const char *)db_Esc96 }, -/*7*/ { "fnstcw", NONE, op1(X), (const char *)db_Esc97 }, +/*2*/ { "fst", SNGL, op1(X), db_Esc92 }, +/*3*/ { "fstp", SNGL, op1(X), db_Esc93 }, +/*4*/ { "fldenv", NONE, op1(X), db_Esc94 }, +/*5*/ { "fldcw", NONE, op1(X), db_Esc95 }, +/*6*/ { "fnstenv",NONE, op1(X), db_Esc96 }, +/*7*/ { "fnstcw", NONE, op1(X), db_Esc97 }, }; const struct finst db_Esca[] = { @@ -419,7 +421,7 @@ const struct finst db_Esca[] = { /*1*/ { "fimul", WORD, 0, 0 }, /*2*/ { "ficom", WORD, 0, 0 }, /*3*/ { "ficomp", WORD, 0, 0 }, -/*4*/ { "fisub", WORD, op1(X), (const char *)db_Esca4 }, +/*4*/ { "fisub", WORD, op1(X), db_Esca4 }, /*5*/ { "fisubr", WORD, 0, 0 }, /*6*/ { "fidiv", WORD, 0, 0 }, /*7*/ { "fidivr", WORD, 0, 0 } @@ -430,7 +432,7 @@ const struct finst db_Escb[] = { /*1*/ { "", NONE, 0, 0 }, /*2*/ { "fist", WORD, 0, 0 }, /*3*/ { "fistp", WORD, 0, 0 }, -/*4*/ { "", WORD, op1(X), (const char *)db_Escb4 }, +/*4*/ { "", WORD, op1(X), db_Escb4 }, /*5*/ { "fld", EXTR, 0, 0 }, /*6*/ { "", WORD, 0, 0 }, /*7*/ { "fstp", EXTR, 0, 0 }, @@ -462,7 +464,7 @@ const struct finst db_Esce[] = { /*0*/ { "fiadd", LONG, op2(ST,STI), "faddp" }, /*1*/ { "fimul", LONG, op2(ST,STI), "fmulp" }, /*2*/ { "ficom", LONG, 0, 0 }, -/*3*/ { "ficomp", LONG, op1(X), (const char *)db_Esce3 }, +/*3*/ { "ficomp", LONG, op1(X), db_Esce3 }, /*4*/ { "fisub", LONG, op2(ST,STI), "fsubrp" }, /*5*/ { "fisubr", LONG, op2(ST,STI), "fsubp" }, /*6*/ { "fidiv", LONG, op2(ST,STI), "fdivrp" }, @@ -474,7 +476,7 @@ const struct finst db_Escf[] = { /*1*/ { "", LONG, 0, 0 }, /*2*/ { "fist", LONG, 0, 0 }, /*3*/ { "fistp", LONG, 0, 0 }, -/*4*/ { "fbld", NONE, op1(XA), (const char *)db_Escf4 }, +/*4*/ { "fbld", NONE, op1(XA), db_Escf4 }, /*5*/ { "fld", QUAD, 0, 0 }, /*6*/ { "fbstp", NONE, 0, 0 }, /*7*/ { "fstp", QUAD, 0, 0 }, @@ -518,7 +520,7 @@ const struct inst db_Grp3[] = { { "idiv", true, NONE, op2(E,A), 0 }, }; -const struct inst db_Grp4[] = { +const struct inst db_Grp4[] = { { "inc", true, BYTE, op1(E), 0 }, { "dec", true, BYTE, op1(E), 0 }, { "", true, NONE, 0, 0 }, @@ -529,7 +531,7 @@ const struct inst db_Grp4[] = { { "", true, NONE, 0, 0 } }; -const struct inst db_Grp5[] = { +const struct inst db_Grp5[] = { { "inc", true, LONG, op1(E), 0 }, { "dec", true, LONG, op1(E), 0 }, { "call", true, NONE, op1(Eind),0 }, @@ -584,7 +586,7 @@ const struct inst db_inst_table[256] = { /*24*/ { "and", false, BYTE, op2(I, A), 0 }, /*25*/ { "and", false, LONG, op2(I, A), 0 }, /*26*/ { "", false, NONE, 0, 0 }, -/*27*/ { "aaa", false, NONE, 0, 0 }, +/*27*/ { "daa", false, NONE, 0, 0 }, /*28*/ { "sub", true, BYTE, op2(R, E), 0 }, /*29*/ { "sub", true, LONG, op2(R, E), 0 }, @@ -602,7 +604,7 @@ const struct inst db_inst_table[256] = { /*34*/ { "xor", false, BYTE, op2(I, A), 0 }, /*35*/ { "xor", false, LONG, op2(I, A), 0 }, /*36*/ { "", false, NONE, 0, 0 }, -/*37*/ { "daa", false, NONE, 0, 0 }, +/*37*/ { "aaa", false, NONE, 0, 0 }, /*38*/ { "cmp", true, BYTE, op2(R, E), 0 }, /*39*/ { "cmp", true, LONG, op2(R, E), 0 }, @@ -653,7 +655,6 @@ const struct inst db_inst_table[256] = { /*61*/ { "popa", false, LONG, 0, 0 }, /*62*/ { "bound", true, LONG, op2(E, R), 0 }, /*63*/ { "arpl", true, NONE, op2(Ew,Rw), 0 }, - /*64*/ { "", false, NONE, 0, 0 }, /*65*/ { "", false, NONE, 0, 0 }, /*66*/ { "", false, NONE, 0, 0 }, @@ -686,10 +687,10 @@ const struct inst db_inst_table[256] = { /*7e*/ { "jle", false, NONE, op1(Db), 0 }, /*7f*/ { "jnle", false, NONE, op1(Db), 0 }, -/*80*/ { "", true, BYTE, op2(I, E), (const char *)db_Grp1 }, -/*81*/ { "", true, LONG, op2(I, E), (const char *)db_Grp1 }, -/*82*/ { "", true, BYTE, op2(Is,E), (const char *)db_Grp1 }, -/*83*/ { "", true, LONG, op2(Ibs,E), (const char *)db_Grp1 }, +/*80*/ { "", true, BYTE, op2(I, E), db_Grp1 }, +/*81*/ { "", true, LONG, op2(I, E), db_Grp1 }, +/*82*/ { "", true, BYTE, op2(Is,E), db_Grp1 }, +/*83*/ { "", true, LONG, op2(Ibs,E), db_Grp1 }, /*84*/ { "test", true, BYTE, op2(R, E), 0 }, /*85*/ { "test", true, LONG, op2(R, E), 0 }, /*86*/ { "xchg", true, BYTE, op2(R, E), 0 }, @@ -758,8 +759,8 @@ const struct inst db_inst_table[256] = { /*be*/ { "mov", false, LONG, op2(I, Ri), 0 }, /*bf*/ { "mov", false, LONG, op2(I, Ri), 0 }, -/*c0*/ { "", true, BYTE, op2(Ib, E), (const char *)db_Grp2 }, -/*c1*/ { "", true, LONG, op2(Ib, E), (const char *)db_Grp2 }, +/*c0*/ { "", true, BYTE, op2(Ib, E), db_Grp2 }, +/*c1*/ { "", true, LONG, op2(Ib, E), db_Grp2 }, /*c2*/ { "ret", false, NONE, op1(Iw), 0 }, /*c3*/ { "ret", false, NONE, 0, 0 }, /*c4*/ { "les", true, LONG, op2(E, R), 0 }, @@ -776,23 +777,23 @@ const struct inst db_inst_table[256] = { /*ce*/ { "into", false, NONE, 0, 0 }, /*cf*/ { "iret", false, NONE, 0, 0 }, -/*d0*/ { "", true, BYTE, op2(o1, E), (const char *)db_Grp2 }, -/*d1*/ { "", true, LONG, op2(o1, E), (const char *)db_Grp2 }, -/*d2*/ { "", true, BYTE, op2(CL, E), (const char *)db_Grp2 }, -/*d3*/ { "", true, LONG, op2(CL, E), (const char *)db_Grp2 }, +/*d0*/ { "", true, BYTE, op2(o1, E), db_Grp2 }, +/*d1*/ { "", true, LONG, op2(o1, E), db_Grp2 }, +/*d2*/ { "", true, BYTE, op2(CL, E), db_Grp2 }, +/*d3*/ { "", true, LONG, op2(CL, E), db_Grp2 }, /*d4*/ { "aam", true, NONE, 0, 0 }, /*d5*/ { "aad", true, NONE, 0, 0 }, /*d6*/ { "", false, NONE, 0, 0 }, /*d7*/ { "xlat", false, BYTE, op1(BX), 0 }, -/*d8*/ { "", true, NONE, 0, (const char *)db_Esc8 }, -/*d9*/ { "", true, NONE, 0, (const char *)db_Esc9 }, -/*da*/ { "", true, NONE, 0, (const char *)db_Esca }, -/*db*/ { "", true, NONE, 0, (const char *)db_Escb }, -/*dc*/ { "", true, NONE, 0, (const char *)db_Escc }, -/*dd*/ { "", true, NONE, 0, (const char *)db_Escd }, -/*de*/ { "", true, NONE, 0, (const char *)db_Esce }, -/*df*/ { "", true, NONE, 0, (const char *)db_Escf }, +/*d8*/ { "", true, NONE, 0, db_Esc8 }, +/*d9*/ { "", true, NONE, 0, db_Esc9 }, +/*da*/ { "", true, NONE, 0, db_Esca }, +/*db*/ { "", true, NONE, 0, db_Escb }, +/*dc*/ { "", true, NONE, 0, db_Escc }, +/*dd*/ { "", true, NONE, 0, db_Escd }, +/*de*/ { "", true, NONE, 0, db_Esce }, +/*df*/ { "", true, NONE, 0, db_Escf }, /*e0*/ { "loopne",false, NONE, op1(Db), 0 }, /*e1*/ { "loope", false, NONE, op1(Db), 0 }, @@ -818,8 +819,8 @@ const struct inst db_inst_table[256] = { /*f3*/ { "", false, NONE, 0, 0 }, /*f4*/ { "hlt", false, NONE, 0, 0 }, /*f5*/ { "cmc", false, NONE, 0, 0 }, -/*f6*/ { "", true, BYTE, 0, (const char *)db_Grp3 }, -/*f7*/ { "", true, LONG, 0, (const char *)db_Grp3 }, +/*f6*/ { "", true, BYTE, 0, db_Grp3 }, +/*f7*/ { "", true, LONG, 0, db_Grp3 }, /*f8*/ { "clc", false, NONE, 0, 0 }, /*f9*/ { "stc", false, NONE, 0, 0 }, @@ -827,11 +828,11 @@ const struct inst db_inst_table[256] = { /*fb*/ { "sti", false, NONE, 0, 0 }, /*fc*/ { "cld", false, NONE, 0, 0 }, /*fd*/ { "std", false, NONE, 0, 0 }, -/*fe*/ { "", true, NONE, 0, (const char *)db_Grp4 }, -/*ff*/ { "", true, NONE, 0, (const char *)db_Grp5 }, +/*fe*/ { "", true, NONE, 0, db_Grp4 }, +/*ff*/ { "", true, NONE, 0, db_Grp5 }, }; -const struct inst db_bad_inst = +const struct inst db_bad_inst = { "???", false, NONE, 0, 0 } ; @@ -920,7 +921,7 @@ db_read_address(db_addr_t loc, int short addrp->index = 0; addrp->ss = 0; switch (mod) { - case 0: + case 0: if (rm == 6) { get_value_inc(disp, loc, 2, true); addrp->disp = disp; @@ -930,12 +931,12 @@ db_read_address(db_addr_t loc, int short addrp->base = db_index_reg_16[rm]; } break; - case 1: + case 1: get_value_inc(disp, loc, 1, true); addrp->disp = disp; addrp->base = db_index_reg_16[rm]; break; - case 2: + case 2: get_value_inc(disp, loc, 2, true); addrp->disp = disp; addrp->base = db_index_reg_16[rm]; @@ -952,7 +953,7 @@ db_read_address(db_addr_t loc, int short } switch (mod) { - case 0: + case 0: if (rm == 5) { get_value_inc(addrp->disp, loc, 4, false); addrp->base = 0; @@ -961,12 +962,12 @@ db_read_address(db_addr_t loc, int short addrp->base = db_reg[LONG][rm]; } break; - case 1: + case 1: get_value_inc(disp, loc, 1, true); addrp->disp = disp; addrp->base = db_reg[LONG][rm]; break; - case 2: + case 2: get_value_inc(disp, loc, 4, false); addrp->disp = disp; addrp->base = db_reg[LONG][rm]; @@ -1025,26 +1026,26 @@ db_disasm_esc( */ loc = db_read_address(loc, short_addr, regmodrm, &address); db_printf("%s", fp->f_name); - switch(fp->f_size) { - case SNGL: + switch (fp->f_size) { + case SNGL: db_printf("s"); break; - case DBLR: + case DBLR: db_printf("l"); break; - case EXTR: + case EXTR: db_printf("t"); break; - case WORD: + case WORD: db_printf("s"); break; - case LONG: + case LONG: db_printf("l"); break; - case QUAD: + case QUAD: db_printf("q"); break; - default: + default: break; } db_printf("\t"); @@ -1054,26 +1055,26 @@ db_disasm_esc( * 'reg-reg' - special formats */ switch (fp->f_rrmode) { - case op2(ST,STI): + case op2(ST,STI): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st,%%st(%d)",name,f_rm(regmodrm)); + db_printf("%s\t%%st,%%st(%d)", name, f_rm(regmodrm)); break; - case op2(STI,ST): + case op2(STI,ST): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st(%d),%%st",name, f_rm(regmodrm)); + db_printf("%s\t%%st(%d),%%st", name, f_rm(regmodrm)); break; - case op1(STI): + case op1(STI): name = (fp->f_rrname) ? fp->f_rrname : fp->f_name; - db_printf("%s\t%%st(%d)",name, f_rm(regmodrm)); + db_printf("%s\t%%st(%d)", name, f_rm(regmodrm)); break; - case op1(X): + case op1(X): db_printf("%s", ((const char *const*)fp->f_rrname)[f_rm(regmodrm)]); break; - case op1(XA): + case op1(XA): db_printf("%s\t%%ax", - ((const char *const*)fp->f_rrname)[f_rm(regmodrm)]); + ((const char *const*)fp->f_rrname)[f_rm(regmodrm)]); break; - default: + default: db_printf("<bad instruction>"); break; } @@ -1140,40 +1141,40 @@ db_disasm( prefix = true; do { switch (inst) { - case 0x66: /* data16 */ + case 0x66: /* data16 */ size = WORD; break; - case 0x67: + case 0x67: short_addr = true; break; - case 0x26: + case 0x26: seg = "%es"; break; - case 0x36: + case 0x36: seg = "%ss"; break; - case 0x2e: + case 0x2e: seg = "%cs"; break; - case 0x3e: + case 0x3e: seg = "%ds"; break; - case 0x64: + case 0x64: seg = "%fs"; break; - case 0x65: + case 0x65: seg = "%gs"; break; - case 0xf0: + case 0xf0: db_printf("lock "); break; - case 0xf2: + case 0xf2: db_printf("repne "); break; - case 0xf3: + case 0xf3: db_printf("repe "); /* XXX repe VS rep */ break; - default: + default: prefix = false; break; } @@ -1231,7 +1232,7 @@ db_disasm( if (size == WORD) db_printf("%s", i_name); else - db_printf("%s", ip->i_extra); + db_printf("%s", (const char *)ip->i_extra); } else { db_printf("%s", i_name); if (i_size != NONE) { @@ -1258,98 +1259,98 @@ db_disasm( db_printf(","); switch (i_mode & 0xFF) { - case E: + case E: db_print_address(seg, size, &address); break; - case Eind: + case Eind: db_printf("*"); db_print_address(seg, size, &address); break; - case Ew: + case Ew: db_print_address(seg, WORD, &address); break; - case Eb: + case Eb: db_print_address(seg, BYTE, &address); break; - case R: + case R: db_printf("%s", db_reg[size][f_reg(regmodrm)]); break; - case Rw: + case Rw: db_printf("%s", db_reg[WORD][f_reg(regmodrm)]); break; - case Ri: + case Ri: db_printf("%s", db_reg[size][f_rm(inst)]); break; - case S: + case S: db_printf("%s", db_seg_reg[f_reg(regmodrm)]); break; - case Si: + case Si: db_printf("%s", db_seg_reg[f_reg(inst)]); break; - case A: + case A: db_printf("%s", db_reg[size][0]); /* acc */ break; - case BX: + case BX: if (seg) db_printf("%s:", seg); db_printf("(%s)", short_addr ? "%bx" : "%ebx"); break; - case CL: + case CL: db_printf("%%cl"); break; - case DX: + case DX: db_printf("%%dx"); break; - case SI: + case SI: if (seg) db_printf("%s:", seg); db_printf("(%s)", short_addr ? "%si" : "%esi"); break; - case DI: + case DI: db_printf("%%es:(%s)", short_addr ? "%di" : "%edi"); break; - case CR: + case CR: db_printf("%%cr%d", f_reg(regmodrm)); break; - case DR: + case DR: db_printf("%%dr%d", f_reg(regmodrm)); break; - case TR: + case TR: db_printf("%%tr%d", f_reg(regmodrm)); break; - case I: + case I: len = db_lengths[size]; get_value_inc(imm, loc, len, false);/* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Is: + case Is: len = db_lengths[size]; get_value_inc(imm, loc, len, true); /* signed */ db_format_radix(tbuf, 24, imm, true); db_printf("$%s", tbuf); break; - case Ib: + case Ib: get_value_inc(imm, loc, 1, false); /* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Ibs: + case Ibs: get_value_inc(imm, loc, 1, true); /* signed */ db_format_radix(tbuf, 24, imm, true); db_printf("$%s", tbuf); break; - case Iw: + case Iw: get_value_inc(imm, loc, 2, false); /* unsigned */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case Il: + case Il: get_value_inc(imm, loc, 4, false); db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf); break; - case O: + case O: if (short_addr) get_value_inc(displ, loc, 2, true); else @@ -1361,23 +1362,23 @@ db_disasm( db_printsym((db_addr_t)displ, DB_STGY_ANY, db_printf); break; - case Db: + case Db: get_value_inc(displ, loc, 1, true); db_printsym((db_addr_t)(displ + loc), DB_STGY_XTRN, db_printf); break; - case Dl: + case Dl: get_value_inc(displ, loc, 4, true); db_printsym((db_addr_t)(displ + loc), DB_STGY_XTRN, db_printf); break; - case o1: + case o1: db_printf("$1"); break; - case o3: + case o3: db_printf("$3"); break; - case OS: + case OS: get_value_inc(imm, loc, 4, false); /* offset */ db_format_radix(tbuf, 24, (unsigned int)imm, true); db_printf("$%s", tbuf);