/* Copyright (C) 2021-2026 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 staticclass 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 tabsstruct 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 */
/* Copyright (C) 2021-2026 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 */