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