diff --git a/lib/CodeGen/AsmPrinter/DIEHash.cpp b/lib/CodeGen/AsmPrinter/DIEHash.cpp index 40db1b2eb0c..1581c9682da 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(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 d83f78f68b4..8a40818cd3b 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 c4ba9ca75c9..f0fe0d4cd5b 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}