1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef DWARF_TYPE_FACTORY_H 6#define DWARF_TYPE_FACTORY_H 7 8 9#include <String.h> 10 11#include "Type.h" 12 13 14class CompilationUnit; 15class DIEAddressingType; 16class DIEArrayType; 17class DIEBaseType; 18class DIECompoundType; 19class DIEEnumerationType; 20class DIEFormalParameter; 21class DIEModifiedType; 22class DIEPointerToMemberType; 23class DIESubprogram; 24class DIESubrangeType; 25class DIESubroutineType; 26class DIEType; 27class DIETypedef; 28class DIEUnspecifiedType; 29class DwarfAddressType; 30class DwarfArrayDimension; 31class DwarfArrayType; 32class DwarfCompoundType; 33class DwarfDataMember; 34class DwarfEnumerationType; 35class DwarfEnumeratorValue; 36class DwarfFile; 37class DwarfFunctionParameter; 38class DwarfFunctionType; 39class DwarfInheritance; 40class DwarfModifiedType; 41class DwarfPointerToMemberType; 42class DwarfPrimitiveType; 43class DwarfSubrangeType; 44class DwarfTargetInterface; 45class DwarfType; 46class DwarfTypeContext; 47class DwarfTypedefType; 48struct DwarfUnspecifiedType; 49class GlobalTypeCache; 50class GlobalTypeLookup; 51struct LocationDescription; 52struct MemberLocation; 53class RegisterMap; 54 55 56class DwarfTypeFactory { 57public: 58 DwarfTypeFactory(DwarfTypeContext* typeContext, 59 GlobalTypeLookup* typeLookup, 60 GlobalTypeCache* typeCache); 61 ~DwarfTypeFactory(); 62 63 status_t CreateType(DIEType* typeEntry, 64 DwarfType*& _type); 65 // returns reference 66 67private: 68 status_t _CreateTypeInternal(const BString& name, 69 DIEType* typeEntry, DwarfType*& _type); 70 71 status_t _CreateCompoundType(const BString& name, 72 DIECompoundType* typeEntry, 73 compound_type_kind compoundKind, 74 DwarfType*& _type); 75 status_t _CreatePrimitiveType(const BString& name, 76 DIEBaseType* typeEntry, 77 DwarfType*& _type); 78 status_t _CreateAddressType(const BString& name, 79 DIEAddressingType* typeEntry, 80 address_type_kind addressKind, 81 DwarfType*& _type); 82 status_t _CreateModifiedType(const BString& name, 83 DIEModifiedType* typeEntry, 84 uint32 modifiers, DwarfType*& _type); 85 status_t _CreateTypedefType(const BString& name, 86 DIETypedef* typeEntry, DwarfType*& _type); 87 status_t _CreateArrayType(const BString& name, 88 DIEArrayType* typeEntry, 89 DwarfType*& _type); 90 status_t _CreateEnumerationType(const BString& name, 91 DIEEnumerationType* typeEntry, 92 DwarfType*& _type); 93 status_t _CreateSubrangeType(const BString& name, 94 DIESubrangeType* typeEntry, 95 DwarfType*& _type); 96 status_t _CreateUnspecifiedType(const BString& name, 97 DIEUnspecifiedType* typeEntry, 98 DwarfType*& _type); 99 status_t _CreateFunctionType(const BString& name, 100 DIESubroutineType* typeEntry, 101 DwarfType*& _type); 102 status_t _CreatePointerToMemberType(const BString& name, 103 DIEPointerToMemberType* typeEntry, 104 DwarfType*& _type); 105 106 status_t _ResolveTypedef(DIETypedef* entry, 107 DIEType*& _baseTypeEntry); 108 status_t _ResolveTypeByteSize(DIEType* typeEntry, 109 uint64& _size); 110 111private: 112 class ArtificialIntegerType; 113 114private: 115 DwarfTypeContext* fTypeContext; 116 GlobalTypeLookup* fTypeLookup; 117 GlobalTypeCache* fTypeCache; 118}; 119 120 121#endif // DWARF_TYPE_FACTORY_H 122