llvm/lib/Transforms/Instrumentation/DebugIR.h
Benjamin Kramer 55c06ae7af Revert "Give internal classes hidden visibility."
It works with clang, but GCC has different rules so we can't make all of those
hidden. This reverts commit r190534.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190536 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-11 18:05:11 +00:00

100 lines
3.5 KiB
C++

//===- llvm/Transforms/Instrumentation/DebugIR.h - Interface ----*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the interface of the DebugIR pass. For most users,
// including Instrumentation.h and calling createDebugIRPass() is sufficient and
// there is no need to include this file.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_DEBUGIR_H
#define LLVM_TRANSFORMS_INSTRUMENTATION_DEBUGIR_H
#include "llvm/ADT/OwningPtr.h"
#include "llvm/Pass.h"
namespace llvm {
class DebugIR : public llvm::ModulePass {
/// If true, write a source file to disk.
bool WriteSourceToDisk;
/// Hide certain (non-essential) debug information (only relevant if
/// createSource is true.
bool HideDebugIntrinsics;
bool HideDebugMetadata;
/// The location of the source file.
std::string Directory;
std::string Filename;
/// True if a temporary file name was generated.
bool GeneratedPath;
/// True if the file name was read from the Module.
bool ParsedPath;
public:
static char ID;
const char *getPassName() const { return "DebugIR"; }
/// Generate a file on disk to be displayed in a debugger. If Filename and
/// Directory are empty, a temporary path will be generated.
DebugIR(bool HideDebugIntrinsics, bool HideDebugMetadata,
llvm::StringRef Directory, llvm::StringRef Filename)
: ModulePass(ID), WriteSourceToDisk(true),
HideDebugIntrinsics(HideDebugIntrinsics),
HideDebugMetadata(HideDebugMetadata), Directory(Directory),
Filename(Filename), GeneratedPath(false), ParsedPath(false) {}
/// Modify input in-place; do not generate additional files, and do not hide
/// any debug intrinsics/metadata that might be present.
DebugIR()
: ModulePass(ID), WriteSourceToDisk(false), HideDebugIntrinsics(false),
HideDebugMetadata(false), GeneratedPath(false), ParsedPath(false) {}
/// Run pass on M and set Path to the source file path in the output module.
bool runOnModule(llvm::Module &M, std::string &Path);
bool runOnModule(llvm::Module &M);
private:
/// Returns the concatenated Directory + Filename, without error checking
std::string getPath();
/// Attempts to read source information from debug information in M, and if
/// that fails, from M's identifier. Returns true on success, false otherwise.
bool getSourceInfo(const llvm::Module &M);
/// Replace the extension of Filename with NewExtension, and return true if
/// successful. Return false if extension could not be found or Filename is
/// empty.
bool updateExtension(llvm::StringRef NewExtension);
/// Generate a temporary filename and open an fd
void generateFilename(llvm::OwningPtr<int> &fd);
/// Creates DWARF CU/Subroutine metadata
void createDebugInfo(llvm::Module &M,
llvm::OwningPtr<llvm::Module> &DisplayM);
/// Returns true if either Directory or Filename is missing, false otherwise.
bool isMissingPath();
/// Write M to disk, optionally passing in an fd to an open file which is
/// closed by this function after writing. If no fd is specified, a new file
/// is opened, written, and closed.
void writeDebugBitcode(const llvm::Module *M, int *fd = 0);
};
} // llvm namespace
#endif // LLVM_TRANSFORMS_INSTRUMENTATION_DEBUGIR_H