Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- TypeStreamMerger.h ---------------------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
  10. #define LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
  11.  
  12. #include "llvm/ADT/ArrayRef.h"
  13. #include "llvm/DebugInfo/CodeView/CVRecord.h"
  14. #include "llvm/Support/Error.h"
  15.  
  16. namespace llvm {
  17. template <typename T> class SmallVectorImpl;
  18. namespace codeview {
  19.  
  20. class TypeIndex;
  21. struct GloballyHashedType;
  22. class GlobalTypeTableBuilder;
  23. class MergingTypeTableBuilder;
  24.  
  25. /// Used to forward information about PCH.OBJ (precompiled) files, when
  26. /// applicable.
  27. struct PCHMergerInfo {
  28.   uint32_t PCHSignature{};
  29.   uint32_t EndPrecompIndex = ~0U;
  30. };
  31.  
  32. /// Merge one set of type records into another.  This method assumes
  33. /// that all records are type records, and there are no Id records present.
  34. ///
  35. /// \param Dest The table to store the re-written type records into.
  36. ///
  37. /// \param SourceToDest A vector, indexed by the TypeIndex in the source
  38. /// type stream, that contains the index of the corresponding type record
  39. /// in the destination stream.
  40. ///
  41. /// \param Types The collection of types to merge in.
  42. ///
  43. /// \returns Error::success() if the operation succeeded, otherwise an
  44. /// appropriate error code.
  45. Error mergeTypeRecords(MergingTypeTableBuilder &Dest,
  46.                        SmallVectorImpl<TypeIndex> &SourceToDest,
  47.                        const CVTypeArray &Types);
  48.  
  49. /// Merge one set of id records into another.  This method assumes
  50. /// that all records are id records, and there are no Type records present.
  51. /// However, since Id records can refer back to Type records, this method
  52. /// assumes that the referenced type records have also been merged into
  53. /// another type stream (for example using the above method), and accepts
  54. /// the mapping from source to dest for that stream so that it can re-write
  55. /// the type record mappings accordingly.
  56. ///
  57. /// \param Dest The table to store the re-written id records into.
  58. ///
  59. /// \param Types The mapping to use for the type records that these id
  60. /// records refer to.
  61. ///
  62. /// \param SourceToDest A vector, indexed by the TypeIndex in the source
  63. /// id stream, that contains the index of the corresponding id record
  64. /// in the destination stream.
  65. ///
  66. /// \param Ids The collection of id records to merge in.
  67. ///
  68. /// \returns Error::success() if the operation succeeded, otherwise an
  69. /// appropriate error code.
  70. Error mergeIdRecords(MergingTypeTableBuilder &Dest, ArrayRef<TypeIndex> Types,
  71.                      SmallVectorImpl<TypeIndex> &SourceToDest,
  72.                      const CVTypeArray &Ids);
  73.  
  74. /// Merge a unified set of type and id records, splitting them into
  75. /// separate output streams.
  76. ///
  77. /// \param DestIds The table to store the re-written id records into.
  78. ///
  79. /// \param DestTypes the table to store the re-written type records into.
  80. ///
  81. /// \param SourceToDest A vector, indexed by the TypeIndex in the source
  82. /// id stream, that contains the index of the corresponding id record
  83. /// in the destination stream.
  84. ///
  85. /// \param IdsAndTypes The collection of id records to merge in.
  86. ///
  87. /// \returns Error::success() if the operation succeeded, otherwise an
  88. /// appropriate error code.
  89. Error mergeTypeAndIdRecords(MergingTypeTableBuilder &DestIds,
  90.                             MergingTypeTableBuilder &DestTypes,
  91.                             SmallVectorImpl<TypeIndex> &SourceToDest,
  92.                             const CVTypeArray &IdsAndTypes,
  93.                             std::optional<PCHMergerInfo> &PCHInfo);
  94.  
  95. Error mergeTypeAndIdRecords(GlobalTypeTableBuilder &DestIds,
  96.                             GlobalTypeTableBuilder &DestTypes,
  97.                             SmallVectorImpl<TypeIndex> &SourceToDest,
  98.                             const CVTypeArray &IdsAndTypes,
  99.                             ArrayRef<GloballyHashedType> Hashes,
  100.                             std::optional<PCHMergerInfo> &PCHInfo);
  101.  
  102. Error mergeTypeRecords(GlobalTypeTableBuilder &Dest,
  103.                        SmallVectorImpl<TypeIndex> &SourceToDest,
  104.                        const CVTypeArray &Types,
  105.                        ArrayRef<GloballyHashedType> Hashes,
  106.                        std::optional<PCHMergerInfo> &PCHInfo);
  107.  
  108. Error mergeIdRecords(GlobalTypeTableBuilder &Dest, ArrayRef<TypeIndex> Types,
  109.                      SmallVectorImpl<TypeIndex> &SourceToDest,
  110.                      const CVTypeArray &Ids,
  111.                      ArrayRef<GloballyHashedType> Hashes);
  112.  
  113. } // end namespace codeview
  114. } // end namespace llvm
  115.  
  116. #endif // LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
  117.