From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2558 invoked by alias); 29 Jul 2009 15:20:31 -0000 Received: (qmail 2530 invoked by uid 22791); 29 Jul 2009 15:20:24 -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 web112514.mail.gq1.yahoo.com (HELO web112514.mail.gq1.yahoo.com) (98.137.26.174) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Wed, 29 Jul 2009 15:20:11 +0000 Received: (qmail 49942 invoked by uid 60001); 29 Jul 2009 15:20:05 -0000 Message-ID: <31271.45875.qm@web112514.mail.gq1.yahoo.com> Received: from [123.238.27.15] by web112514.mail.gq1.yahoo.com via HTTP; Wed, 29 Jul 2009 08:20:04 PDT Date: Wed, 29 Jul 2009 18:34:00 -0000 From: paawan oza Subject: Re: final i386.floating.record.patch To: Michael Snyder Cc: Hui Zhu , Mark Kettenis , "pedro@codesourcery.com" , "gdb-patches@sourceware.org" 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/msg00710.txt.bz2 Hi Michael, Mu understanding about the patch Acceptance is ; when I integrate relevant test cases regading the patch to the gdb test sui= te then it could go to mainline. correct ? For that I am wrorking on expect scripting, soon I will integrate some test= cases related to patch. Regards, Oza. --- On Wed, 7/29/09, paawan oza wrote: > From: paawan oza > Subject: final i386.floating.record.patch > To: "Michael Snyder" > Cc: "Hui Zhu" , "Mark Kettenis" , "pedro@codesourcery.com" , "gdb-patches@sourc= eware.org" > Date: Wednesday, July 29, 2009, 8:45 PM > Hi All, >=20 > Now the format is modified, and I am submitting the patch, > I hope this meets the expectations. > thank you all for your review comments specially Micahel > and Hui. > please find the patch as follows.=20 >=20 > ********** > ChangeLog > ********** > Current: gdb-6.8.50.20090729 > 2009-07-29=A0 Oza=A0 >=20 > =A0 =A0 =A0 =A0 * i386-tdep.c: Support for > floating point recording. >=20 > ****** > README > ****** > Patch description: >=20 > -> Provides floating point support for i386=A0 > (reversible debugging:record-replay) > -> previously gdb was not recording floating point > registers, now all the floating point registers which are > likely to be changed by floating=A0=A0=A0point > instructions, are recorded and replayed. > -> the patch intends to provide the full support for all > i386 floating point instructions. >=20 >=20 > ***** > patch > ***** >=20 > diff -urN gdb.orig/i386-tdep.c gdb.new/i386-tdep.c > --- gdb.orig/i386-tdep.c=A0=A0=A0 2009-07-29 > 19:48:51.000000000 -0400 > +++ gdb.new/i386-tdep.c=A0=A0=A0 2009-07-29 > 19:51:08.000000000 -0400 > @@ -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 > +=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 */ > + > +=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++) > +=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++) > +=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=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++) > +=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 =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 } > +=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 > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0=A0=A0of code,=A0 always 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 /* Handling > fld, fild.=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 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 > break; > =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 > 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 > 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 /* For fstp m32fp.=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 I386_SAVE_FPU_REGS)) > +=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 > break; > =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 > if ((3 =3D=3D (ir.reg & 7)) > +=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 || (7 =3D=3D (ir.reg & 7))) > +=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 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_REGS)) > +=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 > 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 > 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 /* For fstp m64fp.=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 I386_SAVE_FPU_REGS)) > +=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 > break; > =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 3: > +=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 /* For fistp, fbld, fild, fbstp.=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 I386_SAVE_FPU_REGS)) > +=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 > /* Fall through */=A0=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 =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 =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=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 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 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 break; > =A0=A0=A0 =A0 =A0 default: > =A0=A0=A0 =A0 =A0 =A0 ir.addr -=3D 2; > @@ -4357,8 +4489,211 @@ > =A0=A0=A0 =A0 =A0 =A0 break; > =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 else > +=A0 =A0 =A0 =A0 {=20 > +=A0=A0=A0 =A0 switch (opcode) > +=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 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 if ((ir.modrm > & 0x0f) <=3D 7) > +=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 > I386_SAVE_FPU_REGS)) > +=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 =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 > 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 > I387_ST0_REGNUM (tdep))) > +=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=20 > +=A0=A0=A0 =A0=A0=A0 > =A0=A0=A0=A0=A0recorded.=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 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 I387_ST0_REGNUM (tdep) + > +=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=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 switch > (ir.modrm) > +=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 case > 0xe1: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf0: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf5: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf8: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xfa: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xfc: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xfe: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xff: > +=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 > I387_ST0_REGNUM (tdep))) > +=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 > 0xf1: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf2: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf3: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf4: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf6: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf7: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xe8: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xe9: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xea: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xeb: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xec: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xed: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xee: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xf9: > +=A0=A0=A0 =A0=A0=A0 =A0 =A0 case > 0xfb: > +=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 > I386_SAVE_FPU_REGS)) > +=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 > 0xfd: > +=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 > I387_ST0_REGNUM (tdep))) > +=A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > return -1; > +=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 > I387_ST0_REGNUM (tdep) + 1)) > +=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 } > +=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 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 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 if > (i386_record_floats (gdbarch, &ir,=20 > +=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 return > -1; > +=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 > 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 > I387_ST0_REGNUM (tdep) +=20 > +=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 > return -1; > +=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 > 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 > I387_ST0_REGNUM (tdep) + > +=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 > 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 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 if > (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV)) > +=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 > ((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 if > (i386_record_floats (gdbarch, &ir,=20 > +=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 return > -1; > +=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 > 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 > I387_ST0_REGNUM (tdep) + > +=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 > return -1; > +=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 > if (i386_record_floats (gdbarch, &ir, > +=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=A0 =A0=A0=A0 =A0 =A0 =A0 > ((ir.modrm & 0x0f) - 0x08))) > +=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 0xdc: > +=A0 =A0 =A0 =A0 =A0 =A0 =A0 if ((0x0c > =3D=3D ir.modrm >> 4) > +=A0=A0=A0 =A0=A0=A0 =A0 || (0x0d =3D=3D > ir.modrm >> 4) > +=A0=A0=A0 =A0=A0=A0 =A0 || (0x0f =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 > 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 > I387_ST0_REGNUM (tdep) + > +=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 > return -1; > +=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 > if (i386_record_floats (gdbarch, &ir, > +=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=A0 =A0=A0=A0 =A0 =A0 =A0 > ((ir.modrm & 0x0f) - 0x08))) > +=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 break; > +=A0 =A0 =A0 =A0 =A0 =A0 case 0xdd: > +=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 { > +=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 > 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 > I387_ST0_REGNUM (tdep) + > +=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 > return -1; > +=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,=20 > +=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 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 =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 || (0x0e =3D=3D > ir.modrm >> 4) > +=A0=A0=A0 =A0=A0=A0 =A0 || (0x0f =3D=3D > ir.modrm >> 4) > +=A0=A0=A0 =A0=A0=A0 =A0 || (0xd9 =3D=3D > ir.modrm)) > +=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 return > -1;=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 if > (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM)) > +=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 { > +=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 break; > +=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: > @@ -4775,12 +5110,18 @@ > =A0 =A0 =A0=A0=A0break; >=20=20 > =A0 =A0 =A0=A0=A0/* fwait */ > -=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"addr 0x%s len =3D 1.\n"), > +=A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0=A0=A0paddress (gdbarch, > ir.addr)); > +=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 >=20 > Regards, > Oza. >=20 >=20 >=20 >=20 > --- On Mon, 7/27/09, Michael Snyder > wrote: >=20 > > From: Michael Snyder > > Subject: Re: i386.record.floating.point.patch : with > more testing and assurity > > To: "paawan oza" > > Cc: "Hui Zhu" , > "Mark Kettenis" , > "pedro@codesourcery.com" > , > "gdb-patches@sourceware.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; > >=A0 } > >=A0=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; > > +} > > + > >=A0 /* 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); > >=A0=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=A0=A0break; > >=A0=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 =A0 /* memory */ > > +=A0 =A0 =A0 =A0 /* Memory.=A0 */ > >=A0 =A0=A0=A0 =A0 uint32_t addr; > >=A0=20 > >=A0 =A0=A0=A0 =A0 if (i386_record_lea_modrm_addr > > (&ir, &addr)) > >=A0 =A0=A0=A0 =A0 =A0 return -1; > >=A0 =A0=A0=A0 =A0 switch (ir.reg) > >=A0 =A0=A0=A0 =A0 =A0 { > > -=A0=A0=A0 =A0 =A0 case 0x00: > > -=A0=A0=A0 =A0 =A0 case 0x01: > >=A0 =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 =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 =A0 case 0x04: > >=A0 =A0=A0=A0 =A0 =A0 case 0x05: > >=A0 =A0=A0=A0 =A0 =A0 case 0x06: > >=A0 =A0=A0=A0 =A0 =A0 case 0x07: > >=A0 =A0=A0=A0 =A0 =A0 case 0x10: > >=A0 =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 =A0 case 0x14: > >=A0 =A0=A0=A0 =A0 =A0 case 0x15: > >=A0 =A0=A0=A0 =A0 =A0 case 0x16: > >=A0 =A0=A0=A0 =A0 =A0 case 0x17: > >=A0 =A0=A0=A0 =A0 =A0 case 0x20: > >=A0 =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 =A0 case 0x24: > >=A0 =A0=A0=A0 =A0 =A0 case 0x25: > >=A0 =A0=A0=A0 =A0 =A0 case 0x26: > >=A0 =A0=A0=A0 =A0 =A0 case 0x27: > >=A0 =A0=A0=A0 =A0 =A0 case 0x30: > >=A0 =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 =A0 case 0x34: > >=A0 =A0=A0=A0 =A0 =A0 case 0x35: > >=A0 =A0=A0=A0 =A0 =A0 case 0x36: > >=A0 =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 =A0 break; > >=A0 =A0=A0=A0 =A0 =A0 case 0x08: > >=A0 =A0=A0=A0 =A0 =A0 case 0x0a: > > @@ -4250,6 +4321,7 @@ > >=A0 =A0=A0=A0 =A0 =A0 case 0x19: > >=A0 =A0=A0=A0 =A0 =A0 case 0x1a: > >=A0 =A0=A0=A0 =A0 =A0 case 0x1b: > > +=A0 =A0 =A0 =A0 =A0 =A0 case 0x1d:=20 > >=A0 =A0=A0=A0 =A0 =A0 case 0x28: > >=A0 =A0=A0=A0 =A0 =A0 case 0x29: > >=A0 =A0=A0=A0 =A0 =A0 case 0x2a: > > @@ -4258,9 +4330,14 @@ > >=A0 =A0=A0=A0 =A0 =A0 case 0x39: > >=A0 =A0=A0=A0 =A0 =A0 case 0x3a: > >=A0 =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 =A0 switch (ir.reg > > & 7) > >=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 /* 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 =A0 break; > >=A0 =A0=A0=A0 =A0=A0=A0 case 1: > >=A0 =A0=A0=A0 =A0=A0=A0 =A0 switch > > (ir.reg >> 4) > > @@ -4274,6 +4351,7 @@ > >=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 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 =A0 > > default: > >=A0 =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=A0 > > return -1; > > @@ -4284,15 +4362,49 @@ > >=A0 =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 =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 =A0 case > > 1: > >=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 > > 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 =A0 > > break; > >=A0 =A0=A0=A0 =A0=A0=A0 =A0 =A0 case > > 2: > >=A0 =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=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 =A0 > > break; > >=A0 =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 =A0 > > default: > >=A0 =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=A0 > > return -1; > > @@ -4302,11 +4414,21 @@ > >=A0 =A0=A0=A0 =A0=A0=A0 } > >=A0 =A0=A0=A0 =A0 =A0 =A0 break; > >=A0 =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 =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 =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 =A0 break; > >=A0 =A0=A0=A0 =A0 =A0 case 0x0e: > >=A0 =A0=A0=A0 =A0 =A0 =A0 if (ir.dflag) > > @@ -4329,6 +4451,9 @@ > >=A0 =A0=A0=A0 =A0 =A0 case 0x3e: > >=A0 =A0=A0=A0 =A0 =A0 =A0 if > > (record_arch_list_add_mem (addr, 10)) > >=A0 =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 =A0 break; > >=A0 =A0=A0=A0 =A0 =A0 case 0x2e: > >=A0 =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 =A0 =A0 if > > (record_arch_list_add_mem (addr, 80)) > >=A0 =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 =A0 break; > >=A0 =A0=A0=A0 =A0 =A0 case 0x3f: > >=A0 =A0=A0=A0 =A0 =A0 =A0 if > > (record_arch_list_add_mem (addr, 8)) > >=A0 =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 =A0 break; > >=A0 =A0=A0=A0 =A0 =A0 default: > >=A0 =A0=A0=A0 =A0 =A0 =A0 ir.addr -=3D 2; > > @@ -4357,8 +4489,205 @@ > >=A0 =A0=A0=A0 =A0 =A0 =A0 break; > >=A0 =A0=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; > >=A0=20 > > =A0 =A0 =A0=A0=A0/* int3 */ > >=20 >=20 >=20 >=20 >=20