mirror of
https://github.com/autc04/Retro68.git
synced 2024-06-07 13:33:06 +00:00
287 lines
6.2 KiB
C++
287 lines
6.2 KiB
C++
/* Copyright (C) 2021 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 */
|