Hi!
output_view_list_offset does:
if (dwarf_split_debug_info)
dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
"%s", dwarf_attr_name (a->dw_attr));
else
dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
"%s", dwarf_attr_name (a->dw_attr));
while output_loc_list_offset does:
if (!dwarf_split_debug_info)
dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
"%s", dwarf_attr_name (a->dw_attr));
else if (dwarf_version >= 5)
{
gcc_assert (AT_loc_list (a)->num_assigned);
dw2_asm_output_data_uleb128 (AT_loc_list (a)->hash, "%s (%s)",
dwarf_attr_name (a->dw_attr),
sym);
}
else
dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
"%s", dwarf_attr_name (a->dw_attr));
but both size_of_die and value_format handle both the same as loc_list,
so for -gdwarf-5 -gsplit-dwarf we just ICE, as e.g. AT_loc_list is not
valid on a view list.
Assuming output_view_list_offset is correct, the following patch adjusts
size_of_die/value_format accordingly.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2019-03-04 Jakub Jelinek <[email protected]>
PR debug/89498
* dwarf2out.c (size_of_die): For dw_val_class_view_list always use
DWARF_OFFSET_SIZE.
(value_format): For dw_val_class_view_list never use DW_FORM_loclistx.
--- gcc/dwarf2out.c.jj 2019-03-01 09:04:15.440751912 +0100
+++ gcc/dwarf2out.c 2019-03-04 17:58:59.501542373 +0100
@@ -9351,7 +9351,6 @@ size_of_die (dw_die_ref die)
}
break;
case dw_val_class_loc_list:
- case dw_val_class_view_list:
if (dwarf_split_debug_info && dwarf_version >= 5)
{
gcc_assert (AT_loc_list (a)->num_assigned);
@@ -9360,6 +9359,9 @@ size_of_die (dw_die_ref die)
else
size += DWARF_OFFSET_SIZE;
break;
+ case dw_val_class_view_list:
+ size += DWARF_OFFSET_SIZE;
+ break;
case dw_val_class_range_list:
if (value_format (a) == DW_FORM_rnglistx)
{
@@ -9733,12 +9735,12 @@ value_format (dw_attr_node *a)
gcc_unreachable ();
}
case dw_val_class_loc_list:
- case dw_val_class_view_list:
if (dwarf_split_debug_info
&& dwarf_version >= 5
&& AT_loc_list (a)->num_assigned)
return DW_FORM_loclistx;
/* FALLTHRU */
+ case dw_val_class_view_list:
case dw_val_class_range_list:
/* For range lists in DWARF 5, use DW_FORM_rnglistx from .debug_info.dwo
but in .debug_info use DW_FORM_sec_offset, which is shorter if we
Jakub