public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: Tom Tromey <tom@tromey.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH v2 00/32] Rewrite the DWARF "partial" reader
Date: Sat, 6 Nov 2021 13:25:10 +0100	[thread overview]
Message-ID: <4a288a6a-63c4-e36e-da20-01ae3fd0955c@suse.de> (raw)
In-Reply-To: <20211104180907.2360627-1-tom@tromey.com>

On 11/4/21 7:08 PM, Tom Tromey wrote:
> Here is v2 of my series to rewrit the DWARF partial symbol reader.
> 
> You can find v1 here:
> 
>     https://sourceware.org/pipermail/gdb-patches/2021-August/181624.html
> 
> This update addresses all the review comments.  I believe it fixes all
> the problems that Tom de Vries found.
> 
> I regression tested this on x86-64 Fedora 34.
> 

I regression tested this on openSUSE Leap 15.2 x86_64 and got only known
FAILs:
...
FAIL: gdb.base/step-over-syscall.exp: clone: displaced=off: single step
over clone (timeout)
FAIL: gdb.cp/no-dmgl-verbose.exp: setting breakpoint at 'f(std::string)'
FAIL: gdb.go/package.exp: setting breakpoint at package2.Foo
FAIL: gdb.go/package.exp: going to first breakpoint (the program exited)
...

So that looks great :)

Then I tried an experiment with parsing all .debug files installed on
the system which happens to be 636 files, totaling at 4.8 GB.

More concretely, I ran this command in a file loop:
...
$ for f in $(find /usr/lib/debug/ -name "*.debug" | grep -v build-id);
do echo "Loading $f"; gdb -q -batch $f; done 2>&1 | tee LOG
...

My idea was to compare execution times, but instead I ran into some
trouble (while using master instead, everything worked fine).

This triggered a fair amount of times:
...
$ grep -c "has duplicate debug_info_offset 0x0, ignoring .debug_aranges" LOG
40
...
as well as:
...
$ grep -c "DW_FORM_GNU_strp_alt used without .debug_str" LOG
16
...

I managed to reproduce both with a hello world, like so:
...
$ cat ./hello.c
#include <stdio.h>

int
main (void)
{
  printf
("hello00000000000000000000000000000000000000000000000000000000000000000000\n");
  return 0;
}
$ gcc ./hello.c -g
$ cp a.out b.out
$ dwz -m c.out a.out b.out
$ gdb -q -batch a.out

warning: Section .debug_aranges in /home/vries/gdb_versions/devel/a.out
has duplicate debug_info_offset 0x0, ignoring .debug_aranges.
DW_FORM_GNU_strp_alt used without .debug_str section [in module
/home/vries/gdb_versions/devel/c.out]
...

The latter may or may not trigger, and disappears with "maint set
worker-thread 0".

The exec seems sane.

The .debug_aranges section does not have duplicates, and does not
contain a .debug_info offset 0x0:
...
$ readelf -wr a.out | egrep "debug_aranges|Offset into"
Contents of the .debug_aranges section:
  Offset into .debug_info:  0x1f
  Offset into .debug_info:  0x4d
  Offset into .debug_info:  0x87
  Offset into .debug_info:  0xa9
  Offset into .debug_info:  0xf5
  Offset into .debug_info:  0x1ce
...

The a.out indeed doesn't have a .debug_str, but the .gnu_debuglink file
c.out does:
...
$ readelf -S -W a.out | grep debug_str
$
$ readelf -S -W c.out | grep debug_str
  [ 5] .debug_str        PROGBITS        0000000000000000 0005a1 0005fe
01  MS  0   0  1
$
...

I managed to reproduce both problems using system compiler gcc 7.5.0 and
gcc 11.2.1. [ If you have trouble reproducing this, maybe the target
boards cc-with-dwz and cc-with-dwz-m will help. ]

Thanks,
- Tom

> Let me know what you think.
> 
> Tom
> 
> 

  parent reply	other threads:[~2021-11-06 12:25 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-04 18:08 Tom Tromey
2021-11-04 18:08 ` [PATCH v2 01/32] Introduce make_unique_xstrndup Tom Tromey
2021-11-05 19:20   ` Simon Marchi
2021-11-05 20:08     ` Tom Tromey
2021-11-04 18:08 ` [PATCH v2 02/32] Split create_addrmap_from_aranges Tom Tromey
2021-11-04 18:08 ` [PATCH v2 03/32] Add dwarf2_per_cu_data::addresses_seen Tom Tromey
2021-11-04 18:08 ` [PATCH v2 04/32] Refactor dwarf2_get_pc_bounds Tom Tromey
2021-11-05 19:51   ` Simon Marchi
2021-11-24 15:53     ` Tom Tromey
2021-11-04 18:08 ` [PATCH v2 05/32] Allow ada_decode not to decode operators Tom Tromey
2021-11-04 18:08 ` [PATCH v2 06/32] Let skip_one_die not skip children Tom Tromey
2021-11-04 18:08 ` [PATCH v2 07/32] Add name splitting Tom Tromey
2021-11-04 18:08 ` [PATCH v2 08/32] Add new overload of dwarf5_djb_hash Tom Tromey
2021-11-05 20:01   ` Simon Marchi
2021-11-07 17:02     ` Tom Tromey
2021-11-04 18:08 ` [PATCH v2 09/32] Refactor build_type_psymtabs_reader Tom Tromey
2021-11-04 18:08 ` [PATCH v2 10/32] Add batching parameter to parallel_for_each Tom Tromey
2021-11-04 18:08 ` [PATCH v2 11/32] Return vector of results from parallel_for_each Tom Tromey
2021-11-17 20:37   ` Lancelot SIX
2021-11-18 14:41     ` Tom Tromey
2021-11-04 18:08 ` [PATCH v2 12/32] Specialize std::hash for gdb_exception Tom Tromey
2021-11-04 18:08 ` [PATCH v2 13/32] Introduce DWARF abbrev cache Tom Tromey
2021-11-04 18:08 ` [PATCH v2 14/32] Statically examine abbrev properties Tom Tromey
2021-11-04 18:08 ` [PATCH v2 15/32] Update skip_one_die for new " Tom Tromey
2021-11-04 18:08 ` [PATCH v2 16/32] Introduce the new DWARF index class Tom Tromey
2021-11-04 18:08 ` [PATCH v2 17/32] The new DWARF indexer Tom Tromey
2021-11-04 18:08 ` [PATCH v2 18/32] Implement quick_symbol_functions for cooked DWARF index Tom Tromey
2021-11-04 18:08 ` [PATCH v2 19/32] Wire in the new DWARF indexer Tom Tromey
2021-11-04 18:08 ` [PATCH v2 20/32] Introduce thread-safe handling for complaints Tom Tromey
2021-11-04 18:08 ` [PATCH v2 21/32] Pre-read DWARF section data Tom Tromey
2021-11-04 18:08 ` [PATCH v2 22/32] Parallelize DWARF indexing Tom Tromey
2021-11-04 18:08 ` [PATCH v2 23/32] "Finalize" the DWARF index in the background Tom Tromey
2021-11-04 18:08 ` [PATCH v2 24/32] Rename write_psymtabs_to_index Tom Tromey
2021-11-04 18:09 ` [PATCH v2 25/32] Change the key type in psym_index_map Tom Tromey
2021-11-04 18:09 ` [PATCH v2 26/32] Change parameters to write_address_map Tom Tromey
2021-11-04 18:09 ` [PATCH v2 27/32] Genericize addrmap handling in the DWARF index writer Tom Tromey
2021-11-04 18:09 ` [PATCH v2 28/32] Adapt .gdb_index writer to new DWARF scanner Tom Tromey
2021-11-04 18:09 ` [PATCH v2 29/32] Adapt .debug_names " Tom Tromey
2021-11-04 18:09 ` [PATCH v2 30/32] Enable the new DWARF indexer Tom Tromey
2021-11-04 18:09 ` [PATCH v2 31/32] Delete DWARF psymtab code Tom Tromey
2021-11-04 18:09 ` [PATCH v2 32/32] Remove dwarf2_per_cu_data::v Tom Tromey
2021-11-06 12:25 ` Tom de Vries [this message]
2021-11-11 12:23   ` [PATCH v2 00/32] Rewrite the DWARF "partial" reader Tom de Vries
2021-11-16 23:56   ` Tom Tromey
2021-11-17  9:22     ` Tom de Vries
2021-11-18 14:43     ` Tom Tromey
2021-11-22 19:59     ` Tom Tromey
2021-11-22 20:52       ` Tom de Vries
2021-11-22 22:11         ` Tom Tromey
2021-11-23  7:56           ` Tom de Vries
2021-11-23 17:00             ` Tom Tromey
2021-11-08 17:41 ` Simon Marchi
2021-11-10 19:56   ` Tom Tromey

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=4a288a6a-63c4-e36e-da20-01ae3fd0955c@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.com \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).