From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 610 invoked by alias); 29 Jul 2009 15:16:09 -0000 Received: (qmail 564 invoked by uid 22791); 29 Jul 2009 15:16:01 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23,J_CHICKENPOX_24,J_CHICKENPOX_25,J_CHICKENPOX_28,J_CHICKENPOX_37 X-Spam-Check-By: sourceware.org Received: from web112517.mail.gq1.yahoo.com (HELO web112517.mail.gq1.yahoo.com) (98.137.26.186) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Wed, 29 Jul 2009 15:15:46 +0000 Received: (qmail 66652 invoked by uid 60001); 29 Jul 2009 15:15:44 -0000 Message-ID: <337799.66621.qm@web112517.mail.gq1.yahoo.com> Received: from [123.238.27.15] by web112517.mail.gq1.yahoo.com via HTTP; Wed, 29 Jul 2009 08:15:43 PDT Date: Wed, 29 Jul 2009 18:30:00 -0000 From: paawan oza Subject: final i386.floating.record.patch To: Michael Snyder Cc: Hui Zhu , Mark Kettenis , "pedro@codesourcery.com" , "gdb-patches@sourceware.org" In-Reply-To: <4A6CA8D8.50303@vmware.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00709.txt.bz2 Hi All, Now the format is modified, and I am submitting the patch, I hope this meet= s the expectations. thank you all for your review comments specially Micahel and Hui. please find the patch as follows.=20 ********** ChangeLog ********** Current: gdb-6.8.50.20090729 2009-07-29 Oza * i386-tdep.c: Support for floating point recording. ****** README ****** Patch description: -> Provides floating point support for i386 (reversible debugging:record-r= eplay) -> previously gdb was not recording floating point registers, now all the f= loating point registers which are likely to be changed by floating point = instructions, are recorded and replayed. -> the patch intends to provide the full support for all i386 floating poin= t instructions. ***** patch ***** diff -urN gdb.orig/i386-tdep.c gdb.new/i386-tdep.c --- gdb.orig/i386-tdep.c 2009-07-29 19:48:51.000000000 -0400 +++ gdb.new/i386-tdep.c 2009-07-29 19:51:08.000000000 -0400 @@ -3139,6 +3139,66 @@ return 0; } =20 + +/* Defines contents to record. */ +#define I386_SAVE_FPU_REGS 0xfffd +#define I386_SAVE_FPU_ENV 0xfffe +#define I386_SAVE_FPU_ENV_REG_STACK 0xffff + +/* Record the value of floating point registers which will be changed by t= he + current instruction to "record_arch_list". Return -1 if something is w= rong.=20=20 +*/=20=20 + +static int i386_record_floats (struct gdbarch *gdbarch,=20=20 + struct i386_record_s *ir,=20=20 + uint32_t iregnum) +{ + struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); + int i; + + /* Oza: Because of floating point insn push/pop of fpu stack is going to= =20 + happen. Currently we store st0-st7 registers, but we need not store = all=20 + registers all the time, in future we use ftag register and record onl= y=20 + those who are not marked as an empty. */ + + if (I386_SAVE_FPU_REGS =3D=3D iregnum) + { + for (i =3D I387_ST0_REGNUM (tdep); i <=3D I387_ST0_REGNUM (tdep) + 7= ; i++) + { + if (record_arch_list_add_reg (ir->regcache, i)) + return -1; + } + } + else if (I386_SAVE_FPU_ENV =3D=3D iregnum) + { + for (i =3D I387_FCTRL_REGNUM (tdep); i <=3D I387_FOP_REGNUM (tdep); = i++) + { + if (record_arch_list_add_reg (ir->regcache, i)) + return -1; + } + } + else if (I386_SAVE_FPU_ENV_REG_STACK =3D=3D iregnum) + { + for (i =3D I387_ST0_REGNUM (tdep); i <=3D I387_FOP_REGNUM (tdep); i+= +) + { + if (record_arch_list_add_reg (ir->regcache, i)) + return -1; + } + } + else if ((iregnum >=3D I387_ST0_REGNUM (tdep)) &&=20 + (iregnum <=3D I387_FOP_REGNUM (tdep))) + { + if (record_arch_list_add_reg (ir->regcache,iregnum)) + return -1; + } + else + { + /* Parameter error. */ + return -1; + } + return 0; +} + /* Parse the current instruction and record the values of the registers and memory that will be changed in current instruction to "record_arch_list= ". Return -1 if something wrong. */ @@ -3153,6 +3213,7 @@ uint32_t tmpu32; uint32_t opcode; struct i386_record_s ir; + struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); =20 memset (&ir, 0, sizeof (struct i386_record_s)); ir.regcache =3D regcache; @@ -4188,8 +4249,7 @@ } break; =20 - /* floats */ - /* It just record the memory change of instrcution. */ + /* Floats. */ case 0xd8: case 0xd9: case 0xda: @@ -4203,45 +4263,56 @@ ir.reg |=3D ((opcode & 7) << 3); if (ir.mod !=3D 3) { - /* memory */ + /* Memory. */ uint32_t addr; =20 if (i386_record_lea_modrm_addr (&ir, &addr)) return -1; switch (ir.reg) { - case 0x00: - case 0x01: case 0x02: + case 0x12: + case 0x22: + case 0x32: + /* For fcom, ficom nothing to do. */ + break; case 0x03: + case 0x13: + case 0x23: + case 0x33: + /* For fcomp, ficomp pop FPU stack, store all. */ + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; + break; + case 0x00: + case 0x01: case 0x04: case 0x05: case 0x06: case 0x07: case 0x10: case 0x11: - case 0x12: - case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x20: case 0x21: - case 0x22: - case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x30: case 0x31: - case 0x32: - case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: + /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,=20 + fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension + of code, always affects st(0) register. */ + if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)= )) + return -1; break; case 0x08: case 0x0a: @@ -4250,6 +4321,7 @@ case 0x19: case 0x1a: case 0x1b: + case 0x1d:=20 case 0x28: case 0x29: case 0x2a: @@ -4258,9 +4330,14 @@ case 0x39: case 0x3a: case 0x3b: + case 0x3c:=20 + case 0x3d:=20 switch (ir.reg & 7) { case 0: + /* Handling fld, fild. */ + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; break; case 1: switch (ir.reg >> 4) @@ -4274,6 +4351,7 @@ return -1; break; case 3: + break; default: if (record_arch_list_add_mem (addr, 2)) return -1; @@ -4284,15 +4362,49 @@ switch (ir.reg >> 4) { case 0: + if (record_arch_list_add_mem (addr, 4)) + return -1; + if (3 =3D=3D (ir.reg & 7)) + { + /* For fstp m32fp. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + } + break; case 1: if (record_arch_list_add_mem (addr, 4)) return -1; + if ((3 =3D=3D (ir.reg & 7)) + || (5 =3D=3D (ir.reg & 7)) + || (7 =3D=3D (ir.reg & 7))) + { + /* For fstp insn. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + } break; case 2: if (record_arch_list_add_mem (addr, 8)) return -1; + if (3 =3D=3D (ir.reg & 7)) + { + /* For fstp m64fp. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + } break; case 3: + if ((3 <=3D (ir.reg & 7)) && (6 <=3D (ir.reg & 7))) + { + /* For fistp, fbld, fild, fbstp. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + } + /* Fall through */=20=20 default: if (record_arch_list_add_mem (addr, 2)) return -1; @@ -4302,11 +4414,21 @@ } break; case 0x0c: + /* Insn fldenv. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_ENV_REG_STACK)) + return -1; + break; case 0x0d: - case 0x1d: + /* Insn fldcw. */ + if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tde= p))) + return -1; + break; case 0x2c: - case 0x3c: - case 0x3d: + /* Insn frstor. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_ENV_REG_STACK)) + return -1; break; case 0x0e: if (ir.dflag) @@ -4329,6 +4451,9 @@ case 0x3e: if (record_arch_list_add_mem (addr, 10)) return -1; + /* Insn fstp, fbstp. */ + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; break; case 0x2e: if (ir.dflag) @@ -4345,10 +4470,17 @@ } if (record_arch_list_add_mem (addr, 80)) return -1; + /* Insn fsave. */ + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_ENV_REG_STACK)) + return -1; break; case 0x3f: if (record_arch_list_add_mem (addr, 8)) return -1; + /* Ins fistp. */ + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; break; default: ir.addr -=3D 2; @@ -4357,8 +4489,211 @@ break; } } + /* Opcode is an extension of modR/M byte. */=20=20=20=20=20 + else + {=20 + switch (opcode) + { + case 0xd8: + if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) + return -1;=09 + break; + case 0xd9:=20=20=20=20 + if (0x0c =3D=3D (ir.modrm >> 4)) + { + if ((ir.modrm & 0x0f) <=3D 7) + { + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1;=09 + } + else + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep))) + return -1;=09 + /* If only st(0) is changing, then we have already=20 + recorded. */ + if ((ir.modrm & 0x0f) - 0x08) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + + ((ir.modrm & 0x0f) - 0x08))) + return -1;=09=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20 + } + } + } + else + { + switch (ir.modrm) + { + case 0xe0: + case 0xe1: + case 0xf0: + case 0xf5: + case 0xf8: + case 0xfa: + case 0xfc: + case 0xfe: + case 0xff: + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep))) + return -1; + break; + case 0xf1: + case 0xf2: + case 0xf3: + case 0xf4: + case 0xf6: + case 0xf7: + case 0xe8: + case 0xe9: + case 0xea: + case 0xeb: + case 0xec: + case 0xed: + case 0xee: + case 0xf9: + case 0xfb: + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + break; + case 0xfd: + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep))) + return -1; + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + 1)) + return -1; + break; + } + } + break; + case 0xda: + if (0xe9 =3D=3D ir.modrm) + { + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; + } + else if ((0x0c =3D=3D ir.modrm >> 4) || (0x0d =3D=3D ir.modr= m >> 4)) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep))) + return -1; + if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <=3D 7)) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) +=20 + (ir.modrm & 0x0f))) + return -1; + } + else if ((ir.modrm & 0x0f) - 0x08) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + + ((ir.modrm & 0x0f) - 0x08))) + return -1; + } + } + break; + case 0xdb: + if (0xe3 =3D=3D ir.modrm) + { + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV)) + return -1; + } + else if ((0x0c =3D=3D ir.modrm >> 4) || (0x0d =3D=3D ir.modr= m >> 4)) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep))) + return -1; + if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <=3D 7)) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + + (ir.modrm & 0x0f))) + return -1; + } + else if ((ir.modrm & 0x0f) - 0x08) + { + if (i386_record_floats (gdbarch, &ir, + I387_ST0_REGNUM (tdep) + + ((ir.modrm & 0x0f) - 0x08))) + return -1; + } + } + break; + case 0xdc: + if ((0x0c =3D=3D ir.modrm >> 4) + || (0x0d =3D=3D ir.modrm >> 4) + || (0x0f =3D=3D ir.modrm >> 4)) + { + if ((ir.modrm & 0x0f) <=3D 7) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + + (ir.modrm & 0x0f))) + return -1; + } + else + { + if (i386_record_floats (gdbarch, &ir, + I387_ST0_REGNUM (tdep) + + ((ir.modrm & 0x0f) - 0x08))) + return -1; + } + } + break; + case 0xdd: + if (0x0c =3D=3D ir.modrm >> 4) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_FTAG_REGNUM (tdep))) + return -1; + } + else if ((0x0d =3D=3D ir.modrm >> 4) || (0x0e =3D=3D ir.modr= m >> 4)) + { + if ((ir.modrm & 0x0f) <=3D 7) + { + if (i386_record_floats (gdbarch, &ir,=20 + I387_ST0_REGNUM (tdep) + + (ir.modrm & 0x0f))) + return -1; + } + else + { + if (i386_record_floats (gdbarch, &ir,=20 + I386_SAVE_FPU_REGS)) + return -1; + } + } + break; + case 0xde: + if ((0x0c =3D=3D ir.modrm >> 4) + || (0x0e =3D=3D ir.modrm >> 4) + || (0x0f =3D=3D ir.modrm >> 4) + || (0xd9 =3D=3D ir.modrm)) + { + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1;=09=20 + } + break; + case 0xdf: + if (0xe0 =3D=3D ir.modrm) + { + if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM)) + return -1; + } + else if ((0x0f =3D=3D ir.modrm >> 4) || (0x0e =3D=3D ir.modr= m >> 4)) + { + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; + } + break; + } + } break; - /* string ops */ /* movsS */ case 0xa4: @@ -4775,12 +5110,18 @@ break; =20 /* fwait */ - /* XXX */ case 0x9b: - printf_unfiltered (_("Process record doesn't support instruction " - "fwait.\n")); - ir.addr -=3D 1; - goto no_support; + if (target_read_memory (ir.addr, &tmpu8, 1)) + { + if (record_debug) + printf_unfiltered (_("Process record: error reading memory at " + "addr 0x%s len =3D 1.\n"), + paddress (gdbarch, ir.addr)); + return -1; + } + opcode =3D (uint32_t) tmpu8; + ir.addr++; + goto reswitch;=20=20=20=20=20 break; =20 /* int3 */ Regards, Oza. --- On Mon, 7/27/09, Michael Snyder wrote: > From: Michael Snyder > Subject: Re: i386.record.floating.point.patch : with more testing and ass= urity > To: "paawan oza" > Cc: "Hui Zhu" , "Mark Kettenis" , "pedro@codesourcery.com" , "gdb-patches@sourc= eware.org" > Date: Monday, July 27, 2009, 12:34 AM > paawan oza wrote: >=20 > > (please try take difference with attached files and > see the 'diff' result, it is strange, if you take the patch > on windows it gets even more worse with formatting) >=20 > OK, I've done as you suggested.=A0 Here are my comments > (search for "msnyder): >=20 >=20 > -----Inline Attachment Follows----- >=20 >=20 > --- i386-tdep.0726.c=A0=A0=A0 2009-07-26 > 10:55:37.000013000 -0700 > +++ i386-tdep.c=A0=A0=A0 2009-07-26 > 11:00:19.001044000 -0700 > @@ -3139,6 +3139,66 @@ > =A0=A0=A0return 0; > } >=20=20 > + > +/* Defines contents to record.=A0 */ > +#define I386_SAVE_FPU_REGS=A0 =A0 =A0 =A0 > =A0 =A0 =A0 0xfffd > +#define I386_SAVE_FPU_ENV=A0 =A0 =A0 =A0 > =A0 =A0 =A0=A0=A00xfffe > +#define I386_SAVE_FPU_ENV_REG_STACK=A0 > =A0=A0=A00xffff > + > +/* Record the value of floating point registers which will > be changed by the > +=A0=A0=A0current instruction to > "record_arch_list".=A0 Return -1 if something is > wrong.=A0=20 > +*/=A0=20 > + > +static int i386_record_floats (struct gdbarch > *gdbarch,=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0struct i386_record_s *ir,=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0uint32_t iregnum) > +{ > +=A0 struct gdbarch_tdep *tdep =3D gdbarch_tdep > (gdbarch); > +=A0 int i; > + > +=A0 /* Oza:Because of floating point insn push/pop of > fpu stack is going to=20 >=20 > msnyder: "Oza: Because" >=20 > +=A0 =A0=A0=A0happen.=A0 Currently we store > st0-st7 registers, but we need not store all=20 > +=A0 =A0=A0=A0registers all the time, in future > we use ftag register and record only=20 > +=A0 =A0=A0=A0those who are not marked as an > empty.=A0=20 > +=A0=A0=A0*/ > +=A0 if (I386_SAVE_FPU_REGS =3D=3D iregnum) > +=A0 =A0 { > +=A0 =A0 =A0 for (i =3D I387_ST0_REGNUM (tdep);i > <=3D I387_ST0_REGNUM (tdep) + 7;i++) >=20 > msynder: > =A0 =A0 =A0=A0=A0for (i =3D I387_ST0_REGNUM > (tdep); i <=3D I387_ST0_REGNUM (tdep) + 7; i++) >=20 > +=A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 if > (record_arch_list_add_reg (ir->regcache, i)) > +=A0 =A0 =A0 =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 } > +=A0 =A0 } > +=A0 else if (I386_SAVE_FPU_ENV =3D=3D iregnum) > +=A0 =A0 { > +=A0 =A0 =A0 for (i =3D I387_FCTRL_REGNUM (tdep);i > <=3D I387_FOP_REGNUM (tdep);i++) >=20 > msnyder: > =A0 =A0 =A0=A0=A0for (i =3D I387_FCTRL_REGNUM > (tdep); i <=3D I387_FOP_REGNUM (tdep); i++) >=20 > +=A0 =A0 =A0 { >=20 > msnyder: indent { to the right by two spaces after "for". >=20 > +=A0 =A0 =A0 =A0 if (record_arch_list_add_reg > (ir->regcache, i)) > +=A0 =A0 =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 } > +=A0 =A0 } > +=A0 else if (I386_SAVE_FPU_ENV_REG_STACK =3D=3D iregnum) > +=A0 =A0 { > +=A0 =A0 =A0 for (i =3D I387_ST0_REGNUM (tdep);i > <=3D I387_FOP_REGNUM (tdep);i++) >=20 > msnyder: > =A0 =A0 =A0=A0=A0for (i =3D I387_ST0_REGNUM > (tdep); i <=3D I387_FOP_REGNUM (tdep); i++) >=20 > +=A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 if (record_arch_list_add_reg > (ir->regcache, i)) > +=A0 =A0 =A0 =A0 =A0 return -1;=A0 =A0 >=20 > +=A0 =A0 =A0 } > +=A0 =A0 } > +=A0 else if ((iregnum >=3D I387_ST0_REGNUM (tdep)) > &&=20 > +=A0 =A0 =A0 =A0 =A0=A0=A0(iregnum > <=3D I387_FOP_REGNUM (tdep))) > +=A0 =A0 { > +=A0 =A0 =A0 if (record_arch_list_add_reg > (ir->regcache,iregnum)) > +=A0 =A0 =A0 =A0 return -1; > +=A0 =A0 } > +=A0 else > +=A0 =A0 { > +=A0 =A0 =A0 /* Parameter error.=A0 */ > +=A0 =A0 =A0 return -1; > +=A0 =A0 }=20 > +=A0 return 0; > +} > + > /* Parse the current instruction and record the values of > the registers and > =A0 =A0 memory that will be changed in current > instruction to "record_arch_list". > =A0 =A0 Return -1 if something wrong. */ > @@ -3153,6 +3213,7 @@ > =A0=A0=A0uint32_t tmpu32; > =A0=A0=A0uint32_t opcode; > =A0=A0=A0struct i386_record_s ir; > +=A0 struct gdbarch_tdep *tdep =3D gdbarch_tdep > (gdbarch); >=20=20 > =A0=A0=A0memset (&ir, 0, sizeof (struct > i386_record_s)); > =A0=A0=A0ir.regcache =3D regcache; > @@ -4188,8 +4249,7 @@ > =A0=A0=A0 } > =A0 =A0 =A0=A0=A0break; >=20=20 > -=A0 =A0 =A0 /* floats */ > -=A0 =A0 =A0 /* It just record the memory change > of instrcution. */ > +=A0 =A0 /* Floats.=A0 */ > =A0 =A0=A0=A0case 0xd8: > =A0 =A0=A0=A0case 0xd9: > =A0 =A0=A0=A0case 0xda: > @@ -4203,45 +4263,56 @@ > =A0 =A0 =A0=A0=A0ir.reg |=3D ((opcode & 7) > << 3); > =A0 =A0 =A0=A0=A0if (ir.mod !=3D 3) > =A0=A0=A0 { > -=A0=A0=A0 =A0 /* memory */ > +=A0 =A0 =A0 =A0 /* Memory.=A0 */ > =A0=A0=A0 =A0 uint32_t addr; >=20=20 > =A0=A0=A0 =A0 if (i386_record_lea_modrm_addr > (&ir, &addr)) > =A0=A0=A0 =A0 =A0 return -1; > =A0=A0=A0 =A0 switch (ir.reg) > =A0=A0=A0 =A0 =A0 { > -=A0=A0=A0 =A0 =A0 case 0x00: > -=A0=A0=A0 =A0 =A0 case 0x01: > =A0=A0=A0 =A0 =A0 case 0x02: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x12: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x22: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x32: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* For > fcom, ficom nothing to do.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x03: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x13: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x23: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x33: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* For > fcomp, ficomp pop FPU stack, store all.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x00: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x01: > =A0=A0=A0 =A0 =A0 case 0x04: > =A0=A0=A0 =A0 =A0 case 0x05: > =A0=A0=A0 =A0 =A0 case 0x06: > =A0=A0=A0 =A0 =A0 case 0x07: > =A0=A0=A0 =A0 =A0 case 0x10: > =A0=A0=A0 =A0 =A0 case 0x11: > -=A0=A0=A0 =A0 =A0 case 0x12: > -=A0=A0=A0 =A0 =A0 case 0x13: > =A0=A0=A0 =A0 =A0 case 0x14: > =A0=A0=A0 =A0 =A0 case 0x15: > =A0=A0=A0 =A0 =A0 case 0x16: > =A0=A0=A0 =A0 =A0 case 0x17: > =A0=A0=A0 =A0 =A0 case 0x20: > =A0=A0=A0 =A0 =A0 case 0x21: > -=A0=A0=A0 =A0 =A0 case 0x22: > -=A0=A0=A0 =A0 =A0 case 0x23: > =A0=A0=A0 =A0 =A0 case 0x24: > =A0=A0=A0 =A0 =A0 case 0x25: > =A0=A0=A0 =A0 =A0 case 0x26: > =A0=A0=A0 =A0 =A0 case 0x27: > =A0=A0=A0 =A0 =A0 case 0x30: > =A0=A0=A0 =A0 =A0 case 0x31: > -=A0=A0=A0 =A0 =A0 case 0x32: > -=A0=A0=A0 =A0 =A0 case 0x33: > =A0=A0=A0 =A0 =A0 case 0x34: > =A0=A0=A0 =A0 =A0 case 0x35: > =A0=A0=A0 =A0 =A0 case 0x36: > =A0=A0=A0 =A0 =A0 case 0x37: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* For > fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0fisub, fisubr, fidiv, fidivr, modR/M.reg > is an extension of code,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0always affects st(0) register.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1; > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x08: > =A0=A0=A0 =A0 =A0 case 0x0a: > @@ -4250,6 +4321,7 @@ > =A0=A0=A0 =A0 =A0 case 0x19: > =A0=A0=A0 =A0 =A0 case 0x1a: > =A0=A0=A0 =A0 =A0 case 0x1b: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x1d:=20 > =A0=A0=A0 =A0 =A0 case 0x28: > =A0=A0=A0 =A0 =A0 case 0x29: > =A0=A0=A0 =A0 =A0 case 0x2a: > @@ -4258,9 +4330,14 @@ > =A0=A0=A0 =A0 =A0 case 0x39: > =A0=A0=A0 =A0 =A0 case 0x3a: > =A0=A0=A0 =A0 =A0 case 0x3b: > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x3c:=20 > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x3d:=20 > =A0=A0=A0 =A0 =A0 =A0 switch (ir.reg > & 7) > =A0=A0=A0 =A0=A0=A0 { > =A0=A0=A0 =A0=A0=A0 case 0: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 /* Handling fld, fild.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir, > I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1;=A0 =A0=20 >=20 > msnyder: indented too far (two spaces extra): > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0/* Handling fld, fild.=A0 */ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0if (i386_record_floats (gdbarch, &ir, > I386_SAVE_FPU_REGS)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0=A0=A0return -1;=A0 =A0=20 >=20 >=20 >=20 > =A0=A0=A0 =A0=A0=A0 =A0 break; > =A0=A0=A0 =A0=A0=A0 case 1: > =A0=A0=A0 =A0=A0=A0 =A0 switch > (ir.reg >> 4) > @@ -4274,6 +4351,7 @@ > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > break; > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 3: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 break; >=20 > msnyder: indented too far: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0=A0=A0break; >=20 > =A0=A0=A0 =A0=A0=A0 =A0 =A0 > default: > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > if (record_arch_list_add_mem (addr, 2)) > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > @@ -4284,15 +4362,49 @@ > =A0=A0=A0 =A0=A0=A0 =A0 switch > (ir.reg >> 4) > =A0=A0=A0 =A0=A0=A0 =A0 =A0 { > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 if > (record_arch_list_add_mem (addr, 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 if (3 =3D=3D (ir.reg & > 7)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 /* For fstp > m32fp.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 return > -1;=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 }=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 break; >=20 > msnyder: indented four extra spaces too far. >=20 >=20 >=20 > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 1: > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > if (record_arch_list_add_mem (addr, 4)) > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 if ((3 =3D=3D (ir.reg & > 7))=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0=A0=A0|| (5 =3D=3D > (ir.reg & 7))=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0=A0=A0|| (7 =3D=3D > (ir.reg & 7))) >=20 > msnyder: remove '\' from end of lines: >=20 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 if ((3 =3D=3D (ir.reg & 7)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 || (5 =3D=3D (ir.reg > & 7)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 || (7 =3D=3D (ir.reg > & 7))) >=20 >=20 >=20 >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 /* For fstp insn.=A0 > */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 return > -1;=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 }=20 > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > break; > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 2: > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > if (record_arch_list_add_mem (addr, 8)) > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 if (3 =3D=3D (ir.reg & > 7)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 /* For fstp > m64fp.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 return > -1;=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 }=20 >=20 > msnyder: indented too far. >=20 > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > break; > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 3: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 if ((3 <=3D (ir.reg > & 7)) && (6 <=3D (ir.reg & 7))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 /* For fistp, > fbld, fild, fbstp.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 return > -1;=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 }=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 /*Fall through */=A0=20 >=20 > msnyder: indented too far. >=20 > =A0=A0=A0 =A0=A0=A0 =A0 =A0 > default: > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > if (record_arch_list_add_mem (addr, 2)) > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > @@ -4302,11 +4414,21 @@ > =A0=A0=A0 =A0=A0=A0 } > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x0c: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Insn > fldenv.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 I386_SAVE_FPU_ENV_REG_STACK)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x0d: > -=A0=A0=A0 =A0 =A0 case 0x1d: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Insn > fldcw.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x2c: > -=A0=A0=A0 =A0 =A0 case 0x3c: > -=A0=A0=A0 =A0 =A0 case 0x3d: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Insn > frstor.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 I386_SAVE_FPU_ENV_REG_STACK)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0=20 > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x0e: > =A0=A0=A0 =A0 =A0 =A0 if (ir.dflag) > @@ -4329,6 +4451,9 @@ > =A0=A0=A0 =A0 =A0 case 0x3e: > =A0=A0=A0 =A0 =A0 =A0 if > (record_arch_list_add_mem (addr, 10)) > =A0=A0=A0 =A0=A0=A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Insn > fstp, fbstp.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0=20 > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x2e: > =A0=A0=A0 =A0 =A0 =A0 if (ir.dflag) > @@ -4345,10 +4470,17 @@ > =A0=A0=A0 =A0=A0=A0 } > =A0=A0=A0 =A0 =A0 =A0 if > (record_arch_list_add_mem (addr, 80)) > =A0=A0=A0 =A0=A0=A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Insn > fsave.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 I386_SAVE_FPU_ENV_REG_STACK)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0=A0=A0 > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 case 0x3f: > =A0=A0=A0 =A0 =A0 =A0 if > (record_arch_list_add_mem (addr, 8)) > =A0=A0=A0 =A0=A0=A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Ins > fistp.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > return -1;=A0=A0=A0 > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 default: > =A0=A0=A0 =A0 =A0 =A0 ir.addr -=3D 2; > @@ -4357,8 +4489,205 @@ > =A0=A0=A0 =A0 =A0 =A0 break; > =A0=A0=A0 =A0 =A0 } > =A0=A0=A0 } > +=A0 =A0 =A0 =A0 /* Opcode is an extension of > modR/M byte.=A0 */=A0 =A0=A0=A0 > +=A0 =A0 =A0 =A0 else >=20 > msnyder:=A0 above, indentation level minus two after } > =A0 =A0 =A0 /* Opcode is an extension of modR/M > byte.=A0 */=A0 =A0=A0=A0 > =A0 =A0 =A0 else >=20 > +=A0 =A0 =A0 =A0 {=20 > +=A0 =A0 =A0 =A0 switch (opcode) >=20 > msnyder: above, indentation level plus two after { > =A0 =A0 =A0 =A0 =A0=A0=A0switch > (opcode) >=20 > And then everything below this point needs to be > re-indented to the right. >=20 >=20 > +=A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 case 0xd8: > +=A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 return > -1;=A0=A0=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 case 0xd9:=A0 =A0 >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 if (0x0c =3D=3D > (ir.modrm >> 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > ((ir.modrm & 0x0f) <=3D 7) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir, > I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1;=A0=A0=A0=20 >=20 > msnyder: missing a right-indent. >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 else > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep))) >=20 > msnyder: missing a right-indent. >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1;=A0=A0=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 /* If only st(0) is changing, then we have already > recorded.=A0 */ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if ((ir.modrm & 0x0f) - 0x08) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir,=20 >=20 > msnyder: missing a right-indent. >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM > (tdep) + \ >=20 > msnyder: no \ at end of line. >=20 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 ((ir.modrm & > 0x0f) - 0x08))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1;=A0=A0=A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 }=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 }=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 else > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >=20 > msnyder: indentation. >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > switch(ir.modrm) >=20 > msnyder: "switch (" >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xe0: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xe1: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf0: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf5: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf8: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xfa: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xfc: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xfe: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xff: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 break;=A0 =A0 =A0 =A0 > =A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf1:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf2:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf3:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf4: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf6:=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf7:=A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xe8:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xe9:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xea:=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xeb: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xec:=A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xed:=A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xee:=A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xf9:=A0 =A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xfb: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir, > I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1;=A0=A0=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 case 0xfd:=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM > (tdep) + 1)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 }=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xda: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if (0xe9 > =3D=3D ir.modrm) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1;=A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 else if > ((0x0c =3D=3D ir.modrm >> 4) || (0x0d =3D=3D ir.modrm >> > 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM > (tdep))) >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1;=A0=A0=A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (((ir.modrm & 0x0f) > 0) && ((ir.modrm & > 0x0f) <=3D 7)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 (ir.modrm & 0x0f))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1;=A0=A0=A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > else if ((ir.modrm & 0x0f) - 0x08) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + > \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 ((ir.modrm & 0x0f) - > 0x08))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > }=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break;=20 > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xdb: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if (0xe3 > =3D=3D ir.modrm) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV)) >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1;=A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 else if > ((0x0c =3D=3D ir.modrm >> 4) || (0x0d =3D=3D ir.modrm >> > 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM > (tdep))) >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1;=A0=A0=A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (((ir.modrm & 0x0f) > 0) && ((ir.modrm & > 0x0f) <=3D 7)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + > \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 (ir.modrm & 0x0f))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1;=A0=A0=A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > else if ((ir.modrm & 0x0f) - 0x08) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 >=20 > msnyder: indentation after { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + > \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 ((ir.modrm & 0x0f) - > 0x08))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > }=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xdc: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if ((0x0c > =3D=3D ir.modrm >> 4)=A0 =A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0d =3D=3D ir.modrm >> 4)=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0f =3D=3D ir.modrm >> 4)) >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0if ((0x0c =3D=3D ir.modrm >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0d =3D=3D ir.modrm >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0f =3D=3D ir.modrm >> 4)) >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > ((ir.modrm & 0x0f) <=3D 7) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + > \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 (ir.modrm & 0x0f))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1;=A0=A0=A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > else > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + > \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 ((ir.modrm & 0x0f) - > 0x08))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > }=A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xdd:=A0 > =A0 =A0 =A0 =A0 =A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if (0x0c > =3D=3D ir.modrm >> 4) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 I387_FTAG_REGNUM > (tdep))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 else if > ((0x0d =3D=3D ir.modrm >> 4) || (0x0e =3D=3D ir.modrm >> > 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 if ((ir.modrm & 0x0f) <=3D 7) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 if (i386_record_floats (gdbarch, &ir,=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM > (tdep) + \ >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0I387_ST0_REGNUM (tdep) + >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 (ir.modrm & > 0x0f))) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 return > -1;=A0=A0=A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 else > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 if (i386_record_floats (gdbarch, > &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > }=A0 =A0 =A0 =A0 =A0 =A0=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xde: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if ((0x0c > =3D=3D ir.modrm >> 4)=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0e =3D=3D ir.modrm >> 4)=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0f =3D=3D ir.modrm >> 4)=A0 \ > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0xd9 =3D=3D ir.modrm)) >=20 > msnyder: no \ at end of line. > =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0if ((0x0c =3D=3D ir.modrm >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0e =3D=3D ir.modrm >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0x0f =3D=3D ir.modrm >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0|| (0xd9 =3D=3D ir.modrm)) >=20 >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > {=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1;=A0=A0=A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > }=A0=A0=A0 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xdf: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if (0xe0 > =3D=3D ir.modrm) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 else if > ((0x0f =3D=3D ir.modrm >> 4) || (0x0e =3D=3D ir.modrm >> > 4)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 return -1; > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >=20 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > +=A0 =A0 =A0 =A0 =A0 } =A0=A0=A0 > =A0=20 > +=A0 =A0 =A0 }=A0 =A0 =A0 > =A0=A0=A0 > =A0 =A0 =A0=A0=A0break; > - > =A0 =A0 =A0=A0=A0/* string ops */ > =A0 =A0 =A0=A0=A0/* movsS */ > =A0 =A0=A0=A0case 0xa4: > @@ -4777,10 +5106,17 @@ > =A0 =A0 =A0=A0=A0/* fwait */ > =A0 =A0 =A0=A0=A0/* XXX */ > =A0 =A0=A0=A0case 0x9b: > -=A0 =A0 =A0 printf_unfiltered (_("Process record > doesn't support instruction " > -=A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0=A0=A0"fwait.\n")); > -=A0 =A0 =A0 ir.addr -=3D 1; > -=A0 =A0 =A0 goto no_support; > +=A0 =A0 =A0 if (target_read_memory (ir.addr, > &tmpu8, 1)) > +=A0 =A0 =A0 =A0 { > +=A0 =A0 =A0 =A0 =A0 if (record_debug) > +=A0 =A0 =A0 =A0 =A0 =A0 > printf_unfiltered (_("Process record: error reading memory > at " > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 "addr 0x%s len =3D 1.\n"), > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0paddress (gdbarch, ir.addr)); >=20 > msnyder: indentation > =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0printf_unfiltered (_("Process record: > error reading memory at " > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 "addr 0x%s len =3D 1.\n"), > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > paddress (gdbarch, ir.addr)); >=20 > +=A0 =A0 =A0 =A0 =A0 return -1; > +=A0 =A0 =A0 =A0 } > +=A0 =A0 =A0 opcode =3D (uint32_t) tmpu8; > +=A0 =A0 =A0 ir.addr++; > +=A0 =A0 =A0 goto reswitch;=A0 > =A0=A0=A0 > =A0 =A0 =A0=A0=A0break; >=20=20 > =A0 =A0 =A0=A0=A0/* int3 */ >=20