aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Tamur <tamur@google.com>2019-08-26 18:40:18 -0700
committerAli Tamur <tamur@google.com>2019-09-30 18:00:41 -0700
commit8fe0f950f4c0438e684a532add46dc99ee32165c (patch)
tree4f1847a8eb7903015aec81e9626b915243417c50
parentaf79fcc547dde358d66666c348e324e50bc2b125 (diff)
downloadgdb-8fe0f950f4c0438e684a532add46dc99ee32165c.zip
gdb-8fe0f950f4c0438e684a532add46dc99ee32165c.tar.gz
gdb-8fe0f950f4c0438e684a532add46dc99ee32165c.tar.bz2
[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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/dwarf2read.c10
2 files changed, 15 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a096cae..1be7f4b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2019-09-30 Ali Tamur <tamur@google.com>
+ * dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms.
+ (dwarf2_string_attr): Likewise.
+
+2019-09-30 Ali Tamur <tamur@google.com>
+
* dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL.
(process_full_type_unit): Likewise.
(dump_die_shallow): Likewise.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 0f4f366..53e7393 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);