diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b2fda832b7..15231dc82b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-05 Andi Kleen + + * gcc.target/i386/mpx/mpx-check.h: Check XGETBV output + if kernel supports MPX. + 2016-07-05 Kito Cheng * gcc.c-torture/compile/pr69102.c: Require fpic support. diff --git a/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h b/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h index 3afa46093d1..73aa01f2565 100644 --- a/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h +++ b/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h @@ -16,6 +16,16 @@ mpx_test (int, const char **); #define DEBUG +#define XSTATE_BNDREGS (1 << 3) + +/* This should be an intrinsic, but isn't. */ +static int xgetbv (unsigned x) +{ + unsigned eax, edx; + asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (x)); + return eax; +} + int main (int argc, const char **argv) { @@ -27,7 +37,7 @@ main (int argc, const char **argv) __cpuid_count (7, 0, eax, ebx, ecx, edx); /* Run MPX test only if host has MPX support. */ - if (ebx & bit_MPX) + if ((ebx & bit_MPX) && (xgetbv (0) & XSTATE_BNDREGS)) mpx_test (argc, argv); else {