summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-09-03 21:57:57 +0000
committerEric Christopher <echristo@gmail.com>2013-09-03 21:57:57 +0000
commit25b7adc8cecc675ff238681c0fae75cdffd4ff91 (patch)
tree341b01464ef0d7108563dd9dec4242764aea8575 /llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp
parentb86e2ad8190c8b70d2ee35bcc0faceae56e19637 (diff)
downloadbcm5719-llvm-25b7adc8cecc675ff238681c0fae75cdffd4ff91.tar.gz
bcm5719-llvm-25b7adc8cecc675ff238681c0fae75cdffd4ff91.zip
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
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp20
1 files changed, 20 insertions, 0 deletions
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<support::ulittle64_t *>(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<support::ulittle64_t *>(Result + 8);
+}
OpenPOWER on IntegriCloud