From 679da607cde677bea7ee3fbbbbc2092d1d5f63c0 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 28 Feb 2004 20:48:57 +0000 Subject: * amd64-tdep.h: (amd64_collect_fxsave): New prototype. * amd64-tdep.c (amd64_collect_fxsave): New function. (amd64_fill_fxsave): Simply call amd64_collect_fxsave. --- gdb/ChangeLog | 4 ++++ gdb/amd64-tdep.c | 26 ++++++++++++++++++++------ gdb/amd64-tdep.h | 8 ++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e999d4e2c85..e7410214e2d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2004-02-28 Mark Kettenis + * amd64-tdep.h: (amd64_collect_fxsave): New prototype. + * amd64-tdep.c (amd64_collect_fxsave): New function. + (amd64_fill_fxsave): Simply call amd64_collect_fxsave. + * i387-tdep.h: Update copyright year. (i387_collect_fxsave): New prototype. * i387-tdep.c: Update copyright year. diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index 0e446682fe8..e0b2ca046f5 100644 --- a/gdb/amd64-tdep.c +++ b/gdb/amd64-tdep.c @@ -1168,6 +1168,25 @@ amd64_supply_fxsave (struct regcache *regcache, int regnum, } } +/* Fill register REGNUM (if it is a floating-point or SSE register) in + *FXSAVE with the value from REGCACHE. If REGNUM is -1, do this for + all registers. This function doesn't touch any of the reserved + bits in *FXSAVE. */ + +void +amd64_collect_fxsave (const struct regcache *regcache, int regnum, + void *fxsave) +{ + char *regs = fxsave; + + i387_collect_fxsave (regcache, regnum, fxsave); + + if (regnum == -1 || regnum == I387_FISEG_REGNUM) + regcache_raw_collect (regcache, I387_FISEG_REGNUM, regs + 12); + if (regnum == -1 || regnum == I387_FOSEG_REGNUM) + regcache_raw_collect (regcache, I387_FOSEG_REGNUM, regs + 20); +} + /* Fill register REGNUM (if it is a floating-point or SSE register) in *FXSAVE with the value in GDB's register cache. If REGNUM is -1, do this for all registers. This function doesn't touch any of the @@ -1176,10 +1195,5 @@ amd64_supply_fxsave (struct regcache *regcache, int regnum, void amd64_fill_fxsave (char *fxsave, int regnum) { - i387_fill_fxsave (fxsave, regnum); - - if (regnum == -1 || regnum == I387_FISEG_REGNUM) - regcache_collect (I387_FISEG_REGNUM, fxsave + 12); - if (regnum == -1 || regnum == I387_FOSEG_REGNUM) - regcache_collect (I387_FOSEG_REGNUM, fxsave + 20); + amd64_collect_fxsave (current_regcache, regnum, fxsave); } diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h index aff0c6a0389..042618b3e09 100644 --- a/gdb/amd64-tdep.h +++ b/gdb/amd64-tdep.h @@ -63,6 +63,14 @@ extern void amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch); extern void amd64_supply_fxsave (struct regcache *regcache, int regnum, const void *fxsave); +/* Fill register REGNUM (if it is a floating-point or SSE register) in + *FXSAVE with the value from REGCACHE. If REGNUM is -1, do this for + all registers. This function doesn't touch any of the reserved + bits in *FXSAVE. */ + +extern void amd64_collect_fxsave (const struct regcache *regcache, int regnum, + void *fxsave); + /* Fill register REGNUM (if it is a floating-point or SSE register) in *FXSAVE with the value in GDB's register cache. If REGNUM is -1, do this for all registers. This function doesn't touch any of the -- cgit v1.2.1