diff --git a/lib/bcheck.c b/lib/bcheck.c index 48d76061..5ea2d0bf 100644 --- a/lib/bcheck.c +++ b/lib/bcheck.c @@ -208,25 +208,11 @@ BOUND_PTR_INDIR(8) BOUND_PTR_INDIR(12) BOUND_PTR_INDIR(16) -#ifdef __i386__ /* return the frame pointer of the caller */ #define GET_CALLER_FP(fp)\ {\ - unsigned long *fp1;\ - __asm__ __volatile__ ("movl %%ebp,%0" :"=g" (fp1));\ - fp = fp1[0];\ + fp = (unsigned long)__builtin_frame_address(1);\ } -#elif defined(__x86_64__) -/* TCC always creates %rbp frames also on x86_64, so use them. */ -#define GET_CALLER_FP(fp)\ -{\ - unsigned long *fp1;\ - __asm__ __volatile__ ("movq %%rbp,%0" :"=g" (fp1));\ - fp = fp1[0];\ -} -#else -#error put code to extract the calling frame pointer -#endif /* called when entering a function to add all the local regions */ void FASTCALL __bound_local_new(void *p1) @@ -638,6 +624,9 @@ static unsigned long get_region_size(void *p) /* patched memory functions */ +/* force compiler to perform stores coded up to this point */ +#define barrier() __asm__ __volatile__ ("": : : "memory") + static void install_malloc_hooks(void) { #ifdef CONFIG_TCC_MALLOC_HOOKS @@ -649,6 +638,8 @@ static void install_malloc_hooks(void) __free_hook = __bound_free; __realloc_hook = __bound_realloc; __memalign_hook = __bound_memalign; + + barrier(); #endif } @@ -659,6 +650,8 @@ static void restore_malloc_hooks(void) __free_hook = saved_free_hook; __realloc_hook = saved_realloc_hook; __memalign_hook = saved_memalign_hook; + + barrier(); #endif } diff --git a/tests/Makefile b/tests/Makefile index 4f057f49..2e7dd233 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -22,7 +22,6 @@ TESTS = libtest \ # some tests do not pass on all platforms, remove them for now ifeq ($(TARGETOS),Linux) - TESTS := $(filter-out btest,$(TESTS)) TESTS := $(filter-out weaktest,$(TESTS)) endif ifeq ($(TARGETOS),Darwin)