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);