Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_mem_tracker.c
          +++ new/usr/src/tools/smatch/src/smatch_mem_tracker.c
   1    1  /*
   2    2   * Copyright (C) 2018 Oracle.
        3 + * Copyright 2019 Joyent, Inc.
   3    4   *
   4    5   * This program is free software; you can redistribute it and/or
   5    6   * modify it under the terms of the GNU General Public License
   6    7   * as published by the Free Software Foundation; either version 2
   7    8   * of the License, or (at your option) any later version.
   8    9   *
   9   10   * This program is distributed in the hope that it will be useful,
  10   11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12   13   * GNU General Public License for more details.
  13   14   *
  14   15   * You should have received a copy of the GNU General Public License
  15   16   * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
  16   17   */
  17   18  
  18   19  #include "smatch.h"
  19   20  #include <fcntl.h>
  20   21  #include <unistd.h>
       22 +#ifdef __sun
  21   23  #include <sys/procfs.h>
       24 +#endif
  22   25  
  23   26  static int my_id;
  24      -static int my_fd = -2;
  25   27  
  26   28  static unsigned long max_size;
  27   29  
       30 +#ifdef __sun
  28   31  unsigned long get_mem_kb(void)
  29   32  {
       33 +        static int my_fd = -2;
  30   34          prpsinfo_t pbuf;
  31   35  
  32   36          if (my_fd == -2) {
  33   37                  /* Do not repeatedly attempt this if it fails. */
  34   38                  my_fd = open("/proc/self/psinfo", O_RDONLY);
  35   39          }
  36   40          if (my_fd == -1) {
  37   41                  return (0);
  38   42          }
  39   43  
  40   44          if (pread(my_fd, &pbuf, sizeof (pbuf), 0) != sizeof (pbuf)) {
  41   45                  return (0);
  42   46          }
  43   47  
  44   48          return (pbuf.pr_rssize);
  45   49  }
       50 +#else
       51 +unsigned long get_mem_kb(void)
       52 +{
       53 +        FILE *file;
       54 +        char buf[1024] = "0";
       55 +        unsigned long size;
  46   56  
       57 +        file = fopen("/proc/self/statm", "r");
       58 +        if (!file)
       59 +                return 0;
       60 +        fread(buf, 1, sizeof(buf), file);
       61 +        fclose(file);
       62 +
       63 +        size = strtoul(buf, NULL, 10);
       64 +        size = size * sysconf(_SC_PAGESIZE) / 1024;
       65 +        return size;
       66 +}
       67 +#endif
       68 +
  47   69  static void match_end_func(struct symbol *sym)
  48   70  {
  49   71          unsigned long size;
  50   72  
  51   73          if (option_mem) {
  52   74                  size = get_mem_kb();
  53   75                  if (size > max_size)
  54   76                          max_size = size;
  55   77          }
  56   78  }
↓ open down ↓ 12 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX