forked from OSchip/llvm-project
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
This commit is contained in:
parent
b86e2ad819
commit
25b7adc8ce
|
@ -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
|
/// 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
|
/// 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.
|
/// 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) {
|
uint64_t DIEHash::computeCUSignature(DIE *Die) {
|
||||||
|
|
||||||
// Hash the DIE.
|
// Hash the DIE.
|
||||||
|
@ -436,3 +437,22 @@ uint64_t DIEHash::computeCUSignature(DIE *Die) {
|
||||||
// appropriately.
|
// appropriately.
|
||||||
return *reinterpret_cast<support::ulittle64_t *>(Result + 8);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -87,6 +87,9 @@ public:
|
||||||
/// \brief Computes the CU signature.
|
/// \brief Computes the CU signature.
|
||||||
uint64_t computeCUSignature(DIE *Die);
|
uint64_t computeCUSignature(DIE *Die);
|
||||||
|
|
||||||
|
/// \brief Computes the type signature.
|
||||||
|
uint64_t computeTypeSignature(DIE *Die);
|
||||||
|
|
||||||
// Helper routines to process parts of a DIE.
|
// Helper routines to process parts of a DIE.
|
||||||
private:
|
private:
|
||||||
/// \brief Adds the parent context of \param Die to the hash.
|
/// \brief Adds the parent context of \param Die to the hash.
|
||||||
|
|
|
@ -8,6 +8,7 @@ endfunction()
|
||||||
add_subdirectory(ADT)
|
add_subdirectory(ADT)
|
||||||
add_subdirectory(Analysis)
|
add_subdirectory(Analysis)
|
||||||
add_subdirectory(Bitcode)
|
add_subdirectory(Bitcode)
|
||||||
|
add_subdirectory(CodeGen)
|
||||||
add_subdirectory(DebugInfo)
|
add_subdirectory(DebugInfo)
|
||||||
add_subdirectory(ExecutionEngine)
|
add_subdirectory(ExecutionEngine)
|
||||||
add_subdirectory(IR)
|
add_subdirectory(IR)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
set(LLVM_LINK_COMPONENTS
|
||||||
|
asmprinter
|
||||||
|
codegen
|
||||||
|
support
|
||||||
|
)
|
||||||
|
|
||||||
|
set(DebugInfoSources
|
||||||
|
DIEHashTest.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_llvm_unittest(DebugInfoTests
|
||||||
|
${DebugInfoSources}
|
||||||
|
)
|
|
@ -0,0 +1,29 @@
|
||||||
|
//===- llvm/unittest/DebugInfo/DWARFFormValueTest.cpp ---------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "../lib/CodeGen/AsmPrinter/DIE.h"
|
||||||
|
#include "../lib/CodeGen/AsmPrinter/DIEHash.h"
|
||||||
|
#include "llvm/Support/Dwarf.h"
|
||||||
|
#include "llvm/Support/Debug.h"
|
||||||
|
#include "llvm/Support/Format.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
using namespace llvm;
|
||||||
|
TEST(DIEHashData1Test, DIEHash) {
|
||||||
|
DIEHash Hash;
|
||||||
|
DIE *Die = new DIE(dwarf::DW_TAG_base_type);
|
||||||
|
DIEValue *Size = new DIEInteger(4);
|
||||||
|
Die->addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Size);
|
||||||
|
uint64_t MD5Res = Hash.computeTypeSignature(Die);
|
||||||
|
ASSERT_TRUE(MD5Res == 0x540e9ff30ade3e4a);
|
||||||
|
delete Die;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
##===- unittests/DebugInfo/Makefile ------------------------*- Makefile -*-===##
|
||||||
|
#
|
||||||
|
# The LLVM Compiler Infrastructure
|
||||||
|
#
|
||||||
|
# This file is distributed under the University of Illinois Open Source
|
||||||
|
# License. See LICENSE.TXT for details.
|
||||||
|
#
|
||||||
|
##===----------------------------------------------------------------------===##
|
||||||
|
|
||||||
|
LEVEL = ../..
|
||||||
|
TESTNAME = CodeGen
|
||||||
|
LINK_COMPONENTS := asmprinter codegen support
|
||||||
|
|
||||||
|
include $(LEVEL)/Makefile.config
|
||||||
|
|
||||||
|
include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
|
|
@ -9,8 +9,8 @@
|
||||||
|
|
||||||
LEVEL = ..
|
LEVEL = ..
|
||||||
|
|
||||||
PARALLEL_DIRS = ADT Analysis Bitcode DebugInfo ExecutionEngine IR Object \
|
PARALLEL_DIRS = ADT Analysis Bitcode CodeGen DebugInfo ExecutionEngine IR \
|
||||||
Option Support Transforms
|
Object Option Support Transforms
|
||||||
|
|
||||||
include $(LEVEL)/Makefile.common
|
include $(LEVEL)/Makefile.common
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue