llvm-project/llvm/tools/llvm-pdbutil/ExplainOutputStyle.h
Carlos Alberto Enciso 75112133b8 [llvm-pdbutil] Move InputFile/FormatUtil/LinePrinter to PDB library.
At Sony we are developing llvm-dva

https://lists.llvm.org/pipermail/llvm-dev/2020-August/144174.html

For its PDB support, it requires functionality already present in
llvm-pdbutil.

We intend to move that functionaly into the PDB library to be
shared by both tools. That change will be done in 2 steps, that
will be submitted as 2 patches:

(1) Replace 'ExitOnError' with explicit error handling.
(2) Move the intended shared code to the PDB library.

Patch for step (1): https://reviews.llvm.org/D121801

This patch is for step (2).

Move InputFile.cpp[h], FormatUtil.cpp[h] and LinePrinter.cpp[h]
files to the debug PDB library.

It exposes the following functionality that can be used by tools:

- Open a PDB file.
- Get module debug stream.
- Traverse module sections.
- Traverse module subsections.

Most of the needed functionality is in InputFile, but there are
dependencies from LinePrinter and FormatUtil.

Some other functionality is in the following functions in
DumpOutputStyle.cpp file:

- iterateModuleSubsections
- getModuleDebugStream
- iterateOneModule
- iterateSymbolGroups
- iterateModuleSubsections

Only these specific functions from DumpOutputStyle are moved to
the PDB library.

Reviewed By: aganea, dblaikie, rnk

Differential Revision: https://reviews.llvm.org/D122226
2022-03-25 07:12:58 +00:00

69 lines
1.7 KiB
C++

//===- ExplainOutputStyle.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_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H
#define LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H
#include "OutputStyle.h"
#include "llvm/DebugInfo/PDB/Native/LinePrinter.h"
#include <string>
namespace llvm {
namespace pdb {
class DbiStream;
class InfoStream;
class InputFile;
class ExplainOutputStyle : public OutputStyle {
public:
ExplainOutputStyle(InputFile &File, uint64_t FileOffset);
Error dump() override;
private:
Error explainPdbFile();
Error explainBinaryFile();
bool explainPdbBlockStatus();
bool isPdbFpm1() const;
bool isPdbFpm2() const;
bool isPdbSuperBlock() const;
bool isPdbFpmBlock() const;
bool isPdbBlockMapBlock() const;
bool isPdbStreamDirectoryBlock() const;
Optional<uint32_t> getPdbBlockStreamIndex() const;
void explainPdbSuperBlockOffset();
void explainPdbFpmBlockOffset();
void explainPdbBlockMapOffset();
void explainPdbStreamDirectoryOffset();
void explainPdbStreamOffset(uint32_t Stream);
void explainPdbUnknownBlock();
void explainStreamOffset(DbiStream &Stream, uint32_t OffsetInStream);
void explainStreamOffset(InfoStream &Stream, uint32_t OffsetInStream);
uint32_t pdbBlockIndex() const;
uint32_t pdbBlockOffset() const;
InputFile &File;
const uint64_t FileOffset;
LinePrinter P;
};
} // namespace pdb
} // namespace llvm
#endif