Add support for reporting mallocs / frees to valgrind through client requests.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg@inf.u-szeged.hu
This commit is contained in:
@@ -136,15 +136,25 @@ static void mem_pools_stat_free_chunk (void);
|
||||
#ifdef JERRY_VALGRIND
|
||||
# include "memcheck.h"
|
||||
|
||||
# define VALGRIND_NOACCESS_SPACE(p, s) (void)VALGRIND_MAKE_MEM_NOACCESS((p), (s))
|
||||
# define VALGRIND_UNDEFINED_SPACE(p, s) (void)VALGRIND_MAKE_MEM_UNDEFINED((p), (s))
|
||||
# define VALGRIND_DEFINED_SPACE(p, s) (void)VALGRIND_MAKE_MEM_DEFINED((p), (s))
|
||||
# define VALGRIND_NOACCESS_SPACE(p, s) VALGRIND_MAKE_MEM_NOACCESS((p), (s))
|
||||
# define VALGRIND_UNDEFINED_SPACE(p, s) VALGRIND_MAKE_MEM_UNDEFINED((p), (s))
|
||||
# define VALGRIND_DEFINED_SPACE(p, s) VALGRIND_MAKE_MEM_DEFINED((p), (s))
|
||||
#else /* JERRY_VALGRIND */
|
||||
# define VALGRIND_NOACCESS_SPACE(p, s)
|
||||
# define VALGRIND_UNDEFINED_SPACE(p, s)
|
||||
# define VALGRIND_DEFINED_SPACE(p, s)
|
||||
#endif /* JERRY_VALGRIND */
|
||||
|
||||
#ifdef JERRY_VALGRIND_FREYA
|
||||
# include "memcheck.h"
|
||||
|
||||
# define VALGRIND_FREYA_MALLOCLIKE_SPACE(p, s) VALGRIND_MALLOCLIKE_BLOCK((p), (s), 0, 0)
|
||||
# define VALGRIND_FREYA_FREELIKE_SPACE(p) VALGRIND_FREELIKE_BLOCK((p), 0)
|
||||
#else /* JERRY_VALGRIND_FREYA */
|
||||
# define VALGRIND_FREYA_MALLOCLIKE_SPACE(p, s)
|
||||
# define VALGRIND_FREYA_FREELIKE_SPACE(p)
|
||||
#endif /* JERRY_VALGRIND_FREYA */
|
||||
|
||||
/**
|
||||
* Initialize pool manager
|
||||
*/
|
||||
@@ -391,6 +401,7 @@ mem_pools_collect_empty (void)
|
||||
mem_free_chunks_number -= MEM_POOL_CHUNKS_NUMBER;
|
||||
#endif /* !JERRY_NDEBUG */
|
||||
|
||||
MEM_HEAP_VALGRIND_FREYA_MEMPOOL_REQUEST ();
|
||||
mem_heap_free_block (pool_list_iter_p);
|
||||
|
||||
MEM_POOLS_STAT_FREE_POOL ();
|
||||
@@ -455,11 +466,13 @@ mem_pools_alloc_longpath (void)
|
||||
JERRY_ASSERT (MEM_POOL_SIZE <= mem_heap_get_chunked_block_data_size ());
|
||||
JERRY_ASSERT (MEM_POOL_CHUNKS_NUMBER >= 1);
|
||||
|
||||
MEM_HEAP_VALGRIND_FREYA_MEMPOOL_REQUEST ();
|
||||
mem_pool_chunk_t *pool_start_p = (mem_pool_chunk_t*) mem_heap_alloc_chunked_block (MEM_HEAP_ALLOC_LONG_TERM);
|
||||
|
||||
if (mem_free_chunk_p != NULL)
|
||||
{
|
||||
/* some chunks were freed due to GC invoked by heap allocator */
|
||||
MEM_HEAP_VALGRIND_FREYA_MEMPOOL_REQUEST ();
|
||||
mem_heap_free_block (pool_start_p);
|
||||
|
||||
return;
|
||||
@@ -549,6 +562,7 @@ mem_pools_alloc (void)
|
||||
|
||||
mem_check_pools ();
|
||||
|
||||
VALGRIND_FREYA_MALLOCLIKE_SPACE (chunk_p, MEM_POOL_CHUNK_SIZE);
|
||||
return (uint8_t *) chunk_p;
|
||||
}
|
||||
else
|
||||
@@ -574,6 +588,7 @@ mem_pools_free (uint8_t *chunk_p) /**< pointer to the chunk */
|
||||
chunk_to_free_p->u.free.next_p = mem_free_chunk_p;
|
||||
mem_free_chunk_p = chunk_to_free_p;
|
||||
|
||||
VALGRIND_FREYA_FREELIKE_SPACE (chunk_to_free_p);
|
||||
VALGRIND_NOACCESS_SPACE (chunk_to_free_p, MEM_POOL_CHUNK_SIZE);
|
||||
|
||||
#ifndef JERRY_NDEBUG
|
||||
|
||||
Reference in New Issue
Block a user