123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- DebugSubsectionVisitor.h -----------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_DEBUGINFO_CODEVIEW_DEBUGSUBSECTIONVISITOR_H
- #define LLVM_DEBUGINFO_CODEVIEW_DEBUGSUBSECTIONVISITOR_H
- #include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"
- #include "llvm/Support/Error.h"
- namespace llvm {
- namespace codeview {
- class DebugChecksumsSubsectionRef;
- class DebugSubsectionRecord;
- class DebugInlineeLinesSubsectionRef;
- class DebugCrossModuleExportsSubsectionRef;
- class DebugCrossModuleImportsSubsectionRef;
- class DebugFrameDataSubsectionRef;
- class DebugLinesSubsectionRef;
- class DebugStringTableSubsectionRef;
- class DebugSymbolRVASubsectionRef;
- class DebugSymbolsSubsectionRef;
- class DebugUnknownSubsectionRef;
- class DebugSubsectionVisitor {
- public:
- virtual ~DebugSubsectionVisitor() = default;
- virtual Error visitUnknown(DebugUnknownSubsectionRef &Unknown) {
- return Error::success();
- }
- virtual Error visitLines(DebugLinesSubsectionRef &Lines,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitFileChecksums(DebugChecksumsSubsectionRef &Checksums,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitInlineeLines(DebugInlineeLinesSubsectionRef &Inlinees,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error
- visitCrossModuleExports(DebugCrossModuleExportsSubsectionRef &CSE,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error
- visitCrossModuleImports(DebugCrossModuleImportsSubsectionRef &CSE,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitStringTable(DebugStringTableSubsectionRef &ST,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitSymbols(DebugSymbolsSubsectionRef &CSE,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitFrameData(DebugFrameDataSubsectionRef &FD,
- const StringsAndChecksumsRef &State) = 0;
- virtual Error visitCOFFSymbolRVAs(DebugSymbolRVASubsectionRef &RVAs,
- const StringsAndChecksumsRef &State) = 0;
- };
- Error visitDebugSubsection(const DebugSubsectionRecord &R,
- DebugSubsectionVisitor &V,
- const StringsAndChecksumsRef &State);
- namespace detail {
- template <typename T>
- Error visitDebugSubsections(T &&FragmentRange, DebugSubsectionVisitor &V,
- StringsAndChecksumsRef &State) {
- State.initialize(std::forward<T>(FragmentRange));
- for (const DebugSubsectionRecord &L : FragmentRange) {
- if (auto EC = visitDebugSubsection(L, V, State))
- return EC;
- }
- return Error::success();
- }
- } // namespace detail
- template <typename T>
- Error visitDebugSubsections(T &&FragmentRange, DebugSubsectionVisitor &V) {
- StringsAndChecksumsRef State;
- return detail::visitDebugSubsections(std::forward<T>(FragmentRange), V,
- State);
- }
- template <typename T>
- Error visitDebugSubsections(T &&FragmentRange, DebugSubsectionVisitor &V,
- const DebugStringTableSubsectionRef &Strings) {
- StringsAndChecksumsRef State(Strings);
- return detail::visitDebugSubsections(std::forward<T>(FragmentRange), V,
- State);
- }
- template <typename T>
- Error visitDebugSubsections(T &&FragmentRange, DebugSubsectionVisitor &V,
- const DebugStringTableSubsectionRef &Strings,
- const DebugChecksumsSubsectionRef &Checksums) {
- StringsAndChecksumsRef State(Strings, Checksums);
- return detail::visitDebugSubsections(std::forward<T>(FragmentRange), V,
- State);
- }
- } // end namespace codeview
- } // end namespace llvm
- #endif // LLVM_DEBUGINFO_CODEVIEW_DEBUGSUBSECTIONVISITOR_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|