1 //===- DWARFObject.h --------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===-----------------------------------------------------------------------===/ 9 10 #ifndef LLVM_DEBUGINFO_DWARF_DWARFOBJECT_H 11 #define LLVM_DEBUGINFO_DWARF_DWARFOBJECT_H 12 13 #include "llvm/DebugInfo/DWARF/DWARFSection.h" 14 #include "llvm/Object/ObjectFile.h" 15 16 namespace llvm { 17 // This is responsible for low level access to the object file. It 18 // knows how to find the required sections and compute relocated 19 // values. 20 // The default implementations of the get<Section> methods return dummy values. 21 // This is to allow clients that only need some of those to implement just the 22 // ones they need. We can't use unreachable for as many cases because the parser 23 // implementation is eager and will call some of these methods even if the 24 // result is not used. 25 class DWARFObject { 26 DWARFSection Dummy; 27 28 public: 29 virtual ~DWARFObject() = default; 30 virtual StringRef getFileName() const { llvm_unreachable("unimplemented"); } 31 virtual const object::ObjectFile *getFile() const { return nullptr; } 32 virtual ArrayRef<SectionName> getSectionNames() const { return {}; } 33 virtual bool isLittleEndian() const = 0; 34 virtual uint8_t getAddressSize() const { llvm_unreachable("unimplemented"); } 35 virtual const DWARFSection &getInfoSection() const { return Dummy; } 36 virtual void 37 forEachTypesSections(function_ref<void(const DWARFSection &)> F) const {} 38 virtual StringRef getAbbrevSection() const { return ""; } 39 virtual const DWARFSection &getLocSection() const { return Dummy; } 40 virtual StringRef getARangeSection() const { return ""; } 41 virtual StringRef getDebugFrameSection() const { return ""; } 42 virtual StringRef getEHFrameSection() const { return ""; } 43 virtual const DWARFSection &getLineSection() const { return Dummy; } 44 virtual StringRef getStringSection() const { return ""; } 45 virtual const DWARFSection &getRangeSection() const { return Dummy; } 46 virtual StringRef getMacinfoSection() const { return ""; } 47 virtual StringRef getPubNamesSection() const { return ""; } 48 virtual StringRef getPubTypesSection() const { return ""; } 49 virtual StringRef getGnuPubNamesSection() const { return ""; } 50 virtual StringRef getGnuPubTypesSection() const { return ""; } 51 virtual const DWARFSection &getStringOffsetSection() const { return Dummy; } 52 virtual const DWARFSection &getInfoDWOSection() const { return Dummy; } 53 virtual void 54 forEachTypesDWOSections(function_ref<void(const DWARFSection &)> F) const {} 55 virtual StringRef getAbbrevDWOSection() const { return ""; } 56 virtual const DWARFSection &getLineDWOSection() const { return Dummy; } 57 virtual const DWARFSection &getLocDWOSection() const { return Dummy; } 58 virtual StringRef getStringDWOSection() const { return ""; } 59 virtual const DWARFSection &getStringOffsetDWOSection() const { 60 return Dummy; 61 } 62 virtual const DWARFSection &getRangeDWOSection() const { return Dummy; } 63 virtual const DWARFSection &getAddrSection() const { return Dummy; } 64 virtual const DWARFSection &getAppleNamesSection() const { return Dummy; } 65 virtual const DWARFSection &getAppleTypesSection() const { return Dummy; } 66 virtual const DWARFSection &getAppleNamespacesSection() const { 67 return Dummy; 68 } 69 virtual const DWARFSection &getAppleObjCSection() const { return Dummy; } 70 virtual StringRef getCUIndexSection() const { return ""; } 71 virtual StringRef getGdbIndexSection() const { return ""; } 72 virtual StringRef getTUIndexSection() const { return ""; } 73 virtual Optional<RelocAddrEntry> find(const DWARFSection &Sec, 74 uint64_t Pos) const = 0; 75 }; 76 77 } // namespace llvm 78 #endif 79