From 25b7adc8cecc675ff238681c0fae75cdffd4ff91 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Tue, 3 Sep 2013 21:57:57 +0000 Subject: Add a hashing routine that handles hashing types. Add a test for hashing the contents of DW_FORM_data1 on top of a type with attributes. llvm-svn: 189862 --- llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp') diff --git a/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp b/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp index 1581c9682da..519c8a00685 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp @@ -422,6 +422,7 @@ uint64_t DIEHash::computeDIEODRSignature(DIE *Die) { /// This is based on the type signature computation given in section 7.27 of the /// DWARF4 standard. It is an md5 hash of the flattened description of the DIE /// with the inclusion of the full CU and all top level CU entities. +// TODO: Initialize the type chain at 0 instead of 1 for CU signatures. uint64_t DIEHash::computeCUSignature(DIE *Die) { // Hash the DIE. @@ -436,3 +437,22 @@ uint64_t DIEHash::computeCUSignature(DIE *Die) { // appropriately. return *reinterpret_cast(Result + 8); } + +/// This is based on the type signature computation given in section 7.27 of the +/// DWARF4 standard. It is an md5 hash of the flattened description of the DIE +/// with the inclusion of additional forms not specifically called out in the +/// standard. +uint64_t DIEHash::computeTypeSignature(DIE *Die) { + + // Hash the DIE. + computeHash(Die); + + // Now return the result. + MD5::MD5Result Result; + Hash.final(Result); + + // ... take the least significant 8 bytes and return those. Our MD5 + // implementation always returns its results in little endian, swap bytes + // appropriately. + return *reinterpret_cast(Result + 8); +} -- cgit v1.2.3