diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DIEHash.h')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DIEHash.h | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DIEHash.h b/llvm/lib/CodeGen/AsmPrinter/DIEHash.h index 27e3c576318..3c025bb58ee 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DIEHash.h +++ b/llvm/lib/CodeGen/AsmPrinter/DIEHash.h @@ -20,15 +20,35 @@ class CompileUnit; /// \brief An object containing the capability of hashing and adding hash /// attributes onto a DIE. class DIEHash { + // The entry for a particular attribute. + struct AttrEntry { + const DIEValue *Val; + const DIEAbbrevData *Desc; + }; + + // Collection of all attributes used in hashing a particular DIE. + struct DIEAttrs { + AttrEntry DW_AT_name; + }; + public: /// \brief Computes the ODR signature uint64_t computeDIEODRSignature(DIE *Die); + /// \brief Computes the CU signature + uint64_t computeCUSignature(DIE *Die); + // Helper routines to process parts of a DIE. - private: +private: /// \brief Adds the parent context of \param Die to the hash. void addParentContext(DIE *Die); - + + /// \brief Adds the attributes of \param Die to the hash. + void addAttributes(DIE *Die); + + /// \brief Computes the full DWARF4 7.27 hash of the DIE. + void computeHash(DIE *Die); + // Routines that add DIEValues to the hash. private: /// \brief Encodes and adds \param Value to the hash as a ULEB128. @@ -36,7 +56,17 @@ private: /// \brief Adds \param Str to the hash and includes a NULL byte. void addString(StringRef Str); - + + /// \brief Collects the attributes of DIE \param Die into the \param Attrs + /// structure. + void collectAttributes(DIE *Die, DIEAttrs Attrs); + + /// \brief Hashes the attributes in \param Attrs in order. + void hashAttributes(DIEAttrs Attrs); + + /// \brief Hashes an individual attribute. + void hashAttribute(AttrEntry Attr); + private: MD5 Hash; }; |