mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
2700d0e3ab
commit
bffa6b6c62
|
|
@ -3,6 +3,10 @@
|
||||||
PR target/78904
|
PR target/78904
|
||||||
* gcc.target/i386/pr78904-3.c: New test.
|
* 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>
|
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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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>
|
2016-12-26 Alexander Ivchenko <alexander.ivchenko@intel.com>
|
||||||
|
|
||||||
* mpxrt/libtool-version: New version.
|
* mpxrt/libtool-version: New version.
|
||||||
|
|
|
||||||
|
|
@ -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 @@
|
||||||
#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 *
|
||||||
__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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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 *
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue