|  | /* 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 _SETTINGS_H | 
|  | #define _SETTINGS_H | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <regex.h> | 
|  |  | 
|  | #include "gp-defs.h" | 
|  | #include "Histable.h" | 
|  | #include "MemorySpace.h" | 
|  | #include "Metric.h" | 
|  | #include "dbe_types.h" | 
|  | #include "dbe_structs.h" | 
|  | #include "enums.h" | 
|  | #include "vec.h" | 
|  |  | 
|  | class Emsgqueue; | 
|  | class Application; | 
|  |  | 
|  | struct DispTab; | 
|  |  | 
|  | // Settings object | 
|  |  | 
|  | class Settings | 
|  | { | 
|  | public: | 
|  | friend class DbeView; | 
|  | friend class DbeSession; | 
|  |  | 
|  | Settings (Application *_app); | 
|  | Settings (Settings *_settings); | 
|  | virtual ~Settings (); | 
|  | void read_rc (bool ipc_or_rdt_mode);  // read all rc files | 
|  | char *read_rc (char *path);           // read rc file | 
|  | void buildMasterTabList ();       // build list of Tabs that can be invoked | 
|  | void updateTabAvailability ();    // update for datamode, leaklist | 
|  | Cmd_status set_name_format (char *str); // from a string | 
|  |  | 
|  | Vector<DispTab*> * | 
|  | get_TabList ()        // Get the list of tabs for this view | 
|  | { | 
|  | return tab_list; | 
|  | } | 
|  |  | 
|  | Vector<bool> * | 
|  | get_MemTabState ()    // Get the list and order of memory tabs for this view | 
|  | { | 
|  | return mem_tab_state; | 
|  | } | 
|  |  | 
|  | Vector<int> * | 
|  | get_MemTabOrder () | 
|  | { | 
|  | return mem_tab_order; | 
|  | } | 
|  |  | 
|  | // Set the list of memory tabs for this view | 
|  | void set_MemTabState (Vector<bool>*sel); | 
|  |  | 
|  | // add a newly-defined memory object tab | 
|  | void mobj_define (MemObjType_t *, bool state); | 
|  |  | 
|  | // add a newly-defined index object tab | 
|  | void indxobj_define (int type, bool state); | 
|  |  | 
|  | Vector<bool> * | 
|  | get_IndxTabState ()   // Get the list and order of index tabs for this view | 
|  | { | 
|  | return indx_tab_state; | 
|  | } | 
|  |  | 
|  | Vector<int> * | 
|  | get_IndxTabOrder () | 
|  | { | 
|  | return indx_tab_order; | 
|  | } | 
|  |  | 
|  | // Set the list of index tabs for this view | 
|  | void set_IndxTabState (Vector<bool>*sel); | 
|  |  | 
|  | void | 
|  | set_name_format (int fname_fmt, bool soname_fmt) | 
|  | { | 
|  | name_format = Histable::make_fmt (fname_fmt, soname_fmt); | 
|  | } | 
|  |  | 
|  | Histable::NameFormat | 
|  | get_name_format () | 
|  | { | 
|  | return name_format; | 
|  | } | 
|  |  | 
|  | // public methods for setting and accessing the settings | 
|  | Cmd_status set_view_mode (char *str, bool rc); // from a string | 
|  |  | 
|  | void | 
|  | set_view_mode (VMode mode) | 
|  | { | 
|  | view_mode = mode; | 
|  | } | 
|  |  | 
|  | VMode | 
|  | get_view_mode () | 
|  | { | 
|  | return view_mode; | 
|  | } | 
|  |  | 
|  | // set the en_desc expression/on/off | 
|  | Cmd_status set_en_desc (char *str, bool rc); // from a string | 
|  | // check if the lineage or the target name matches the en_desc expression | 
|  | bool check_en_desc (const char *lineage, const char *targname); | 
|  |  | 
|  | char *set_limit (char *str, bool rc); // from a string | 
|  |  | 
|  | char * | 
|  | set_limit (int _limit) | 
|  | { | 
|  | limit = _limit; | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_limit () | 
|  | { | 
|  | return limit; | 
|  | } | 
|  |  | 
|  | char *set_printmode (char *_pmode); | 
|  |  | 
|  | // processing compiler commentary visibility bits | 
|  | Cmd_status proc_compcom (const char *cmd, bool isSrc, bool rc); | 
|  |  | 
|  | // return any error string from processing visibility settings | 
|  | char *get_compcom_errstr (Cmd_status status, const char *cmd); | 
|  |  | 
|  | // methods for setting and getting strings, and individual settings | 
|  |  | 
|  | char * | 
|  | get_str_scompcom () | 
|  | { | 
|  | return str_scompcom; | 
|  | } | 
|  |  | 
|  | char * | 
|  | get_str_dcompcom () | 
|  | { | 
|  | return str_dcompcom; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_src_compcom () | 
|  | { | 
|  | return src_compcom; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_dis_compcom () | 
|  | { | 
|  | return dis_compcom; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_cmpline_visible (bool v) | 
|  | { | 
|  | cmpline_visible = v; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_funcline_visible (bool v) | 
|  | { | 
|  | funcline_visible = v; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_src_visible (int v) | 
|  | { | 
|  | src_visible = v; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_src_visible () | 
|  | { | 
|  | return src_visible; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_srcmetric_visible (bool v) | 
|  | { | 
|  | srcmetric_visible = v; | 
|  | } | 
|  |  | 
|  | bool | 
|  | get_srcmetric_visible () | 
|  | { | 
|  | return srcmetric_visible; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_hex_visible (bool v) | 
|  | { | 
|  | hex_visible = v; | 
|  | } | 
|  |  | 
|  | bool | 
|  | get_hex_visible () | 
|  | { | 
|  | return hex_visible; | 
|  | } | 
|  |  | 
|  | // processing and accessing the threshold settings | 
|  | Cmd_status proc_thresh (char *cmd, bool isSrc, bool rc); | 
|  |  | 
|  | int | 
|  | get_thresh_src () | 
|  | { | 
|  | return threshold_src; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_thresh_dis () | 
|  | { | 
|  | return threshold_dis; | 
|  | } | 
|  |  | 
|  | // process a tlmode setting | 
|  | Cmd_status proc_tlmode (char *cmd, bool rc); | 
|  |  | 
|  | void | 
|  | set_tlmode (int _tlmode) | 
|  | { | 
|  | tlmode = _tlmode; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_tlmode () | 
|  | { | 
|  | return tlmode; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_stack_align (int _stack_align) | 
|  | { | 
|  | stack_align = _stack_align; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_stack_align () | 
|  | { | 
|  | return stack_align; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_stack_depth (int _stack_depth) | 
|  | { | 
|  | stack_depth = _stack_depth; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_stack_depth () | 
|  | { | 
|  | return stack_depth; | 
|  | } | 
|  |  | 
|  | // process a tabs setting: called when the tab list is requested | 
|  | Cmd_status proc_tabs (bool _rdtMode); | 
|  |  | 
|  | Cmd_status proc_tldata (const char *cmd, bool rc); // process a tldata setting | 
|  | void set_tldata (const char* tldata_string); | 
|  | char *get_tldata (); | 
|  |  | 
|  | char * | 
|  | get_default_metrics () | 
|  | { | 
|  | return str_dmetrics; | 
|  | } | 
|  |  | 
|  | char * | 
|  | get_default_sort () | 
|  | { | 
|  | return str_dsort; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_ignore_no_xhwcprof (bool v)   // ignore no xhwcprof errors for dataspace | 
|  | { | 
|  | ignore_no_xhwcprof = v; | 
|  | } | 
|  |  | 
|  | bool | 
|  | get_ignore_no_xhwcprof () | 
|  | { | 
|  | return ignore_no_xhwcprof; | 
|  | } | 
|  |  | 
|  | void | 
|  | set_ignore_fs_warn (bool v)   // ignore filesystem warnings in experiments | 
|  | { | 
|  | ignore_fs_warn = v; | 
|  | } | 
|  |  | 
|  | bool | 
|  | get_ignore_fs_warn () | 
|  | { | 
|  | return ignore_fs_warn; | 
|  | } | 
|  |  | 
|  | // add a pathmap | 
|  | static char *add_pathmap (Vector<pathmap_t*> *v, const char *from, const char *to); | 
|  | void set_pathmaps (Vector<pathmap_t*> *newPathMap); | 
|  |  | 
|  | // add a LoadObject expansion setting | 
|  | bool set_libexpand (char *, enum LibExpand, bool); | 
|  | enum LibExpand get_lo_setting (char *); | 
|  |  | 
|  | // set LoadObject expansion defaults back to .rc specifications | 
|  | bool set_libdefaults (); | 
|  |  | 
|  | void | 
|  | set_compare_mode (int mode) | 
|  | { | 
|  | compare_mode = mode; | 
|  | } | 
|  |  | 
|  | int | 
|  | get_compare_mode () | 
|  | { | 
|  | return compare_mode; | 
|  | } | 
|  |  | 
|  | char * | 
|  | get_machinemodel () | 
|  | { | 
|  | return dbe_strdup (machinemodel); | 
|  | } | 
|  |  | 
|  | char *preload_libdirs; | 
|  |  | 
|  | protected: // data | 
|  | Application *app; | 
|  |  | 
|  | // default strings from .rc file | 
|  | char *str_vmode; | 
|  | char *str_en_desc; | 
|  | char *str_datamode; | 
|  | char *str_scompcom; | 
|  | char *str_sthresh; | 
|  | char *str_dcompcom; | 
|  | char *str_dthresh; | 
|  | char *str_dmetrics; | 
|  | char *str_dsort; | 
|  | char *str_tlmode; | 
|  | char *str_tldata; | 
|  | char *str_tabs; | 
|  | char *str_rtabs; | 
|  | char *str_search_path; | 
|  | char *str_name_format; | 
|  | char *str_limit; | 
|  | char *str_printmode; | 
|  | char *str_compare; | 
|  |  | 
|  | bool tabs_processed; | 
|  |  | 
|  | // Processed settings | 
|  | bool en_desc;             // controls for reading descendant processes | 
|  | char * en_desc_usr;       // selective descendants: user specificaton | 
|  | regex_t * en_desc_cmp;    // selective descendants: compiled specification | 
|  | Histable::NameFormat name_format; // long/short/mangled naming for C++/Java | 
|  | VMode view_mode;          // Java mode | 
|  | int src_compcom;          // compiler commentary visibility for anno-src | 
|  | int dis_compcom;          // compiler commentary visibility for anno-dis | 
|  | int threshold_src;        // threshold for anno-src | 
|  | int threshold_dis;        // threshold for anno-dis | 
|  | int cmpline_visible;      // show compile-line flags | 
|  | int funcline_visible;     // show compile-line flags | 
|  | int src_visible;          // show source in disasm | 
|  | bool srcmetric_visible;   // show metrics for source in disasm | 
|  | bool hex_visible;         // show hex code in disasm | 
|  | char* tldata;             // timeline data type string | 
|  | int tlmode;               // timeline mode for bars | 
|  | int stack_align;          // timeline stack alignment | 
|  | int stack_depth;          // timeline stack depth | 
|  | int limit;                // print limit | 
|  | enum PrintMode print_mode;// print mode | 
|  | char print_delim;         // the delimiter, if print mode = PM_DELIM_SEP_LIST | 
|  | int compare_mode;         // compare mode | 
|  |  | 
|  | char *machinemodel; // machine model for Memory Objects | 
|  |  | 
|  | bool ignore_no_xhwcprof; // ignore no -xhwcprof data in dataspace | 
|  | bool ignore_fs_warn; // ignore file-system recording warning | 
|  |  | 
|  | void set_rc (const char *path, bool msg, Emsgqueue *commentq, | 
|  | bool override, bool ipc_or_rdt_mode = false); | 
|  |  | 
|  | Vector<DispTab*> *tab_list; | 
|  | Vector<pathmap_t*> *pathmaps; | 
|  | Vector<lo_expand_t*> *lo_expands; | 
|  | enum LibExpand lo_expand_default; | 
|  | bool is_loexpand_default; | 
|  | Vector<bool> *mem_tab_state; | 
|  | Vector<int> *mem_tab_order; | 
|  | Vector<bool> *indx_tab_state; | 
|  | Vector<int> *indx_tab_order; | 
|  | }; | 
|  |  | 
|  | #endif /* ! _SETTINGS_H */ |