Wolfgang Thallergcc16 merge934c3885 months agoHistory
284 lines · 8.3 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.  */ #ifndef _MODULE_H#define _MODULE_H // A Module object represents a .o file that was used to build up a segement.//	Its main function is to compute source and disassembly annotations// Text reordering and/or function outlining imply that a module may//	not be contiguous. #include "Histable.h"#include "Hist_data.h" #define MOD_FLAG_UNKNOWN 0x01 class LoadObject;class MetricList;class ComC;class Disasm;class Hist_data;class Stabs;class SourceFile;class DataObject;class JMethod;template <class ITEM> class Vector; class InlinedSubr{public:  InlinedSubr ();  DbeLine *dbeLine;  Function *func;  char *fname;  uint64_t low_pc;  uint64_t high_pc;  int level;   bool  contains (InlinedSubr *p)  {    return low_pc <= p->low_pc && high_pc >= p->high_pc;  }   bool  contains (uint64_t pc)  {    return low_pc <= pc && high_pc > pc;  }}; class Module : public HistableFile{public:  // Annotated Source or Disassembly  enum Anno_Errors  {    AE_OK,    AE_NOTREAD,    AE_NOSRC,    AE_NOOBJ,    AE_NOLOBJ,    AE_NOSTABS,    AE_NOSYMTAB,    AE_TIMESRC,    AE_TIMEDIS,    AE_TIMESTABS,    AE_TIMESTABS_DIFF,    AE_OTHER  };   // The following enums are duplicated in Java  enum Anno_Types  {    AT_LIST = 0,    AT_SRC,    AT_SRC_ONLY,    AT_DIS,    AT_COM,    AT_QUOTE,    AT_FUNC,    AT_EMPTY,    AT_DIS_ONLY  };   Module ();  virtual ~Module ();  virtual int64_t get_size ();  virtual void set_name (char *str);  virtual Vector<Histable*> *get_comparable_objs ();  virtual int readFile ();   virtual Histable_type  get_type ()  {    return MODULE;  }   inline Anno_Errors  get_status ()  {    return status;  }   inline void  set_file_name (char *fnm)  {    free (file_name);    file_name = fnm;  }   // get error string  char *anno_str (char *fnm = NULL);   // generate annotated source/disassembly data  Hist_data *get_data (DbeView *dbev, MetricList *mlist,		       Histable::Type type, TValue *ftotal, SourceFile *srcFile,		       Function *func, Vector<int> *marks, int threshold,		       int vis_bits, int src_visible, bool hex_visible,		       bool func_scope, bool src_only,		       Vector<int_pair_t> *marks2d = NULL,		       Vector<int_pair_t> *marks2d_inc = NULL);   Vector<uint64_t> *getAddrs (Function *func);  SourceFile *setIncludeFile (char *includeFile);   SourceFile *  getIncludeFile ()  {    return curr_inc;  }   SourceFile *  getMainSrc ()  {    return main_source;  }   char *  getResolvedObjectPath ()  {    return stabsPath ? stabsPath : get_name ();  }   char *  getDebugPath ()  {    setFile ();    return stabsPath;  }   void read_stabs (bool all = true);  void dump_dataobjects (FILE *out);  DataObject *get_dobj (uint32_t dtype_id);  void reset_datatypes ();  void read_hwcprof_info ();  bool is_fortran ();  SourceFile *findSource (const char *fname, bool create);  bool openStabs (bool all = true);  LoadObject *createLoadObject (const char *lo_name);  JMethod *find_jmethod (const char *nm, const char *sig);   unsigned int flags;               // flags used for marking traversals  Sp_lang_code lang_code;           // What is source lang. in module  char *file_name;                  // Full path to actual source file  Vector<Function*> *functions;     // Unordered list of functions  LoadObject *loadobject;           // Parent loadobject  LoadObject *dot_o_file;           // The .o file with debug information  unsigned fragmented;              // -xF used when compiling module  int real_timestamp;               // Linked timestamp from N_OPT stab  int curr_timestamp;               // Current object timestamp from N_OPT stab  char *comp_flags;                 // compiler flags used to compile module  char *comp_dir;                   // directory used to compile module  char *linkerStabName;             // Name from 'N_UNDF' stab  Stabs *objStabs;                  // stabs of object file  bool readStabs;  bool hasStabs;  bool hasDwarf;  uint64_t hdrOffset;               // offset in .debug_info  unsigned hwcprof;                 // hwcprof info status  Vector<inst_info_t*> *infoList;   // merged list  Vector<memop_info_t*> ldMemops;   // load instructions  Vector<memop_info_t*> stMemops;   // store instructions  Vector<memop_info_t*> pfMemops;   // prefetch instructions  Vector<target_info_t*> bTargets;  // branch targets  Vector<datatype_t*> *datatypes;   // object type descriptors  Vector<SourceFile*> *includes;  Module *indexStabsLink;           // correspondent module for the .o file  InlinedSubr *inlinedSubr; protected:  void removeStabsTmp (); // Remove temporary *.o (got from *.a)   // Check timestamp, warn users if src/dis/stabs later than exp.  Anno_Errors checkTimeStamp (bool chkDis);   // Set paths for reading Stabs and Symbols  bool read_ar (int ar, int obj, char *obj_base);  bool setFile ();   // Open appropriate symbol tables, construct set of PC ranges,  //	and maps to source lines for each PC  Stabs *openDebugInfo ();   // Construct PC index table  bool openDisPC ();   // Compute data--scan data to compute metrics per-src-line/dis-line  bool computeMetrics (DbeView *dbev, Function *func, MetricList *mlist,		       Histable::Type type, bool src_metric,		       bool func_scope, SourceFile *source);  void init_line ();  void init_index (Hist_data *witems, int &wlindex, int &wmsize, int &wmindex);   void set_src_data (Function *func, int vis_bits, int cmpline_visible,		     int funcline_visible);  void set_dis_data (Function *func, int vis_bits, int cmpline_visible,		     int src_visible, bool hex_vis, bool func_scope,		     int funcline_visible);  void set_src (Anno_Types type, DbeLine *dbeline);  void set_dis (DbeInstr *instr, Anno_Types type, bool nextFile, char *dis_str);  void set_MPSlave ();  void set_one (Hist_data::HistItem *org_item, Anno_Types type, const char *text);  void set_ComCom (int vis_bits);   virtual char *get_disasm (uint64_t inst_address, uint64_t end_address,			    uint64_t start_address, uint64_t f_offset,			    int64_t &inst_size);   Anno_Errors status;  Anno_Errors openSourceFlag;  bool hexVisible;          // show hex code in disasm  time_t disMTime;          // Creating time for disassembly  time_t stabsMTime;        // Creating time for stabs  SourceFile *main_source;  SourceFile *curr_inc;     // pointer to include file or NULL  SourceFile *srcContext;  Vector<ComC*> *comComs;   // table of compiler comments  Disasm *disasm;  Hist_data *src_items;  Hist_data *dis_items;  Hist_data *data_items;  DbeView * cur_dbev;  TValue *total;  TValue *maximum;  TValue *maximum_inc;  TValue *empty;  int name_idx;         // index of name metric in list for src/dis  int size_index;       // index of size metric in list for src/dis  int addr_index;       // index of address metric in list for src/dis   int curline;          // line# of next source line to be processed  int cindex, cline;    // index and src line of next compiler-comment  int sindex, sline;    // index and src line of next item in src_items  int dindex;  DbeInstr *daddr;      // pointer to next DbeInstr with metrics  int mindex;           // MP index and src line of next metric-value  int mline;            // MP line to be processed by source   char *disPath;        // path for disassembly  char *stabsPath;      // path for reading stabs  char *stabsTmp;       // temporary *.o from *.a  char *disName;        // library/path for disassembly  char *stabsName;      // library/path for stabs}; #endif /* _MODULE_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