Print this page
12724 update smatch to 0.6.1-rc1-il-5

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch.h
          +++ new/usr/src/tools/smatch/src/smatch.h
↓ open down ↓ 188 lines elided ↑ open up ↑
 189  189                                void *info);
 190  190  void return_implies_state(const char *look_for, long long start, long long end,
 191  191                           implication_hook *call_back, void *info);
 192  192  void return_implies_state_sval(const char *look_for, sval_t start, sval_t end,
 193  193                           implication_hook *call_back, void *info);
 194  194  void select_return_states_hook(int type, return_implies_hook *callback);
 195  195  void select_return_states_before(void (*fn)(void));
 196  196  void select_return_states_after(void (*fn)(void));
 197  197  int get_implied_return(struct expression *expr, struct range_list **rl);
 198  198  void allocate_hook_memory(void);
      199 +void allocate_tracker_array(int num_checks);
 199  200  
 200  201  struct modification_data {
 201  202          struct smatch_state *prev;
 202  203          struct expression *cur;
 203  204  };
 204  205  
 205  206  typedef void (modification_hook)(struct sm_state *sm, struct expression *mod_expr);
 206  207  void add_modification_hook(int owner, modification_hook *call_back);
 207  208  void add_modification_hook_late(int owner, modification_hook *call_back);
 208  209  struct smatch_state *get_modification_state(struct expression *expr);
↓ open down ↓ 172 lines elided ↑ open up ↑
 381  382  char *alloc_string_newline(const char *str);
 382  383  void free_string(char *str);
 383  384  void append(char *dest, const char *data, int buff_len);
 384  385  void remove_parens(char *str);
 385  386  struct smatch_state *alloc_state_num(int num);
 386  387  struct smatch_state *alloc_state_str(const char *name);
 387  388  struct smatch_state *merge_str_state(struct smatch_state *s1, struct smatch_state *s2);
 388  389  struct smatch_state *alloc_state_expr(struct expression *expr);
 389  390  struct expression *get_argument_from_call_expr(struct expression_list *args,
 390  391                                                 int num);
      392 +struct expression *get_array_expr(struct expression *expr);
 391  393  
 392  394  char *expr_to_var(struct expression *expr);
 393  395  struct symbol *expr_to_sym(struct expression *expr);
 394  396  char *expr_to_str(struct expression *expr);
 395  397  char *expr_to_str_sym(struct expression *expr,
 396  398                                       struct symbol **sym_ptr);
 397  399  char *expr_to_var_sym(struct expression *expr,
 398  400                               struct symbol **sym_ptr);
 399  401  char *expr_to_known_chunk_sym(struct expression *expr, struct symbol **sym);
 400  402  char *expr_to_chunk_sym_vsl(struct expression *expr, struct symbol **sym, struct var_sym_list **vsl);
↓ open down ↓ 38 lines elided ↑ open up ↑
 439  441  int is_error_return(struct expression *expr);
 440  442  int getting_address(struct expression *expr);
 441  443  int get_struct_and_member(struct expression *expr, const char **type, const char **member);
 442  444  char *get_member_name(struct expression *expr);
 443  445  char *get_fnptr_name(struct expression *expr);
 444  446  int cmp_pos(struct position pos1, struct position pos2);
 445  447  int positions_eq(struct position pos1, struct position pos2);
 446  448  struct statement *get_current_statement(void);
 447  449  struct statement *get_prev_statement(void);
 448  450  struct expression *get_last_expr_from_expression_stmt(struct expression *expr);
      451 +
      452 +#define RETURN_VAR    -1
      453 +#define LOCAL_SCOPE   -2
      454 +#define FILE_SCOPE    -3
      455 +#define GLOBAL_SCOPE  -4
      456 +#define UNKNOWN_SCOPE -5
 449  457  int get_param_num_from_sym(struct symbol *sym);
 450  458  int get_param_num(struct expression *expr);
 451  459  struct symbol *get_param_sym_from_num(int num);
      460 +
 452  461  int ms_since(struct timeval *start);
 453  462  int parent_is_gone_var_sym(const char *name, struct symbol *sym);
 454  463  int parent_is_gone(struct expression *expr);
 455  464  int invert_op(int op);
 456  465  int op_remove_assign(int op);
 457  466  int expr_equiv(struct expression *one, struct expression *two);
 458  467  void push_int(struct int_stack **stack, int num);
 459  468  int pop_int(struct int_stack **stack);
 460  469  
 461  470  /* smatch_type.c */
↓ open down ↓ 9 lines elided ↑ open up ↑
 471  480  int expr_signed(struct expression *expr);
 472  481  int returns_unsigned(struct symbol *base_type);
 473  482  int is_pointer(struct expression *expr);
 474  483  int returns_pointer(struct symbol *base_type);
 475  484  sval_t sval_type_max(struct symbol *base_type);
 476  485  sval_t sval_type_min(struct symbol *base_type);
 477  486  int nr_bits(struct expression *expr);
 478  487  int is_void_pointer(struct expression *expr);
 479  488  int is_char_pointer(struct expression *expr);
 480  489  int is_string(struct expression *expr);
      490 +bool is_struct_ptr(struct symbol *type);
 481  491  int is_static(struct expression *expr);
 482  492  bool is_local_variable(struct expression *expr);
 483  493  int types_equiv(struct symbol *one, struct symbol *two);
      494 +bool type_fits(struct symbol *type, struct symbol *test);
 484  495  int fn_static(void);
 485  496  const char *global_static();
 486  497  struct symbol *cur_func_return_type(void);
 487  498  struct symbol *get_arg_type(struct expression *fn, int arg);
 488  499  struct symbol *get_member_type_from_key(struct expression *expr, const char *key);
 489  500  struct symbol *get_arg_type_from_key(struct expression *fn, int param, struct expression *arg, const char *key);
 490  501  int is_struct(struct expression *expr);
 491  502  char *type_to_str(struct symbol *type);
 492  503  
 493  504  /* smatch_ignore.c */
↓ open down ↓ 80 lines elided ↑ open up ↑
 574  585  /* smatch_conditions */
 575  586  void __split_whole_condition(struct expression *expr);
 576  587  void __handle_logic(struct expression *expr);
 577  588  int is_condition(struct expression *expr);
 578  589  int __handle_condition_assigns(struct expression *expr);
 579  590  int __handle_select_assigns(struct expression *expr);
 580  591  int __handle_expr_statement_assigns(struct expression *expr);
 581  592  
 582  593  /* smatch_implied.c */
 583  594  struct range_list_stack;
 584      -void param_limit_implications(struct expression *expr, int param, char *key, char *value);
      595 +void param_limit_implications(struct expression *expr, int param, char *key, char *value, struct stree **implied);
 585  596  struct stree *__implied_case_stree(struct expression *switch_expr,
 586  597                                     struct range_list *case_rl,
 587  598                                     struct range_list_stack **remaining_cases,
 588  599                                     struct stree **raw_stree);
 589  600  void overwrite_states_using_pool(struct sm_state *gate_sm, struct sm_state *pool_sm);
 590  601  int assume(struct expression *expr);
 591  602  void end_assume(void);
 592  603  int impossible_assumption(struct expression *left, int op, sval_t sval);
 593  604  
 594  605  /* smatch_slist.h */
↓ open down ↓ 178 lines elided ↑ open up ↑
 773  784  void __set_default(void);
 774  785  int __pop_default(void);
 775  786  
 776  787  void __push_conditions(void);
 777  788  void __discard_conditions(void);
 778  789  
 779  790  void __save_gotos(const char *name, struct symbol *sym);
 780  791  void __merge_gotos(const char *name, struct symbol *sym);
 781  792  
 782  793  void __print_cur_stree(void);
      794 +bool __print_states(const char *owner);
      795 +typedef void (check_tracker_hook)(int owner, const char *name, struct symbol *sym, struct smatch_state *state);
      796 +void add_check_tracker(const char *check_name, check_tracker_hook *fn);
 783  797  
 784  798  /* smatch_hooks.c */
 785  799  void __pass_to_client(void *data, enum hook_type type);
 786  800  void __pass_case_to_client(struct expression *switch_expr,
 787  801                             struct range_list *rl);
 788  802  int __has_merge_function(int client_id);
 789  803  struct smatch_state *__client_merge_function(int owner,
 790  804                                               struct smatch_state *s1,
 791  805                                               struct smatch_state *s2);
 792  806  struct smatch_state *__client_unmatched_state_function(struct sm_state *sm);
↓ open down ↓ 47 lines elided ↑ open up ↑
 840  854          PARAM_COMPARE   = 1029,
 841  855          CONSTRAINT      = 1031,
 842  856          PASSES_TYPE     = 1032,
 843  857          CONSTRAINT_REQUIRED = 1033,
 844  858          BIT_INFO        = 1034,
 845  859          NOSPEC          = 1035,
 846  860          NOSPEC_WB       = 1036,
 847  861          STMT_CNT        = 1037,
 848  862          TERMINATED      = 1038,
 849  863          FRESH_ALLOC     = 1044,
      864 +        ALLOCATOR       = 1045,
 850  865  
 851  866          /* put random temporary stuff in the 7000-7999 range for testing */
 852  867          USER_DATA       = 8017,
 853  868          USER_DATA_SET   = 9017,
 854  869          NO_OVERFLOW     = 8018,
 855  870          NO_OVERFLOW_SIMPLE = 8019,
 856  871          LOCKED          = 8020,
 857  872          UNLOCKED        = 8021,
 858  873          HALF_LOCKED     = 9022,
 859  874          LOCK_RESTORED   = 9023,
 860  875          KNOWN_LOCKED    = 9024,
 861  876          KNOWN_UNLOCKED  = 9025,
 862  877          SET_FS          = 8022,
 863  878          ATOMIC_INC      = 8023,
 864  879          ATOMIC_DEC      = 8024,
      880 +        REFCOUNT        = 9025,
 865  881          NO_SIDE_EFFECT  = 8025,
 866  882          FN_ARG_LINK     = 8028,
 867  883          DATA_VALUE      = 8029,
 868  884          ARRAYSIZE_ARG   = 8033,
 869  885          SIZEOF_ARG      = 8034,
 870  886          MEMORY_TAG      = 8036,
 871  887          MTAG_ASSIGN     = 8035,
 872  888          STRING_VALUE    = 8041,
 873  889  
 874  890          BYTE_COUNT      = 8050,
↓ open down ↓ 3 lines elided ↑ open up ↑
 878  894          USED_COUNT      = 8054,
 879  895  };
 880  896  
 881  897  extern struct sqlite3 *smatch_db;
 882  898  extern struct sqlite3 *mem_db;
 883  899  extern struct sqlite3 *cache_db;
 884  900  
 885  901  void db_ignore_states(int id);
 886  902  void select_caller_info_hook(void (*callback)(const char *name, struct symbol *sym, char *key, char *value), int type);
 887  903  void add_member_info_callback(int owner, void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm));
      904 +void add_caller_info_callback(int owner, void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm));
 888  905  void add_split_return_callback(void (*fn)(int return_id, char *return_ranges, struct expression *returned_expr));
 889  906  void add_returned_member_callback(int owner, void (*callback)(int return_id, char *return_ranges, struct expression *expr, char *printed_name, struct smatch_state *state));
 890  907  void select_call_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value));
 891  908  void select_return_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value));
 892  909  struct range_list *db_return_vals(struct expression *expr);
 893  910  struct range_list *db_return_vals_from_str(const char *fn_name);
 894  911  struct range_list *db_return_vals_no_args(struct expression *expr);
 895  912  char *return_state_to_var_sym(struct expression *expr, int param, const char *key, struct symbol **sym);
 896  913  char *get_chunk_from_key(struct expression *arg, char *key, struct symbol **sym, struct var_sym_list **vsl);
 897  914  char *get_variable_from_key(struct expression *arg, const char *key, struct symbol **sym);
↓ open down ↓ 91 lines elided ↑ open up ↑
 989 1006  void sql_insert_function_type(int param, const char *value);
 990 1007  void sql_insert_parameter_name(int param, const char *value);
 991 1008  void sql_insert_data_info(struct expression *data, int type, const char *value);
 992 1009  void sql_insert_data_info_var_sym(const char *var, struct symbol *sym, int type, const char *value);
 993 1010  void sql_save_constraint(const char *con);
 994 1011  void sql_save_constraint_required(const char *data, int op, const char *limit);
 995 1012  void sql_copy_constraint_required(const char *new_limit, const char *old_limit);
 996 1013  void sql_insert_fn_ptr_data_link(const char *ptr, const char *data);
 997 1014  void sql_insert_fn_data_link(struct expression *fn, int type, int param, const char *key, const char *value);
 998 1015  void sql_insert_mtag_about(mtag_t tag, const char *left_name, const char *right_name);
 999      -void sql_insert_mtag_map(mtag_t tag, int offset, mtag_t container);
     1016 +void sql_insert_mtag_info(mtag_t tag, int type, const char *value);
     1017 +void sql_insert_mtag_map(mtag_t container, int container_offset, mtag_t tag, int tag_offset);
1000 1018  void sql_insert_mtag_alias(mtag_t orig, mtag_t alias);
1001      -int mtag_map_select_container(mtag_t tag, int offset, mtag_t *container);
     1019 +int mtag_map_select_container(mtag_t tag, int container_offset, mtag_t *container);
1002 1020  int mtag_map_select_tag(mtag_t container, int offset, mtag_t *tag);
1003      -struct smatch_state *swap_mtag_return(struct expression *expr, struct smatch_state *state);
     1021 +struct smatch_state *get_mtag_return(struct expression *expr, struct smatch_state *state);
1004 1022  struct range_list *swap_mtag_seed(struct expression *expr, struct range_list *rl);
1005 1023  
1006 1024  void sql_select_return_states(const char *cols, struct expression *call,
1007 1025          int (*callback)(void*, int, char**, char**), void *info);
1008 1026  void sql_select_call_implies(const char *cols, struct expression *call,
1009 1027          int (*callback)(void*, int, char**, char**));
1010 1028  
1011 1029  void open_smatch_db(char *db_file);
1012 1030  
1013 1031  /* smatch_files.c */
↓ open down ↓ 48 lines elided ↑ open up ↑
1062 1080  int get_user_rl(struct expression *expr, struct range_list **rl);
1063 1081  int is_user_rl(struct expression *expr);
1064 1082  int get_user_rl_var_sym(const char *name, struct symbol *sym, struct range_list **rl);
1065 1083  bool user_rl_capped(struct expression *expr);
1066 1084  struct range_list *var_user_rl(struct expression *expr);
1067 1085  
1068 1086  /* check_locking.c */
1069 1087  void print_held_locks();
1070 1088  
1071 1089  /* check_assigned_expr.c */
     1090 +extern int check_assigned_expr_id;
1072 1091  struct expression *get_assigned_expr(struct expression *expr);
1073 1092  struct expression *get_assigned_expr_name_sym(const char *name, struct symbol *sym);
1074 1093  /* smatch_return_to_param.c */
1075 1094  void __add_return_to_param_mapping(struct expression *assign, const char *return_string);
1076 1095  char *map_call_to_param_name_sym(struct expression *expr, struct symbol **sym);
1077 1096  
1078 1097  /* smatch_comparison.c */
1079 1098  extern int comparison_id;
1080 1099  #define UNKNOWN_COMPARISON 0
1081 1100  #define IMPOSSIBLE_COMPARISON -1
↓ open down ↓ 30 lines elided ↑ open up ↑
1112 1131  char *get_printed_param_name(struct expression *call, const char *param_name, struct symbol *param_sym);
1113 1132  char *name_sym_to_param_comparison(const char *name, struct symbol *sym);
1114 1133  char *expr_equal_to_param(struct expression *expr, int ignore);
1115 1134  char *expr_lte_to_param(struct expression *expr, int ignore);
1116 1135  char *expr_param_comparison(struct expression *expr, int ignore);
1117 1136  int flip_comparison(int op);
1118 1137  int negate_comparison(int op);
1119 1138  int remove_unsigned_from_comparison(int op);
1120 1139  int param_compare_limit_is_impossible(struct expression *expr, int left_param, char *left_key, char *value);
1121 1140  void filter_by_comparison(struct range_list **rl, int comparison, struct range_list *right);
1122      -struct sm_state *comparison_implication_hook(struct expression *expr,
1123      -                        struct state_list **true_stack,
1124      -                        struct state_list **false_stack);
1125 1141  void __compare_param_limit_hook(struct expression *left_expr, struct expression *right_expr,
1126 1142                                  const char *state_name,
1127 1143                                  struct smatch_state *true_state, struct smatch_state *false_state);
1128 1144  int impossibly_high_comparison(struct expression *expr);
1129 1145  
1130 1146  /* smatch_sval.c */
1131 1147  sval_t *sval_alloc(sval_t sval);
1132 1148  sval_t *sval_alloc_permanent(sval_t sval);
1133 1149  sval_t sval_blank(struct expression *expr);
1134 1150  sval_t sval_type_val(struct symbol *type, long long val);
↓ open down ↓ 51 lines elided ↑ open up ↑
1186 1202  /* smatch_stored_conditions.c */
1187 1203  struct smatch_state *get_stored_condition(struct expression *expr);
1188 1204  struct expression_list *get_conditions(struct expression *expr);
1189 1205  struct sm_state *stored_condition_implication_hook(struct expression *expr,
1190 1206                          struct state_list **true_stack,
1191 1207                          struct state_list **false_stack);
1192 1208  /* smatch_parsed_conditions.c */
1193 1209  struct sm_state *parsed_condition_implication_hook(struct expression *expr,
1194 1210                          struct state_list **true_stack,
1195 1211                          struct state_list **false_stack);
     1212 +/* smatch_comparison.c */
     1213 +struct sm_state *comparison_implication_hook(struct expression *expr,
     1214 +                                             struct state_list **true_stack,
     1215 +                                             struct state_list **false_stack);
1196 1216  
1197 1217  /* check_string_len.c */
1198 1218  int get_formatted_string_size(struct expression *call, int arg);
1199 1219  int get_formatted_string_min_size(struct expression *call, int arg);
1200 1220  
1201 1221  /* smatch_param_set.c */
1202 1222  int param_was_set(struct expression *expr);
1203 1223  int param_was_set_var_sym(const char *name, struct symbol *sym);
1204 1224  void print_limited_param_set(int return_id, char *return_ranges, struct expression *expr);
1205 1225  /* smatch_param_filter.c */
↓ open down ↓ 27 lines elided ↑ open up ↑
1233 1253  int get_address_rl(struct expression *expr, struct range_list **rl);
1234 1254  int get_member_offset(struct symbol *type, const char *member_name);
1235 1255  int get_member_offset_from_deref(struct expression *expr);
1236 1256  
1237 1257  /* for now this is in smatch_used_parameter.c */
1238 1258  void __get_state_hook(int owner, const char *name, struct symbol *sym);
1239 1259  
1240 1260  /* smatch_buf_comparison.c */
1241 1261  int db_var_is_array_limit(struct expression *array, const char *name, struct var_sym_list *vsl);
1242 1262  
     1263 +struct range_list *get_fs(void);
     1264 +
1243 1265  struct stree *get_all_return_states(void);
1244 1266  struct stree_stack *get_all_return_strees(void);
1245 1267  int on_atomic_dec_path(void);
1246 1268  int was_inced(const char *name, struct symbol *sym);
     1269 +void set_refcount_inc(char *name, struct symbol *sym);
     1270 +void set_refcount_dec(char *name, struct symbol *sym);
1247 1271  
1248 1272  /* smatch_constraints.c */
1249 1273  char *get_constraint_str(struct expression *expr);
1250 1274  struct constraint_list *get_constraints(struct expression *expr);
1251 1275  char *unmet_constraint(struct expression *data, struct expression *offset);
1252 1276  char *get_required_constraint(const char *data_str);
1253 1277  
1254 1278  /* smatch_container_of.c */
1255 1279  int get_param_from_container_of(struct expression *expr);
1256 1280  int get_offset_from_container_of(struct expression *expr);
↓ open down ↓ 164 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX