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.

llvm-svn: 189840
This commit is contained in:
Eric Christopher 2013-09-03 20:00:20 +00:00
parent 7deccf0f06
commit e020fa7c9c
3 changed files with 242 additions and 8 deletions

View File

@ -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.

View File

@ -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:

View File

@ -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}