public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: palves@redhat.com (Pedro Alves)
Cc: gdb-patches@sourceware.org, tom@tromey.com, simon.marchi@ericsson.com
Subject: Re: [RFA 1/6] Use std::vector in end_symtab_get_static_block
Date: Mon, 23 Oct 2017 16:16:00 -0000	[thread overview]
Message-ID: <20171023161620.99288D80753@oc3748833570.ibm.com> (raw)
In-Reply-To: <3d40d7a8-65d1-3c04-1041-475457acfe48@redhat.com> from "Pedro Alves" at Oct 20, 2017 05:47:18 PM

Pedro Alves wrote:
> On 10/20/2017 04:33 PM, Ulrich Weigand wrote:
> > [Re-sent since the original seems to have gotten lost somehow.]
> > 
> >>>>>>> "Simon" == Simon Marchi <simon.marchi@ericsson.com> writes:
> >>
> >> Simon> That made me doubt for a second, since we're more used to see "<"
> >> Simon> in these functions.  I then saw that block_compar did sort them
> >> Simon> in descending order.  Could you add a comment here to indicate that?
> >>
> >> Done, thanks.
> > 
> > This causes a number of regressions in the gdb.opt/inline-cmds.exp
> > test case for me.  Not sure exactly why, but changing the std::sort
> > to a std::stable_sort like below fixes those regressions for me.
> > Maybe the logic for handling inline function blocks somehow relied
> > on some (undocumented) behavior of qsort for handling elements that
> > compare as equal?
> > 
> 
> Sounds like we should improve the sort predicate to disambiguate
> better, define a total order?  I don't really know which sorting
> is assumed, but e.g., if the block start addresses are the same,
> compare the blocks' end addresses.  If those match as well,
> repeat but with the blocks' superblocks.  And/or sort function
> blocks before non-function blocks.  Etc.

I don't believe we can do this, actually.  At this point in time,
a block's superblock is not yet known -- in fact, the superblock
links are set up afterwards *based on* the order determined here.

We could compare end addresses, but that doesn't fully resolve
the issue, in case an inline function 100% overlaps its caller.

It looks like the only place where have the information which
function is the caller and which the callee is in fact the original
order of blocks in the pending_blocks list, since they were placed
in the correct order by the DWARF reader based on DWARF info.

Now, the reason why we re-sort pending_blocks here is to allow
for object code reordering (hot/cold sections and the like).
But this type of reordering never actually affects inline function
relationships.  So it may be that just using stable_sort here is
actually the *correct* fix ...

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  Ulrich.Weigand@de.ibm.com

  reply	other threads:[~2017-10-23 16:16 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-16  3:04 [RFA 0/6] more cleanup removals Tom Tromey
2017-10-16  3:04 ` [RFA 5/6] Return unique_xmalloc_ptr from target_read_stralloc Tom Tromey
2017-10-16 21:02   ` Simon Marchi
2017-10-16  3:04 ` [RFA 2/6] Remove some cleanups from probe.c Tom Tromey
2017-10-16 20:26   ` Simon Marchi
2017-10-16  3:04 ` [RFA 4/6] Simple cleanup removals in remote.c Tom Tromey
2017-10-16 20:43   ` Simon Marchi
2017-10-16 21:14     ` Tom Tromey
2017-10-16 21:37       ` Simon Marchi
2017-10-16 21:50         ` Tom Tromey
2017-10-16 22:35         ` Pedro Alves
2017-10-16 23:00           ` Tom Tromey
2017-10-16 23:34             ` [PATCH 1/2] Introduce string_appendf/string_vappendf (Re: [RFA 4/6] Simple cleanup removals in remote.c) Pedro Alves
2017-10-19  3:11               ` Simon Marchi
2017-10-19  3:13                 ` Simon Marchi
2017-10-30  0:16                   ` Simon Marchi
2017-10-30 11:48                 ` Pedro Alves
2017-10-16 23:38             ` [PATCH 2/2] remote.c, QCatchSyscalls: Build std::string instead of unique_xmalloc_ptr " Pedro Alves
2017-10-19  3:17               ` Simon Marchi
2017-10-30 11:49                 ` Pedro Alves
2017-10-16  3:04 ` [RFA 6/6] Return unique_xmalloc_ptr from target_fileio_read_stralloc Tom Tromey
2017-10-16 21:07   ` Simon Marchi
2017-10-16  3:04 ` [RFA 1/6] Use std::vector in end_symtab_get_static_block Tom Tromey
2017-10-16 20:18   ` Simon Marchi
2017-10-16 21:59     ` Tom Tromey
2017-10-20 15:33       ` Ulrich Weigand
2017-10-20 16:47         ` Pedro Alves
2017-10-23 16:16           ` Ulrich Weigand [this message]
2017-10-24 13:55             ` Tom Tromey
2017-10-24 14:41               ` [pushed] " Ulrich Weigand
2017-10-16  3:04 ` [RFA 3/6] Remove cleanup from ppc-linux-nat.c Tom Tromey
2017-10-16 20:28   ` Simon Marchi

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=20171023161620.99288D80753@oc3748833570.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    --cc=simon.marchi@ericsson.com \
    --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).