From: Joel Brobecker <brobecker@adacore.com>
To: Simon Marchi <simark@simark.ca>, tom@tromey.com
Cc: Jonah Graham <jonah@kichwacoders.com>,
gdb-patches@sourceware.org, Pedro Alves <palves@redhat.com>,
Iain Buclaw <ibuclaw@gdcproject.org>,
Nick Alcock <nick.alcock@oracle.com>,
Eli Zaretskii <eliz@gnu.org>
Subject: Re: Propose we release GDB 9.1 next weekend (Feb 01-02)
Date: Sat, 01 Feb 2020 12:17:00 -0000 [thread overview]
Message-ID: <20200201121720.GA30012@adacore.com> (raw)
In-Reply-To: <d4c3b0bb-18b4-e12a-6b4b-5901ce3e3930@simark.ca>
Hi Jonah,
Thank you for reporting... In time before we created the release!
This is the kind of bug that I think would have forced us to
issue an emergency fixup release.
Hi Simon,
Thanks very much for looking into it.
On Sat, Feb 01, 2020 at 03:00:05AM -0500, Simon Marchi wrote:
> On 2020-01-31 10:20 p.m., Jonah Graham wrote:
> > On Sun, 26 Jan 2020 at 06:40, Joel Brobecker <brobecker@adacore.com> wrote:
> >>
> >> Pending comments, I will work on the GDB 9.1 release during
> >> the weekend of Feb 01-02.
> >>
> >>
> >
> > Hi folks,
> >
> > Sorry to be coming to the party a little late on this - but GDB 9.1
> > has a serious regression related to path handling. This affects
> > Eclipse CDT users because the default build system in CDT does not
> > pass absolute paths to GCC when compiling. Thanks to some efforts of
> > users who have been exposed early to this thanks to fc31 pushing
> > pre-releases of 9.1 out we have detected it before release, but just
> > barely :-)
> >
> > The Bug is https://sourceware.org/bugzilla/show_bug.cgi?id=24915 and
> > it has been bouncing around for a while, with it seemingly fixed for a
> > while, but it turns out that there are lots of cases that it is not
> > fixed. The patch that causes the problem is
> > https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a0c1ffedcf1988bc13fc5b6d57d3b74a17b60299
> >
> > The summary is that GDB is often failing to insert breakpoints when
> > the absolute path to the file is passed to GDB if it was compiled with
> > a different path, such as a path with .. in the compilation path, or
> > symlinks. This would require IDEs to know the compilation path of a
> > file it has open when a breakpoint is inserted, rather than only
> > having to know the absolute path to the file that is actually open.
> >
> > Setting basenames-may-differ to on is a workaround as the new code in
> > the commit is guarded by that. However GDB is failing even when
> > basenames don't differ.
> >
> > I have added two short traces in Comment 17 with all the commands
> > (https://sourceware.org/bugzilla/show_bug.cgi?id=24915#c17), but I
> > want to show you the part of the trace that indicates this is a bug.
> > The breakpoint fails to insert on the first instance - but then works
> > on the second try with the intervening break with no path.
> >
> > $ /scratch/gdb/build-gdb-9/gdb/gdb --quiet main
> > Reading symbols from main...
> > (gdb) b /scratch/gdb/test/src/main2.c:1 ## Breakpoint fails here
> > No source file named /scratch/gdb/test/src/main2.c.
> > Make breakpoint pending on future shared library load? (y or [n]) n
> > (gdb) b main2.c:1
> > Breakpoint 1 at 0x609: file ../src/main2.c, line 2.
> > (gdb) b /scratch/gdb/test/src/main2.c:1 ## same command works here
> > Note: breakpoint 1 also set at pc 0x609.
> > Breakpoint 2 at 0x609: file ../src/main2.c, line 2.
> > (gdb) quit
> > $
> >
> > Sorry for bringing this up so late in the dev cycle - I thought this
> > was fixed, but it was only fixed for a limited number of cases.
>
> Thanks for reporting, I think it's a quite serious problem that we should
> address before the release. I looked into it a bit, here's my take on it.
>
> The commit that introduced the regression has an impact when we reach this
> point:
>
> #0 find_and_open_source (filename=0x6210000c6dc0 "../src/main2.c", dirname=0x60b000062c4e "/tmp/test/build", fullname=0x7ffc78d15d50) at /home/simark/src/binutils-gdb/gdb/source.c:1034
> #1 0x0000560b5146e58a in psymtab_to_fullname (ps=0x60b000062e30) at /home/simark/src/binutils-gdb/gdb/psymtab.c:1149
> #2 0x0000560b51468b0a in psym_map_symtabs_matching_filename(objfile *, const char *, const char *, gdb::function_view<bool(symtab*)>) (objfile=0x614000007640, name=0x6030000412c0 "/tmp/test/src/main2.c", real_path=0x621000102d00 "/tmp/test/src/main2.c", callback=...) at /home/simark/src/binutils-gdb/gdb/psymtab.c:182
> #3 0x0000560b5188b4ea in iterate_over_symtabs(char const*, gdb::function_view<bool (symtab*)>) (name=0x6030000412c0 "/tmp/test/src/main2.c", callback=...) at /home/simark/src/binutils-gdb/gdb/symtab.c:558
> #4 0x0000560b510c1351 in collect_symtabs_from_filename (file=0x6030000412c0 "/tmp/test/src/main2.c", search_pspace=0x0) at /home/simark/src/binutils-gdb/gdb/linespec.c:3798
> #5 0x0000560b510c15e2 in symtabs_from_filename (filename=0x6030000412c0 "/tmp/test/src/main2.c", search_pspace=0x0) at /home/simark/src/binutils-gdb/gdb/linespec.c:3818
> #6 0x0000560b510b7df5 in parse_linespec (parser=0x7ffc78d16b50, arg=0x603000041290 "/tmp/test/src/main2.c:2", match_type=symbol_name_match_type::WILD) at /home/simark/src/binutils-gdb/gdb/linespec.c:2615
> #7 0x0000560b510bbdcd in event_location_to_sals (parser=0x7ffc78d16b50, location=0x60600007fdc0) at /home/simark/src/binutils-gdb/gdb/linespec.c:3152
> #8 0x0000560b510bc655 in decode_line_full (location=0x60600007fdc0, flags=1, search_pspace=0x0, default_symtab=0x0, default_line=0, canonical=0x7ffc78d17390, select_mode=0x0, filter=0x0) at /home/simark/src/binutils-gdb/gdb/linespec.c:3232
>
> In psym_map_symtabs_matching_filename, we go through all partial symtabs and
> try to find those that match the given search name in various ways. The function
> psymtab_to_fullname gives us the "full name" of the partial symtab (it gets it from
> find_and_open_source), but it's not really clear whether that means just any absolute
> path that resolves to that file, or if it means the real/canonical path.
>
> Before the mentioned commit, we always returned the real/canonical path, after the
> commit, we return an absolute path that may not be the canonical path. So in my case,
> we end up calling compare_filenames_for_search with "/tmp/test/src/main2.c" as the
> search name and "/tmp/test/build/../src/main2.c" as the psymtab's "fullname", and it
> returns false.
>
> My understanding is that Tom's patch meant to change the way the symtab's paths are
> displayed, showing the version with symlinks and possibly some ".." in it, rather than
> the real path. That represents "how the user compiled the file". But doing so, it also
> changed the symtab's full name that is expected to be a real/canonical path, for search
> purposes.
>
> [The change of the way the symtab's path is displayed probably explains why you now see
> non-real/canonical paths in the MI output, as mentioned in the bug.]
>
> If we want to keep both behaviors, I think we need to separate that "fullname" field/concept
> in absolute_fullname and realpath_fullname. The former being what Tom's patch wants, where we
> keep symlinks and "..", and the latter being the canonical path, which the search wants. Doing
> so would hopefully make things clearer. I think that just "fullname" is confusing: we are left
> wondering if that field contains a canonical path or not.
>
> I have a patch that does that, I'll start a test run and see the results tomorrow. It's perhaps
> a bit too invasive for the stable branch though. Here it is in the mean time:
>
> https://github.com/simark/binutils-gdb/tree/symtab-realpath
I haven't reviewed the patch super carefully, but I like the idea!
For the release, it's indeed a bit on the fence. Given the nature of
the patch, With a bit of careful review, we should be able to convince
ourselves that this patch is sufficiently safe, particularly for a .1.
On the other hand, I think the patch that triggered the regression is
a fairly minor enhancement (name of the file printed by annotations).
So perhaps the best way forward is to revert the triggering patch
from the gdb-9-branch.
I've added Tom to way in on this...
--
Joel
next prev parent reply other threads:[~2020-02-01 12:17 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-26 15:41 Joel Brobecker
2020-01-26 16:07 ` Eli Zaretskii
2020-01-28 16:43 ` Nick Alcock
2020-01-28 17:06 ` Hannes Domani via gdb-patches
[not found] ` <ee83b6c0-8e18-eb1e-18c8-f9df79b547d7@simark.ca>
2020-01-28 17:37 ` Hannes Domani via gdb-patches
2020-02-01 3:20 ` Jonah Graham
2020-02-01 8:00 ` Simon Marchi
2020-02-01 12:17 ` Joel Brobecker [this message]
2020-02-01 12:58 ` Jonah Graham
2020-02-01 13:06 ` Joel Brobecker
2020-02-05 10:08 ` Tom Tromey
2020-02-01 15:45 ` Simon Marchi
2020-02-01 15:37 ` 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=20200201121720.GA30012@adacore.com \
--to=brobecker@adacore.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=ibuclaw@gdcproject.org \
--cc=jonah@kichwacoders.com \
--cc=nick.alcock@oracle.com \
--cc=palves@redhat.com \
--cc=simark@simark.ca \
--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