From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25729 invoked by alias); 8 Jul 2009 09:00:40 -0000 Received: (qmail 25704 invoked by uid 22791); 8 Jul 2009 09:00:37 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23,J_CHICKENPOX_24,J_CHICKENPOX_25,J_CHICKENPOX_28,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-px0-f195.google.com (HELO mail-px0-f195.google.com) (209.85.216.195) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 08 Jul 2009 09:00:26 +0000 Received: by pxi33 with SMTP id 33so4699130pxi.12 for ; Wed, 08 Jul 2009 02:00:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.204.11 with SMTP id b11mr2230332wfg.186.1247043623875; Wed, 08 Jul 2009 02:00:23 -0700 (PDT) In-Reply-To: <978078.82017.qm@web112508.mail.gq1.yahoo.com> References: <978078.82017.qm@web112508.mail.gq1.yahoo.com> Date: Wed, 08 Jul 2009 09:00:00 -0000 Message-ID: Subject: Re: i386.record.floating.point.patch : with more testing and assurity From: Hui Zhu To: paawan oza Cc: Michael Snyder , Mark Kettenis , "pedro@codesourcery.com" , "gdb-patches@sourceware.org" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes 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/msg00226.txt.bz2 This version still have some format issue: 1. A lot of spaces follow the code. 2. Some line size biger than 80. 3. Some indent error. And maybe you can make a testsuite to test the fp insn or write clear how to use the test code that you post (post your behavior with it). Thanks, Hui On Tue, Jul 7, 2009 at 03:04, paawan oza wrote: > > Hi, > > please find the latest patch and ChangeLog as follows. > > ******************** > ChangeLog > ******************** > Current: gdb-6.8.50.20090706 > 2009-07-06 =A0Oza =A0 > > =A0 =A0 =A0 =A0* i386-tdep.c: Support for floating point recording. > > > *************************** > i386.records.floats.patch > *************************** > > > diff -urN ./gdb.orig/i386-tdep.c gdb.new/i386-tdep.c > --- ./gdb.orig/i386-tdep.c =A0 =A0 =A02009-07-02 13:25:54.000000000 -0400 > +++ gdb.new/i386-tdep.c 2009-07-06 23:44:07.000000000 -0400 > @@ -3056,6 +3056,66 @@ > =A0 return 0; > =A0} > > + > +/* Defines contents to record. =A0*/ > +#define I386_SAVE_FPU_REGS =A0 =A0 =A0 =A0 =A0 =A0 =A00xfffd > +#define I386_SAVE_FPU_ENV =A0 =A0 =A0 =A0 =A0 =A0 =A0 0xfffe > +#define I386_SAVE_FPU_ENV_REG_STACK =A0 =A0 0xffff > + > +/* Record the value of floating point registers which will be changed by= the > + =A0 Current instruction to "record_arch_list". > + =A0 Return -1 if something is wrong. =A0*/ > + > +static int i386_record_floats(struct gdbarch *gdbarch, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct i386_= record_s *ir, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0uint32_t ire= gnum) > +{ > + =A0struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); > + =A0int i; > + > + =A0/* Oza : because of floating point insn push/pop of fpu stack > + =A0Is going to happen. currently we store st0-st7 registers, > + =A0But we need not store all registers all the time, In future > + =A0We use ftag register and record only those who are not marked as an = empty. > + =A0*/ > + =A0if (I386_SAVE_FPU_REGS =3D=3D iregnum) > + =A0 =A0{ > + =A0 =A0 =A0for (i =3D I387_ST0_REGNUM (tdep);i <=3D I387_ST0_REGNUM (td= ep) + 7;i++) > + =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_reg (ir->regcache,i)) > + =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0} > + =A0 =A0} > + =A0else if (I386_SAVE_FPU_ENV =3D=3D iregnum) > + =A0 =A0{ > + =A0 =A0 =A0for (i =3D I387_FCTRL_REGNUM(tdep);i <=3D I387_FOP_REGNUM(td= ep);i++) > + =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0if (record_arch_list_add_reg (ir->regcache,i)) > + =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0} > + =A0 =A0} > + =A0else if (I386_SAVE_FPU_ENV_REG_STACK =3D=3D iregnum) > + =A0 =A0{ > + =A0 =A0 =A0for (i =3D I387_ST0_REGNUM (tdep);i <=3D I387_FOP_REGNUM(tde= p);i++) > + =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0if (record_arch_list_add_reg (ir->regcache,i)) > + =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0} > + =A0 =A0} > + =A0else if ((iregnum >=3D I387_ST0_REGNUM (tdep)) && > + =A0 =A0 =A0 =A0 =A0 (iregnum <=3D I387_FOP_REGNUM(tdep))) > + =A0 =A0{ > + =A0 =A0 =A0if (record_arch_list_add_reg (ir->regcache,iregnum)) > + =A0 =A0 =A0 =A0return -1; > + =A0 =A0} > + =A0else > + =A0 =A0{ > + =A0 =A0 =A0/* Parameter error. =A0*/ > + =A0 =A0 =A0return -1; > + =A0 =A0} > + =A0return 0; > +} > + > =A0/* Parse the current instruction and record the values of the register= s and > =A0 =A0memory that will be changed in current instruction to "record_arch= _list". > =A0 =A0Return -1 if something wrong. */ > @@ -3070,6 +3130,7 @@ > =A0 uint32_t tmpu32; > =A0 uint32_t opcode; > =A0 struct i386_record_s ir; > + =A0struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); > > =A0 memset (&ir, 0, sizeof (struct i386_record_s)); > =A0 ir.regcache =3D regcache; > @@ -4105,8 +4166,7 @@ > =A0 =A0 =A0 =A0} > =A0 =A0 =A0 break; > > - =A0 =A0 =A0/* floats */ > - =A0 =A0 =A0/* It just record the memory change of instrcution. */ > + =A0 =A0 =A0/* Floats. =A0*/ > =A0 =A0 case 0xd8: > =A0 =A0 case 0xd9: > =A0 =A0 case 0xda: > @@ -4120,46 +4180,57 @@ > =A0 =A0 =A0 ir.reg |=3D ((opcode & 7) << 3); > =A0 =A0 =A0 if (ir.mod !=3D 3) > =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 /* memory */ > + =A0 =A0 =A0 =A0 /* Memory. =A0*/ > =A0 =A0 =A0 =A0 =A0uint32_t addr; > > =A0 =A0 =A0 =A0 =A0if (i386_record_lea_modrm_addr (&ir, &addr)) > =A0 =A0 =A0 =A0 =A0 =A0return -1; > =A0 =A0 =A0 =A0 =A0switch (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 =A0case 0x02: > - =A0 =A0 =A0 =A0 =A0 case 0x03: > + =A0 =A0 =A0 =A0 =A0 case 0x12: > + =A0 =A0 =A0 =A0 =A0 case 0x22: > + =A0 =A0 =A0 =A0 =A0 case 0x32: > + =A0 =A0 =A0 =A0 =A0 =A0 /* For fcom, ficom nothing to do. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0x03: > + =A0 =A0 =A0 =A0 =A0 case 0x13: > + =A0 =A0 =A0 =A0 =A0 case 0x23: > + =A0 =A0 =A0 =A0 =A0 case 0x33: > + =A0 =A0 =A0 =A0 =A0 =A0 /* For fcomp, ficomp pop FPU stack, store all. = =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdbarch, &ir, I386_SAVE_= FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 case 0x00: > + =A0 =A0 =A0 =A0 =A0 case 0x01: > =A0 =A0 =A0 =A0 =A0 =A0case 0x04: > =A0 =A0 =A0 =A0 =A0 =A0case 0x05: > =A0 =A0 =A0 =A0 =A0 =A0case 0x06: > =A0 =A0 =A0 =A0 =A0 =A0case 0x07: > =A0 =A0 =A0 =A0 =A0 =A0case 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 0x11: > =A0 =A0 =A0 =A0 =A0 =A0case 0x14: > =A0 =A0 =A0 =A0 =A0 =A0case 0x15: > =A0 =A0 =A0 =A0 =A0 =A0case 0x16: > =A0 =A0 =A0 =A0 =A0 =A0case 0x17: > =A0 =A0 =A0 =A0 =A0 =A0case 0x20: > =A0 =A0 =A0 =A0 =A0 =A0case 0x21: > - =A0 =A0 =A0 =A0 =A0 case 0x22: > - =A0 =A0 =A0 =A0 =A0 case 0x23: > =A0 =A0 =A0 =A0 =A0 =A0case 0x24: > =A0 =A0 =A0 =A0 =A0 =A0case 0x25: > =A0 =A0 =A0 =A0 =A0 =A0case 0x26: > =A0 =A0 =A0 =A0 =A0 =A0case 0x27: > =A0 =A0 =A0 =A0 =A0 =A0case 0x30: > =A0 =A0 =A0 =A0 =A0 =A0case 0x31: > - =A0 =A0 =A0 =A0 =A0 case 0x32: > - =A0 =A0 =A0 =A0 =A0 case 0x33: > =A0 =A0 =A0 =A0 =A0 =A0case 0x34: > =A0 =A0 =A0 =A0 =A0 =A0case 0x35: > =A0 =A0 =A0 =A0 =A0 =A0case 0x36: > =A0 =A0 =A0 =A0 =A0 =A0case 0x37: > - =A0 =A0 =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 =A0 =A0 =A0 /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fi= add, fimul, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 fisub, fisubr, fidiv, fidivr, modR/M.re= g is an extension of code, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Always affects st(0) register. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdbarch, &ir, I387_ST0_R= EGNUM (tdep))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0case 0x08: > =A0 =A0 =A0 =A0 =A0 =A0case 0x0a: > =A0 =A0 =A0 =A0 =A0 =A0case 0x0b: > @@ -4167,6 +4238,7 @@ > =A0 =A0 =A0 =A0 =A0 =A0case 0x19: > =A0 =A0 =A0 =A0 =A0 =A0case 0x1a: > =A0 =A0 =A0 =A0 =A0 =A0case 0x1b: > + =A0 =A0 =A0 =A0 =A0 case 0x1d: > =A0 =A0 =A0 =A0 =A0 =A0case 0x28: > =A0 =A0 =A0 =A0 =A0 =A0case 0x29: > =A0 =A0 =A0 =A0 =A0 =A0case 0x2a: > @@ -4174,11 +4246,16 @@ > =A0 =A0 =A0 =A0 =A0 =A0case 0x38: > =A0 =A0 =A0 =A0 =A0 =A0case 0x39: > =A0 =A0 =A0 =A0 =A0 =A0case 0x3a: > - =A0 =A0 =A0 =A0 =A0 case 0x3b: > + =A0 =A0 =A0 =A0 =A0 case 0x3b: > + =A0 =A0 =A0 =A0 =A0 case 0x3c: > + =A0 =A0 =A0 =A0 =A0 case 0x3d: > =A0 =A0 =A0 =A0 =A0 =A0 =A0switch (ir.reg & 7) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0: > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Handling fld, fild. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdbarch, &ir, I3= 86_SAVE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 1: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0switch (ir.reg >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > @@ -4191,6 +4268,7 @@ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 3: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0default: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (= addr, 2)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > @@ -4201,15 +4279,48 @@ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0switch (ir.reg >> 4) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (a= ddr, 4)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =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/* For fstp m32fp */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdba= rch, &ir, =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 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 1: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (= addr, 4)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =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 || (5 =3D=3D (ir.reg & = 7)) =A0\ > + =A0 =A0 =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 =A0 =A0 =A0 =A0 =A0/* For fstp insn */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdba= rch, &ir, =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 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 2: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (= addr, 8)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =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/* For fstp m64fp */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdba= rch, &ir, =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 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 3: > + =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/* For fistp, fbld, fild= , fbstp. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdba= rch, &ir, =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 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0default: > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (= addr, 2)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > @@ -4218,54 +4329,74 @@ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > - =A0 =A0 =A0 =A0 =A0 case 0x0c: > - =A0 =A0 =A0 =A0 =A0 case 0x0d: > - =A0 =A0 =A0 =A0 =A0 case 0x1d: > - =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 break; > - =A0 =A0 =A0 =A0 =A0 case 0x0e: > + =A0 =A0 =A0 =A0 =A0 case 0x0c: > + =A0 =A0 =A0 =A0 =A0 =A0 /* Insn fldenv. =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 =A0= I386_SAVE_FPU_ENV_REG_STACK)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 case 0x0d: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Insn fldcw. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_floats(gdbarch, &ir, I387_FCTRL= _REGNUM (tdep))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 case 0x2c: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Insn frstor. =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 =A0= I386_SAVE_FPU_ENV_REG_STACK)) > + =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 =A0if (ir.dflag) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 28)) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 28)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0else > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 14)) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 14)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > - =A0 =A0 =A0 =A0 =A0 case 0x0f: > - =A0 =A0 =A0 =A0 =A0 case 0x2f: > + =A0 =A0 =A0 =A0 =A0 case 0x0f: > + =A0 =A0 =A0 =A0 =A0 case 0x2f: > =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (addr, 2)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > - =A0 =A0 =A0 =A0 =A0 case 0x1f: > - =A0 =A0 =A0 =A0 =A0 case 0x3e: > + =A0 =A0 =A0 =A0 =A0 case 0x1f: > + =A0 =A0 =A0 =A0 =A0 case 0x3e: > =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (addr, 10)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Insn fstp, fbstp. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir, I386_SA= VE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > - =A0 =A0 =A0 =A0 =A0 case 0x2e: > + =A0 =A0 =A0 =A0 =A0 case 0x2e: > =A0 =A0 =A0 =A0 =A0 =A0 =A0if (ir.dflag) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 28)) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 addr +=3D 28; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 28)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 addr +=3D 28; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0else > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 14)) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 addr +=3D 14; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_arch_list_add_mem (addr, 14)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 addr +=3D 14; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (addr, 80)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Insn fsave. =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 =A0= I386_SAVE_FPU_ENV_REG_STACK)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > - =A0 =A0 =A0 =A0 =A0 case 0x3f: > + =A0 =A0 =A0 =A0 =A0 case 0x3f: > =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (addr, 8)) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Ins fistp. =A0*/ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir, I386_SA= VE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0default: > =A0 =A0 =A0 =A0 =A0 =A0 =A0ir.addr -=3D 2; > @@ -4273,9 +4404,198 @@ > =A0 =A0 =A0 =A0 =A0 =A0 =A0goto no_support; > =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =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 else > + =A0 =A0 =A0 { > + =A0 =A0 =A0 =A0 =A0switch (opcode) > + =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0case 0xd8: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir, I387_ST= 0_REGNUM (tdep))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xd9: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (0x0c =3D=3D (ir.modrm >> 4)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((ir.modrm & 0x0f) <=3D 7) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, = &ir, =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* If only st(0) is changing, th= en we have already recorded */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((ir.modrm & 0x0f) - 0x08) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbar= ch, &ir, =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0I387_ST0_REGNUM (tdep) += ((ir.modrm & 0x0f) - 0x08))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -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 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0else > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0switch(ir.modrm) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xe0: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xe1: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf0: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf5: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf8: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xfa: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xfc: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xfe: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xff: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, = &ir, =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf1: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf2: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf3: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf4: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 case 0xf6: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf7: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xe8: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xe9: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xea: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xeb: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xec: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xed: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xee: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xf9: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xfb: > + =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0xfd: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, = &ir, =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, = &ir, =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xda: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (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_S= AVE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ((0x0c =3D=3D ir.modrm >> 4) || (0x0= d =3D=3D ir.modrm >> 4)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir, I38= 7_ST0_REGNUM (tdep))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (((ir.modrm & 0x0f) > 0) && ((ir.modr= m & 0x0f) <=3D 7)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir,= =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + (ir.mo= drm & 0x0f))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else 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 I387_ST0_REGNUM (tdep) + ((ir.m= odrm & 0x0f) - 0x08))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xdb: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (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_S= AVE_FPU_ENV)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ((0x0c =3D=3D ir.modrm >> 4) || (0x0= d =3D=3D ir.modrm >> 4)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir, I38= 7_ST0_REGNUM (tdep))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (((ir.modrm & 0x0f) > 0) && ((ir.modr= m & 0x0f) <=3D 7)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir,= =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 I387_ST0_REGNUM (tdep) + (ir.mo= drm & 0x0f))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else 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 =A0I387_ST0_REGNUM (tdep) + ((i= r.modrm & 0x0f) - 0x08))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xdc: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if ( =A0(0x0c =3D=3D ir.modrm >> 4) =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 || (0x0d =3D=3D ir.modrm >> 4) =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 =A0 =A0 =A0 =A0 =A0if ((ir.modrm & 0x0f) <=3D 7) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir,= =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0I387_ST0_REGNUM (tdep) + (ir= .modrm & 0x0f))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else > + =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 I387_ST0_REGNUM (tdep) + ((ir.m= odrm & 0x0f) - 0x08))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -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 break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xdd: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (0x0c =3D=3D ir.modrm >> 4) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbarch, &ir,= =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ((0x0d =3D=3D ir.modrm >> 4) || (0x0= e =3D=3D ir.modrm >> 4)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((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 =A0if (i386_record_floats(gdbar= ch, &ir, =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0I387_ST0_REGNUM (tde= p) + (ir.modrm & 0x0f))) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (i386_record_floats(gdbar= ch, &ir, I386_SAVE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -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 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xde: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((0x0c =3D=3D ir.modrm >> 4) =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 || (0x0e =3D=3D ir.modrm >> 4) =A0\ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 || (0x0f =3D=3D ir.modrm >> 4) =A0\ > + =A0 =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 =A0 =A0if (i386_record_floats(gdbarch, &ir,= I386_SAVE_FPU_REGS)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0case 0xdf: > + =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 =A0if (record_arch_list_add_reg (ir.reg= cache, 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 =A0else if ((0x0f =3D=3D ir.modrm >> 4) || (0x0= e =3D=3D ir.modrm >> 4)) > + =A0 =A0 =A0 =A0 =A0 =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 =A0return -1; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0} > =A0 =A0 =A0 break; > - > =A0 =A0 =A0 /* string ops */ > =A0 =A0 =A0 /* movsS */ > =A0 =A0 case 0xa4: > @@ -4694,10 +5014,17 @@ > =A0 =A0 =A0 /* fwait */ > =A0 =A0 =A0 /* XXX */ > =A0 =A0 case 0x9b: > - =A0 =A0 =A0printf_unfiltered (_("Process record doesn't support instruc= tion " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"fwait.\n")); > - =A0 =A0 =A0ir.addr -=3D 1; > - =A0 =A0 =A0goto no_support; > + =A0 =A0 =A0if (target_read_memory (ir.addr, &tmpu8, 1)) > + =A0 =A0 =A0 { > + =A0 =A0 =A0 =A0 if (record_debug) > + =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"addr 0x= %s len =3D 1.\n"), > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0paddress (gd= barch, ir.addr)); > + =A0 =A0 =A0 =A0 return -1; > + =A0 =A0 =A0 } > + =A0 =A0 =A0opcode =3D (uint32_t) tmpu8; > + =A0 =A0 =A0ir.addr++; > + =A0 =A0 =A0goto reswitch; > =A0 =A0 =A0 break; > > =A0 =A0 =A0 /* int3 */ > > > > > > > --- On Sun, 7/5/09, Hui Zhu wrote: > >> From: Hui Zhu >> Subject: Re: i386.record.floating.point.patch : with more testing and as= surity >> To: "paawan oza" >> Cc: "Michael Snyder" , "Mark Kettenis" , "pedro@codesourcery.com" , "gdb-patch= es@sourceware.org" >> Date: Sunday, July 5, 2009, 3:45 PM >> Hi Paawan, >> >> 1.=A0 gcc -g -O2=A0=A0=A0-I. -I../../src/gdb >> -I../../src/gdb/common >> -I../../src/gdb/config >> -DLOCALEDIR=3D"\"/usr/local/share/locale\"" >> -DHAVE_CONFIG_H -I../../src/gdb/../include/opcode >> -I../../src/gdb/../readline/.. -I../bfd >> -I../../src/gdb/../bfd >> -I../../src/gdb/../include -I../libdecnumber >> -I../../src/gdb/../libdecnumber >> -I../../src/gdb/gnulib -Ignulib >> -DMI_OUT=3D1 -DTUI=3D1=A0 -Wall >> -Wdeclaration-after-statement >> -Wpointer-arith -Wformat-nonliteral -Wno-pointer-sign >> -Wno-unused >> -Wno-switch -Wno-char-subscripts -Werror -c -o i386-tdep.o >> -MT >> i386-tdep.o -MMD -MP -MF .deps/i386-tdep.Tpo >> ../../src/gdb/i386-tdep.c >> cc1: warnings being treated as errors >> ../../src/gdb/i386-tdep.c: In function >> 'i386_process_record': >> ../../src/gdb/i386-tdep.c:4985: warning: implicit >> declaration of >> function 'paddr_nz' >> ../../src/gdb/i386-tdep.c:4985: warning: format '%s' >> expects type >> 'char *', but argument 2 has type 'int' >> make[2]: *** [i386-tdep.o] Error 1 >> make[2]: Leaving directory `/media/disk/gdb/bgdb/gdb' >> make[1]: *** [all-gdb] Error 2 >> make[1]: Leaving directory `/media/disk/gdb/bgdb' >> make: *** [all] Error 2 >> >> paddr_nz was removed.=A0 Please update your patch follow >> cvs-head. >> >> 2. +#define I386_SAVE_FPU_REGS >> =A0=A0=A0 0xFFFD >> +#define I386_SAVE_FPU_ENV >> =A0=A0=A0 0xFFFE >> +#define I386_SAVE_FPU_ENV_REG_STACK >> 0xFFFF >> >> They just used in prec right?=A0 Maybe you can move them >> close to record >> code in i386-tedp.c. >> >> 3. +static int i386_record_floats(struct i386_record_s *ir, >> uint32_t iregnum) >> +{ >> +=A0 int i; >> + >> +=A0 /* Oza : push/pop of fpu stack is going to happen >> +=A0 =A0=A0=A0currently we store st0-st7 >> registers, but we need not store all >> registers all the time. >> +=A0 =A0=A0=A0using fstatus, we use 11-13 bits >> which gives us stack top and >> hence we optimize our storage. >> +=A0 =A0=A0=A0alternatively we can use ftag >> register too */ >> +=A0 if (I386_SAVE_FPU_REGS =3D=3D iregnum) >> +=A0 =A0 { >> +=A0 =A0 =A0 for >> (i=3DI386_ST0_REGNUM;i<=3DI386_ST0_REGNUM+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 } >> About the number of fp regs.=A0 Please use the code: >> #define I387_ST0_REGNUM(tdep) ((tdep)->st0_regnum) >> #define I387_NUM_XMM_REGS(tdep) ((tdep)->num_xmm_regs) >> #define I387_MM0_REGNUM(tdep) ((tdep)->mm0_regnum) >> >> #define I387_FCTRL_REGNUM(tdep) (I387_ST0_REGNUM (tdep) + >> 8) >> #define I387_FSTAT_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 1) >> #define I387_FTAG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 2) >> #define I387_FISEG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 3) >> #define I387_FIOFF_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 4) >> #define I387_FOSEG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 5) >> #define I387_FOOFF_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 6) >> #define I387_FOP_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + >> 7) >> #define I387_XMM0_REGNUM(tdep) (I387_ST0_REGNUM (tdep) + >> 16) >> #define I387_MXCSR_REGNUM(tdep) \ >> =A0 (I387_XMM0_REGNUM (tdep) + I387_NUM_XMM_REGS >> (tdep)) >> >> They are in i387-tdep.h. >> >> And maybe you can try function i387_supply_fsave and >> i387_collect_fsave. >> >> >> 4.=A0 Your code's format is not very well.=A0 Please >> make it like the code in cvs. >> >> >> >> Thanks, >> Hui >> >> >> >> >> On Sat, Jul 4, 2009 at 13:19, paawan oza >> wrote: >> > >> > Hi, >> > >> > Actually, the initial patch which I submitted were >> using them. >> > but as I have incorporated Hui's comments I have >> removed those constants completely. >> > in the sense I have no longer extended the >> enumration. >> > >> > but of course, those registers are recorded as and >> when required. >> > e.g. (ffree insn changes FTAG register, so we record >> it) >> > >> > Regards, >> > Oza. >> > >> > --- On Sat, 7/4/09, Michael Snyder >> wrote: >> > >> >> From: Michael Snyder >> >> Subject: Re: i386.record.floating.point.patch : >> with more testing and assurity >> >> To: "paawan oza" >> >> Cc: "Mark Kettenis" , >> "pedro@codesourcery.com" >> , >> "teawater@gmail.com" >> , >> "gdb-patches@sourceware.org" >> >> >> Date: Saturday, July 4, 2009, 3:19 AM >> >> paawan oza wrote: >> >> > Hi, >> >> > >> >> > In My understanding the point was like >> below. >> >> > in the patch there were following register >> extended in >> >> enumeration in i386-tdep.h >> >> > >> >> > I386_FSTAT, >> >> > I386_FTAG,=A0 =A0 =A0=A0=A0I386_FISEG, >> >> > I386_FIOFF, >> >> > I386_FOSEG, >> >> > I386_FOOFF, >> >> > I386_FOP >> >> > >> >> > >> >> > According to Hui in some of his previous >> mails...his >> >> idea was >> >> >> FCTRL, FOP and so on are the fp reg of >> >> amd64.=A0 For now, prec is still >> >> >> not support amd64 And amd64's support are >> in >> >> amd64-tedp.... files.=A0 >Change i386_regnum is >> not a >> >> good idea. I suggest you divide fp patch to 2 >> >parts. One >> >> is for i386, the other for amd64. For now, just >> send i386 >> >> patch >for review.=A0 And send amd64 patch when >> prec >> >> support amd64" >> >> > >> >> > >> >> > while, my idea/understanding is: >> >> > FCTRL, FOP registers are not only a part of >> amd64, but >> >> also part of i386 (x87 FPU unit) also. >> >> > so according to me these registers are part >> of i386 >> >> also and it needed to be also in i386-tdep.h. >> >> > >> >> > Regards, >> >> > Oza. >> >> >> >> I'm not sure why you want to add those constants >> to >> >> i386-tdep.h, >> >> when the rest of your patch does not seem to use >> them. >> >> >> >> >> > >> > >> > >> > >> > > > >