diff options
author | ienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-12-11 14:38:53 +0000 |
---|---|---|
committer | ienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-12-11 14:38:53 +0000 |
commit | 3d9a6ba59d71e04cb45d1696c4b815e14f4bed56 (patch) | |
tree | 62169eeb0eed7ce16ceda7ca3df1cf922428c590 /libmpx/mpxrt | |
parent | 8c3f798620dfc1991a6966610a11d7c07a1d45c0 (diff) | |
download | gcc-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.am | 3 | ||||
-rw-r--r-- | libmpx/mpxrt/Makefile.in | 5 | ||||
-rw-r--r-- | libmpx/mpxrt/libmpx.map | 5 | ||||
-rw-r--r-- | libmpx/mpxrt/libtool-version | 2 | ||||
-rw-r--r-- | libmpx/mpxrt/mpxrt.c | 32 | ||||
-rw-r--r-- | libmpx/mpxrt/mpxrt.h | 75 |
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 (); |