summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-09-03 20:00:20 +0000
committerEric Christopher <echristo@gmail.com>2013-09-03 20:00:20 +0000
commitbd18c8d0903b695bd503a45cf11901d48eea61bd (patch)
tree6b6d2fa8376e5ffa616aadf2dd982731d4657ddc
parentd8f2eb301c05b2d664a284df7604b82dad7ecab8 (diff)
downloadllvm-bd18c8d0903b695bd503a45cf11901d48eea61bd.tar.gz
llvm-bd18c8d0903b695bd503a45cf11901d48eea61bd.tar.bz2
llvm-bd18c8d0903b695bd503a45cf11901d48eea61bd.tar.xz
Add the rest of the stock attributes to the attribute table.
This won't affect the kinds of hashes we test for as we actually do hashing based on form and attribute. Change the fission-hash testcase one last time to handle DW_AT_comp_dir. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189840 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DIEHash.cpp196
-rw-r--r--lib/CodeGen/AsmPrinter/DIEHash.h50
-rw-r--r--test/DebugInfo/X86/fission-hash.ll4
3 files changed, 242 insertions, 8 deletions
diff --git a/lib/CodeGen/AsmPrinter/DIEHash.cpp b/lib/CodeGen/AsmPrinter/DIEHash.cpp
index 40db1b2eb0..1581c9682d 100644
--- a/lib/CodeGen/AsmPrinter/DIEHash.cpp
+++ b/lib/CodeGen/AsmPrinter/DIEHash.cpp
@@ -119,8 +119,146 @@ void DIEHash::collectAttributes(DIE *Die, DIEAttrs &Attrs) {
case dwarf::DW_AT_name:
COLLECT_ATTR(DW_AT_name);
break;
- case dwarf::DW_AT_language:
- COLLECT_ATTR(DW_AT_language);
+ case dwarf::DW_AT_accessibility:
+ COLLECT_ATTR(DW_AT_accessibility)
+ break;
+ case dwarf::DW_AT_address_class:
+ COLLECT_ATTR(DW_AT_address_class)
+ break;
+ case dwarf::DW_AT_allocated:
+ COLLECT_ATTR(DW_AT_allocated)
+ break;
+ case dwarf::DW_AT_artificial:
+ COLLECT_ATTR(DW_AT_artificial)
+ break;
+ case dwarf::DW_AT_associated:
+ COLLECT_ATTR(DW_AT_associated)
+ break;
+ case dwarf::DW_AT_binary_scale:
+ COLLECT_ATTR(DW_AT_binary_scale)
+ break;
+ case dwarf::DW_AT_bit_offset:
+ COLLECT_ATTR(DW_AT_bit_offset)
+ break;
+ case dwarf::DW_AT_bit_size:
+ COLLECT_ATTR(DW_AT_bit_size)
+ break;
+ case dwarf::DW_AT_bit_stride:
+ COLLECT_ATTR(DW_AT_bit_stride)
+ break;
+ case dwarf::DW_AT_byte_size:
+ COLLECT_ATTR(DW_AT_byte_size)
+ break;
+ case dwarf::DW_AT_byte_stride:
+ COLLECT_ATTR(DW_AT_byte_stride)
+ break;
+ case dwarf::DW_AT_const_expr:
+ COLLECT_ATTR(DW_AT_const_expr)
+ break;
+ case dwarf::DW_AT_const_value:
+ COLLECT_ATTR(DW_AT_const_value)
+ break;
+ case dwarf::DW_AT_containing_type:
+ COLLECT_ATTR(DW_AT_containing_type)
+ break;
+ case dwarf::DW_AT_count:
+ COLLECT_ATTR(DW_AT_count)
+ break;
+ case dwarf::DW_AT_data_bit_offset:
+ COLLECT_ATTR(DW_AT_data_bit_offset)
+ break;
+ case dwarf::DW_AT_data_location:
+ COLLECT_ATTR(DW_AT_data_location)
+ break;
+ case dwarf::DW_AT_data_member_location:
+ COLLECT_ATTR(DW_AT_data_member_location)
+ break;
+ case dwarf::DW_AT_decimal_scale:
+ COLLECT_ATTR(DW_AT_decimal_scale)
+ break;
+ case dwarf::DW_AT_decimal_sign:
+ COLLECT_ATTR(DW_AT_decimal_sign)
+ break;
+ case dwarf::DW_AT_default_value:
+ COLLECT_ATTR(DW_AT_default_value)
+ break;
+ case dwarf::DW_AT_digit_count:
+ COLLECT_ATTR(DW_AT_digit_count)
+ break;
+ case dwarf::DW_AT_discr:
+ COLLECT_ATTR(DW_AT_discr)
+ break;
+ case dwarf::DW_AT_discr_list:
+ COLLECT_ATTR(DW_AT_discr_list)
+ break;
+ case dwarf::DW_AT_discr_value:
+ COLLECT_ATTR(DW_AT_discr_value)
+ break;
+ case dwarf::DW_AT_encoding:
+ COLLECT_ATTR(DW_AT_encoding)
+ break;
+ case dwarf::DW_AT_enum_class:
+ COLLECT_ATTR(DW_AT_enum_class)
+ break;
+ case dwarf::DW_AT_endianity:
+ COLLECT_ATTR(DW_AT_endianity)
+ break;
+ case dwarf::DW_AT_explicit:
+ COLLECT_ATTR(DW_AT_explicit)
+ break;
+ case dwarf::DW_AT_is_optional:
+ COLLECT_ATTR(DW_AT_is_optional)
+ break;
+ case dwarf::DW_AT_location:
+ COLLECT_ATTR(DW_AT_location)
+ break;
+ case dwarf::DW_AT_lower_bound:
+ COLLECT_ATTR(DW_AT_lower_bound)
+ break;
+ case dwarf::DW_AT_mutable:
+ COLLECT_ATTR(DW_AT_mutable)
+ break;
+ case dwarf::DW_AT_ordering:
+ COLLECT_ATTR(DW_AT_ordering)
+ break;
+ case dwarf::DW_AT_picture_string:
+ COLLECT_ATTR(DW_AT_picture_string)
+ break;
+ case dwarf::DW_AT_prototyped:
+ COLLECT_ATTR(DW_AT_prototyped)
+ break;
+ case dwarf::DW_AT_small:
+ COLLECT_ATTR(DW_AT_small)
+ break;
+ case dwarf::DW_AT_segment:
+ COLLECT_ATTR(DW_AT_segment)
+ break;
+ case dwarf::DW_AT_string_length:
+ COLLECT_ATTR(DW_AT_string_length)
+ break;
+ case dwarf::DW_AT_threads_scaled:
+ COLLECT_ATTR(DW_AT_threads_scaled)
+ break;
+ case dwarf::DW_AT_upper_bound:
+ COLLECT_ATTR(DW_AT_upper_bound)
+ break;
+ case dwarf::DW_AT_use_location:
+ COLLECT_ATTR(DW_AT_use_location)
+ break;
+ case dwarf::DW_AT_use_UTF8:
+ COLLECT_ATTR(DW_AT_use_UTF8)
+ break;
+ case dwarf::DW_AT_variable_parameter:
+ COLLECT_ATTR(DW_AT_variable_parameter)
+ break;
+ case dwarf::DW_AT_virtuality:
+ COLLECT_ATTR(DW_AT_virtuality)
+ break;
+ case dwarf::DW_AT_visibility:
+ COLLECT_ATTR(DW_AT_visibility)
+ break;
+ case dwarf::DW_AT_vtable_elem_location:
+ COLLECT_ATTR(DW_AT_vtable_elem_location)
break;
default:
break;
@@ -145,7 +283,8 @@ void DIEHash::hashAttribute(AttrEntry Attr) {
// TODO: Add support for additional forms.
switch (Desc->getForm()) {
- // TODO: We'll want to add DW_FORM_string here if we start emitting them again.
+ // TODO: We'll want to add DW_FORM_string here if we start emitting them
+ // again.
case dwarf::DW_FORM_strp:
addString(cast<DIEString>(Value)->getString());
break;
@@ -168,9 +307,56 @@ void DIEHash::hashAttributes(const DIEAttrs &Attrs) {
hashAttribute(ATTR); \
}
- // FIXME: Add the rest.
ADD_ATTR(Attrs.DW_AT_name);
- ADD_ATTR(Attrs.DW_AT_language);
+ ADD_ATTR(Attrs.DW_AT_accessibility);
+ ADD_ATTR(Attrs.DW_AT_address_class);
+ ADD_ATTR(Attrs.DW_AT_allocated);
+ ADD_ATTR(Attrs.DW_AT_artificial);
+ ADD_ATTR(Attrs.DW_AT_associated);
+ ADD_ATTR(Attrs.DW_AT_binary_scale);
+ ADD_ATTR(Attrs.DW_AT_bit_offset);
+ ADD_ATTR(Attrs.DW_AT_bit_size);
+ ADD_ATTR(Attrs.DW_AT_bit_stride);
+ ADD_ATTR(Attrs.DW_AT_byte_size);
+ ADD_ATTR(Attrs.DW_AT_byte_stride);
+ ADD_ATTR(Attrs.DW_AT_const_expr);
+ ADD_ATTR(Attrs.DW_AT_const_value);
+ ADD_ATTR(Attrs.DW_AT_containing_type);
+ ADD_ATTR(Attrs.DW_AT_count);
+ ADD_ATTR(Attrs.DW_AT_data_bit_offset);
+ ADD_ATTR(Attrs.DW_AT_data_location);
+ ADD_ATTR(Attrs.DW_AT_data_member_location);
+ ADD_ATTR(Attrs.DW_AT_decimal_scale);
+ ADD_ATTR(Attrs.DW_AT_decimal_sign);
+ ADD_ATTR(Attrs.DW_AT_default_value);
+ ADD_ATTR(Attrs.DW_AT_digit_count);
+ ADD_ATTR(Attrs.DW_AT_discr);
+ ADD_ATTR(Attrs.DW_AT_discr_list);
+ ADD_ATTR(Attrs.DW_AT_discr_value);
+ ADD_ATTR(Attrs.DW_AT_encoding);
+ ADD_ATTR(Attrs.DW_AT_enum_class);
+ ADD_ATTR(Attrs.DW_AT_endianity);
+ ADD_ATTR(Attrs.DW_AT_explicit);
+ ADD_ATTR(Attrs.DW_AT_is_optional);
+ ADD_ATTR(Attrs.DW_AT_location);
+ ADD_ATTR(Attrs.DW_AT_lower_bound);
+ ADD_ATTR(Attrs.DW_AT_mutable);
+ ADD_ATTR(Attrs.DW_AT_ordering);
+ ADD_ATTR(Attrs.DW_AT_picture_string);
+ ADD_ATTR(Attrs.DW_AT_prototyped);
+ ADD_ATTR(Attrs.DW_AT_small);
+ ADD_ATTR(Attrs.DW_AT_segment);
+ ADD_ATTR(Attrs.DW_AT_string_length);
+ ADD_ATTR(Attrs.DW_AT_threads_scaled);
+ ADD_ATTR(Attrs.DW_AT_upper_bound);
+ ADD_ATTR(Attrs.DW_AT_use_location);
+ ADD_ATTR(Attrs.DW_AT_use_UTF8);
+ ADD_ATTR(Attrs.DW_AT_variable_parameter);
+ ADD_ATTR(Attrs.DW_AT_virtuality);
+ ADD_ATTR(Attrs.DW_AT_visibility);
+ ADD_ATTR(Attrs.DW_AT_vtable_elem_location);
+
+ // FIXME: Add the extended attributes.
}
// Add all of the attributes for \param Die to the hash.
diff --git a/lib/CodeGen/AsmPrinter/DIEHash.h b/lib/CodeGen/AsmPrinter/DIEHash.h
index d83f78f68b..8a40818cd3 100644
--- a/lib/CodeGen/AsmPrinter/DIEHash.h
+++ b/lib/CodeGen/AsmPrinter/DIEHash.h
@@ -29,7 +29,55 @@ class DIEHash {
// Collection of all attributes used in hashing a particular DIE.
struct DIEAttrs {
AttrEntry DW_AT_name;
- AttrEntry DW_AT_language;
+ AttrEntry DW_AT_accessibility;
+ AttrEntry DW_AT_address_class;
+ AttrEntry DW_AT_allocated;
+ AttrEntry DW_AT_artificial;
+ AttrEntry DW_AT_associated;
+ AttrEntry DW_AT_binary_scale;
+ AttrEntry DW_AT_bit_offset;
+ AttrEntry DW_AT_bit_size;
+ AttrEntry DW_AT_bit_stride;
+ AttrEntry DW_AT_byte_size;
+ AttrEntry DW_AT_byte_stride;
+ AttrEntry DW_AT_const_expr;
+ AttrEntry DW_AT_const_value;
+ AttrEntry DW_AT_containing_type;
+ AttrEntry DW_AT_count;
+ AttrEntry DW_AT_data_bit_offset;
+ AttrEntry DW_AT_data_location;
+ AttrEntry DW_AT_data_member_location;
+ AttrEntry DW_AT_decimal_scale;
+ AttrEntry DW_AT_decimal_sign;
+ AttrEntry DW_AT_default_value;
+ AttrEntry DW_AT_digit_count;
+ AttrEntry DW_AT_discr;
+ AttrEntry DW_AT_discr_list;
+ AttrEntry DW_AT_discr_value;
+ AttrEntry DW_AT_encoding;
+ AttrEntry DW_AT_enum_class;
+ AttrEntry DW_AT_endianity;
+ AttrEntry DW_AT_explicit;
+ AttrEntry DW_AT_is_optional;
+ AttrEntry DW_AT_location;
+ AttrEntry DW_AT_lower_bound;
+ AttrEntry DW_AT_mutable;
+ AttrEntry DW_AT_ordering;
+ AttrEntry DW_AT_picture_string;
+ AttrEntry DW_AT_prototyped;
+ AttrEntry DW_AT_small;
+ AttrEntry DW_AT_segment;
+ AttrEntry DW_AT_string_length;
+ AttrEntry DW_AT_threads_scaled;
+ AttrEntry DW_AT_upper_bound;
+ AttrEntry DW_AT_use_location;
+ AttrEntry DW_AT_use_UTF8;
+ AttrEntry DW_AT_variable_parameter;
+ AttrEntry DW_AT_virtuality;
+ AttrEntry DW_AT_visibility;
+ AttrEntry DW_AT_vtable_elem_location;
+
+ // Insert any additional ones here...
};
public:
diff --git a/test/DebugInfo/X86/fission-hash.ll b/test/DebugInfo/X86/fission-hash.ll
index c4ba9ca75c..f0fe0d4cd5 100644
--- a/test/DebugInfo/X86/fission-hash.ll
+++ b/test/DebugInfo/X86/fission-hash.ll
@@ -3,8 +3,8 @@
; The source is an empty file.
-; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc357bdf055b6393d)
-; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc357bdf055b6393d)
+; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xa188c11a9264c05d)
+; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xa188c11a9264c05d)
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3}