diff --git a/src/block_allocator.c b/src/block_allocator.c index 90d11cc857f426f1c0566ca0fe21cf5956186d84..320218a36324ec4cca7cb7dc746c7276f30841bc 100644 --- a/src/block_allocator.c +++ b/src/block_allocator.c @@ -46,15 +46,6 @@ struct ba_block_header { struct ba_block_header * next; }; -#ifdef HAVE_VALGRIND_MACROS -# ifndef VALGRIND_CREATE_MEMPOOL -# define VALGRIND_CREATE_MEMPOOL(a, b, c) -# define VALGRIND_MEMPOOL_ALLOC(a, p, l) VALGRIND_MAKE_MEM_UNDEFINED((p), (l)) -# define VALGRIND_MEMPOOL_FREE(a, p) VALGRIND_MAKE_MEM_NOACCESS((p), (a)->l.block_size) -# endif -#endif - - static struct ba_page * ba_alloc_page(struct block_allocator * a, int i) { struct ba_layout l = ba_get_layout(a, i); size_t n = l.offset + l.block_size + l.doffset; @@ -78,9 +69,7 @@ static struct ba_page * ba_alloc_page(struct block_allocator * a, int i) { p->h.first = BA_BLOCKN(a->l, p, 0); p->h.first->next = BA_ONE; p->h.used = 0; -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MAKE_MEM_NOACCESS((char*)p + l.doffset, n - l.doffset); -#endif + PIKE_MEM_NA_RANGE((char*)p + l.doffset, n - l.doffset); return p; } @@ -107,9 +96,7 @@ PMOD_EXPORT void ba_init_aligned(struct block_allocator * a, unsigned INT32 bloc a->l.alignment = alignment; memset(a->pages, 0, sizeof(a->pages)); a->pages[0] = ba_alloc_page(a, 0); -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_CREATE_MEMPOOL(a, 0, 0); -#endif + PIKE_MEMPOOL_CREATE(a); } PMOD_EXPORT void ba_destroy(struct block_allocator * a) { @@ -183,10 +170,8 @@ PMOD_EXPORT void * ba_alloc(struct block_allocator * a) { } ptr = p->h.first; -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_ALLOC(a, ptr, a->l.block_size); - VALGRIND_MAKE_MEM_DEFINED(ptr, sizeof(struct ba_block_header)); -#endif + PIKE_MEMPOOL_ALLOC(a, ptr, a->l.block_size); + PIKE_MEM_RW_RANGE(ptr, sizeof(struct ba_block_header)); p->h.used++; @@ -203,19 +188,13 @@ PMOD_EXPORT void * ba_alloc(struct block_allocator * a) { if (ptr->next == BA_ONE) { struct ba_layout l = ba_get_layout(a, a->alloc); p->h.first = (struct ba_block_header*)((char*)ptr + a->l.block_size); -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_ALLOC(a, p->h.first, a->l.block_size); -#endif + PIKE_MEMPOOL_ALLOC(a, p->h.first, a->l.block_size); p->h.first->next = (struct ba_block_header*)(ptrdiff_t)!(p->h.first == BA_LASTBLOCK(l, p)); -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_FREE(a, p->h.first); -#endif + PIKE_MEMPOOL_FREE(a, p->h.first, a->l.block_size); } else { p->h.first = ptr->next; } -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MAKE_MEM_UNDEFINED(ptr, sizeof(struct ba_block_header)); -#endif + PIKE_MEM_WO_RANGE(ptr, sizeof(struct ba_block_header)); #if PIKE_DEBUG if (a->l.alignment && (size_t)ptr & (a->l.alignment - 1)) { @@ -288,9 +267,7 @@ found: Pike_fatal("ptr %p not in any page.\n", ptr); } #endif -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_FREE(a, ptr); -#endif + PIKE_MEMPOOL_FREE(a, ptr, a->l.block_size); } static void print_allocator(const struct block_allocator * a) { diff --git a/src/interpret.c b/src/interpret.c index 9dc2f2924798d0d843ac5257595e11ea9761f954..807353f434bb4b4e9c5ca03a47192379c1c5a1c5 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -298,13 +298,11 @@ use_malloc: return 0; /* OK. */ } -static struct pike_frame *free_pike_frame = NULL; +static struct pike_frame *free_pike_frame; PMOD_EXPORT void init_interpreter(void) { -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_CREATE_MEMPOOL(&free_pike_frame, 0, 0); -#endif + PIKE_MEMPOOL_CREATE(&free_pike_frame); if (low_init_interpreter(Pike_interpreter_pointer)) { Pike_fatal("Out of memory initializing the interpreter stack.\n"); } @@ -1969,9 +1967,7 @@ PMOD_EXPORT void really_free_pike_frame( struct pike_frame *X ) DO_IF_SECURITY( X->current_creds=0; ) ); X->next = free_pike_frame; -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_FREE(&free_pike_frame, X); -#endif + PIKE_MEMPOOL_FREE(&free_pike_frame, X, sizeof(struct pike_frame)); free_pike_frame = X; } @@ -1981,14 +1977,10 @@ struct pike_frame *alloc_pike_frame(void) if( free_pike_frame ) { res = free_pike_frame; -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MEMPOOL_ALLOC(&free_pike_frame, res, sizeof(struct pike_frame)); - VALGRIND_MAKE_MEM_DEFINED(&res->next, sizeof(void*)); -#endif + PIKE_MEMPOOL_ALLOC(&free_pike_frame, res, sizeof(struct pike_frame)); + PIKE_MEM_RW_RANGE(&res->next, sizeof(void*)); free_pike_frame = res->next; -#ifdef HAVE_VALGRIND_MACROS - VALGRIND_MAKE_MEM_UNDEFINED(&res->next, sizeof(void*)); -#endif + PIKE_MEM_WO_RANGE(&res->next, sizeof(void*)); res->refs=0; add_ref(res); /* For DMALLOC... */ res->flags=0; diff --git a/src/pike_memory.h b/src/pike_memory.h index 4b514d859c97f82b41c5e48fb5d555da34a03407..8cf0fb1ffe7e5e07e0259ecdee322be88f1cc071 100644 --- a/src/pike_memory.h +++ b/src/pike_memory.h @@ -85,6 +85,17 @@ #define PIKE_MEM_NOT_DEF_RANGE(addr, bytes) \ VALGRIND_CHECK_MEM_IS_DEFINED(addr, bytes) +#ifdef VALGRIND_CREATE_MEMPOOL +# define PIKE_MEMPOOL_CREATE(a) VALGRIND_CREATE_MEMPOOL(a, 0, 0) +# define PIKE_MEMPOOL_ALLOC(a, p, l) VALGRIND_MEMPOOL_ALLOC(a, p, l) +# define PIKE_MEMPOOL_FREE(a, p, l) VALGRIND_MEMPOOL_FREE(a, p) +#else +/* somewhat functional alternatives to mempool macros */ +# define PIKE_MEMPOOL_CREATE(a) +# define PIKE_MEMPOOL_ALLOC(a, p, l) PIKE_MEM_WO_RANGE(p, l) +# define PIKE_MEMPOOL_FREE(a, p, l) PIKE_MEM_NA_RANGE(p, l) +#endif + #else /* !HAVE_VALGRIND_MACROS */ #define PIKE_MEM_NA(lvalue) do {} while (0) @@ -100,6 +111,9 @@ #define PIKE_MEM_NOT_ADDR_RANGE(addr, bytes) 0 #define PIKE_MEM_NOT_DEF(lvalue) 0 #define PIKE_MEM_NOT_DEF_RANGE(addr, bytes) 0 +#define PIKE_MEMPOOL_CREATE(a) +#define PIKE_MEMPOOL_ALLOC(a, p, l) +#define PIKE_MEMPOOL_FREE(a, p, l) #endif /* !HAVE_VALGRIND_MACROS */