From e815c2c59c88ae3fb4f1a5b2ae4e9f92a3bcb3d9 Mon Sep 17 00:00:00 2001 From: marxin Date: Mon, 1 Jun 2015 12:37:26 +0000 Subject: Change use to type-based pool allocator in asan.c. * asan.c (asan_mem_ref_get_alloc_pool):Use new type-based pool allocator. (asan_mem_ref_new) Likewise. (free_mem_ref_resources) Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223948 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/asan.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) (limited to 'gcc/asan.c') diff --git a/gcc/asan.c b/gcc/asan.c index 479301ad2f0..ed5bc9e3824 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -176,7 +176,7 @@ along with GCC; see the file COPYING3. If not see where '(...){n}' means the content inside the parenthesis occurs 'n' times, with 'n' being the number of variables on the stack. - + 3/ The following 8 bytes contain the PC of the current function which will be used by the run-time library to print an error message. @@ -281,7 +281,7 @@ bool set_asan_shadow_offset (const char *val) { char *endp; - + errno = 0; #ifdef HAVE_LONG_LONG asan_shadow_offset_value = strtoull (val, &endp, 0); @@ -372,23 +372,24 @@ struct asan_mem_ref /* The size of the access. */ HOST_WIDE_INT access_size; -}; -static alloc_pool asan_mem_ref_alloc_pool; + /* Pool allocation new operator. */ + inline void *operator new (size_t) + { + return pool.allocate (); + } -/* This creates the alloc pool used to store the instances of - asan_mem_ref that are stored in the hash table asan_mem_ref_ht. */ + /* Delete operator utilizing pool allocation. */ + inline void operator delete (void *ptr) + { + pool.remove ((asan_mem_ref *) ptr); + } -static alloc_pool -asan_mem_ref_get_alloc_pool () -{ - if (asan_mem_ref_alloc_pool == NULL) - asan_mem_ref_alloc_pool = create_alloc_pool ("asan_mem_ref", - sizeof (asan_mem_ref), - 10); - return asan_mem_ref_alloc_pool; - -} + /* Memory allocation pool. */ + static pool_allocator pool; +}; + +pool_allocator asan_mem_ref::pool ("asan_mem_ref", 10); /* Initializes an instance of asan_mem_ref. */ @@ -408,8 +409,7 @@ asan_mem_ref_init (asan_mem_ref *ref, tree start, HOST_WIDE_INT access_size) static asan_mem_ref* asan_mem_ref_new (tree start, HOST_WIDE_INT access_size) { - asan_mem_ref *ref = - (asan_mem_ref *) pool_alloc (asan_mem_ref_get_alloc_pool ()); + asan_mem_ref *ref = new asan_mem_ref; asan_mem_ref_init (ref, start, access_size); return ref; @@ -501,11 +501,7 @@ free_mem_ref_resources () delete asan_mem_ref_ht; asan_mem_ref_ht = NULL; - if (asan_mem_ref_alloc_pool) - { - free_alloc_pool (asan_mem_ref_alloc_pool); - asan_mem_ref_alloc_pool = NULL; - } + asan_mem_ref::pool.release (); } /* Return true iff the memory reference REF has been instrumented. */ @@ -2035,7 +2031,7 @@ maybe_instrument_assignment (gimple_stmt_iterator *iter) is_store); is_instrumented = true; } - + if (gimple_assign_load_p (s)) { ref_expr = gimple_assign_rhs1 (s); -- cgit v1.2.1