From 8fe0f950f4c0438e684a532add46dc99ee32165c Mon Sep 17 00:00:00 2001 From: Ali Tamur Date: Mon, 26 Aug 2019 18:40:18 -0700 Subject: [PATCH] [PATCH v2 2/4] DWARF 5 support: Handle DW_FORM_strx * Handle DW_FORM_strx forms everywhere. Tested with CC=/usr/bin/gcc (version 8.3.0) against master branch (also with -gsplit-dwarf and -gdwarf-4 flags) and there was no increase in the set of tests that fails. This is part of an effort to support DWARF 5 in gdb. gdb/ChangeLog: * dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms. (dwarf2_string_attr): Likewise. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2read.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a096cae2da..1be7f4b2f6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-09-30 Ali Tamur + + * dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms. + (dwarf2_string_attr): Likewise. + 2019-09-30 Ali Tamur * dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 0f4f36682c..53e7393a7c 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9336,6 +9336,7 @@ skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr, case DW_FORM_data1: case DW_FORM_ref1: case DW_FORM_flag: + case DW_FORM_strx1: info_ptr += 1; break; case DW_FORM_flag_present: @@ -9343,10 +9344,15 @@ skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr, break; case DW_FORM_data2: case DW_FORM_ref2: + case DW_FORM_strx2: info_ptr += 2; break; + case DW_FORM_strx3: + info_ptr += 3; + break; case DW_FORM_data4: case DW_FORM_ref4: + case DW_FORM_strx4: info_ptr += 4; break; case DW_FORM_data8: @@ -20168,6 +20174,10 @@ dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *c if (attr->form == DW_FORM_strp || attr->form == DW_FORM_line_strp || attr->form == DW_FORM_string || attr->form == DW_FORM_strx + || attr->form == DW_FORM_strx1 + || attr->form == DW_FORM_strx2 + || attr->form == DW_FORM_strx3 + || attr->form == DW_FORM_strx4 || attr->form == DW_FORM_GNU_str_index || attr->form == DW_FORM_GNU_strp_alt) str = DW_STRING (attr); -- 2.34.1