Wolfgang Thallergcc16 merge934c3885 months agoHistory
222 lines · 5.7 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 _DBE_FUNCTION_H#define _DBE_FUNCTION_H // A Function object represents an individual function in a .o file. #include "util.h"#include "Histable.h"#include "SourceFile.h" class Module;class Symbol;class InlinedSubr;struct SrcInfo;struct PCInfo;template <class ITEM> class Vector; const uint64_t FUNC_NO_SAVE = (uint64_t) - 1;const uint64_t FUNC_ROOT = (uint64_t) - 2; enum{  FUNC_FLAG_PLT = 1,  FUNC_FLAG_DYNAMIC = 2,  FUNC_FLAG_RESDER = 4, // set if derived function resolution has been done  FUNC_FLAG_NO_OFFSET = 8, // set if disassembly should not show offset from function  FUNC_FLAG_SIMULATED = 16, // not a real function like <Total>, <Unknown>, etc.  FUNC_FLAG_NATIVE = 32, // no byte code for JMethod  FUNC_NOT_JNI = 64, // a function name is not "Java_..."  FUNC_JNI_CHECKED = 128 // already checked for "Java_..."}; const int MAXDBUF = 32768; // the longest demangled name handled class Function : public Histable{public:   enum MPFuncTypes  {    MPF_DOALL,    MPF_PAR,    MPF_SECT,    MPF_TASK,    MPF_CLONE,    MPF_OUTL  };   Function (uint64_t _id);  virtual ~Function ();   virtual uint64_t get_addr ();  virtual char *get_name (NameFormat = NA);  virtual Vector<Histable*> *get_comparable_objs ();  virtual void set_name (char *);   // Set the demangled name  virtual Histable *convertto (Histable_type type, Histable *obj = NULL);   virtual Histable_type  get_type ()  {    return FUNCTION;  };   virtual int64_t  get_size ()  {    return size;  };   void set_comparable_name (const char *string);  void set_mangled_name (const char *string);  void set_match_name (const char *string);   // Find any derived functions, and set their derivedNode  void findDerivedFunctions ();  void findKrakatoaDerivedFunctions ();  void add_PC_info (uint64_t offset, int lineno, SourceFile *cur_src = NULL);  void pushSrcFile (SourceFile* source, int lineno);  SourceFile *popSrcFile ();  int func_cmp (Function *func, SourceFile *srcContext = NULL);  void copy_PCInfo (Function *f);  DbeLine *mapPCtoLine (uint64_t addr, SourceFile *src = NULL);  DbeInstr *mapLineToPc (DbeLine *dbeLine);  DbeInstr *find_dbeinstr (int flag, uint64_t addr);  DbeInstr *create_hide_instr (DbeInstr *instr);  uint64_t find_previous_addr (uint64_t addr);  SourceFile *getDefSrc ();  char *getDefSrcName ();  void setDefSrc (SourceFile *sf);  void setLineFirst (int lineno);  Vector<SourceFile*> *get_sources ();   char *  get_mangled_name ()  {    return mangled_name;  }   char *  get_match_name ()  {    return match_name;  }   inline Function *  cardinal ()  {    return alias ? alias : this;  }   unsigned int flags;       // FUNC_FLAG_*  Module *module;           // pointer to module containing source  int line_first;           // range of line numbers for function  int line_last;  int64_t size;             // size of the function in bytes  uint64_t save_addr;       // used for detection of leaf routines  DbeInstr *derivedNode;    // If derived from another function  bool isOutlineFunction;   // if outline (save assumed)  unsigned int chksum;      // check sum of instructions  char *img_fname;          // file containing function image  uint64_t img_offset;      // file offset of the image  SourceFile *curr_srcfile;  DbeLine *defaultDbeLine;  Function *usrfunc;        // User function  Function *alias;  bool isUsed;  bool isHideFunc;  SourceFile *def_source;  Function *indexStabsLink; // correspondent function for the .o file  Symbol *elfSym;  InlinedSubr *inlinedSubr;  int inlinedSubrCnt; private:  DbeInstr **instHTable;    // hash table for DbeInstr  int *addrIndexHTable;     // hash table for addrs index  void setSource ();  PCInfo *lookup_PCInfo (uint64_t offset);  SrcInfo *new_srcInfo ();   char *mangled_name;  char *match_name;      // mangled name, with globalization stripped  char *comparable_name; // demangled name, with globalization and blanks stripped  char *name_buf;  NameFormat current_name_format;  Vector<PCInfo*> *linetab;  Vector<DbeInstr*> *instrs;  Vector<uint64_t> *addrs;  uint64_t instr_id;  Vector<SourceFile*> *sources;  SrcInfo *curr_srcinfo;    // the current source stack of the function  SrcInfo *srcinfo_list;    // master list for SrcInfo}; class JMethod : public Function{public:  JMethod (uint64_t _id);  virtual ~JMethod ();  virtual void set_name (char *);  virtual uint64_t get_addr ();   void  set_addr (Vaddr _addr)  {    addr = _addr;  }   uint64_t  get_mid ()  {    return mid;  }   void  set_mid (uint64_t _mid)  {    mid = _mid;  }   char *  get_signature ()  {    return signature;  }   void  set_signature (const char *s)  {    signature = dbe_strdup (s);  }   // Returns true if func's name matches method's as its JNI implementation  bool jni_match (Function *func); private:  uint64_t mid;  Vaddr addr;  char *signature;  Function *jni_function;}; #endif /* _DBE_FUNCTION_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