debug: introduce __smatch_buf_size_rl() which is more verbose
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 19 Dec 2013 15:18:09 +0000 (19 18:18 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Thu, 19 Dec 2013 15:18:09 +0000 (19 18:18 +0300)
This is like __smatch_buf_size() but more verbose.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
check_debug.c
check_debug.h

index 5af5d95..e10b835 100644 (file)
@@ -306,6 +306,23 @@ static void match_buf_size(const char *fn, struct expression *expr, void *info)
        free_string(name);
 }
 
+static void match_buf_size_rl(const char *fn, struct expression *expr, void *info)
+{
+       struct expression *arg;
+       struct range_list *rl;
+       int elements, bytes;
+       char *name;
+
+       arg = get_argument_from_call_expr(expr->args, 0);
+       rl = get_array_size_bytes_rl(arg);
+       elements = get_array_size(arg);
+       bytes = get_array_size_bytes(arg);
+
+       name = expr_to_str(arg);
+       sm_msg("buf size: '%s' %s %d elements, %d bytes", name, show_rl(rl), elements, bytes);
+       free_string(name);
+}
+
 static void match_note(const char *fn, struct expression *expr, void *info)
 {
        struct expression *arg_expr;
@@ -420,6 +437,7 @@ void check_debug(int id)
        add_function_hook("__smatch_cur_slist", &match_cur_slist, NULL);
        add_function_hook("__smatch_strlen", &match_strlen, NULL);
        add_function_hook("__smatch_buf_size", &match_buf_size, NULL);
+       add_function_hook("__smatch_buf_size_rl", &match_buf_size_rl, NULL);
        add_function_hook("__smatch_note", &match_note, NULL);
        add_function_hook("__smatch_dump_related", &match_dump_related, NULL);
        add_function_hook("__smatch_compare", &match_compare, NULL);
index 7e4e4cd..2f9e3e4 100644 (file)
@@ -25,6 +25,7 @@ static inline void __smatch_print_value(const char *unused){}
 
 static inline void __smatch_strlen(const void *buf){}
 static inline void __smatch_buf_size(const void *buf){}
+static inline void __smatch_buf_size_rl(const void *buf){}
 
 static inline void __smatch_note(const char *note){}