This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v1 1/1] Fix PR16193 - gdbserver aborts.
- From: Walfred Tedeschi <walfred dot tedeschi at intel dot com>
- To: palves at redhat dot com, yao at codesourcery dot com
- Cc: gdb-patches at sourceware dot org, Walfred Tedeschi <walfred dot tedeschi at intel dot com>
- Date: Mon, 25 Nov 2013 14:40:02 +0100
- Subject: [PATCH v1 1/1] Fix PR16193 - gdbserver aborts.
- Authentication-results: sourceware.org; auth=none
Macro returning the size of the xsave buffer got broken with the MPX
patch. Fix improves the macro to make it more readable.
2013-12-25 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): Refactored macro using HAS_MPX and
HAS_AVX.
---
gdb/common/i386-xstate.h | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/gdb/common/i386-xstate.h b/gdb/common/i386-xstate.h
index e76ecc1..f8b85e3 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,14 @@
#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) == I386_XSTATE_BNDREGS) \
+ || (((XCR0) & I386_XSTATE_MPX) == I386_XSTATE_BNDCFG)
+#define HAS_AVX(XCR0) ((XCR0) & I386_XSTATE_AVX) == I386_XSTATE_AVX
+
/* 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 */
--
1.8.1.2