1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Copyright 2014-2016, Rene Gollent, rene@gollent.com. 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef TEAM_DEBUG_INFO_H 7#define TEAM_DEBUG_INFO_H 8 9 10#include <Locker.h> 11 12#include <ObjectList.h> 13#include <Referenceable.h> 14#include <util/OpenHashTable.h> 15 16#include "GlobalTypeLookup.h" 17#include "ImageInfo.h" 18#include "TeamFunctionSourceInformation.h" 19#include "TeamTypeInformation.h" 20 21class Architecture; 22class DebuggerInterface; 23class DisassembledCode; 24class FileManager; 25class FileSourceCode; 26class Function; 27class FunctionID; 28class FunctionInstance; 29class ImageDebugInfo; 30class ImageDebugInfoLoadingState; 31class ImageInfo; 32class LocatableFile; 33class SourceCode; 34class SourceLocation; 35class SpecificTeamDebugInfo; 36 37 38class TeamDebugInfo : public BReferenceable, public GlobalTypeLookup, 39 public TeamTypeInformation, public TeamFunctionSourceInformation { 40public: 41 TeamDebugInfo( 42 DebuggerInterface* debuggerInterface, 43 Architecture* architecture, 44 FileManager* fileManager); 45 ~TeamDebugInfo(); 46 47 status_t Init(); 48 49 virtual status_t GetType(GlobalTypeCache* cache, 50 const BString& name, 51 const TypeLookupConstraints& constraints, 52 Type*& _type); 53 virtual bool HasType(GlobalTypeCache* cache, 54 const BString& name, 55 const TypeLookupConstraints& constraints); 56 57 virtual status_t LookupTypeByName(const BString& name, 58 const TypeLookupConstraints& constraints, 59 Type*& _type); 60 virtual bool TypeExistsByName(const BString& name, 61 const TypeLookupConstraints& constraints); 62 63 virtual status_t GetActiveSourceCode(FunctionDebugInfo* info, 64 SourceCode*& _code); 65 66 status_t LoadImageDebugInfo(const ImageInfo& imageInfo, 67 LocatableFile* imageFile, 68 ImageDebugInfoLoadingState& state, 69 ImageDebugInfo*& _imageDebugInfo); 70 71 status_t LoadSourceCode(LocatableFile* file, 72 FileSourceCode*& _sourceCode); 73 // returns reference 74 void ClearSourceCode(LocatableFile* file); 75 76 status_t DisassembleFunction( 77 FunctionInstance* functionInstance, 78 DisassembledCode*& _sourceCode); 79 // returns reference 80 FunctionInstance* MainFunction() const 81 { return fMainFunction; } 82 83 // team is locked 84 status_t AddImageDebugInfo( 85 ImageDebugInfo* imageDebugInfo); 86 void RemoveImageDebugInfo( 87 ImageDebugInfo* imageDebugInfo); 88 ImageDebugInfo* ImageDebugInfoByName(const char* name) const; 89 90 Function* FunctionAtSourceLocation(LocatableFile* file, 91 const SourceLocation& location) const; 92 Function* FunctionByID(FunctionID* functionID) const; 93 94private: 95 struct FunctionHashDefinition; 96 struct SourceFileEntry; 97 struct SourceFileHashDefinition; 98 99 typedef BObjectList<SpecificTeamDebugInfo> SpecificInfoList; 100 typedef BObjectList<ImageDebugInfo> ImageList; 101 typedef BOpenHashTable<FunctionHashDefinition> FunctionTable; 102 typedef BOpenHashTable<SourceFileHashDefinition> SourceFileTable; 103 104private: 105 status_t _AddFunction(Function* function); 106 void _RemoveFunction(Function* function); 107 108private: 109 BLocker fLock; 110 DebuggerInterface* fDebuggerInterface; 111 Architecture* fArchitecture; 112 FileManager* fFileManager; 113 SpecificInfoList fSpecificInfos; 114 ImageList fImages; 115 FunctionTable* fFunctions; 116 SourceFileTable* fSourceFiles; 117 GlobalTypeCache* fTypeCache; 118 FunctionInstance* fMainFunction; 119}; 120 121 122#endif // TEAM_DEBUG_INFO_H 123