Commit bffa6b6c by Alexander Ivchenko

libtool-version: New version.

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
parent 2700d0e3
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
2016-12-27 Alexander Ivchenko <alexander.ivchenko@intel.com> 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. * gcc.target/i386/mpx/vla-trailing-1-lbv.c: New test.
* gcc.target/i386/mpx/vla-trailing-1-nov.c: Ditto. * gcc.target/i386/mpx/vla-trailing-1-nov.c: Ditto.
* gcc.target/i386/mpx/vla-trailing-1-ubv.c: Ditto. * gcc.target/i386/mpx/vla-trailing-1-ubv.c: Ditto.
......
/* { 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;
}
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> 2016-12-26 Alexander Ivchenko <alexander.ivchenko@intel.com>
* mpxrt/libtool-version: New version. * mpxrt/libtool-version: New version.
......
...@@ -3,4 +3,4 @@ ...@@ -3,4 +3,4 @@
# a separate file so that version updates don't involve re-running # a separate file so that version updates don't involve re-running
# automake. # automake.
# CURRENT:REVISION:AGE # CURRENT:REVISION:AGE
2:0:0 2:1:0
...@@ -30,14 +30,20 @@ ...@@ -30,14 +30,20 @@
#include <assert.h> #include <assert.h>
#include "mpxrt/mpxrt.h" #include "mpxrt/mpxrt.h"
void * /* Since internal MPX wrapper calls must avoid PLT which will clear bound
__mpx_wrapper_malloc (size_t size) 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); void *p = (void *)malloc (size);
if (!p) return __bnd_null_ptr_bounds (p); if (!p) return __bnd_null_ptr_bounds (p);
return __bnd_set_ptr_bounds (p, size); return __bnd_set_ptr_bounds (p, size);
} }
EXTERN_ALIAS (mpx_wrapper_malloc)
void * void *
__mpx_wrapper_mmap (void *addr, size_t length, int prot, int flags, __mpx_wrapper_mmap (void *addr, size_t length, int prot, int flags,
...@@ -52,7 +58,7 @@ void * ...@@ -52,7 +58,7 @@ void *
__mpx_wrapper_realloc (void *ptr, size_t n) __mpx_wrapper_realloc (void *ptr, size_t n)
{ {
if (!ptr) if (!ptr)
return __mpx_wrapper_malloc (n); return mpx_wrapper_malloc (n);
/* We don't kwnow how much data is copied by realloc /* We don't kwnow how much data is copied by realloc
and therefore may check only lower bounds. */ and therefore may check only lower bounds. */
...@@ -74,8 +80,8 @@ __mpx_wrapper_calloc (size_t n_elements, size_t element_size) ...@@ -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); return __bnd_set_ptr_bounds (p, n_elements * element_size);
} }
void * static void *
__mpx_wrapper_memset (void *dstpp, int c, size_t len) mpx_wrapper_memset (void *dstpp, int c, size_t len)
{ {
if (len > 0) if (len > 0)
{ {
...@@ -85,10 +91,12 @@ __mpx_wrapper_memset (void *dstpp, int c, size_t len) ...@@ -85,10 +91,12 @@ __mpx_wrapper_memset (void *dstpp, int c, size_t len)
return dstpp; return dstpp;
} }
EXTERN_ALIAS (mpx_wrapper_memset)
void void
__mpx_wrapper_bzero (void *dst, size_t len) __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 /* The mpx_pointer type is used for getting bits
...@@ -484,8 +492,8 @@ move_bounds (void *dst, const void *src, size_t n) ...@@ -484,8 +492,8 @@ move_bounds (void *dst, const void *src, size_t n)
return; return;
} }
void * static void *
__mpx_wrapper_memmove (void *dst, const void *src, size_t n) mpx_wrapper_memmove (void *dst, const void *src, size_t n)
{ {
if (n == 0) if (n == 0)
return dst; return dst;
...@@ -513,17 +521,20 @@ __mpx_wrapper_memmove (void *dst, const void *src, size_t n) ...@@ -513,17 +521,20 @@ __mpx_wrapper_memmove (void *dst, const void *src, size_t n)
return dst; return dst;
} }
EXTERN_ALIAS (mpx_wrapper_memmove)
void * static void *
__mpx_wrapper_memcpy (void *dst, const void *src, size_t n) 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 * void *
__mpx_wrapper_mempcpy (void *dst, const void *src, size_t n) __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 * char *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment