xref: /haiku/src/kits/debugger/dwarf/BaseUnit.h (revision 4c07199d8201fcf267e90be0d24b76799d03cea6)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Copyright 2013, Rene Gollent, rene@gollent.com.
4  * Distributed under the terms of the MIT License.
5  */
6 #ifndef BASE_UNIT_H
7 #define BASE_UNIT_H
8 
9 
10 #include <String.h>
11 
12 #include <Array.h>
13 
14 #include "Types.h"
15 
16 
17 class AbbreviationTable;
18 class DebugInfoEntry;
19 struct SourceLanguageInfo;
20 
21 
22 enum dwarf_unit_kind {
23 	dwarf_unit_kind_compilation = 0,
24 	dwarf_unit_kind_type
25 };
26 
27 
28 class BaseUnit {
29 public:
30 								BaseUnit(off_t headerOffset,
31 									off_t contentOffset,
32 									off_t totalSize,
33 									off_t abbreviationOffset,
34 									uint8 addressSize, bool isBigEndian,
35 									bool isDwarf64);
36 	virtual						~BaseUnit();
37 
38 			off_t				HeaderOffset() const { return fHeaderOffset; }
39 			off_t				ContentOffset() const { return fContentOffset; }
40 			off_t 				RelativeContentOffset() const
41 									{ return fContentOffset - fHeaderOffset; }
42 			off_t				TotalSize() const	{ return fTotalSize; }
43 			off_t				ContentSize() const
44 									{ return fTotalSize
45 										- RelativeContentOffset(); }
46 			off_t				AbbreviationOffset() const
47 									{ return fAbbreviationOffset; }
48 
49 			bool				ContainsAbsoluteOffset(off_t offset) const;
50 
51 			uint8				AddressSize() const	{ return fAddressSize; }
52 			bool				IsBigEndian() const { return fIsBigEndian; }
53 			bool				IsDwarf64() const	{ return fIsDwarf64; }
54 
55 			AbbreviationTable*	GetAbbreviationTable() const
56 									{ return fAbbreviationTable; }
57 			void				SetAbbreviationTable(
58 									AbbreviationTable* abbreviationTable);
59 
60 			const SourceLanguageInfo* SourceLanguage() const
61 									{ return fSourceLanguage; }
62 			void				SetSourceLanguage(
63 									const SourceLanguageInfo* language);
64 
65 			status_t			AddDebugInfoEntry(DebugInfoEntry* entry,
66 									off_t offset);
67 			int					CountEntries() const;
68 			void				GetEntryAt(int index, DebugInfoEntry*& entry,
69 									off_t& offset) const;
70 			DebugInfoEntry*		EntryForOffset(off_t offset) const;
71 
72 	virtual	dwarf_unit_kind		Kind() const = 0;
73 
74 private:
75 			off_t				fHeaderOffset;
76 			off_t				fContentOffset;
77 			off_t				fTotalSize;
78 			off_t				fAbbreviationOffset;
79 			AbbreviationTable*	fAbbreviationTable;
80 			const SourceLanguageInfo* fSourceLanguage;
81 			Array<DebugInfoEntry*> fEntries;
82 			Array<off_t>		fEntryOffsets;
83 			uint8				fAddressSize;
84 			bool				fIsBigEndian;
85 			bool				fIsDwarf64;
86 };
87 
88 
89 #endif	// BASE_UNIT_H
90