Message ID | CAH=Am=7D_UqOSdJMtg-=o-_a_CSFAoR8h2+HgwW4QDcKefs9mg@mail.gmail.com |
---|---|
State | New, archived |
Headers |
Received: (qmail 13417 invoked by alias); 23 Apr 2019 02:08:07 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <gdb-patches.sourceware.org> List-Unsubscribe: <mailto:gdb-patches-unsubscribe-##L=##H@sourceware.org> List-Subscribe: <mailto:gdb-patches-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/gdb-patches/> List-Post: <mailto:gdb-patches@sourceware.org> List-Help: <mailto:gdb-patches-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 13402 invoked by uid 89); 23 Apr 2019 02:08:06 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-28.5 required=5.0 tests=AWL, BAYES_00, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_PASS, USER_IN_DEF_SPF_WL autolearn=ham version=3.3.1 spammy=sk:dwarf2_, H*c:alternative X-HELO: mail-wm1-f68.google.com Received: from mail-wm1-f68.google.com (HELO mail-wm1-f68.google.com) (209.85.128.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Apr 2019 02:08:04 +0000 Received: by mail-wm1-f68.google.com with SMTP id w15so16611392wmc.3 for <gdb-patches@sourceware.org>; Mon, 22 Apr 2019 19:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=jdwc4/wM1XNS92Jl62KXV7kBrqmZgv3k1+I9bnPQozw=; b=GAHrY4d9vYqKK7U0dgXtZMuFxwdhc3t15BeKn7sm74yTxCQCyUoIboYkgaFyVisRoV 6LJWwQSImPSRPZRwds1T87zJCl1GYjry61UXwNjKLosD28+TuswaKVzCO65lFsQi7HkP sbeMBu79z6VwWvgxtWG/VCtX35TuBz9ViNuFYzV8M946841bBXeo1t/ABDHKrpZWFD2O 3BKSHYL9jTctdMoGoxsnAME9O2g14yUu1wNQb/akC5Ch9wrCKheg3q1UlBLRKwLVi/H1 KTnxmLzgQksCFKLUD/G7jlXNrDCIirGY6MzUe/g9NZz7ggKNLTvuI68fxbE008t/nyur wX6A== MIME-Version: 1.0 From: "Ali Tamur via gdb-patches" <gdb-patches@sourceware.org> Reply-To: Ali Tamur <tamur@google.com> Date: Mon, 22 Apr 2019 19:07:49 -0700 Message-ID: <CAH=Am=7D_UqOSdJMtg-=o-_a_CSFAoR8h2+HgwW4QDcKefs9mg@mail.gmail.com> Subject: [PATCH] Support for DW_FORM_strx tag To: gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes |
Commit Message
Terekhov, Mikhail via Gdb-patches
April 23, 2019, 2:07 a.m. UTC
DW_FORM_strx is the new name of DW_FORM_GNU_str_index in the Dwarf 5 standard. This is a small step towards supporting Dwarf 5 in gdb. gdb/ChangeLog 2019-04-27 Ali Tamur <tamur@google.com> * dwarf2read.c (skip_one_die): Add DW_FORM_strx (read_attribute_value): Likewise (dwarf2_read_addr_index): Update comment (read_str_index): Add DW_FORM_strx (dwarf2_string_attr): Likewise (dwarf2_const_value_attr): Likewise (dump_die_shallow): Likewise (dwarf2_fetch_constant_bytes): Likewise (skip_form_bytes): Likewise --- gdb/dwarf2read.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) case DW_FORM_ref_udata: @@ -19295,6 +19296,7 @@ read_attribute_value (const struct die_reader_specs *reader, DW_ADDR (attr) = read_addr_index_from_leb128 (cu, info_ptr, &bytes_read); info_ptr += bytes_read; break; + case DW_FORM_strx: case DW_FORM_GNU_str_index: if (reader->dwo_file == NULL) { @@ -19890,7 +19892,7 @@ dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu, addr_size); } -/* Given a DW_FORM_GNU_str_index, fetch the string. +/* Given a DW_FORM_GNU_str_index or DW_FORM_strx, fetch the string. This is only used by the Fission support. */ static const char * @@ -19907,7 +19909,7 @@ read_str_index (const struct die_reader_specs *reader, ULONGEST str_index) &reader->dwo_file->sections.str_offsets; const gdb_byte *info_ptr; ULONGEST str_offset; - static const char form_name[] = "DW_FORM_GNU_str_index"; + static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx"; dwarf2_read_section (objfile, str_section); dwarf2_read_section (objfile, str_offsets_section); @@ -20073,6 +20075,7 @@ 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_GNU_str_index || attr->form == DW_FORM_GNU_strp_alt) str = DW_STRING (attr); @@ -21896,6 +21899,7 @@ dwarf2_const_value_attr (const struct attribute *attr, struct type *type, break; case DW_FORM_string: case DW_FORM_strp: + case DW_FORM_strx: case DW_FORM_GNU_str_index: case DW_FORM_GNU_strp_alt: /* DW_STRING is already allocated on the objfile obstack, point @@ -22900,6 +22904,7 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die) case DW_FORM_string: case DW_FORM_strp: case DW_FORM_line_strp: + case DW_FORM_strx: case DW_FORM_GNU_str_index: case DW_FORM_GNU_strp_alt: fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)", @@ -23328,6 +23333,7 @@ dwarf2_fetch_constant_bytes (sect_offset sect_off, break; case DW_FORM_string: case DW_FORM_strp: + case DW_FORM_strx: case DW_FORM_GNU_str_index: case DW_FORM_GNU_strp_alt: /* DW_STRING is already allocated on the objfile obstack, point @@ -24293,6 +24299,7 @@ skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end, case DW_FORM_addrx: case DW_FORM_sdata: + case DW_FORM_strx: case DW_FORM_udata: case DW_FORM_GNU_addr_index: case DW_FORM_GNU_str_index:
Comments
* Ali Tamur via gdb-patches <gdb-patches@sourceware.org> [2019-04-22 19:07:49 -0700]: > DW_FORM_strx is the new name of DW_FORM_GNU_str_index in the Dwarf 5 > standard. > This is a small step towards supporting Dwarf 5 in gdb. This looks good, with a few minor nits below... > > gdb/ChangeLog > 2019-04-27 Ali Tamur <tamur@google.com> > > * dwarf2read.c (skip_one_die): Add DW_FORM_strx > (read_attribute_value): Likewise > (dwarf2_read_addr_index): Update comment > (read_str_index): Add DW_FORM_strx > (dwarf2_string_attr): Likewise > (dwarf2_const_value_attr): Likewise > (dump_die_shallow): Likewise > (dwarf2_fetch_constant_bytes): Likewise > (skip_form_bytes): Likewise These should all have '.' at the end. > --- > gdb/dwarf2read.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c > index 829b07f01a..09ecd4fbd4 100644 > --- a/gdb/dwarf2read.c > +++ b/gdb/dwarf2read.c > @@ -9369,6 +9369,7 @@ skip_one_die (const struct die_reader_specs *reader, > const gdb_byte *info_ptr, > info_ptr += 4 + read_4_bytes (abfd, info_ptr); > break; > case DW_FORM_addrx: > + case DW_FORM_strx: > case DW_FORM_sdata: > case DW_FORM_udata: > case DW_FORM_ref_udata: > @@ -19295,6 +19296,7 @@ read_attribute_value (const struct die_reader_specs > *reader, > DW_ADDR (attr) = read_addr_index_from_leb128 (cu, info_ptr, > &bytes_read); > info_ptr += bytes_read; > break; > + case DW_FORM_strx: > case DW_FORM_GNU_str_index: > if (reader->dwo_file == NULL) > { > @@ -19890,7 +19892,7 @@ dwarf2_read_addr_index (struct dwarf2_per_cu_data > *per_cu, > addr_size); > } > > -/* Given a DW_FORM_GNU_str_index, fetch the string. > +/* Given a DW_FORM_GNU_str_index or DW_FORM_strx, fetch the string. > This is only used by the Fission support. */ > > static const char * > @@ -19907,7 +19909,7 @@ read_str_index (const struct die_reader_specs > *reader, ULONGEST str_index) > &reader->dwo_file->sections.str_offsets; > const gdb_byte *info_ptr; > ULONGEST str_offset; > - static const char form_name[] = "DW_FORM_GNU_str_index"; > + static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx"; > > dwarf2_read_section (objfile, str_section); > dwarf2_read_section (objfile, str_offsets_section); > @@ -20073,6 +20075,7 @@ 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 Your mail client seems to have corrupted the patch slightly so I couldn't check you had the correct tabs/spaces here. Please double check before you commit. > || attr->form == DW_FORM_GNU_str_index > || attr->form == DW_FORM_GNU_strp_alt) > str = DW_STRING (attr); > @@ -21896,6 +21899,7 @@ dwarf2_const_value_attr (const struct attribute > *attr, struct type *type, > break; > case DW_FORM_string: > case DW_FORM_strp: > + case DW_FORM_strx: > case DW_FORM_GNU_str_index: > case DW_FORM_GNU_strp_alt: > /* DW_STRING is already allocated on the objfile obstack, point > @@ -22900,6 +22904,7 @@ dump_die_shallow (struct ui_file *f, int indent, > struct die_info *die) > case DW_FORM_string: > case DW_FORM_strp: > case DW_FORM_line_strp: > + case DW_FORM_strx: Same white space check here please. > case DW_FORM_GNU_str_index: > case DW_FORM_GNU_strp_alt: > fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)", > @@ -23328,6 +23333,7 @@ dwarf2_fetch_constant_bytes (sect_offset sect_off, > break; > case DW_FORM_string: > case DW_FORM_strp: > + case DW_FORM_strx: > case DW_FORM_GNU_str_index: > case DW_FORM_GNU_strp_alt: > /* DW_STRING is already allocated on the objfile obstack, point > @@ -24293,6 +24299,7 @@ skip_form_bytes (bfd *abfd, const gdb_byte *bytes, > const gdb_byte *buffer_end, > > case DW_FORM_addrx: > case DW_FORM_sdata: > + case DW_FORM_strx: > case DW_FORM_udata: > case DW_FORM_GNU_addr_index: > case DW_FORM_GNU_str_index: Additionally could you look at expanding 'proc _handle_DW_FORM' in gdb/testsuite/lib/dwarf.exp to also handle DW_FORM_strx, this should just require adding a line like this 'DW_FORM_strx -' at the correct place. Thanks, Andrew
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 829b07f01a..09ecd4fbd4 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9369,6 +9369,7 @@ skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr, info_ptr += 4 + read_4_bytes (abfd, info_ptr); break; case DW_FORM_addrx: + case DW_FORM_strx: case DW_FORM_sdata: case DW_FORM_udata: