diff options
Diffstat (limited to 'lib/CodeGen/AsmPrinter/CodeViewDebug.h')
| -rw-r--r-- | lib/CodeGen/AsmPrinter/CodeViewDebug.h | 32 | 
1 files changed, 22 insertions, 10 deletions
diff --git a/lib/CodeGen/AsmPrinter/CodeViewDebug.h b/lib/CodeGen/AsmPrinter/CodeViewDebug.h index fd8f60425c24..69e93640d7ef 100644 --- a/lib/CodeGen/AsmPrinter/CodeViewDebug.h +++ b/lib/CodeGen/AsmPrinter/CodeViewDebug.h @@ -23,8 +23,8 @@  #include "llvm/ADT/SetVector.h"  #include "llvm/ADT/SmallVector.h"  #include "llvm/DebugInfo/CodeView/CodeView.h" +#include "llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h"  #include "llvm/DebugInfo/CodeView/TypeIndex.h" -#include "llvm/DebugInfo/CodeView/TypeTableBuilder.h"  #include "llvm/IR/DebugLoc.h"  #include "llvm/Support/Allocator.h"  #include "llvm/Support/Compiler.h" @@ -52,7 +52,7 @@ class MachineFunction;  class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    MCStreamer &OS;    BumpPtrAllocator Allocator; -  codeview::TypeTableBuilder TypeTable; +  codeview::GlobalTypeTableBuilder TypeTable;    /// Represents the most general definition range.    struct LocalVarDefRange { @@ -94,6 +94,7 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    struct LocalVariable {      const DILocalVariable *DIVar = nullptr;      SmallVector<LocalVarDefRange, 1> DefRanges; +    bool UseReferenceType = false;    };    struct InlineSite { @@ -118,6 +119,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {      SmallVector<LocalVariable, 1> Locals; +    std::vector<std::pair<MCSymbol *, MDNode *>> Annotations; +      const MCSymbol *Begin = nullptr;      const MCSymbol *End = nullptr;      unsigned FuncId = 0; @@ -147,6 +150,9 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    codeview::TypeIndex getFuncIdForSubprogram(const DISubprogram *SP); +  void calculateRanges(LocalVariable &Var, +                       const DbgValueHistoryMap::InstrRanges &Ranges); +    static void collectInlineSiteChildren(SmallVectorImpl<unsigned> &Children,                                          const FunctionInfo &FI,                                          const InlineSite &Site); @@ -155,8 +161,9 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    /// emit at the end of the TU.    MapVector<const Function *, FunctionInfo> FnDebugInfo; -  /// Map from DIFile to .cv_file id. -  DenseMap<const DIFile *, unsigned> FileIdMap; +  /// Map from full file path to .cv_file id. Full paths are built from DIFiles +  /// and are stored in FileToFilepathMap; +  DenseMap<StringRef, unsigned> FileIdMap;    /// All inlined subprograms in the order they should be emitted.    SmallSetVector<const DISubprogram *, 4> InlinedSubprograms; @@ -187,8 +194,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    // The UDTs we have seen while processing types; each entry is a pair of type    // index and type name. -  std::vector<std::pair<std::string, codeview::TypeIndex>> LocalUDTs, -      GlobalUDTs; +  std::vector<std::pair<std::string, const DIType *>> LocalUDTs; +  std::vector<std::pair<std::string, const DIType *>> GlobalUDTs;    using FileToFilepathMapTy = std::map<const DIFile *, std::string>;    FileToFilepathMapTy FileToFilepathMap; @@ -212,6 +219,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    void emitTypeInformation(); +  void emitTypeGlobalHashes(); +    void emitCompilerInformation();    void emitInlineeLinesSubsection(); @@ -222,8 +231,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    void emitDebugInfoForRetainedTypes(); -  void emitDebugInfoForUDTs( -      ArrayRef<std::pair<std::string, codeview::TypeIndex>> UDTs); +  void +  emitDebugInfoForUDTs(ArrayRef<std::pair<std::string, const DIType *>> UDTs);    void emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,                                const GlobalVariable *GV, MCSymbol *GVSym); @@ -259,6 +268,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    codeview::TypeIndex getTypeIndex(DITypeRef TypeRef,                                     DITypeRef ClassTyRef = DITypeRef()); +  codeview::TypeIndex getTypeIndexForReferenceTo(DITypeRef TypeRef); +    codeview::TypeIndex getMemberFunctionType(const DISubprogram *SP,                                              const DICompositeType *Class); @@ -266,7 +277,7 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    codeview::TypeIndex getVBPTypeIndex(); -  void addToUDTs(const DIType *Ty, codeview::TypeIndex TI); +  void addToUDTs(const DIType *Ty);    codeview::TypeIndex lowerType(const DIType *Ty, const DIType *ClassTy);    codeview::TypeIndex lowerTypeAlias(const DIDerivedType *Ty); @@ -279,7 +290,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {    codeview::TypeIndex lowerTypeVFTableShape(const DIDerivedType *Ty);    codeview::TypeIndex lowerTypeMemberFunction(const DISubroutineType *Ty,                                                const DIType *ClassTy, -                                              int ThisAdjustment); +                                              int ThisAdjustment, +                                              bool IsStaticMethod);    codeview::TypeIndex lowerTypeEnum(const DICompositeType *Ty);    codeview::TypeIndex lowerTypeClass(const DICompositeType *Ty);    codeview::TypeIndex lowerTypeUnion(const DICompositeType *Ty);  | 
