From 52bc063e363adb9d01ec307655f760020e91b64d Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 28 Nov 2018 14:14:44 +0300 Subject: [PATCH] debug: introduce __smatch_mem() This prints some information about how memory is being used. Signed-off-by: Dan Carpenter --- check_debug.c | 11 +++++++++++ check_debug.h | 1 + smatch_slist.c | 5 +++++ smatch_slist.h | 3 +++ 4 files changed, 20 insertions(+) diff --git a/check_debug.c b/check_debug.c index 079faf6d..cd71c01e 100644 --- a/check_debug.c +++ b/check_debug.c @@ -671,6 +671,16 @@ static void match_state_count(const char *fn, struct expression *expr, void *inf sm_msg("state_count = %d\n", sm_state_counter); } +static void match_mem(const char *fn, struct expression *expr, void *info) +{ + show_sname_alloc(); + show_ptrlist_alloc(); + sm_msg("%lu pools", get_pool_count()); + sm_msg("%d strees", unfree_stree); + show_smatch_state_alloc(); + show_sm_state_alloc(); +} + static void match_exit(const char *fn, struct expression *expr, void *info) { exit(0); @@ -754,6 +764,7 @@ void check_debug(int id) add_function_hook("__smatch_mtag", &match_mtag, NULL); add_function_hook("__smatch_mtag_data", &match_mtag_data_offset, NULL); add_function_hook("__smatch_state_count", &match_state_count, NULL); + add_function_hook("__smatch_mem", &match_mem, NULL); add_function_hook("__smatch_exit", &match_exit, NULL); add_hook(free_old_stree, AFTER_FUNC_HOOK); diff --git a/check_debug.h b/check_debug.h index 938a83f4..8e6a97f4 100644 --- a/check_debug.h +++ b/check_debug.h @@ -73,4 +73,5 @@ static inline void __smatch_mtag_data(long long arg){} static inline void __smatch_exit(void){} static inline void __smatch_state_count(void){} +static inline void __smatch_mem(void){} #endif diff --git a/smatch_slist.c b/smatch_slist.c index 4c74caf7..b9e6d91d 100644 --- a/smatch_slist.c +++ b/smatch_slist.c @@ -299,6 +299,11 @@ void free_every_single_sm_state(void) sm_state_counter = 0; } +unsigned long get_pool_count(void) +{ + return ptr_list_size((struct ptr_list *)all_pools); +} + struct sm_state *clone_sm(struct sm_state *s) { struct sm_state *ret; diff --git a/smatch_slist.h b/smatch_slist.h index 4ea90d56..358756b2 100644 --- a/smatch_slist.h +++ b/smatch_slist.h @@ -1,5 +1,7 @@ struct stree; +extern int unfree_stree; + DECLARE_PTR_LIST(state_list, struct sm_state); DECLARE_PTR_LIST(state_list_stack, struct state_list); @@ -60,6 +62,7 @@ struct stree *top_stree(struct stree_stack *stack); void free_slist(struct state_list **slist); void free_stree_stack(struct stree_stack **stack); void free_stack_and_strees(struct stree_stack **stree_stack); +unsigned long get_pool_count(void); struct sm_state *set_state_stree_stack(struct stree_stack **stack, int owner, const char *name, struct symbol *sym, struct smatch_state *state); -- 2.11.4.GIT