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: Thu, 11 Nov 2021 13:23:14 +0100	[thread overview]
Message-ID: <2b4549c1-0e6a-eb9f-ade4-99b4c145b245@suse.de> (raw)
In-Reply-To: <4a288a6a-63c4-e36e-da20-01ae3fd0955c@suse.de>

On 11/6/21 1:25 PM, Tom de Vries via Gdb-patches wrote:
> 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]
> ...
> 

OK, I see now what is going wrong.

The compilation unit offsets are:
...
$ readelf --dwarf-depth 0 -wi ./a.out | grep @
  Compilation Unit @ offset 0x0:
  Compilation Unit @ offset 0x1f:
  Compilation Unit @ offset 0x4d:
  Compilation Unit @ offset 0x87:
  Compilation Unit @ offset 0xa9:
  Compilation Unit @ offset 0xf5:
  Compilation Unit @ offset 0x1ce:
$ readelf --dwarf-depth 0 -wi ./c.out | grep @
  Compilation Unit @ offset 0x0:
  Compilation Unit @ offset 0x38:
  Compilation Unit @ offset 0x5e:
  Compilation Unit @ offset 0x2aa:
  Compilation Unit @ offset 0x330:
...
and at the moment of the warning we have:
...
(gdb) p (*per_bfd->all_comp_units[0])->sect_off
$42 = 0
(gdb) p (*per_bfd->all_comp_units[1])->sect_off
$43 = (unknown: 0x1f)
(gdb) p (*per_bfd->all_comp_units[7])->sect_off
$44 = 0
(gdb) p (*per_bfd->all_comp_units[8])->sect_off
$45 = (unknown: 0x38)
...

So, the CUs of a.out and c.out end up in the same vector, and that
triggers the duplicate offset warning.

Thanks,
- Tom

  reply	other threads:[~2021-11-11 12:23 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 ` [PATCH v2 00/32] Rewrite the DWARF "partial" reader Tom de Vries
2021-11-11 12:23   ` Tom de Vries [this message]
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=2b4549c1-0e6a-eb9f-ade4-99b4c145b245@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).