| /* 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 _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 */ |