xref: /haiku/headers/private/debugger/debug_info/ImageDebugInfo.h (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Copyright 2010-2013, Rene Gollent, rene@gollent.com.
4  * Distributed under the terms of the MIT License.
5  */
6 #ifndef IMAGE_DEBUG_INFO_H
7 #define IMAGE_DEBUG_INFO_H
8 
9 
10 #include <String.h>
11 
12 #include <ObjectList.h>
13 #include <Referenceable.h>
14 
15 #include "AddressSectionTypes.h"
16 #include "ImageInfo.h"
17 #include "Types.h"
18 
19 
20 class Architecture;
21 class DebuggerInterface;
22 class FileSourceCode;
23 class FunctionDebugInfo;
24 class FunctionInstance;
25 class GlobalTypeCache;
26 class LocatableFile;
27 class SpecificImageDebugInfo;
28 class SymbolInfo;
29 class Type;
30 class TypeLookupConstraints;
31 
32 
33 class ImageDebugInfo : public BReferenceable {
34 public:
35 								ImageDebugInfo(const ImageInfo& imageInfo);
36 								~ImageDebugInfo();
37 
38 			const ImageInfo&	GetImageInfo() const	{ return fImageInfo; }
39 
40 			bool				AddSpecificInfo(SpecificImageDebugInfo* info);
41 			status_t			FinishInit(DebuggerInterface* interface);
42 
43 			status_t			GetType(GlobalTypeCache* cache,
44 									const BString& name,
45 									const TypeLookupConstraints& constraints,
46 									Type*& _type);
47 									// returns a reference
48 
49 			bool				HasType(const BString& name,
50 									const TypeLookupConstraints& constraints)
51 									const;
52 
53 			AddressSectionType	GetAddressSectionType(target_addr_t address)
54 									const;
55 
56 			int32				CountFunctions() const;
57 			FunctionInstance*	FunctionAt(int32 index) const;
58 			FunctionInstance*	FunctionAtAddress(target_addr_t address) const;
59 			FunctionInstance*	FunctionByName(const char* name) const;
60 
61 			FunctionInstance*	MainFunction() const
62 									{ return fMainFunction; }
63 
64 			status_t			AddSourceCodeInfo(LocatableFile* file,
65 									FileSourceCode* sourceCode) const;
66 
67 private:
68 			typedef BObjectList<SpecificImageDebugInfo> SpecificInfoList;
69 			typedef BObjectList<FunctionInstance> FunctionList;
70 
71 private:
72 	static	int					_CompareFunctions(const FunctionInstance* a,
73 									const FunctionInstance* b);
74 	static	int					_CompareAddressFunction(
75 									const target_addr_t* address,
76 									const FunctionInstance* function);
77 	static	int					_CompareSymbols(const SymbolInfo* a,
78 									const SymbolInfo* b);
79 
80 private:
81 			ImageInfo			fImageInfo;
82 			SpecificInfoList	fSpecificInfos;
83 			FunctionList		fFunctions;
84 			FunctionInstance*	fMainFunction;
85 };
86 
87 
88 #endif	// IMAGE_DEBUG_INFO_H
89