aboutsummaryrefslogtreecommitdiff
path: root/gdbserver/i387-fp.cc
diff options
context:
space:
mode:
authorAleksandar Paunovic <aleksandar.paunovic@intel.com>2023-08-28 14:18:19 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2023-08-28 14:18:19 -0700
commitc0c43317ef9a1f70ba5fab41d2d08dc7ce08f67e (patch)
tree166450fcb2e25ab5f80cb6d2d604f4d414fc72be /gdbserver/i387-fp.cc
parent03e6fe7e0a6fc4adccf59681962490a10fb31f7c (diff)
downloadgdb-c0c43317ef9a1f70ba5fab41d2d08dc7ce08f67e.zip
gdb-c0c43317ef9a1f70ba5fab41d2d08dc7ce08f67e.tar.gz
gdb-c0c43317ef9a1f70ba5fab41d2d08dc7ce08f67e.tar.bz2
gdbserver: Refactor the legacy region within the xsave struct
Legacy fields of the XSAVE area are already defined within fx_save struct. Use class inheritance to remove code duplication. The two changed functions are called within all tests which run gdbserver. Signed-off-by: Aleksandar Paunovic <aleksandar.paunovic@intel.com> Co-authored-by: John Baldwin <jhb@FreeBSD.org> Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdbserver/i387-fp.cc')
-rw-r--r--gdbserver/i387-fp.cc27
1 files changed, 2 insertions, 25 deletions
diff --git a/gdbserver/i387-fp.cc b/gdbserver/i387-fp.cc
index b8d7a91..a122e2d 100644
--- a/gdbserver/i387-fp.cc
+++ b/gdbserver/i387-fp.cc
@@ -81,29 +81,7 @@ struct i387_fxsave {
unsigned char xmm_space[256];
};
-struct i387_xsave {
- /* All these are only sixteen bits, plus padding, except for fop (which
- is only eleven bits), and fooff / fioff (which are 32 bits each). */
- unsigned short fctrl;
- unsigned short fstat;
- unsigned short ftag;
- unsigned short fop;
- unsigned int fioff;
- unsigned short fiseg;
- unsigned short pad1;
- unsigned int fooff;
- unsigned short foseg;
- unsigned short pad12;
-
- unsigned int mxcsr;
- unsigned int mxcsr_mask;
-
- /* Space for eight 80-bit FP values in 128-bit spaces. */
- unsigned char st_space[128];
-
- /* Space for eight 128-bit XMM values, or 16 on x86-64. */
- unsigned char xmm_space[256];
-
+struct i387_xsave : public i387_fxsave {
unsigned char reserved1[48];
/* The extended control register 0 (the XFEATURE_ENABLED_MASK
@@ -725,7 +703,6 @@ void
i387_xsave_to_cache (struct regcache *regcache, const void *buf)
{
struct i387_xsave *fp = (struct i387_xsave *) buf;
- struct i387_fxsave *fxp = (struct i387_fxsave *) buf;
bool amd64 = register_size (regcache->tdesc, 0) == 8;
int i, top;
unsigned long val;
@@ -962,7 +939,7 @@ i387_xsave_to_cache (struct regcache *regcache, const void *buf)
{
int tag;
if (fp->ftag & (1 << i))
- tag = i387_ftag (fxp, (i + 8 - top) % 8);
+ tag = i387_ftag (fp, (i + 8 - top) % 8);
else
tag = 3;
val |= tag << (2 * i);