summaryrefslogtreecommitdiff
path: root/libmpx/mpxrt
diff options
context:
space:
mode:
authorienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>2015-12-11 14:38:53 +0000
committerienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>2015-12-11 14:38:53 +0000
commit3d9a6ba59d71e04cb45d1696c4b815e14f4bed56 (patch)
tree62169eeb0eed7ce16ceda7ca3df1cf922428c590 /libmpx/mpxrt
parent8c3f798620dfc1991a6966610a11d7c07a1d45c0 (diff)
downloadgcc-3d9a6ba59d71e04cb45d1696c4b815e14f4bed56.tar.gz
libmpx/
2015-12-11 Tsvetkova Alexandra <aleksandra.tsvetkova@intel.com> * mpxrt/Makefile.am (libmpx_la_LDFLAGS): Add -version-info option. * libmpxwrap/Makefile.am (libmpx_la_LDFLAGS): Likewise and fix include path. * libmpx/Makefile.in: Regenerate. * mpxrt/Makefile.in: Regenerate. * libmpxwrap/Makefile.in: Regenerate. * mpxrt/libtool-version: New version. * libmpxwrap/libtool-version: Likewise. * mpxrt/libmpx.map: Add new version and a new symbol. * mpxrt/mpxrt.h: New file. * mpxrt/mpxrt.c (NUM_L1_BITS): Moved to mpxrt.h. (REG_IP_IDX): Moved to mpxrt.h. (REX_PREFIX): Moved to mpxrt.h. (XSAVE_OFFSET_IN_FPMEM): Moved to mpxrt.h. (MPX_L1_SIZE): Moved to mpxrt.h. * libmpxwrap/mpx_wrappers.c (mpx_pointer): New type. (mpx_bt_entry): New type. (alloc_bt): New function. (get_bt): New function. (copy_if_possible): New function. (copy_if_possible_from_end): New function. (move_bounds): New function. (__mpx_wrapper_memmove): Use move_bounds to copy bounds. gcc/testsuite/ 2015-12-11 Tsvetkova Alexandra <aleksandra.tsvetkova@intel.com> * gcc.target/i386/mpx/memmove-1.c: New test. * gcc.target/i386/mpx/memmove-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231565 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libmpx/mpxrt')
-rw-r--r--libmpx/mpxrt/Makefile.am3
-rw-r--r--libmpx/mpxrt/Makefile.in5
-rw-r--r--libmpx/mpxrt/libmpx.map5
-rw-r--r--libmpx/mpxrt/libtool-version2
-rw-r--r--libmpx/mpxrt/mpxrt.c32
-rw-r--r--libmpx/mpxrt/mpxrt.h75
6 files changed, 94 insertions, 28 deletions
diff --git a/libmpx/mpxrt/Makefile.am b/libmpx/mpxrt/Makefile.am
index a00a8087792..3280b62a96a 100644
--- a/libmpx/mpxrt/Makefile.am
+++ b/libmpx/mpxrt/Makefile.am
@@ -13,7 +13,8 @@ libmpx_la_SOURCES = mpxrt.c mpxrt-utils.c
libmpx_la_CFLAGS = -fPIC
libmpx_la_DEPENDENCIES = libmpx.map
-libmpx_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libmpx.map $(link_libmpx)
+libmpx_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libmpx.map $(link_libmpx) \
+ -version-info `grep -v '^\#' $(srcdir)/libtool-version`
mpxrt.lo: mpxrt-utils.h
mpxrt-utils.lo: mpxrt-utils.h
diff --git a/libmpx/mpxrt/Makefile.in b/libmpx/mpxrt/Makefile.in
index 646f3a95c84..1fdb454f458 100644
--- a/libmpx/mpxrt/Makefile.in
+++ b/libmpx/mpxrt/Makefile.in
@@ -222,7 +222,6 @@ install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
link_libmpx = @link_libmpx@
-link_mpx = @link_mpx@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
@@ -257,7 +256,9 @@ ACLOCAL_AMFLAGS = -I $(top_srcdir) -I $(top_srcdir)/config
@LIBMPX_SUPPORTED_TRUE@libmpx_la_SOURCES = mpxrt.c mpxrt-utils.c
@LIBMPX_SUPPORTED_TRUE@libmpx_la_CFLAGS = -fPIC
@LIBMPX_SUPPORTED_TRUE@libmpx_la_DEPENDENCIES = libmpx.map
-@LIBMPX_SUPPORTED_TRUE@libmpx_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libmpx.map $(link_libmpx)
+@LIBMPX_SUPPORTED_TRUE@libmpx_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libmpx.map $(link_libmpx) \
+@LIBMPX_SUPPORTED_TRUE@ -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
diff --git a/libmpx/mpxrt/libmpx.map b/libmpx/mpxrt/libmpx.map
index 90093b77dee..1f0fc2c4ce7 100644
--- a/libmpx/mpxrt/libmpx.map
+++ b/libmpx/mpxrt/libmpx.map
@@ -3,3 +3,8 @@ LIBMPX_1.0
local:
*;
};
+LIBMPX_2.0
+{
+ global:
+ get_bd;
+} LIBMPX_1.0;
diff --git a/libmpx/mpxrt/libtool-version b/libmpx/mpxrt/libtool-version
index 5aa6ed72cec..7d9925549d1 100644
--- a/libmpx/mpxrt/libtool-version
+++ b/libmpx/mpxrt/libtool-version
@@ -3,4 +3,4 @@
# a separate file so that version updates don't involve re-running
# automake.
# CURRENT:REVISION:AGE
-1:0:0
+2:0:0
diff --git a/libmpx/mpxrt/mpxrt.c b/libmpx/mpxrt/mpxrt.c
index c29c5d9a501..bcdd3a63bd2 100644
--- a/libmpx/mpxrt/mpxrt.c
+++ b/libmpx/mpxrt/mpxrt.c
@@ -51,34 +51,11 @@
#include <sys/prctl.h>
#include <cpuid.h>
#include "mpxrt-utils.h"
-
-#ifdef __i386__
-
-/* i386 directory size is 4MB */
-#define NUM_L1_BITS 20
-
-#define REG_IP_IDX REG_EIP
-#define REX_PREFIX
-
-#define XSAVE_OFFSET_IN_FPMEM sizeof (struct _libc_fpstate)
-
-#else /* __i386__ */
-
-/* x86_64 directory size is 2GB */
-#define NUM_L1_BITS 28
-
-#define REG_IP_IDX REG_RIP
-#define REX_PREFIX "0x48, "
-
-#define XSAVE_OFFSET_IN_FPMEM 0
-
-#endif /* !__i386__ */
+#include "mpxrt.h"
#define MPX_ENABLE_BIT_NO 0
#define BNDPRESERVE_BIT_NO 1
-const size_t MPX_L1_SIZE = (1UL << NUM_L1_BITS) * sizeof (void *);
-
struct xsave_hdr_struct
{
uint64_t xstate_bv;
@@ -508,3 +485,10 @@ mpxrt_cleanup (void)
__mpxrt_utils_free ();
process_specific_finish ();
}
+
+/* Get address of bounds directory. */
+void *
+get_bd ()
+{
+ return l1base;
+}
diff --git a/libmpx/mpxrt/mpxrt.h b/libmpx/mpxrt/mpxrt.h
new file mode 100644
index 00000000000..e825d7d9046
--- /dev/null
+++ b/libmpx/mpxrt/mpxrt.h
@@ -0,0 +1,75 @@
+/* mpxrt.h -*-C++-*-
+ *
+ *************************************************************************
+ *
+ * @copyright
+ * Copyright (C) 2015, Intel Corporation
+ * All rights reserved.
+ *
+ * @copyright
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * @copyright
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+ * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ **************************************************************************/
+#ifdef __i386__
+
+/* i386 directory size is 4MB. */
+#define NUM_L1_BITS 20
+#define NUM_L2_BITS 10
+#define NUM_IGN_BITS 2
+#define MPX_L1_ADDR_MASK 0xfffff000UL
+#define MPX_L2_ADDR_MASK 0xfffffffcUL
+#define MPX_L2_VALID_MASK 0x00000001UL
+
+#define REG_IP_IDX REG_EIP
+#define REX_PREFIX
+
+#define XSAVE_OFFSET_IN_FPMEM sizeof (struct _libc_fpstate)
+
+#else /* __i386__ */
+
+/* x86_64 directory size is 2GB. */
+#define NUM_L1_BITS 28
+#define NUM_L2_BITS 17
+#define NUM_IGN_BITS 3
+#define MPX_L1_ADDR_MASK 0xfffffffffffff000ULL
+#define MPX_L2_ADDR_MASK 0xfffffffffffffff8ULL
+#define MPX_L2_VALID_MASK 0x0000000000000001ULL
+
+#define REG_IP_IDX REG_RIP
+#define REX_PREFIX "0x48, "
+
+#define XSAVE_OFFSET_IN_FPMEM 0
+
+#endif /* !__i386__ */
+
+#define MPX_L1_SIZE ((1UL << NUM_L1_BITS) * sizeof (void *))
+
+/* Get address of bounds directory. */
+void *
+get_bd ();