diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:12:36 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:12:36 +0000 |
commit | ef5d0b5e97ec8e6fa395d377b09aa7755e345b4f (patch) | |
tree | 27916256fdeeb57d10d2f3d6948be5d71a703215 /tools/intel-features/intel-mpx/test/main.cpp | |
parent | 76e0736e7fcfeb179779e49c05604464b1ccd704 (diff) |
Notes
Diffstat (limited to 'tools/intel-features/intel-mpx/test/main.cpp')
-rw-r--r-- | tools/intel-features/intel-mpx/test/main.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/intel-features/intel-mpx/test/main.cpp b/tools/intel-features/intel-mpx/test/main.cpp new file mode 100644 index 0000000000000..110befb1e2501 --- /dev/null +++ b/tools/intel-features/intel-mpx/test/main.cpp @@ -0,0 +1,49 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +//// +//// The LLVM Compiler Infrastructure +//// +//// This file is distributed under the University of Illinois Open Source +//// License. See LICENSE.TXT for details. +//// +////===----------------------------------------------------------------------===// +// + +const int size = 5; + +#include <cstddef> +#include <cstdlib> +#include <sys/prctl.h> + +void func(int *ptr) { + int *tmp; + +#if defined __GNUC__ && !defined __INTEL_COMPILER + __builtin___bnd_store_ptr_bounds ((void**)&ptr, ptr); +#endif + tmp = ptr + size - 1; +#if defined __GNUC__ && !defined __INTEL_COMPILER + __builtin___bnd_store_ptr_bounds ((void**)&tmp, tmp); +#endif + tmp = (int*)0x2; // Break 2. + + return; // Break 3. +} + +int +main(int argc, char const *argv[]) +{ + // This call returns 0 only if the CPU and the kernel support + // Intel(R) Memory Protection Extensions (Intel(R) MPX). + if (prctl(PR_MPX_ENABLE_MANAGEMENT, 0, 0, 0, 0) != 0) + return -1; + + int* a = (int *) calloc(size, sizeof(int)); +#if defined __GNUC__ && !defined __INTEL_COMPILER + __builtin___bnd_store_ptr_bounds ((void**)&a, a); +#endif + func(a); // Break 1. + + free(a); // Break 4. + + return 0; +} |