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