1326938Sdim//===- DWARFObject.h --------------------------------------------*- C++ -*-===// 2326938Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6326938Sdim// 7326938Sdim//===-----------------------------------------------------------------------===/ 8326938Sdim 9326938Sdim#ifndef LLVM_DEBUGINFO_DWARF_DWARFOBJECT_H 10326938Sdim#define LLVM_DEBUGINFO_DWARF_DWARFOBJECT_H 11326938Sdim 12326938Sdim#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" 13326938Sdim#include "llvm/DebugInfo/DWARF/DWARFSection.h" 14326938Sdim#include "llvm/Object/ObjectFile.h" 15326938Sdim 16326938Sdimnamespace llvm { 17326938Sdim// This is responsible for low level access to the object file. It 18326938Sdim// knows how to find the required sections and compute relocated 19326938Sdim// values. 20326938Sdim// The default implementations of the get<Section> methods return dummy values. 21326938Sdim// This is to allow clients that only need some of those to implement just the 22326938Sdim// ones they need. We can't use unreachable for as many cases because the parser 23326938Sdim// implementation is eager and will call some of these methods even if the 24326938Sdim// result is not used. 25326938Sdimclass DWARFObject { 26326938Sdim DWARFSection Dummy; 27326938Sdim 28326938Sdimpublic: 29326938Sdim virtual ~DWARFObject() = default; 30326938Sdim virtual StringRef getFileName() const { llvm_unreachable("unimplemented"); } 31326938Sdim virtual const object::ObjectFile *getFile() const { return nullptr; } 32326938Sdim virtual ArrayRef<SectionName> getSectionNames() const { return {}; } 33326938Sdim virtual bool isLittleEndian() const = 0; 34326938Sdim virtual uint8_t getAddressSize() const { llvm_unreachable("unimplemented"); } 35326938Sdim virtual void 36344779Sdim forEachInfoSections(function_ref<void(const DWARFSection &)> F) const {} 37344779Sdim virtual void 38326938Sdim forEachTypesSections(function_ref<void(const DWARFSection &)> F) const {} 39326938Sdim virtual StringRef getAbbrevSection() const { return ""; } 40326938Sdim virtual const DWARFSection &getLocSection() const { return Dummy; } 41344779Sdim virtual const DWARFSection &getLoclistsSection() const { return Dummy; } 42360784Sdim virtual StringRef getArangesSection() const { return ""; } 43360784Sdim virtual const DWARFSection &getFrameSection() const { return Dummy; } 44354469Sdim virtual const DWARFSection &getEHFrameSection() const { return Dummy; } 45326938Sdim virtual const DWARFSection &getLineSection() const { return Dummy; } 46360784Sdim virtual StringRef getLineStrSection() const { return ""; } 47360784Sdim virtual StringRef getStrSection() const { return ""; } 48360784Sdim virtual const DWARFSection &getRangesSection() const { return Dummy; } 49341825Sdim virtual const DWARFSection &getRnglistsSection() const { return Dummy; } 50326938Sdim virtual StringRef getMacinfoSection() const { return ""; } 51360784Sdim virtual StringRef getMacinfoDWOSection() const { return ""; } 52360784Sdim virtual const DWARFSection &getPubnamesSection() const { return Dummy; } 53360784Sdim virtual const DWARFSection &getPubtypesSection() const { return Dummy; } 54360784Sdim virtual const DWARFSection &getGnuPubnamesSection() const { return Dummy; } 55360784Sdim virtual const DWARFSection &getGnuPubtypesSection() const { return Dummy; } 56360784Sdim virtual const DWARFSection &getStrOffsetsSection() const { return Dummy; } 57326938Sdim virtual void 58344779Sdim forEachInfoDWOSections(function_ref<void(const DWARFSection &)> F) const {} 59344779Sdim virtual void 60326938Sdim forEachTypesDWOSections(function_ref<void(const DWARFSection &)> F) const {} 61326938Sdim virtual StringRef getAbbrevDWOSection() const { return ""; } 62326938Sdim virtual const DWARFSection &getLineDWOSection() const { return Dummy; } 63326938Sdim virtual const DWARFSection &getLocDWOSection() const { return Dummy; } 64360784Sdim virtual const DWARFSection &getLoclistsDWOSection() const { return Dummy; } 65360784Sdim virtual StringRef getStrDWOSection() const { return ""; } 66360784Sdim virtual const DWARFSection &getStrOffsetsDWOSection() const { 67326938Sdim return Dummy; 68326938Sdim } 69360784Sdim virtual const DWARFSection &getRangesDWOSection() const { return Dummy; } 70341825Sdim virtual const DWARFSection &getRnglistsDWOSection() const { return Dummy; } 71326938Sdim virtual const DWARFSection &getAddrSection() const { return Dummy; } 72326938Sdim virtual const DWARFSection &getAppleNamesSection() const { return Dummy; } 73326938Sdim virtual const DWARFSection &getAppleTypesSection() const { return Dummy; } 74326938Sdim virtual const DWARFSection &getAppleNamespacesSection() const { 75326938Sdim return Dummy; 76326938Sdim } 77360784Sdim virtual const DWARFSection &getNamesSection() const { return Dummy; } 78326938Sdim virtual const DWARFSection &getAppleObjCSection() const { return Dummy; } 79326938Sdim virtual StringRef getCUIndexSection() const { return ""; } 80326938Sdim virtual StringRef getGdbIndexSection() const { return ""; } 81326938Sdim virtual StringRef getTUIndexSection() const { return ""; } 82326938Sdim virtual Optional<RelocAddrEntry> find(const DWARFSection &Sec, 83326938Sdim uint64_t Pos) const = 0; 84326938Sdim}; 85326938Sdim 86326938Sdim} // namespace llvm 87326938Sdim#endif 88