/* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2013, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #ifndef COMPILATION_UNIT_H #define COMPILATION_UNIT_H #include #include #include "BaseUnit.h" #include "LineNumberProgram.h" #include "Types.h" class DIECompileUnitBase; class TargetAddressRangeList; class CompilationUnit : public BaseUnit { public: CompilationUnit(off_t headerOffset, off_t contentOffset, off_t totalSize, off_t abbreviationOffset, uint8 addressSize, bool isBigEndian, bool isDwarf64); virtual ~CompilationUnit(); inline target_addr_t MaxAddress() const; DIECompileUnitBase* UnitEntry() const { return fUnitEntry; } void SetUnitEntry(DIECompileUnitBase* entry); TargetAddressRangeList* AddressRanges() const { return fAddressRanges; } void SetAddressRanges( TargetAddressRangeList* ranges); target_addr_t AddressRangeBase() const; LineNumberProgram& GetLineNumberProgram() { return fLineNumberProgram; } bool AddDirectory(const char* directory); int32 CountDirectories() const; const char* DirectoryAt(int32 index) const; bool AddFile(const char* fileName, int32 dirIndex); int32 CountFiles() const; const char* FileAt(int32 index, const char** _directory = NULL) const; virtual dwarf_unit_kind Kind() const; private: struct File; typedef BObjectList DirectoryList; typedef BObjectList FileList; private: DIECompileUnitBase* fUnitEntry; TargetAddressRangeList* fAddressRanges; DirectoryList fDirectories; FileList fFiles; LineNumberProgram fLineNumberProgram; }; target_addr_t CompilationUnit::MaxAddress() const { return AddressSize() == 4 ? 0xffffffffULL : 0xffffffffffffffffULL; } #endif // COMPILATION_UNIT_H