/* Copyright (C) 2021-2023 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 #include #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 */