(root)/
binutils-2.41/
gprofng/
src/
Command.h
       1  /* Copyright (C) 2021-2023 Free Software Foundation, Inc.
       2     Contributed by Oracle.
       3  
       4     This file is part of GNU Binutils.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     This program is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with this program; if not, write to the Free Software
      18     Foundation, 51 Franklin Street - Fifth Floor, Boston,
      19     MA 02110-1301, USA.  */
      20  
      21  #ifndef _COMMAND_H
      22  #define _COMMAND_H
      23  
      24  
      25  #include <stdio.h>
      26  #include <sys/types.h>
      27  
      28  #include "Metric.h"
      29  #include "Hist_data.h"
      30  #include "dbe_types.h"
      31  #include "vec.h"
      32  #include "enums.h"
      33  
      34  // This enum lists all the commands parsed by er_print
      35  //  The ordering here is not important, but LAST_CMD must
      36  //  be defined as the last command for which a help line will exist
      37  //  Command.cc has a matching list, and the ordering in
      38  //  that list determines what shows up under the help and xhelp commands.
      39  //  In particular, the entry for HELP is the last one printed
      40  //  for the help command, and the entry for HHELP is the last
      41  //  one printed for xhelp.
      42  
      43  enum CmdType
      44  {
      45    // Pathtree-related commands
      46    FUNCS = 0,
      47    HOTPCS,
      48    HOTLINES,
      49    FDETAIL,
      50    OBJECTS,
      51    LDETAIL,
      52    PDETAIL,
      53    SOURCE,
      54    DISASM,
      55    METRIC_LIST,
      56    METRICS,
      57    SORT,
      58    GPROF,
      59    GMETRIC_LIST,
      60    FSINGLE,
      61    CSINGLE,
      62    CPREPEND,
      63    CAPPEND,
      64    CRMFIRST,
      65    CRMLAST,
      66    CALLTREE,
      67    CALLFLAME,
      68  
      69    // Source/disassembly control commands
      70    SCOMPCOM,
      71    STHRESH,
      72    DCOMPCOM,
      73    COMPCOM,
      74    DTHRESH,
      75  
      76    // Heap trace-related commands
      77    LEAKS,
      78    ALLOCS,
      79    HEAP,
      80    HEAPSTAT,
      81  
      82    // I/O trace-related commands
      83    IOACTIVITY,
      84    IOVFD,
      85    IOCALLSTACK,
      86    IOSTAT,
      87  
      88    // Race detection related commands
      89    RACE_EVNTS,
      90    RACE_SUM,
      91  
      92    // Deadlock detection commands
      93    DEADLOCK_EVNTS,
      94    DEADLOCK_SUM,
      95  
      96    // DataSpace commands
      97    DOBJECTS,
      98    DO_SINGLE,
      99    DO_LAYOUT,
     100    DO_METRIC_LIST,
     101  
     102    // MemorySpace commands
     103    MEMOBJ,
     104    MEMOBJLIST,
     105    MEMOBJDEF,
     106    MEMOBJDROP,
     107    MACHINEMODEL,
     108  
     109    // Custom tab commands
     110    INDXOBJDEF,
     111    INDXOBJLIST,
     112    INDXOBJ,
     113    INDX_METRIC_LIST,
     114  
     115    // Old-style filtering commands
     116    OBJECT_LIST,
     117    OBJECT_SELECT,
     118    SAMPLE_LIST,
     119    SAMPLE_SELECT,
     120    THREAD_LIST,
     121    THREAD_SELECT,
     122    LWP_LIST,
     123    LWP_SELECT,
     124    CPU_LIST,
     125    CPU_SELECT,
     126  
     127    // Shared Object display commands
     128    OBJECT_SHOW,
     129    OBJECT_HIDE,
     130    OBJECT_API,
     131    OBJECTS_DEFAULT,
     132  
     133    // the new filtering commands
     134    FILTERS,
     135  
     136    // Miscellaneous commands
     137    COMPARE,
     138    PRINTMODE,
     139    HEADER,
     140    OVERVIEW_NEW,
     141    SAMPLE_DETAIL,
     142    STATISTICS,
     143    EXP_LIST,
     144    DESCRIBE,
     145    OUTFILE,
     146    APPENDFILE,
     147    LIMIT,
     148    NAMEFMT,
     149    VIEWMODE,
     150    EN_DESC,
     151    SETPATH,
     152    ADDPATH,
     153    PATHMAP,
     154    LIBDIRS,
     155    SCRIPT,
     156    VERSION_cmd,
     157    QUIT,
     158    PROCSTATS,
     159  
     160    // Experiments handling commands
     161    ADD_EXP,
     162    DROP_EXP,
     163    OPEN_EXP,
     164  
     165    // .rc-only Commands
     166    DMETRICS,
     167    DSORT,
     168    TLMODE,
     169    TLDATA,
     170    TABS,
     171    TIMELINE,
     172    MPI_TIMELINE,
     173    MPI_CHART,
     174    TIMELINE_CLASSIC_TBR,
     175    SOURCE_V2,
     176    DISASM_V2,
     177    RTABS,
     178    DUALSOURCE,
     179    SOURCEDISAM,
     180  
     181    HELP,             // this is the last of the commands listed with "help"
     182    IFREQ,
     183    DUMPNODES,
     184    DUMPSTACKS,
     185    DUMPUNK,
     186    DUMPFUNC,
     187    DUMPDOBJS,
     188    DUMPMAP,
     189    DUMPENTITIES,
     190    DUMP_PROFILE,
     191    DUMP_SYNC,
     192    DUMP_HWC,
     193    DUMP_HEAP,
     194    DUMP_IOTRACE,
     195    RACE_ACCS,
     196    DMPI_FUNCS,
     197    DMPI_MSGS,
     198    DMPI_EVENTS,
     199    DMEM,
     200    DUMP_GC,
     201    DKILL,
     202    IGNORE_NO_XHWCPROF,
     203    IGNORE_FS_WARN,
     204    QQUIT,
     205    HHELP,            // this is the last command listed with "xhelp"
     206    NO_CMD,           // Dummy command, used for headers in help
     207    DUMMY_CMD,        // Dummy command, used for help
     208  
     209    // unused commands
     210    LOADOBJECT,
     211    LOADOBJECT_LIST,
     212    LOADOBJECT_SELECT,
     213  
     214    // Internal-only Commands
     215    LAST_CMD,         // No more commands for which a help line is possible
     216    STDIN,
     217    COMMENT,
     218    WHOAMI,
     219  
     220    // Error return "commands"
     221    AMBIGUOUS_CMD,
     222    UNKNOWN_CMD
     223  };
     224  
     225  typedef struct
     226  {
     227    const CmdType token;      // command key
     228    const char *str;          // command string
     229    const char *alt;          // alternate command string
     230    const char *arg;          // argument string for help
     231    const int arg_count;      // no. of arguments
     232    char **desc;              // description for help
     233  } Cmdtable;
     234  
     235  // Command class: never instantiated, completely static
     236  class Command
     237  {
     238  public:
     239  
     240    // look up a string in the command table, return type, set number of args
     241    static CmdType get_command (char *cmd, int &arg_count, int &param);
     242    static const char *get_cmd_str (CmdType type);
     243    static void print_help (char *prog_name, bool cmd_line, bool usermode, FILE *outf);
     244    static char *get_err_string (Cmd_status err);
     245  
     246    static const char *DEFAULT_METRICS;   // default if no .rc files read
     247    static const char *DEFAULT_SORT;      // default if no .rc files read
     248    static const char *DEFAULT_CMD;       // token for default
     249    static const char *ALL_CMD;           // token for all
     250    static const char *ANY_CMD;           // token for any
     251    static const char *NONE_CMD;          // token for none
     252    static const char *HWC_CMD;           // token for all HWC
     253    static const char *BIT_CMD;           // token for any bit-derived metric
     254  
     255  private:
     256    static const int user_no;             // the last user command
     257    static const int hidden_no;           // the last hidden command
     258    static const int command_no;          // the last parsable command
     259  
     260    static void init_desc ();
     261    static char *fmt_help (int nc, char head);
     262  };
     263  
     264  // Analyzer display tabs
     265  struct DispTab
     266  {
     267    DispTab (int ntype, int num, bool vis, CmdType token)
     268    {
     269      type = ntype;
     270      order = num;
     271      visible = vis;
     272      available = true;
     273      cmdtoken = token;
     274    }
     275  
     276    void setAvailability (bool val)       { available = val; }
     277  
     278    int type;             // Display type
     279    int order;            // Order in which tabs should appear in GUI
     280    bool visible;         // Is Tab visible
     281    bool available;       // Is tab available for this experiment
     282    CmdType cmdtoken;     // command token
     283    int param;            // command parameter (used for memory space)
     284  };
     285  
     286  #endif /* ! _COMMAND_H */