mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	The patch is generated using clang-tidy misc-use-override check.
This command was used:
  tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py \
    -checks='-*,misc-use-override' -header-filter='llvm|clang' \
    -j=32 -fix -format
http://reviews.llvm.org/D8925
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234679 91177308-0d34-0410-b5e6-96231b3b80d8
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- llvm/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h ----*- C++ -*--===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file contains support for writing line tables info into COFF files.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_WINCODEVIEWLINETABLES_H
 | 
						|
#define LLVM_LIB_CODEGEN_ASMPRINTER_WINCODEVIEWLINETABLES_H
 | 
						|
 | 
						|
#include "AsmPrinterHandler.h"
 | 
						|
#include "llvm/ADT/DenseMap.h"
 | 
						|
#include "llvm/ADT/StringMap.h"
 | 
						|
#include "llvm/ADT/StringRef.h"
 | 
						|
#include "llvm/CodeGen/AsmPrinter.h"
 | 
						|
#include "llvm/CodeGen/LexicalScopes.h"
 | 
						|
#include "llvm/CodeGen/MachineFunction.h"
 | 
						|
#include "llvm/CodeGen/MachineModuleInfo.h"
 | 
						|
#include "llvm/IR/DebugInfo.h"
 | 
						|
#include "llvm/IR/DebugLoc.h"
 | 
						|
#include "llvm/MC/MCStreamer.h"
 | 
						|
#include "llvm/Target/TargetLoweringObjectFile.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
/// \brief Collects and handles line tables information in a CodeView format.
 | 
						|
class WinCodeViewLineTables : public AsmPrinterHandler {
 | 
						|
  AsmPrinter *Asm;
 | 
						|
  DebugLoc PrevInstLoc;
 | 
						|
 | 
						|
  // For each function, store a vector of labels to its instructions, as well as
 | 
						|
  // to the end of the function.
 | 
						|
  struct FunctionInfo {
 | 
						|
    SmallVector<MCSymbol *, 10> Instrs;
 | 
						|
    MCSymbol *End;
 | 
						|
    FunctionInfo() : End(nullptr) {}
 | 
						|
  } *CurFn;
 | 
						|
 | 
						|
  typedef DenseMap<const Function *, FunctionInfo> FnDebugInfoTy;
 | 
						|
  FnDebugInfoTy FnDebugInfo;
 | 
						|
  // Store the functions we've visited in a vector so we can maintain a stable
 | 
						|
  // order while emitting subsections.
 | 
						|
  SmallVector<const Function *, 10> VisitedFunctions;
 | 
						|
 | 
						|
  // InstrInfoTy - Holds the Filename:LineNumber information for every
 | 
						|
  // instruction with a unique debug location.
 | 
						|
  struct InstrInfoTy {
 | 
						|
    StringRef Filename;
 | 
						|
    unsigned LineNumber;
 | 
						|
 | 
						|
    InstrInfoTy() : LineNumber(0) {}
 | 
						|
 | 
						|
    InstrInfoTy(StringRef Filename, unsigned LineNumber)
 | 
						|
        : Filename(Filename), LineNumber(LineNumber) {}
 | 
						|
  };
 | 
						|
  DenseMap<MCSymbol *, InstrInfoTy> InstrInfo;
 | 
						|
 | 
						|
  // FileNameRegistry - Manages filenames observed while generating debug info
 | 
						|
  // by filtering out duplicates and bookkeeping the offsets in the string
 | 
						|
  // table to be generated.
 | 
						|
  struct FileNameRegistryTy {
 | 
						|
    SmallVector<StringRef, 10> Filenames;
 | 
						|
    struct PerFileInfo {
 | 
						|
      size_t FilenameID, StartOffset;
 | 
						|
    };
 | 
						|
    StringMap<PerFileInfo> Infos;
 | 
						|
 | 
						|
    // The offset in the string table where we'll write the next unique
 | 
						|
    // filename.
 | 
						|
    size_t LastOffset;
 | 
						|
 | 
						|
    FileNameRegistryTy() {
 | 
						|
      clear();
 | 
						|
    }
 | 
						|
 | 
						|
    // Add Filename to the registry, if it was not observed before.
 | 
						|
    void add(StringRef Filename) {
 | 
						|
      if (Infos.count(Filename))
 | 
						|
        return;
 | 
						|
      size_t OldSize = Infos.size();
 | 
						|
      Infos[Filename].FilenameID = OldSize;
 | 
						|
      Infos[Filename].StartOffset = LastOffset;
 | 
						|
      LastOffset += Filename.size() + 1;
 | 
						|
      Filenames.push_back(Filename);
 | 
						|
    }
 | 
						|
 | 
						|
    void clear() {
 | 
						|
      LastOffset = 1;
 | 
						|
      Infos.clear();
 | 
						|
      Filenames.clear();
 | 
						|
    }
 | 
						|
  } FileNameRegistry;
 | 
						|
 | 
						|
  typedef std::map<std::pair<StringRef, StringRef>, char *>
 | 
						|
      DirAndFilenameToFilepathMapTy;
 | 
						|
  DirAndFilenameToFilepathMapTy DirAndFilenameToFilepathMap;
 | 
						|
  StringRef getFullFilepath(const MDNode *S);
 | 
						|
 | 
						|
  void maybeRecordLocation(DebugLoc DL, const MachineFunction *MF);
 | 
						|
 | 
						|
  void clear() {
 | 
						|
    assert(CurFn == nullptr);
 | 
						|
    FileNameRegistry.clear();
 | 
						|
    InstrInfo.clear();
 | 
						|
  }
 | 
						|
 | 
						|
  void emitDebugInfoForFunction(const Function *GV);
 | 
						|
 | 
						|
public:
 | 
						|
  WinCodeViewLineTables(AsmPrinter *Asm);
 | 
						|
 | 
						|
  ~WinCodeViewLineTables() override {
 | 
						|
    for (DirAndFilenameToFilepathMapTy::iterator
 | 
						|
             I = DirAndFilenameToFilepathMap.begin(),
 | 
						|
             E = DirAndFilenameToFilepathMap.end();
 | 
						|
         I != E; ++I)
 | 
						|
      free(I->second);
 | 
						|
  }
 | 
						|
 | 
						|
  void setSymbolSize(const llvm::MCSymbol *, uint64_t) override {}
 | 
						|
 | 
						|
  /// \brief Emit the COFF section that holds the line table information.
 | 
						|
  void endModule() override;
 | 
						|
 | 
						|
  /// \brief Gather pre-function debug information.
 | 
						|
  void beginFunction(const MachineFunction *MF) override;
 | 
						|
 | 
						|
  /// \brief Gather post-function debug information.
 | 
						|
  void endFunction(const MachineFunction *) override;
 | 
						|
 | 
						|
  /// \brief Process beginning of an instruction.
 | 
						|
  void beginInstruction(const MachineInstr *MI) override;
 | 
						|
 | 
						|
  /// \brief Process end of an instruction.
 | 
						|
  void endInstruction() override {}
 | 
						|
};
 | 
						|
} // End of namespace llvm
 | 
						|
 | 
						|
#endif
 |