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);