aboutsummaryrefslogtreecommitdiff
path: root/gdb/common
diff options
context:
space:
mode:
authorWalfred Tedeschi <walfred.tedeschi@intel.com>2013-11-26 08:32:16 +0000
committerWalfred Tedeschi <walfred.tedeschi@intel.com>2013-11-26 08:32:16 +0000
commit244ec0da3816472b6e2c3347dae8b2d308d90f93 (patch)
tree62ebf6574808ce80c1cb9ce1812b11b5d9b3d937 /gdb/common
parent88e80851c92b974a2ccccceaed931baacd647303 (diff)
downloadgdb-244ec0da3816472b6e2c3347dae8b2d308d90f93.zip
gdb-244ec0da3816472b6e2c3347dae8b2d308d90f93.tar.gz
gdb-244ec0da3816472b6e2c3347dae8b2d308d90f93.tar.bz2
Fix PR16193 - gdbserver aborts.
The MPX patch has broken the I386_XSTATE_SIZE macro. For AVX machines, it ends up returning I386_XSTATE_SSE_SIZE. Where it first reads I386_XSTATE_AVX_SIZE, it should have read I386_XSTATE_AVX: #define I386_XSTATE_SIZE(XCR0) \ (((XCR0) & I386_XSTATE_BNDCFG) != 0 ? I386_XSTATE_BNDCFG_SIZE \ : (((XCR0) & I386_XSTATE_BNDREGS) != 0 ? I386_XSTATE_BNDCFG_SIZE \ - : (((XCR0) & I386_XSTATE_AVX_SIZE) != 0 ? I386_XSTATE_AVX_SIZE \ + : (((XCR0) & I386_XSTATE_AVX) != 0 ? I386_XSTATE_AVX_SIZE \ : I386_XSTATE_SSE_SIZE))) The patch goes a step further and improves readability of the macro, by adding a couple other auxiliary macros. 2013-11-26 Walfred Tedeschi <walfred.tedeschi@intel.com> * i386-xstate.h (I386_XSTATE_MPX): New Macro. (I386_XSTATE_MPX_MASK): Makes use of I386_XSTATE_MPX. (HAS_MPX): New macro. (HAS_AVX): New macro. (I386_XSTATE_SIZE): Uses HAS_MPX and HAS_AVX.
Diffstat (limited to 'gdb/common')
-rw-r--r--gdb/common/i386-xstate.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/gdb/common/i386-xstate.h b/gdb/common/i386-xstate.h
index e76ecc1..c4b8c8a 100644
--- a/gdb/common/i386-xstate.h
+++ b/gdb/common/i386-xstate.h
@@ -26,14 +26,13 @@
#define I386_XSTATE_AVX (1ULL << 2)
#define I386_XSTATE_BNDREGS (1ULL << 3)
#define I386_XSTATE_BNDCFG (1ULL << 4)
+#define I386_XSTATE_MPX (I386_XSTATE_BNDREGS | I386_XSTATE_BNDCFG)
/* Supported mask and size of the extended state. */
#define I386_XSTATE_X87_MASK I386_XSTATE_X87
#define I386_XSTATE_SSE_MASK (I386_XSTATE_X87 | I386_XSTATE_SSE)
#define I386_XSTATE_AVX_MASK (I386_XSTATE_SSE_MASK | I386_XSTATE_AVX)
-#define I386_XSTATE_MPX_MASK (I386_XSTATE_AVX_MASK \
- | I386_XSTATE_BNDREGS \
- | I386_XSTATE_BNDCFG)
+#define I386_XSTATE_MPX_MASK (I386_XSTATE_AVX_MASK | I386_XSTATE_MPX)
#define I386_XSTATE_ALL_MASK I386_XSTATE_MPX_MASK
@@ -44,11 +43,13 @@
#define I386_XSTATE_MAX_SIZE 1088
+/* In case one of the MPX XCR0 bits is set we consider we have MPX. */
+#define HAS_MPX(XCR0) (((XCR0) & I386_XSTATE_MPX) != 0)
+#define HAS_AVX(XCR0) (((XCR0) & I386_XSTATE_AVX) != 0)
+
/* Get I386 XSAVE extended state size. */
#define I386_XSTATE_SIZE(XCR0) \
- (((XCR0) & I386_XSTATE_BNDCFG) != 0 ? I386_XSTATE_BNDCFG_SIZE \
- : (((XCR0) & I386_XSTATE_BNDREGS) != 0 ? I386_XSTATE_BNDCFG_SIZE \
- : (((XCR0) & I386_XSTATE_AVX_SIZE) != 0 ? I386_XSTATE_AVX_SIZE \
- : I386_XSTATE_SSE_SIZE)))
+ (HAS_MPX (XCR0) ? I386_XSTATE_BNDCFG_SIZE : \
+ (HAS_AVX (XCR0) ? I386_XSTATE_AVX_SIZE : I386_XSTATE_SSE_SIZE))
#endif /* I386_XSTATE_H */