dwarf2.def (DW_AT_string_length_bit_size, [...]): New attributes.
* dwarf2.def (DW_AT_string_length_bit_size, DW_AT_string_length_byte_size): New attributes. * dwarf2out.c (struct checksum_attributes): Add at_string_length_bit_size and at_string_length_byte_size fields. (collect_checksum_attributes): Handle DW_AT_string_length_bit_size and DW_AT_string_length_byte_size. (die_checksum_ordered): Handle at_string_length_bit_size and at_string_length_byte_size. (gen_array_type_die): For dwarf_version >= 5 emit DW_AT_string_length_byte_size instead of DW_AT_byte_size. (adjust_string_types): For dwarf_version >= 5 remove DW_AT_string_length_byte_size instead of DW_AT_byte_size. (resolve_addr): Likewise. From-SVN: r239470
This commit is contained in:
parent
8ae261c007
commit
980bd53780
4 changed files with 43 additions and 8 deletions
|
@ -1,5 +1,17 @@
|
|||
2016-08-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* dwarf2out.c (struct checksum_attributes): Add
|
||||
at_string_length_bit_size and at_string_length_byte_size fields.
|
||||
(collect_checksum_attributes): Handle DW_AT_string_length_bit_size
|
||||
and DW_AT_string_length_byte_size.
|
||||
(die_checksum_ordered): Handle at_string_length_bit_size and
|
||||
at_string_length_byte_size.
|
||||
(gen_array_type_die): For dwarf_version >= 5 emit
|
||||
DW_AT_string_length_byte_size instead of DW_AT_byte_size.
|
||||
(adjust_string_types): For dwarf_version >= 5 remove
|
||||
DW_AT_string_length_byte_size instead of DW_AT_byte_size.
|
||||
(resolve_addr): Likewise.
|
||||
|
||||
PR debug/71906
|
||||
* dwarf2out.c (string_types): New variable.
|
||||
(gen_array_type_die): Change early_dwarf handling of
|
||||
|
|
|
@ -6363,6 +6363,8 @@ struct checksum_attributes
|
|||
dw_attr_node *at_small;
|
||||
dw_attr_node *at_segment;
|
||||
dw_attr_node *at_string_length;
|
||||
dw_attr_node *at_string_length_bit_size;
|
||||
dw_attr_node *at_string_length_byte_size;
|
||||
dw_attr_node *at_threads_scaled;
|
||||
dw_attr_node *at_upper_bound;
|
||||
dw_attr_node *at_use_location;
|
||||
|
@ -6502,6 +6504,12 @@ collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
|
|||
case DW_AT_string_length:
|
||||
attrs->at_string_length = a;
|
||||
break;
|
||||
case DW_AT_string_length_bit_size:
|
||||
attrs->at_string_length_bit_size = a;
|
||||
break;
|
||||
case DW_AT_string_length_byte_size:
|
||||
attrs->at_string_length_byte_size = a;
|
||||
break;
|
||||
case DW_AT_threads_scaled:
|
||||
attrs->at_threads_scaled = a;
|
||||
break;
|
||||
|
@ -6588,6 +6596,8 @@ die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
|
|||
CHECKSUM_ATTR (attrs.at_small);
|
||||
CHECKSUM_ATTR (attrs.at_segment);
|
||||
CHECKSUM_ATTR (attrs.at_string_length);
|
||||
CHECKSUM_ATTR (attrs.at_string_length_bit_size);
|
||||
CHECKSUM_ATTR (attrs.at_string_length_byte_size);
|
||||
CHECKSUM_ATTR (attrs.at_threads_scaled);
|
||||
CHECKSUM_ATTR (attrs.at_upper_bound);
|
||||
CHECKSUM_ATTR (attrs.at_use_location);
|
||||
|
@ -19355,7 +19365,9 @@ gen_array_type_die (tree type, dw_die_ref context_die)
|
|||
add_AT_location_description (array_die, DW_AT_string_length,
|
||||
loc);
|
||||
if (size != DWARF2_ADDR_SIZE)
|
||||
add_AT_unsigned (array_die, DW_AT_byte_size, size);
|
||||
add_AT_unsigned (array_die, dwarf_version >= 5
|
||||
? DW_AT_string_length_byte_size
|
||||
: DW_AT_byte_size, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19448,7 +19460,9 @@ adjust_string_types (void)
|
|||
else
|
||||
{
|
||||
remove_AT (array_die, DW_AT_string_length);
|
||||
remove_AT (array_die, DW_AT_byte_size);
|
||||
remove_AT (array_die, dwarf_version >= 5
|
||||
? DW_AT_string_length_byte_size
|
||||
: DW_AT_byte_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26909,8 +26923,8 @@ copy_deref_exprloc (dw_loc_descr_ref expr, dw_loc_descr_ref deref)
|
|||
|
||||
/* For DW_AT_string_length attribute with DW_OP_call4 reference to a variable
|
||||
or argument, adjust it if needed and return:
|
||||
-1 if the DW_AT_string_length attribute and DW_AT_byte_size attribute
|
||||
if present should be removed
|
||||
-1 if the DW_AT_string_length attribute and DW_AT_{string_length_,}byte_size
|
||||
attribute if present should be removed
|
||||
0 keep the attribute as is if the referenced var or argument has
|
||||
only DWARF expression that covers all ranges
|
||||
1 if the attribute has been successfully adjusted. */
|
||||
|
@ -27083,8 +27097,8 @@ resolve_addr (dw_die_ref die)
|
|||
case -1:
|
||||
remove_AT (die, a->dw_attr);
|
||||
ix--;
|
||||
/* For DWARF4 and earlier, if we drop DW_AT_string_length,
|
||||
we need to drop also DW_AT_byte_size. */
|
||||
/* If we drop DW_AT_string_length, we need to drop also
|
||||
DW_AT_{string_length_,}byte_size. */
|
||||
remove_AT_byte_size = true;
|
||||
continue;
|
||||
default:
|
||||
|
@ -27181,7 +27195,9 @@ resolve_addr (dw_die_ref die)
|
|||
}
|
||||
|
||||
if (remove_AT_byte_size)
|
||||
remove_AT (die, DW_AT_byte_size);
|
||||
remove_AT (die, dwarf_version >= 5
|
||||
? DW_AT_string_length_byte_size
|
||||
: DW_AT_byte_size);
|
||||
|
||||
FOR_EACH_CHILD (die, c, resolve_addr (c));
|
||||
}
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
2016-08-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* dwarf2.def (DW_AT_string_length_bit_size,
|
||||
DW_AT_string_length_byte_size): New attributes.
|
||||
|
||||
2016-08-12 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR debug/63240
|
||||
* dwarf2.def (DW_AT_deleted, DW_AT_defaulted): New.
|
||||
* dwarf2.h (enu dwarf_defaulted_attribute): New.
|
||||
* dwarf2.h (enum dwarf_defaulted_attribute): New.
|
||||
|
||||
2016-07-29 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
|
|
|
@ -309,6 +309,8 @@ DW_AT (DW_AT_const_expr, 0x6c)
|
|||
DW_AT (DW_AT_enum_class, 0x6d)
|
||||
DW_AT (DW_AT_linkage_name, 0x6e)
|
||||
/* DWARF 5. */
|
||||
DW_AT (DW_AT_string_length_bit_size, 0x6f)
|
||||
DW_AT (DW_AT_string_length_byte_size, 0x70)
|
||||
DW_AT (DW_AT_noreturn, 0x87)
|
||||
DW_AT (DW_AT_deleted, 0x8a)
|
||||
DW_AT (DW_AT_defaulted, 0x8b)
|
||||
|
|
Loading…
Add table
Reference in a new issue