From: Simon Marchi <simon.marchi@polymtl.ca>
To: Xavier Roirand <roirand@adacore.com>
Cc: gdb-patches@sourceware.org, brobecker@adacore.com
Subject: Re: [RFA/DWARF v2] Fix breakpoint add on inlined function using function name.
Date: Thu, 21 Dec 2017 02:35:00 -0000 [thread overview]
Message-ID: <848029766ceee39c449712a53db88482@polymtl.ca> (raw)
In-Reply-To: <1513776096-19313-1-git-send-email-roirand@adacore.com>
On 2017-12-20 08:21, Xavier Roirand wrote:
> So far only approved by Joel B.
>
> Using this Ada example:
>
> package B is
> procedure Read_Small with Inline_Always;
> end B;
>
> package body B is
> Total : Natural := 0;
> procedure Read_Small is
> begin
> Total := Total + 1;
> end Read_Small;
> end B;
>
> and
>
> with B;
>
> procedure M is
> begin
> B.Read_Small;
> end M;
>
> % gnatmake -g -O0 -m m.adb -cargs -gnatn
> % gdb m
>
> Inserting a breakpoint on Read_Small inlined function does not work:
>
> (gdb) b read_small
> Breakpoint 1 at 0x40250e: file b.adb, line 5.
> (gdb) info b
> Num Type Disp Enb Address What
> 1 breakpoint keep y 0x000000000040250e in b.doit at b.adb:5
> (gdb)
>
> In this exemple we should have two breakpoints set, one in package B
> and
"example"
> the other one in the inlined instance inside procedure M), like below:
>
> (gdb) b read_small
> Breakpoint 1 at 0x40250e: b.adb:5. (2 locations)
> (gdb) info b
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> 1.1 y 0x000000000040250e in b.doit at
> b.adb:5
> 1.2 y 0x0000000000402540 in m at b.adb:5
> (gdb)
>
> Looking at the DWARF info for inlined instance of Read_Small:
>
> <1><1526>: Abbrev Number: 2 (DW_TAG_subprogram)
> <1527> DW_AT_name : ([...], offset: 0x1e82): b__read_small
> <152b> DW_AT_decl_file : 2
> <152c> DW_AT_decl_line : 3
> <152d> DW_AT_inline : 3 (declared as inline and
> inlined)
> [...]
> <2><1547>: Abbrev Number: 4 (DW_TAG_inlined_subroutine)
> <1548> DW_AT_abstract_origin: <0x1526>
> <154c> DW_AT_low_pc : 0x402552
> <1554> DW_AT_high_pc : 0x2b
> <155c> DW_AT_call_file : 1
> <155d> DW_AT_call_line : 5
> <2><155e>: Abbrev Number: 0
>
> During the parsing of DWARF info in order to produce partial DIE linked
> list, the DW_TAG_inlined_subroutine were skipped thus not present in
> the
> final partial dies.
> Taking DW_TAG_inlined_subroutine in account during the parsing process
> fixes the problem.
Do you have some insights as to why we don't see the same problem in
other languages such as C? I tried to make a test case in C similar to
yours. I made a shared library that contained a function, with both the
standalone instance and an inlined instance. In the beginning, we have
only loaded partial symbols for the library. I tried placing a
breakpoint on the function, and got the expected two locations. What
seems to happen is that placing the breakpoint triggers the read of the
full symbols, which eventually finds the inline instance. Do you have
any idea what's different about Ada?
I don't see anything wrong with the change, but I'm far from an expert
in that area :)
Simon
next prev parent reply other threads:[~2017-12-21 2:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-20 13:23 Xavier Roirand
2017-12-21 2:35 ` Simon Marchi [this message]
2017-12-21 11:03 ` Joel Brobecker
2017-12-21 22:52 ` Simon Marchi
2017-12-22 2:59 ` Joel Brobecker
2018-01-03 4:44 ` Joel Brobecker
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=848029766ceee39c449712a53db88482@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=roirand@adacore.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