Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Zoran Zaric via Gdb-patches <gdb-patches@sourceware.org>
To: Simon Marchi <simon.marchi@polymtl.ca>, gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>
Subject: Re: [PATCH 06/13] gdb/dwarf: read correct rnglist/loclist header in read_{rng,loc}list_index
Date: Thu, 28 Jan 2021 15:39:09 +0000	[thread overview]
Message-ID: <17a5bb39-2268-67ce-f75c-fce75188975b@amd.com> (raw)
In-Reply-To: <20210120053925.142862-7-simon.marchi@polymtl.ca>

> From: Simon Marchi <simon.marchi@efficios.com>
> 
> When loading the binary from PR 26813 in GDB, we get:
> 
>      DW_FORM_rnglistx index pointing outside of .debug_rnglists offset array [in module /home/simark/build/binutils-gdb/gdb/MagicPurse]
> 
> ... and the symbols fail to load.
> 
> In read_rnglist_index and read_loclist_index, we read the header
> (documented in sections 7.28 and 7.29 of DWARF 5) of the CU's
> contribution to the .debug_rnglists / .debug_loclists sections to
> validate that the index we want to read makes sense.  However, we always
> read the header at the beginning of the section, rather than the header
> for the contribution from which we want to read the index.
> 
> To illustrate, here's what the binary from PR 26813 contains.  There are
> two compile units:
> 
> 0x0000000c: DW_TAG_compile_unit 1
>                DW_AT_ranges [DW_FORM_rnglistx]: 0x0
>                DW_AT_rnglists_base [DW_FORM_sec_offset]: 0xC
> 
> 0x00003ec9: DW_TAG_compile_unit 2
>                DW_AT_ranges [DW_FORM_rnglistx]: 0xB
>                DW_AT_rnglists_base [DW_FORM_sec_offset]: 0x85
> 
> The layout of the .debug_rnglists is the following:
> 
>      [0x00, 0x0B]: header for CU 1's contribution
>      [0x0C, 0x0F]: list of offsets for CU 1 (1 element)
>      [0x10, 0x78]: range lists data for CU 1
> 
>      [0x79, 0x84]: header for CU 2's contribution
>      [0x85, 0xB4]: list of offsets for CU 2 (12 elements)
>      [0xB5, 0xBD7]: range lists data for CU 2
> 
> The DW_AT_rnglists_base attrbute points to the beginning of the list of
> offsets for that CU, relative to the start of the .debug_rnglists
> section.  That's right after the header for that contribution.
> 
> When we try to read the DW_AT_ranges attribute for CU 2,
> read_rnglist_index reads the header for CU 1 instead of the one for CU
> 2.  Since there's only one element in CU 1's offset list, it believes
> (wrongfully) that the index 0xB is out of range.
> 
> Fix it by reading the header just before where DW_AT_rnglists_base
> points to.  With this patch, I am able to load GDB built with clang-11
> and -gdwarf-5 in itself, with and without -readnow.
> 

I came to the same conclusion, the issue was probably never noticed 
because the tested compilers only ever generated one rangelist entry.

Even LLVM didn't seem to generate it before version 11, or at least I 
haven't noticed the issue when I was previously testing the DWARF 5 support.

> 
> Change-Id: Ie53ff8251af8c1556f0a83a31aa8572044b79e3d
> 

Are these Gerrit change ID's? They shouldn't be part of the patches right?

Zoran

  reply	other threads:[~2021-01-28 15:39 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20  5:39 [PATCH 00/13] DWARF 5 rnglists & loclists fixes (PR 26813) Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 01/13] gdb/dwarf: change read_loclist_index complaints into errors Simon Marchi via Gdb-patches
2021-01-28 15:17   ` Zoran Zaric via Gdb-patches
2021-01-28 15:42     ` Simon Marchi via Gdb-patches
2021-02-25 19:20       ` Tom Tromey
2021-01-20  5:39 ` [PATCH 02/13] gdb/dwarf: fix bound check in read_rnglist_index Simon Marchi via Gdb-patches
2021-01-28 15:22   ` Zoran Zaric via Gdb-patches
2021-01-20  5:39 ` [PATCH 03/13] gdb/dwarf: add missing bound check to read_loclist_index Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 04/13] gdb/dwarf: remove unnecessary check in read_{rng, loc}list_index Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 05/13] gdb/dwarf: few fixes for handling DW_FORM_{rng, loc}listx Simon Marchi via Gdb-patches
2021-01-28 15:30   ` [PATCH 05/13] gdb/dwarf: few fixes for handling DW_FORM_{rng,loc}listx Zoran Zaric via Gdb-patches
2021-01-20  5:39 ` [PATCH 06/13] gdb/dwarf: read correct rnglist/loclist header in read_{rng, loc}list_index Simon Marchi via Gdb-patches
2021-01-28 15:39   ` Zoran Zaric via Gdb-patches [this message]
2021-01-28 15:49     ` [PATCH 06/13] gdb/dwarf: read correct rnglist/loclist header in read_{rng,loc}list_index Simon Marchi via Gdb-patches
2021-01-28 15:54       ` Zoran Zaric via Gdb-patches
2021-01-20  5:39 ` [PATCH 07/13] gdb/dwarf: read DW_AT_ranges value as unsigned in partial_die_info::read Simon Marchi via Gdb-patches
2021-01-28 15:41   ` Zoran Zaric via Gdb-patches
2021-01-28 15:51     ` Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 08/13] gdb/testsuite: add .debug_rnglists tests Simon Marchi via Gdb-patches
2021-01-28 16:24   ` Zoran Zaric via Gdb-patches
2021-01-20  5:39 ` [PATCH 09/13] gdb/testsuite: DWARF assembler: add context parameters to _location Simon Marchi via Gdb-patches
2021-01-28 16:30   ` Zoran Zaric via Gdb-patches
2021-01-20  5:39 ` [PATCH 10/13] gdb/testsuite: add .debug_loclists tests Simon Marchi via Gdb-patches
2021-01-28 16:52   ` Zoran Zaric via Gdb-patches
2021-01-28 17:47     ` Simon Marchi via Gdb-patches
2021-01-29 10:13       ` Zoran Zaric via Gdb-patches
2021-01-29 15:57         ` Simon Marchi via Gdb-patches
2021-01-29 16:58           ` Zoran Zaric via Gdb-patches
2021-01-29 17:37             ` Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 11/13] gdb/dwarf: split dwarf2_cu::ranges_base in two Simon Marchi via Gdb-patches
2021-01-20  5:39 ` [PATCH 12/13] gdb/dwarf: make read_{loc, rng}list_index return sect_offset Simon Marchi via Gdb-patches
2021-02-25 19:26   ` Tom Tromey
2021-01-20  5:39 ` [PATCH 13/13] gdb/testsuite: add test for .debug_{rng, loc}lists section without offset array Simon Marchi via Gdb-patches
2021-02-02 15:43 ` [PATCH 00/13] DWARF 5 rnglists & loclists fixes (PR 26813) Simon Marchi via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=17a5bb39-2268-67ce-f75c-fce75188975b@amd.com \
    --to=gdb-patches@sourceware.org \
    --cc=Zoran.Zaric@amd.com \
    --cc=simon.marchi@efficios.com \
    --cc=simon.marchi@polymtl.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox