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 COMPILATION_UNIT_H
7#define COMPILATION_UNIT_H
8
9#include <ObjectList.h>
10#include <String.h>
11
12#include "BaseUnit.h"
13#include "LineNumberProgram.h"
14#include "Types.h"
15
16
17class DIECompileUnitBase;
18class TargetAddressRangeList;
19
20
21class CompilationUnit : public BaseUnit {
22public:
23								CompilationUnit(off_t headerOffset,
24									off_t contentOffset,
25									off_t totalSize,
26									off_t abbreviationOffset,
27									uint8 addressSize, bool isBigEndian,
28									bool isDwarf64);
29	virtual						~CompilationUnit();
30
31	inline	target_addr_t		MaxAddress() const;
32
33			DIECompileUnitBase*	UnitEntry() const	{ return fUnitEntry; }
34			void				SetUnitEntry(DIECompileUnitBase* entry);
35
36			TargetAddressRangeList* AddressRanges() const
37									{ return fAddressRanges; }
38			void				SetAddressRanges(
39									TargetAddressRangeList* ranges);
40
41			target_addr_t		AddressRangeBase() const;
42
43			LineNumberProgram&	GetLineNumberProgram()
44									{ return fLineNumberProgram; }
45
46			bool				AddDirectory(const char* directory);
47			int32				CountDirectories() const;
48			const char*			DirectoryAt(int32 index) const;
49
50			bool				AddFile(const char* fileName, int32 dirIndex);
51			int32				CountFiles() const;
52			const char*			FileAt(int32 index,
53									const char** _directory = NULL) const;
54
55	virtual	dwarf_unit_kind		Kind() const;
56
57private:
58			struct File;
59			typedef BObjectList<BString> DirectoryList;
60			typedef BObjectList<File> FileList;
61
62private:
63			DIECompileUnitBase*	fUnitEntry;
64			TargetAddressRangeList* fAddressRanges;
65			DirectoryList		fDirectories;
66			FileList			fFiles;
67			LineNumberProgram	fLineNumberProgram;
68};
69
70
71target_addr_t
72CompilationUnit::MaxAddress() const
73{
74	return AddressSize() == 4 ? 0xffffffffULL : 0xffffffffffffffffULL;
75}
76
77
78#endif	// COMPILATION_UNIT_H
79