Print this page
12724 update smatch to 0.6.1-rc1-il-5
*** 76,102 ****
}
static void match_states(const char *fn, struct expression *expr, void *info)
{
struct expression *check_arg;
- struct sm_state *sm;
- int found = 0;
check_arg = get_argument_from_call_expr(expr->args, 0);
if (check_arg->type != EXPR_STRING) {
sm_error("the check_name argument to %s is supposed to be a string literal", fn);
return;
}
! FOR_EACH_SM(__get_cur_stree(), sm) {
! if (!strstr(check_name(sm->owner), check_arg->string->data))
! continue;
! sm_msg("%s", show_sm(sm));
! found = 1;
! } END_FOR_EACH_SM(sm);
!
! if (found)
return;
if (!id_from_name(check_arg->string->data))
sm_msg("invalid check name '%s'", check_arg->string->data);
else
--- 76,93 ----
}
static void match_states(const char *fn, struct expression *expr, void *info)
{
struct expression *check_arg;
check_arg = get_argument_from_call_expr(expr->args, 0);
if (check_arg->type != EXPR_STRING) {
sm_error("the check_name argument to %s is supposed to be a string literal", fn);
return;
}
! if (__print_states(check_arg->string->data))
return;
if (!id_from_name(check_arg->string->data))
sm_msg("invalid check name '%s'", check_arg->string->data);
else
*** 208,217 ****
--- 199,211 ----
struct expression *arg;
struct range_list *rl = NULL;
bool capped = false;
char *name;
+ if (option_project != PROJ_KERNEL)
+ sm_msg("no user data for project = '%s'", option_project_str);
+
arg = get_argument_from_call_expr(expr->args, 0);
name = expr_to_str(arg);
get_user_rl(arg, &rl);
if (rl)
*** 524,533 ****
--- 518,538 ----
static void match_debug_db_off(const char *fn, struct expression *expr, void *info)
{
debug_db = 0;
}
+ static void mtag_info(struct expression *expr)
+ {
+ mtag_t tag = 0;
+ int offset = 0;
+ struct range_list *rl = NULL;
+
+ expr_to_mtag_offset(expr, &tag, &offset);
+ get_mtag_rl(expr, &rl);
+ sm_msg("mtag = %llu offset = %d rl = '%s'", tag, offset, show_rl(rl));
+ }
+
static void match_about(const char *fn, struct expression *expr, void *info)
{
struct expression *arg;
struct sm_state *sm;
char *name;
*** 535,544 ****
--- 540,550 ----
sm_msg("---- about ----");
match_print_implied(fn, expr, NULL);
match_buf_size(fn, expr, NULL);
match_strlen(fn, expr, NULL);
match_real_absolute(fn, expr, NULL);
+ mtag_info(expr);
arg = get_argument_from_call_expr(expr->args, 0);
name = expr_to_str(arg);
if (!name) {
sm_msg("info: not a straight forward variable.");
*** 649,658 ****
--- 655,679 ----
static void match_print_stree_id(const char *fn, struct expression *expr, void *info)
{
sm_msg("stree_id %d", __stree_id);
}
+ static void match_bits(const char *fn, struct expression *expr, void *_unused)
+ {
+ struct expression *arg;
+ struct bit_info *info;
+ char *name;
+
+ arg = get_argument_from_call_expr(expr->args, 0);
+ name = expr_to_str(arg);
+
+ info = get_bit_info(arg);
+
+ sm_msg("bit info '%s': definitely set 0x%llx. possibly set 0x%llx.",
+ name, info->set, info->possible);
+ }
+
static void match_mtag(const char *fn, struct expression *expr, void *info)
{
struct expression *arg;
char *name;
mtag_t tag = 0;
*** 693,702 ****
--- 714,745 ----
sm_msg("container: '%s' vs '%s' --> '%s'", cont, name, str);
free_string(cont);
free_string(name);
}
+ static void match_expr(const char *fn, struct expression *expr, void *info)
+ {
+ struct expression *arg, *str, *new;
+ char *name, *new_name;
+
+ str = get_argument_from_call_expr(expr->args, 0);
+ arg = get_argument_from_call_expr(expr->args, 1);
+ if (!arg || !str)
+ return;
+
+ if (str->type != EXPR_STRING)
+ return;
+
+ new = gen_expression_from_key(arg, str->string->data);
+ name = expr_to_str(arg);
+ new_name = expr_to_str(new);
+
+ sm_msg("str = '%s', arg = '%s' expr = '%s'", str->string->data, name, new_name);
+
+ free_string(new_name);
+ free_string(name);
+ }
static void match_state_count(const char *fn, struct expression *expr, void *info)
{
sm_msg("state_count = %d\n", sm_state_counter);
}
*** 790,801 ****
--- 833,846 ----
add_function_hook("__smatch_intersection", &match_intersection, NULL);
add_function_hook("__smatch_type", &match_type, NULL);
add_implied_return_hook("__smatch_type_rl_helper", &match_type_rl_return, NULL);
add_function_hook("__smatch_merge_tree", &match_print_merge_tree, NULL);
add_function_hook("__smatch_stree_id", &match_print_stree_id, NULL);
+ add_function_hook("__smatch_bits", &match_bits, NULL);
add_function_hook("__smatch_mtag", &match_mtag, NULL);
add_function_hook("__smatch_mtag_data", &match_mtag_data_offset, NULL);
+ add_function_hook("__smatch_expr", &match_expr, 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_function_hook("__smatch_container", &match_container, NULL);