diff options
author | Mark Wielaard <mark@klomp.org> | 2020-09-01 15:29:56 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2020-09-03 18:00:03 +0200 |
commit | dd216e07a156c19e589fc5f481fe13a256262801 (patch) | |
tree | 7f3660bd2e6bce746fc5a497ab65651c7b92bc9e /gas | |
parent | ac267c754cecd2bbbfc71feb9ca8ec84f6754cb4 (diff) | |
download | gdb-dd216e07a156c19e589fc5f481fe13a256262801.zip gdb-dd216e07a156c19e589fc5f481fe13a256262801.tar.gz gdb-dd216e07a156c19e589fc5f481fe13a256262801.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/dwarf2dbg.c | 20 |
2 files changed, 16 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 004834f..41c92cf 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2020-09-01 Mark Wielaard <mark@klomp.org> + + * dwarf2dbg.c (out_debug_abbrev): Use DW_FORM_sec_offset for DWARF + version 4 or higher. + 2020-09-02 Alan Modra <amodra@gmail.com> * expr.c (add_to_result, subtract_from_result): Use unsigned diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index e4ba56d..8d19c1d 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); |