Patch: Fix ftag error when it is restored from fxsave in gdbserver on x86

Daniel Jacobowitz drow@false.org
Fri Mar 30 15:33:00 GMT 2007


On Tue, Nov 01, 2005 at 09:10:57AM -0800, Qunying Pan wrote:
> Hello,
> 
> Sent out to gdb-patches@sources.redhat.com yesterday, but did not get
> through I guess. Try again to gdb-patches@sourceware.org.
> 
> This patch fixes ftag error when it is restored from fxsave in gdbserver
> on x86. Acceptable? 

I've only belatedly had a chance to look at this :-(  I ended up using
a different patch, but thank you for your work - it was easy to see
what I'd done (completely) wrong when I wrote the fxsave support.
There was a similar error in the other direction.

Tested on x86_64-linux using gdbserver, where it fixes a failure in
store.exp.

-- 
Daniel Jacobowitz
CodeSourcery

2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>

	* i387-fp.c (i387_cache_to_fxsave): Reinitialize val2 before use.
	(i387_fxsave_to_cache): Check fp->ftag while building ftag value.

Index: i387-fp.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/i387-fp.c,v
retrieving revision 1.5
diff -u -p -r1.5 i387-fp.c
--- i387-fp.c	9 Jan 2007 17:59:08 -0000	1.5
+++ i387-fp.c	30 Mar 2007 15:28:45 -0000
@@ -174,6 +174,7 @@ i387_cache_to_fxsave (void *buf)
   /* Convert to the simplifed tag form stored in fxsave data.  */
   collect_register_by_name ("ftag", &val);
   val &= 0xFFFF;
+  val2 = 0;
   for (i = 7; i >= 0; i--)
     {
       int tag = (val >> (i * 2)) & 3;
@@ -270,7 +271,7 @@ i387_fxsave_to_cache (const void *buf)
   for (i = 7; i >= 0; i--)
     {
       int tag;
-      if (val & (1 << i))
+      if (fp->ftag & (1 << i))
 	tag = i387_ftag (fp, (i + 8 - top) % 8);
       else
 	tag = 3;



More information about the Gdb-patches mailing list