[PING] Re: [PATCH] Fix MPX tests on systems with MPX disabled
Andi Kleen
andi@firstfloor.org
Mon Jul 4 19:58:00 GMT 2016
Andi Kleen <andi@firstfloor.org> writes:
PING!
> From: Andi Kleen <ak@linux.intel.com>
>
> I have a Skylake system with MPX in the CPU, but MPX is disabled
> in the kernel configuration.
>
> This makes all the MPX tests fail because they assume if MPX
> is in CPUID it works
>
> Check the output of XGETBV too to detect non MPX kernels.
>
> gcc/testsuite/:
>
> 2016-06-25 Andi Kleen <ak@linux.intel.com>
>
> * gcc.target/i386/mpx/mpx-check.h: Check XGETBV output
> if kernel supports MPX.
> ---
> gcc/testsuite/gcc.target/i386/mpx/mpx-check.h | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h b/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h
> index 3afa460..73aa01f 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
> {
--
ak@linux.intel.com -- Speaking for myself only
More information about the Gcc-patches
mailing list