Wolfgang Thallergcc16 merge934c3885 months agoHistory
395 lines · 14.1 KB · C
RawDownload
/* 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.  */ /* This file describes the data structures used to control * data collection; it is used by various commands in the MPMT * tree, and is also shared with dbx.  Care should be taken * to ensure that both the mpmt and dbx builds continue.  * To remove any APIs or change any enum cases: * * 1.  Make the changes in mpmt, and preserve the old APIs *	as scaffolding and any old enum values as #defines. * * 2.  Add the new APIs and new cases to dbx, remove the *	old ones. * * 3.  Remove the old API scaffolding and enum values here * */ #ifndef	_COLLCTRL_H#define	_COLLCTRL_H #include "hwcentry.h"#include "cc_libcollector.h" /*---------------------------------------------------------------------------*/ /* class */ typedef struct {    int min;    int res;    int max;    int hival;    int normval;    int lowval;} clk_params_t; #define PROFINT_HIGH 997#define PROFINT_NORM 10007#define PROFINT_LOW 100003 #define PROFINT_MIN 500#define PROFINT_MAX 1000000 class Coll_Ctrl {public:   /* _interactive is 1 for dbx, 0 for collect */  Coll_Ctrl(int _interactive = 0, bool _defHWC = false, bool _kernelHWC = false);  ~Coll_Ctrl();   Coll_Ctrl(Coll_Ctrl *cc);       /* constructor for duplicate */  char *check_expt(char **);      /* check the experiment directory */  char *setup_experiment();       /* set up the experiment directory, etc. */  void close_expt();  void interrupt();               /* the user interrupts experiment */  void delete_expt();   /* enable/disable the experiment */  char *enable_expt();  void disable_expt()     { enabled = 0; };  int isenabled()         { return enabled; };   /* check for active experiment */  int isopened()          { return opened; };   /* set the parameters for clock-profiling */  void set_clk_params(int min, int res, int max, int hi, int norm, int lo);  char *set_clkprof(const char *valptr, char **warn);  char *reset_clkprof(int val); /* called if profiler must reset value */  int get_clk_min()       { return clk_params.min; };  int get_clk_max()       { return clk_params.max; };  int get_clk_res()       { return clk_params.res; };  int get_clkprof_mode()  { return clkprof_enabled; };  int get_clkprof_timer() { return clkprof_timer; };   /* set the parameters for synchronization tracing */  char *set_synctrace(const char *valptr);  int get_synctrace_mode()    { return synctrace_enabled; };  int get_synctrace_thresh()  { return synctrace_thresh; };  int get_synctrace_scope()   { return synctrace_scope; };   /* set the parameters for heap tracing */  char *set_heaptrace(const char *);  char *get_heaptrace_mode()  { return heaptrace_mode; };   /* set the parameters for I/O tracing */  char *set_iotrace(const char *);  int get_iotrace_mode()      { return iotrace_enabled; };   /* set the parameters for HW counting */  void setup_hwc();  char *set_hwcstring(const char *str, char **warn);  char *add_hwcstring(const char *str, char **warn);  char *add_default_hwcstring(const char *str, char **warn, bool add, bool forKernel = false);  void set_hwcdefault();  void disable_hwc();  int get_hwc_cnt()       { return hwcprof_enabled_cnt; };  int get_hwc_mode()      { return hwcprof_enabled_cnt ? 1 : 0; };  char *get_hwc_string()  { return hwc_string; };   Hwcentry *  get_hwc_entry (int n)  {    if (n < 0 || n >= hwcprof_enabled_cnt)      return 0;    return &hwctr[n];  };   void hwcentry_dup (Hwcentry *, Hwcentry *);  char *get_hwc_counter (int n) { return get_hwc_entry (n)->name; };   /* set the parameters for count data */  char *set_count (const char *);  int get_count ()              { return count_enabled; };  void set_Iflag ()             { Iflag = 1; };  void set_Nflag ()             { Nflag = 1; };   /* set time interval for attach with dbx timed collection */  /* also used for er_kernel */  char *set_time_run (const char *);  int get_time_run (void)       { return time_run; };  int get_start_delay (void)    { return start_delay; };   /* set pid for attach with dbx to collect data */  char *set_attach_pid (char *);  int get_attach_pid (void)     { return attach_pid; };   /* set java mode, "on" = yes; "off" = no; anthing else implies   *	yes, and is the path to the java to use   *	java_mode is returned as zero for off, one for on   *	java_default is returned as zero for explicitly set, one for defaulted on   */  char *set_java_mode (const char *);  int get_java_mode ()          { return java_mode; };  int get_java_default ()       { return java_default; };   /* setting Java path explicitly */  char *set_java_path (const char *);  char *get_java_path ()        { return java_path; };   /* set additional arguments for Java invocation */  char *set_java_args (char *);  char *get_java_args ()        { return java_args; };  int get_java_arg_cnt ()       { return njava_args; };   /* set load-object archive mode, 0 = no; other = yes */  char *set_archive_mode (const char *);  char *get_archive_mode ()     { return archive_mode; };   /* set follow-descendants mode, 0 = no; other = yes */  char *set_follow_mode (const char *);  Follow_type get_follow_mode () { return follow_mode; };  int get_follow_default ()     { return follow_default; };  char *get_follow_usr_spec ()  { return follow_spec_usr; };  char *get_follow_cmp_spec ()  { return follow_spec_cmp; };   /* set profile idle cpus mode, 1 = no; 0 = yes */  char *set_prof_idle (const char *);  int get_prof_idle ()          { return prof_idle; };   /* set debug more, 1 = yes; other = no */  /* if set, target will be set to halt at exit from exec */  char *set_debug_mode (int);  int get_debug_mode ()         { return debug_mode; };   /* find a signal from a string */  int find_sig (const char *);  /* find a signal name from a signal value */  char *find_signal_name (int signal);   /* set the pauseresume (delayed initialization) signal */  char *set_pauseresume_signal (int, int);  int get_pauseresume_signal () { return pauseresume_sig; };  int get_pauseresume_pause ()  { return pauseresume_pause; };   /* set the sample signal */  char *set_sample_signal (int);  int get_sample_signal ()      { return sample_sig; };   /* set the periodic sampling */  char *set_sample_period (const char *);  int get_sample_period (void)  { return sample_period; };   /* set experiment size limit */  char *set_size_limit (const char *);  int get_size_limit (void)     { return size_limit; };   /* naming methods */  /* set the target executable name */  int set_target (char *);  char *get_target ()           { return target_name; };   /* set the experiment name */  void set_default_stem (const char *);  char *set_expt (const char *, char **, bool);  char *get_expt ()             { return expt_name; };   /* set the experiment directory */  char *set_directory (char *, char **);   char *get_directory ()        { return udir_name ? udir_name : store_dir; };   /* return the real experiment ptr file name */  char *get_experiment ()       { return store_ptr; };  char *update_expt_name (bool verbose = true, bool ckonly = false, bool newname = false);   /* remove the experiment */  void remove_exp_dir ();   /* return the data descriptor */  char *  get_data_desc ()  {    return data_desc;  };   /* set the experiment group */  char *set_group (char *);  char *get_group ()            { return expt_group; };   /* return the experiment settings as a string */  char *show (int); /* full show */  char *show_expt (); /* short form */   /* return an argv array to compose a "collect" command from settings */  char **get_collect_args ();   /* determine characteristics of system */  char *get_node_name ()        { return node_name; };  long get_ncpus ()             { return ncpus; };  int get_cpu_clk_freq ()       { return cpu_clk_freq; };     /* disable warning about non-local filesystems */  void set_nofswarn ()          { nofswarn = 1; };   //========== Special functions to communicate with the Collector GUI ==========//  char *get (char *);   /* get control's value */  char *set (char *, const char *); /* set control's value */  char *unset (char *); /* reset control's value to its default */  void set_project_home (char *);  char *create_exp_dir (); private:  int interactive;      /* 1 - dbx, 0 - collect */  bool defHWC;          /* true if default HWC experiment should be run */  bool kernelHWC;       /* T if default HWC counters are for kernel profiling */  int opened;           /* T if an experiment is opened */  int enabled;          /* T if an experiment is enabled */  volatile int uinterrupt; /* set if interrupt from user */   /* experiment/machine characteristics */  char *node_name;      /* name of machine on which experiment is run */  long ncpus;           /* number of online CPUs */  int cpu_clk_freq;     /* chip clock (MHz.), as reported from processor_info */  long sys_resolution;  /* system clock resolution */  int sample_period;    /* period for sampling, seconds */  int sample_default;    /* if period for sampling set by default */  int size_limit;       /* experiment size limit, MB */  long npages;          /* number of pages configured */  long page_size;       /* size of system page */  clk_params_t clk_params;   /* user specification of name */  /*  user may specify both uexpt_name and udir_name   *	if uexpt_name is absolute path, udir_name is ignored, with warning   *	otherwise, udir_name is prepended to uexpt_name   *   *	if uexpt_name is of the form: <dir>/zzzz.nnn.er, where nnn is numeric,   *	nnn will be reset to one greater than the the highest experiment   *	  with a name of the same form.   */  char *default_stem;   /* default stem for experiment name */  char *uexpt_name;     /* suggested experiment name */  char *expt_name;      /* experiment name, after defaulting */  char *expt_dir;       /* directory part of suggested experiment name */  char *base_name;      /* basename of suggested experiment name */  char *udir_name;      /* user name of directory for data */   char *store_dir;      /* directory to contain experiment dir. */  char *prev_store_dir; /* previously set store directory */  char *store_ptr;      /* experiment pointer file */  char *expt_group;     /* name of experiment group, if any */  char *project_home;   /* argv[0] */   char *target_name;    /* target executable name */  char *data_desc;      /* string describing the data to be collected */  char *lockname;       /* name of directory lock file */  int lockfd;           /* fd of open lock file */   int nofswarn;         /* if 1, don't warn of filesystem */  int expno;            /* number in <stem>.<expno>.er */   /* T if an target is to be left for debugger attach */  int debug_mode;   /* clock-profiling controls */  /* T if clock-based profiling */  int clkprof_enabled;   /* T if on by default, rather than explicit setting */  int clkprof_default;   /* value for timer, microseconds. */  int clkprof_timer; // adjusted clock profiling interval  int clkprof_timer_target; // desired clock profiling interval   /* HW counter-profiling controls */  /* >0 if HW counter-based profiling */  int hwcprof_default;  int hwcprof_enabled_cnt;  char *hwc_string;  Hwcentry hwctr[MAX_PICS];   int synctrace_enabled;    /* T if synchronization tracing */  /*  sync trace threshold value, microsec. */  /* if 0, record all */  /* if <0, calibrate */  int synctrace_thresh;   /* sync trace scope -- a bit mask */  /* 	definitions in data_pckts.h */  int synctrace_scope;   char *heaptrace_mode; /* NULL, or on, or off, or range */  int iotrace_enabled;  /* T if I/O tracing */   /* count controls */  /* 1 if counting is enabled; -1 if count static is enabled */  int count_enabled;  int Iflag;    /* specify bit output directory -- only with count_enabled */  int Nflag;    /* specify bit library to ignore -- only with count_enabled */   /* pid, if -P <pid> is invoked for attach with dbx */  int attach_pid;   /* time_run -- non-zero if timed execution request (dbx/er_kernel) */  int time_run;  int start_delay;   /* T if Java profiling is requested */  int java_mode;  int java_default;  char *java_path;  char *java_args;  int njava_args;   /* whether/how following-descendants is requested */  Follow_type follow_mode;  int follow_default;  char *follow_spec_usr;    // user's selective follow spec  char *follow_spec_cmp;    // compiled selective follow spec  int prof_idle;            // whether profiling idle cpus is requested  char *archive_mode;       // how load-objects archiving is requested   // signals to control pause-resume (delayed initialization) and samples  int pauseresume_sig;      // for pause-resume signal -- delayed initialization  int pauseresume_pause;    // 1 if pauseresume and start paused; 0 if not  int sample_sig;           // to trigger sample  char *report_signal_conflict (int);  char *check_consistency ();   // check the experiment settings for consistency  void determine_profile_params ();  char *preprocess_names ();  char *get_exp_name (const char *);  void build_data_desc ();  char *check_group ();  char *join_group ();  void free_hwc_fields (Hwcentry *tmpctr);   // propagates clkprof_timer change to Hwcentry hwctr[]  void set_clkprof_timer_target (int microseconds);  void adjust_clkprof_timer (int microseconds);  hrtime_t clkprof_timer_2_hwcentry_min_time (int clkprof_microseconds);}; #endif /* !_COLLCTRL_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t