Fix PR16193 - gdbserver aborts.
[external/binutils.git] / gdb / common / i386-xstate.h
index e76ecc1..c4b8c8a 100644 (file)
 #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
 
 
 #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 */