libtool-version: New version.
authorAlexander Ivchenko <aivchenk@gcc.gnu.org>
Tue, 27 Dec 2016 15:35:19 +0000 (15:35 +0000)
committerAlexander Ivchenko <aivchenk@gcc.gnu.org>
Tue, 27 Dec 2016 15:35:19 +0000 (15:35 +0000)
libmpx/

2016-12-27  H.J. Lu  <hongjiu.lu@intel.com>
    Alexander Ivchenko  <alexander.ivchenko@intel.com>

* mpxwrap/libtool-version: New version.
* mpxwrap/mpx_wrappers.c (__mpx_wrapper_realloc): Make it
static with external alias.
(__mpx_wrapper_bzero): Ditto.
(mpx_wrapper_memcpy): Ditto.
(__mpx_wrapper_mempcpy): Ditto.

From-SVN: r243942

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/mpx/memcpy-1.c [new file with mode: 0644]
libmpx/ChangeLog
libmpx/mpxwrap/libtool-version
libmpx/mpxwrap/mpx_wrappers.c

index 6fb5b258287c22d30060e60de41464421c961db5..fd5ca94eb65770588cb2177e0023f13fbb4d4ad1 100644 (file)
@@ -3,6 +3,10 @@
        PR target/78904
        * gcc.target/i386/pr78904-3.c: New test.
 
+2016-12-27  Alexander Ivchenko  <alexander.ivchenko@intel.com>
+
+        * gcc.target/i386/mpx/memcpy-1.c: New test.
+
 2016-12-27  Alexander Ivchenko  <alexander.ivchenko@intel.com>
 
        * gcc.target/i386/mpx/vla-trailing-1-lbv.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/mpx/memcpy-1.c b/gcc/testsuite/gcc.target/i386/mpx/memcpy-1.c
new file mode 100644 (file)
index 0000000..1691348
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do run } */
+/* { dg-shouldfail "bounds violation" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx" } */
+
+/* Fix for PR78631 */
+
+#define SHOULDFAIL
+
+#include <stdio.h>
+#include <string.h>
+
+char s[10];
+char d[10];
+__attribute__((noinline))
+
+char* foo(char* dst, char* src, size_t size) {
+  return memcpy(dst, src, size);
+}
+int main() {
+  char* r = foo(d, s, 11);
+  printf("r = %p\n", r);
+  return 0;
+}
index 4f7a68425daa67e5bcd5c1e557141681e0c3ce61..67ae96a352e5e2adf6866a3c5863cc3807384541 100644 (file)
@@ -1,3 +1,13 @@
+2016-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+           Alexander Ivchenko  <alexander.ivchenko@intel.com>
+
+       * mpxwrap/libtool-version: New version.
+       * mpxwrap/mpx_wrappers.c (__mpx_wrapper_realloc): Make it
+       static with external alias.
+       (__mpx_wrapper_bzero): Ditto.
+       (mpx_wrapper_memcpy): Ditto.
+       (__mpx_wrapper_mempcpy): Ditto.
+
 2016-12-26  Alexander Ivchenko  <alexander.ivchenko@intel.com>
 
        * mpxrt/libtool-version: New version.
index fab30fb091d3763f9247c33e49492bacc8ab58a7..e241350d23b958b102794edf85abdec36feae2cb 100644 (file)
@@ -3,4 +3,4 @@
 # a separate file so that version updates don't involve re-running
 # automake.
 # CURRENT:REVISION:AGE
-2:0:0
+2:1:0
index 171a780311d3295b418525c60307457a7472190d..aea0346b93352ed3e466bf74b797f4a31f571b8b 100644 (file)
 #include <assert.h>
 #include "mpxrt/mpxrt.h"
 
-void *
-__mpx_wrapper_malloc (size_t size)
+/* Since internal MPX wrapper calls must avoid PLT which will clear bound
+   registers, we make them static with an external alias.  */
+#define EXTERN_ALIAS(f) \
+  __typeof (f) __##f __attribute__((alias(#f)));
+
+static void *
+mpx_wrapper_malloc (size_t size)
 {
   void *p = (void *)malloc (size);
   if (!p) return __bnd_null_ptr_bounds (p);
   return __bnd_set_ptr_bounds (p, size);
 }
 
+EXTERN_ALIAS (mpx_wrapper_malloc)
 
 void *
 __mpx_wrapper_mmap (void *addr, size_t length, int prot, int flags,
@@ -52,7 +58,7 @@ void *
 __mpx_wrapper_realloc (void *ptr, size_t n)
 {
   if (!ptr)
-    return __mpx_wrapper_malloc (n);
+    return mpx_wrapper_malloc (n);
 
   /* We don't kwnow how much data is copied by realloc
      and therefore may check only lower bounds.  */
@@ -74,8 +80,8 @@ __mpx_wrapper_calloc (size_t n_elements, size_t element_size)
   return __bnd_set_ptr_bounds (p, n_elements * element_size);
 }
 
-void *
-__mpx_wrapper_memset (void *dstpp, int c, size_t len)
+static void *
+mpx_wrapper_memset (void *dstpp, int c, size_t len)
 {
   if (len > 0)
     {
@@ -85,10 +91,12 @@ __mpx_wrapper_memset (void *dstpp, int c, size_t len)
   return dstpp;
 }
 
+EXTERN_ALIAS (mpx_wrapper_memset)
+
 void
 __mpx_wrapper_bzero (void *dst, size_t len)
 {
-  __mpx_wrapper_memset (dst, 0, len);
+  mpx_wrapper_memset (dst, 0, len);
 }
 
 /* The mpx_pointer type is used for getting bits
@@ -484,8 +492,8 @@ move_bounds (void *dst, const void *src, size_t n)
   return;
 }
 
-void *
-__mpx_wrapper_memmove (void *dst, const void *src, size_t n)
+static void *
+mpx_wrapper_memmove (void *dst, const void *src, size_t n)
 {
   if (n == 0)
     return dst;
@@ -513,17 +521,20 @@ __mpx_wrapper_memmove (void *dst, const void *src, size_t n)
   return dst;
 }
 
+EXTERN_ALIAS (mpx_wrapper_memmove)
 
-void *
-__mpx_wrapper_memcpy (void *dst, const void *src, size_t n)
+static void *
+mpx_wrapper_memcpy (void *dst, const void *src, size_t n)
 {
-  return __mpx_wrapper_memmove (dst, src, n);
+  return mpx_wrapper_memmove (dst, src, n);
 }
 
+EXTERN_ALIAS (mpx_wrapper_memcpy)
+
 void *
 __mpx_wrapper_mempcpy (void *dst, const void *src, size_t n)
 {
-  return (char *)__mpx_wrapper_memcpy (dst, src, n) + n;
+  return (char *)mpx_wrapper_memcpy (dst, src, n) + n;
 }
 
 char *