Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: Re: [PATCH][gdb/symtab] Don't create duplicate psymtab for forward-imported CU
Date: Wed, 22 Apr 2020 08:13:00 +0200	[thread overview]
Message-ID: <e3175991-ba79-1bd9-b5ea-815f6a88226d@suse.de> (raw)
In-Reply-To: <5fe7340e-b1c0-c7a5-d6a1-5b39b46d0297@suse.de>

On 08-04-2020 12:22, Tom de Vries wrote:
> On 08-04-2020 12:19, Tom de Vries wrote:
>> Hi,
>>
>> Consider the executable generated for test-case gdb.dwarf2/imported-unit.exp.
>>
>> When loading the executable using various tracing:
>> ...
>> $ gdb \
>>   outputs/gdb.dwarf2/imported-unit/imported-unit \
>>   -batch \
>>   -iex "set verbose on" \
>>   -iex "set debug symtab-create 1"
>>   ...
>> Created psymtab 0x213f380 for module <artificial>@0xc7.
>> Created psymtab 0x20e7b00 for module imported_unit.c.
>> Created psymtab 0x215da20 for module imported_unit.c.
>> Created psymtab 0x2133630 for module elf-init.c.
>> Created psymtab 0x215b910 for module ../sysdeps/x86_64/crtn.S.
>> ...
>> we notice that there are two psymtabs generated for imported_unit.c.
>>
>> This is due to the following: in dwarf2_build_psymtabs_hard we loop over CUs
>> and generate partial symtabs for those, and if we encounter an import of
>> another CU, we also generate a partial symtab for that one, unless already
>> created.
>>
>> This works well with backward import references:
>> - the imported CU is read
>> - then the importing CU is read
>> - the import is encountered, but the imported CU is already read, so
>>   we're done.
>>
>> But with forward import references, we have instead:
>> - the importing CU is read
>> - the import is encountered, and the imported CU is read
>> - the imported CU is read once more
>>
>> Fix this by skipping already created psymtabs in the loop in
>> dwarf2_build_psymtabs_hard.
>>
>> Build in combination with the tentative fix for PR25718 - "[ada] symbol in
>> imported unit not found"
>> ( https://sourceware.org/pipermail/gdb-patches/2020-March/167152.html ) to
>> prevent this regression:
>> ...
>> FAIL: gdb.ada/char_enum.exp: ptype pck.Global_Enum_Type
>> ...
>>
>> Tested on x86_64-linux, with native and target board
>> unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects.
>>
>> This causes this regression with the target board:
>> ...
>> FAIL: gdb.ada/dgopt.exp: list x.adb:16, 16
>> ...
>> which I consider a seperate PR, filed as PR25801 - "Filename of shared psymtab
>> is ignored".
>>
> 
> [ Forgot to mention ]
> 
> Using a 2.8GB libxul.so debug file from opensuse tumbleweed, build with
> lto, we have:
> ...
> $ time.sh gdb -batch -iex "maint set dwarf max-cache-age 1000" -iex "set
> language c" usr/lib/debug/usr/lib64/firefox/libxul.so-74.0-1.1.x86_64.debug
> maxmem: 10417196
> real: 116.62
> user: 114.85
> system: 2.37
> ...
> and with this patch:
> ...
> $ time.sh gdb -batch -iex "maint set dwarf max-cache-age 1000" -iex "set
> language c" usr/lib/debug/usr/lib64/firefox/libxul.so-74.0-1.1.x86_64.debug
> maxmem: 10436372
> real: 77.42
> user: 75.54
> system: 2.46
> 
> OK for trunk?
> 

Committed (
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=3d5afab3393064e563305bc27264fde5a7598635
).

Thanks,
- Tom


  reply	other threads:[~2020-04-22  6:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-08 10:19 Tom de Vries
2020-04-08 10:22 ` Tom de Vries
2020-04-22  6:13   ` Tom de Vries [this message]
2020-04-22 13:45     ` Simon Marchi
2020-04-22 13:55       ` Tom de Vries
2020-05-27 15:09         ` 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=e3175991-ba79-1bd9-b5ea-815f6a88226d@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