diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/asan.c | 44 |
2 files changed, 26 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0fa51f7..e1bdc4e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2015-06-01 Martin Liska <mliska@suse.cz> + * asan.c (asan_mem_ref_get_alloc_pool):Use new type-based pool allocator. + (asan_mem_ref_new) Likewise. + (free_mem_ref_resources) Likewise. + +2015-06-01 Martin Liska <mliska@suse.cz> + * var-tracking.c (variable_htab_free):Use new type-based pool allocator. (attrs_list_clear) Likewise. (attrs_list_insert) Likewise. @@ -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<asan_mem_ref> pool; +}; + +pool_allocator<asan_mem_ref> 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); |