Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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