1*c42dbd0eSchristos /* Copyright (C) 2021 Free Software Foundation, Inc. 2*c42dbd0eSchristos Contributed by Oracle. 3*c42dbd0eSchristos 4*c42dbd0eSchristos This file is part of GNU Binutils. 5*c42dbd0eSchristos 6*c42dbd0eSchristos This program is free software; you can redistribute it and/or modify 7*c42dbd0eSchristos it under the terms of the GNU General Public License as published by 8*c42dbd0eSchristos the Free Software Foundation; either version 3, or (at your option) 9*c42dbd0eSchristos any later version. 10*c42dbd0eSchristos 11*c42dbd0eSchristos This program is distributed in the hope that it will be useful, 12*c42dbd0eSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 13*c42dbd0eSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*c42dbd0eSchristos GNU General Public License for more details. 15*c42dbd0eSchristos 16*c42dbd0eSchristos You should have received a copy of the GNU General Public License 17*c42dbd0eSchristos along with this program; if not, write to the Free Software 18*c42dbd0eSchristos Foundation, 51 Franklin Street - Fifth Floor, Boston, 19*c42dbd0eSchristos MA 02110-1301, USA. */ 20*c42dbd0eSchristos 21*c42dbd0eSchristos #ifndef _DATAOBJECT_H 22*c42dbd0eSchristos #define _DATAOBJECT_H 23*c42dbd0eSchristos 24*c42dbd0eSchristos // A DataObject object represents a distinct dataobject. 25*c42dbd0eSchristos 26*c42dbd0eSchristos #include "dbe_structs.h" 27*c42dbd0eSchristos #include "Histable.h" 28*c42dbd0eSchristos 29*c42dbd0eSchristos extern char *DOBJ_UNSPECIFIED; 30*c42dbd0eSchristos extern char *DOBJ_UNIDENTIFIED; 31*c42dbd0eSchristos extern char *DOBJ_UNDETERMINED; 32*c42dbd0eSchristos extern char *DOBJ_ANON; 33*c42dbd0eSchristos extern char *DOBJ_UNASCERTAINABLE; 34*c42dbd0eSchristos extern char *DOBJ_UNVERIFIABLE; 35*c42dbd0eSchristos extern char *DOBJ_UNRESOLVABLE; 36*c42dbd0eSchristos 37*c42dbd0eSchristos class DataObject : public Histable 38*c42dbd0eSchristos { 39*c42dbd0eSchristos public: 40*c42dbd0eSchristos DataObject (); 41*c42dbd0eSchristos ~DataObject (); 42*c42dbd0eSchristos 43*c42dbd0eSchristos static const unsigned UNSPECIFIED_ID = 0xFFFFFFFF; 44*c42dbd0eSchristos 45*c42dbd0eSchristos int64_t size; // size of the dataobject in bytes 46*c42dbd0eSchristos int64_t offset; // offset of dataobject from parent 47*c42dbd0eSchristos DataObject *parent; // this dataobject's parent (if any) 48*c42dbd0eSchristos Histable *scope; // scope of this dataobject 49*c42dbd0eSchristos DataObject *master; // this dataobject's master (if any) 50*c42dbd0eSchristos get_type()51*c42dbd0eSchristos Histable_type get_type () { return DOBJECT; } get_size()52*c42dbd0eSchristos int64_t get_size () { return size; } get_offset()53*c42dbd0eSchristos int64_t get_offset () { return offset; } get_parent()54*c42dbd0eSchristos DataObject *get_parent () { return parent; } get_master()55*c42dbd0eSchristos DataObject *get_master () { return master; } get_typename()56*c42dbd0eSchristos char *get_typename () { return _typename; } get_instname()57*c42dbd0eSchristos char *get_instname () { return _instname; } get_scope()58*c42dbd0eSchristos Histable *get_scope () { return scope; } 59*c42dbd0eSchristos get_unannotated_name()60*c42dbd0eSchristos char *get_unannotated_name () 61*c42dbd0eSchristos { // name without a <Scalar> or <Unknown> prefix 62*c42dbd0eSchristos if (_unannotated_name) 63*c42dbd0eSchristos return _unannotated_name; 64*c42dbd0eSchristos return get_name (); 65*c42dbd0eSchristos } 66*c42dbd0eSchristos 67*c42dbd0eSchristos uint64_t get_addr (); 68*c42dbd0eSchristos char get_offset_mark (); 69*c42dbd0eSchristos char *get_offset_name (); 70*c42dbd0eSchristos void set_dobjname (char *type_name, char *inst_name); // dobj->parent must already be set 71*c42dbd0eSchristos void set_name (char *); 72*c42dbd0eSchristos Histable *convertto (Histable_type type, Histable *obj = NULL); 73*c42dbd0eSchristos DbeEA *find_dbeEA (Vaddr EA); 74*c42dbd0eSchristos 75*c42dbd0eSchristos private: 76*c42dbd0eSchristos char *_unannotated_name; // name without a <Scalar> or <Unknown> prefix 77*c42dbd0eSchristos char *_typename; // name of this dataobject's type 78*c42dbd0eSchristos char *_instname; // name of this dataobject instance 79*c42dbd0eSchristos Vector<DbeEA*> *EAs; 80*c42dbd0eSchristos }; 81*c42dbd0eSchristos 82*c42dbd0eSchristos #endif /* _DATAOBJECT_H */ 83