| /* Copyright (C) 2021-2024 Free Software Foundation, Inc. |
| Contributed by Oracle. |
| |
| This file is part of GNU Binutils. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3, or (at your option) |
| any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, 51 Franklin Street - Fifth Floor, Boston, |
| MA 02110-1301, USA. */ |
| |
| #ifndef _COMMAND_H |
| #define _COMMAND_H |
| |
| |
| #include <stdio.h> |
| #include <sys/types.h> |
| |
| #include "Metric.h" |
| #include "Hist_data.h" |
| #include "dbe_types.h" |
| #include "vec.h" |
| #include "enums.h" |
| |
| // This enum lists all the commands parsed by er_print |
| // The ordering here is not important, but LAST_CMD must |
| // be defined as the last command for which a help line will exist |
| // Command.cc has a matching list, and the ordering in |
| // that list determines what shows up under the help and xhelp commands. |
| // In particular, the entry for HELP is the last one printed |
| // for the help command, and the entry for HHELP is the last |
| // one printed for xhelp. |
| |
| enum CmdType |
| { |
| // Pathtree-related commands |
| FUNCS = 0, |
| HOTPCS, |
| HOTLINES, |
| FDETAIL, |
| OBJECTS, |
| LDETAIL, |
| PDETAIL, |
| SOURCE, |
| DISASM, |
| METRIC_LIST, |
| METRICS, |
| SORT, |
| GPROF, |
| GMETRIC_LIST, |
| FSINGLE, |
| CSINGLE, |
| CPREPEND, |
| CAPPEND, |
| CRMFIRST, |
| CRMLAST, |
| CALLTREE, |
| CALLFLAME, |
| |
| // Source/disassembly control commands |
| SCOMPCOM, |
| STHRESH, |
| DCOMPCOM, |
| COMPCOM, |
| DTHRESH, |
| |
| // Heap trace-related commands |
| LEAKS, |
| ALLOCS, |
| HEAP, |
| HEAPSTAT, |
| |
| // I/O trace-related commands |
| IOACTIVITY, |
| IOVFD, |
| IOCALLSTACK, |
| IOSTAT, |
| |
| // Race detection related commands |
| RACE_EVNTS, |
| RACE_SUM, |
| |
| // Deadlock detection commands |
| DEADLOCK_EVNTS, |
| DEADLOCK_SUM, |
| |
| // DataSpace commands |
| DOBJECTS, |
| DO_SINGLE, |
| DO_LAYOUT, |
| DO_METRIC_LIST, |
| |
| // MemorySpace commands |
| MEMOBJ, |
| MEMOBJLIST, |
| MEMOBJDEF, |
| MEMOBJDROP, |
| MACHINEMODEL, |
| |
| // Custom tab commands |
| INDXOBJDEF, |
| INDXOBJLIST, |
| INDXOBJ, |
| INDX_METRIC_LIST, |
| |
| // Old-style filtering commands |
| OBJECT_LIST, |
| OBJECT_SELECT, |
| SAMPLE_LIST, |
| SAMPLE_SELECT, |
| THREAD_LIST, |
| THREAD_SELECT, |
| LWP_LIST, |
| LWP_SELECT, |
| CPU_LIST, |
| CPU_SELECT, |
| |
| // Shared Object display commands |
| OBJECT_SHOW, |
| OBJECT_HIDE, |
| OBJECT_API, |
| OBJECTS_DEFAULT, |
| |
| // the new filtering commands |
| FILTERS, |
| |
| // Miscellaneous commands |
| COMPARE, |
| PRINTMODE, |
| HEADER, |
| OVERVIEW_NEW, |
| SAMPLE_DETAIL, |
| STATISTICS, |
| EXP_LIST, |
| DESCRIBE, |
| OUTFILE, |
| APPENDFILE, |
| LIMIT, |
| NAMEFMT, |
| VIEWMODE, |
| EN_DESC, |
| SETPATH, |
| ADDPATH, |
| PATHMAP, |
| LIBDIRS, |
| SCRIPT, |
| VERSION_cmd, |
| QUIT, |
| PROCSTATS, |
| |
| // Experiments handling commands |
| ADD_EXP, |
| DROP_EXP, |
| OPEN_EXP, |
| |
| // .rc-only Commands |
| DMETRICS, |
| DSORT, |
| TLMODE, |
| TLDATA, |
| TABS, |
| TIMELINE, |
| MPI_TIMELINE, |
| MPI_CHART, |
| TIMELINE_CLASSIC_TBR, |
| SOURCE_V2, |
| DISASM_V2, |
| RTABS, |
| DUALSOURCE, |
| SOURCEDISAM, |
| |
| HELP, // this is the last of the commands listed with "help" |
| IFREQ, |
| DUMPNODES, |
| DUMPSTACKS, |
| DUMPUNK, |
| DUMPFUNC, |
| DUMPDOBJS, |
| DUMPMAP, |
| DUMPENTITIES, |
| DUMP_PROFILE, |
| DUMP_SYNC, |
| DUMP_HWC, |
| DUMP_HEAP, |
| DUMP_IOTRACE, |
| RACE_ACCS, |
| DMPI_FUNCS, |
| DMPI_MSGS, |
| DMPI_EVENTS, |
| DMEM, |
| DUMP_GC, |
| DKILL, |
| IGNORE_NO_XHWCPROF, |
| IGNORE_FS_WARN, |
| QQUIT, |
| HHELP, // this is the last command listed with "xhelp" |
| NO_CMD, // Dummy command, used for headers in help |
| DUMMY_CMD, // Dummy command, used for help |
| |
| // unused commands |
| LOADOBJECT, |
| LOADOBJECT_LIST, |
| LOADOBJECT_SELECT, |
| |
| // Internal-only Commands |
| LAST_CMD, // No more commands for which a help line is possible |
| STDIN, |
| COMMENT, |
| WHOAMI, |
| |
| // Error return "commands" |
| AMBIGUOUS_CMD, |
| UNKNOWN_CMD |
| }; |
| |
| typedef struct |
| { |
| const CmdType token; // command key |
| const char *str; // command string |
| const char *alt; // alternate command string |
| const char *arg; // argument string for help |
| const int arg_count; // no. of arguments |
| char **desc; // description for help |
| } Cmdtable; |
| |
| // Command class: never instantiated, completely static |
| class Command |
| { |
| public: |
| |
| // look up a string in the command table, return type, set number of args |
| static CmdType get_command (char *cmd, int &arg_count, int ¶m); |
| static const char *get_cmd_str (CmdType type); |
| static void print_help (char *prog_name, bool cmd_line, bool usermode, FILE *outf); |
| static char *get_err_string (Cmd_status err); |
| |
| static const char *DEFAULT_METRICS; // default if no .rc files read |
| static const char *DEFAULT_SORT; // default if no .rc files read |
| static const char *DEFAULT_CMD; // token for default |
| static const char *ALL_CMD; // token for all |
| static const char *ANY_CMD; // token for any |
| static const char *NONE_CMD; // token for none |
| static const char *HWC_CMD; // token for all HWC |
| static const char *BIT_CMD; // token for any bit-derived metric |
| |
| private: |
| static const int user_no; // the last user command |
| static const int hidden_no; // the last hidden command |
| static const int command_no; // the last parsable command |
| |
| static void init_desc (); |
| static char *fmt_help (int nc, char head); |
| }; |
| |
| // Analyzer display tabs |
| struct DispTab |
| { |
| DispTab (int ntype, int num, bool vis, CmdType token) |
| { |
| type = ntype; |
| order = num; |
| visible = vis; |
| available = true; |
| cmdtoken = token; |
| } |
| |
| void setAvailability (bool val) { available = val; } |
| |
| int type; // Display type |
| int order; // Order in which tabs should appear in GUI |
| bool visible; // Is Tab visible |
| bool available; // Is tab available for this experiment |
| CmdType cmdtoken; // command token |
| int param; // command parameter (used for memory space) |
| }; |
| |
| #endif /* ! _COMMAND_H */ |