Print this page
12257 resync smatch to 0.6.1-rc1-il-4

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_mtag.c
          +++ new/usr/src/tools/smatch/src/smatch_mtag.c
↓ open down ↓ 42 lines elided ↑ open up ↑
  43   43   */
  44   44  
  45   45  #include "smatch.h"
  46   46  #include "smatch_slist.h"
  47   47  #include "smatch_extra.h"
  48   48  
  49   49  #include <openssl/md5.h>
  50   50  
  51   51  static int my_id;
  52   52  
  53      -static mtag_t str_to_tag(const char *str)
       53 +mtag_t str_to_mtag(const char *str)
  54   54  {
  55   55          unsigned char c[MD5_DIGEST_LENGTH];
  56   56          unsigned long long *tag = (unsigned long long *)&c;
  57   57          MD5_CTX mdContext;
  58   58          int len;
  59   59  
  60   60          len = strlen(str);
  61   61          MD5_Init(&mdContext);
  62   62          MD5_Update(&mdContext, str, len);
  63   63          MD5_Final(c, &mdContext);
↓ open down ↓ 61 lines elided ↑ open up ↑
 125  125          if (!is_mtag_call(right))
 126  126                  return state;
 127  127  
 128  128          left_name = expr_to_str_sym(left, &left_sym);
 129  129          if (!left_name || !left_sym)
 130  130                  return state;
 131  131          right_name = expr_to_str(right);
 132  132  
 133  133          snprintf(buf, sizeof(buf), "%s %s %s %s", get_filename(), get_function(),
 134  134                   left_name, right_name);
 135      -        tag = str_to_tag(buf);
      135 +        tag = str_to_mtag(buf);
 136  136          tag_sval.type = estate_type(state);
 137  137          tag_sval.uvalue = tag;
 138  138  
 139  139          rl = rl_filter(estate_rl(state), valid_ptr_rl);
 140  140          rl = clone_rl(rl);
 141  141          add_range(&rl, tag_sval, tag_sval);
 142  142  
 143  143          sql_insert_mtag_about(tag, left_name, buf);
 144  144  
 145  145          free_string(left_name);
↓ open down ↓ 3 lines elided ↑ open up ↑
 149  149  }
 150  150  
 151  151  int get_string_mtag(struct expression *expr, mtag_t *tag)
 152  152  {
 153  153          mtag_t xor;
 154  154  
 155  155          if (expr->type != EXPR_STRING || !expr->string)
 156  156                  return 0;
 157  157  
 158  158          /* I was worried about collisions so I added a xor */
 159      -        xor = str_to_tag("__smatch string");
 160      -        *tag = str_to_tag(expr->string->data);
      159 +        xor = str_to_mtag("__smatch string");
      160 +        *tag = str_to_mtag(expr->string->data);
 161  161          *tag = *tag ^ xor;
 162  162  
 163  163          return 1;
 164  164  }
 165  165  
 166  166  int get_toplevel_mtag(struct symbol *sym, mtag_t *tag)
 167  167  {
 168  168          char buf[256];
 169  169  
 170  170          if (!sym)
 171  171                  return 0;
 172  172  
 173  173          if (!sym->ident ||
 174  174              !(sym->ctype.modifiers & MOD_TOPLEVEL))
 175  175                  return 0;
 176  176  
 177  177          snprintf(buf, sizeof(buf), "%s %s",
 178  178                   (sym->ctype.modifiers & MOD_STATIC) ? get_filename() : "extern",
 179  179                   sym->ident->name);
 180      -        *tag = str_to_tag(buf);
      180 +        *tag = str_to_mtag(buf);
 181  181          return 1;
 182  182  }
 183  183  
 184  184  bool get_symbol_mtag(struct symbol *sym, mtag_t *tag)
 185  185  {
 186  186          char buf[256];
 187  187  
 188  188          if (!sym || !sym->ident)
 189  189                  return false;
 190  190  
 191  191          if (get_toplevel_mtag(sym, tag))
 192  192                  return true;
 193  193  
 194  194          if (get_param_num_from_sym(sym) >= 0)
 195  195                  return false;
 196  196  
 197  197          snprintf(buf, sizeof(buf), "%s %s %s",
 198  198                   get_filename(), get_function(), sym->ident->name);
 199      -        *tag = str_to_tag(buf);
      199 +        *tag = str_to_mtag(buf);
 200  200          return true;
 201  201  }
 202  202  
 203  203  static void global_variable(struct symbol *sym)
 204  204  {
 205  205          mtag_t tag;
 206  206  
 207  207          if (!get_toplevel_mtag(sym, &tag))
 208  208                  return;
 209  209  
↓ open down ↓ 41 lines elided ↑ open up ↑
 251  251          mtag_t tag;
 252  252  
 253  253          if (!rl_to_sval(rl, &sval))
 254  254                  return rl;
 255  255          if (sval.type->type != SYM_PTR || sval.uvalue != MTAG_SEED)
 256  256                  return rl;
 257  257  
 258  258          name = expr_to_str(expr);
 259  259          snprintf(buf, sizeof(buf), "%s %s %s", get_filename(), get_function(), name);
 260  260          free_string(name);
 261      -        tag = str_to_tag(buf);
      261 +        tag = str_to_mtag(buf);
 262  262          sval.value = tag;
 263  263          return alloc_rl(sval, sval);
 264  264  }
 265  265  
 266  266  int create_mtag_alias(mtag_t tag, struct expression *expr, mtag_t *new)
 267  267  {
 268  268          char buf[256];
 269  269          int lines_from_start;
 270  270          char *str;
 271  271  
↓ open down ↓ 5 lines elided ↑ open up ↑
 277  277           */
 278  278  
 279  279          if (!cur_func_sym)
 280  280                  return 0;
 281  281  
 282  282          lines_from_start = expr->pos.line - cur_func_sym->pos.line;
 283  283          str = expr_to_str(expr);
 284  284          snprintf(buf, sizeof(buf), "%lld %d %s", tag, lines_from_start, str);
 285  285          free_string(str);
 286  286  
 287      -        *new = str_to_tag(buf);
      287 +        *new = str_to_mtag(buf);
 288  288          sql_insert_mtag_alias(tag, *new);
 289  289  
 290  290          return 1;
 291  291  }
 292  292  
 293  293  static int get_implied_mtag_offset(struct expression *expr, mtag_t *tag, int *offset)
 294  294  {
 295  295          struct smatch_state *state;
 296  296          struct symbol *type;
 297  297          sval_t sval;
↓ open down ↓ 157 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX