FreeBSD fixes

tcc-xref
bellard 2002-12-08 14:34:30 +00:00
parent dc685c6b7d
commit a6c5e2f9ca
1 changed files with 20 additions and 0 deletions

View File

@ -21,7 +21,9 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#include <string.h> #include <string.h>
#ifndef __FreeBSD__
#include <malloc.h> #include <malloc.h>
#endif
//#define BOUND_DEBUG //#define BOUND_DEBUG
@ -32,6 +34,14 @@
/* use malloc hooks. Currently the code cannot be reliable if no hooks */ /* use malloc hooks. Currently the code cannot be reliable if no hooks */
#define CONFIG_TCC_MALLOC_HOOKS #define CONFIG_TCC_MALLOC_HOOKS
#define HAVE_MEMALIGN
#ifdef __FreeBSD__
#warning Bound checking not fully supported on FreeBSD
#undef CONFIG_TCC_MALLOC_HOOKS
#undef HAVE_MEMALIGN
#endif
#define BOUND_T1_BITS 13 #define BOUND_T1_BITS 13
#define BOUND_T2_BITS 11 #define BOUND_T2_BITS 11
#define BOUND_T3_BITS (32 - BOUND_T1_BITS - BOUND_T2_BITS) #define BOUND_T3_BITS (32 - BOUND_T1_BITS - BOUND_T2_BITS)
@ -713,10 +723,20 @@ void *__bound_memalign(size_t size, size_t align, const void *caller)
restore_malloc_hooks(); restore_malloc_hooks();
#ifndef HAVE_MEMALIGN
if (align > 4) {
/* XXX: handle it ? */
ptr = NULL;
} else {
/* we suppose that malloc aligns to at least four bytes */
ptr = malloc(size + 1);
}
#else
/* we allocate one more byte to ensure the regions will be /* we allocate one more byte to ensure the regions will be
separated by at least one byte. With the glibc malloc, it may separated by at least one byte. With the glibc malloc, it may
be in fact not necessary */ be in fact not necessary */
ptr = memalign(size + 1, align); ptr = memalign(size + 1, align);
#endif
install_malloc_hooks(); install_malloc_hooks();