From: Mark Wielaard Date: Tue, 1 Sep 2020 13:29:56 +0000 (+0200) Subject: gas: Use DW_FORM_sec_offset for DWARF version 4 or higher. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=dd216e07a156c19e589fc5f481fe13a256262801;p=binutils-gdb.git gas: Use DW_FORM_sec_offset for DWARF version 4 or higher. Older DWARF versions used DW_FORM_data4 or DW_FORM_data8 for offsets into sections for e.g. DW_AT_stmt_list ot DW_AT_ranges. But version 4 introduced a dedicated form for such section offsets. Make sure to emit the proper form for newer DWARF versions. gas/ChangeLog: * dwarf2dbg.c (out_debug_abbrev): Use DW_FORM_sec_offset for DWARF version 4 or higher. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 004834f68c9..41c92cf9c72 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2020-09-01 Mark Wielaard + + * dwarf2dbg.c (out_debug_abbrev): Use DW_FORM_sec_offset for DWARF + version 4 or higher. + 2020-09-02 Alan Modra * expr.c (add_to_result, subtract_from_result): Use unsigned diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index e4ba56d82ba..8d19c1d938c 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -2429,15 +2429,22 @@ out_debug_abbrev (segT abbrev_seg, segT info_seg ATTRIBUTE_UNUSED, segT line_seg ATTRIBUTE_UNUSED) { + int secoff_form; subseg_set (abbrev_seg, 0); out_uleb128 (1); out_uleb128 (DW_TAG_compile_unit); out_byte (DW_CHILDREN_no); - if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit) - out_abbrev (DW_AT_stmt_list, DW_FORM_data4); + if (DWARF2_VERSION < 4) + { + if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit) + secoff_form = DW_FORM_data4; + else + secoff_form = DW_FORM_data8; + } else - out_abbrev (DW_AT_stmt_list, DW_FORM_data8); + secoff_form = DW_FORM_sec_offset; + out_abbrev (DW_AT_stmt_list, secoff_form); if (all_segs->next == NULL) { out_abbrev (DW_AT_low_pc, DW_FORM_addr); @@ -2447,12 +2454,7 @@ out_debug_abbrev (segT abbrev_seg, out_abbrev (DW_AT_high_pc, DW_FORM_udata); } else - { - if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit) - out_abbrev (DW_AT_ranges, DW_FORM_data4); - else - out_abbrev (DW_AT_ranges, DW_FORM_data8); - } + out_abbrev (DW_AT_ranges, secoff_form); out_abbrev (DW_AT_name, DW_FORM_strp); out_abbrev (DW_AT_comp_dir, DW_FORM_strp); out_abbrev (DW_AT_producer, DW_FORM_strp);