[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