This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 0/2] Demangler crash handler
- From: Gary Benson <gbenson at redhat dot com>
- To: Pedro Alves <palves at redhat dot com>
- Cc: Mark Kettenis <mark dot kettenis at xs4all dot nl>, gdb-patches at sourceware dot org
- Date: Thu, 15 May 2014 14:24:09 +0100
- Subject: Re: [PATCH 0/2] Demangler crash handler
- Authentication-results: sourceware.org; auth=none
- References: <20140509100656 dot GA4760 at blade dot nx> <201405091120 dot s49BKO1f010622 at glazunov dot sibelius dot xs4all dot nl> <20140509153305 dot GA13345 at blade dot nx> <201405112023 dot s4BKNL3v024248 at glazunov dot sibelius dot xs4all dot nl> <20140513102134 dot GB17805 at blade dot nx> <537242D9 dot 7080101 at redhat dot com>
Pedro Alves wrote:
> On 05/13/14 11:21, Gary Benson wrote:
> > GDB demangles all symbols in every file it loads, always. In
> > libstdc++ the demangler is only called in error situations,
> > and then only to demangle the few symbols that appear in the
> > backtrace.
> >
> > So: we get the bug reports, and have to triage them, even
> > though the code is not "ours".
>
> I really can't agree with the "not ours" sentiment. Not if we think
> in terms of the GNU toolchain. IMO, we should foremost think of
> ourselves as development toolchain toolsmiths over gdb hackers.
>
> Thought experiment #1: I hereby declare that the demangler
> maintainers are GDB hackers. In order to get one's code in the
> demangler, one has to get it past those specific (and very busy)
> GDB hackers.
>
> Thought experiment #2: I'm going to import and fork the demangler
> into gdb/ directly, and declare that from here on, we get to fix it
> ourselves.
>
> Either case doesn't seem to make a difference to me. Except that
> with #2, we'd end with an incompetent demangler maintainer. :-)
I don't think anybody here really wants to be the demangler
maintainer. Trouble is, I'm not sure anybody in GCC land
wants to be it either!
I wasn't really trying to disown myself from libiberty ownership.
I guess what I was trying to say is the bulk of libiberty
contributions come from GCC, but that GCC is not a heavy consumer
of libiberty. We're eating their dogfood :)
> > * Bugs have a more serious affect on GDB than on libstdc++
>
> True.
>
> > Currently a demangler crash will cause GDB to segfault, usually
> > at startup. A demangler crash in libstdc++ is not such a big
> > deal as the application was likely crashing anyway.
> >
> > So: bugs that are high-priority for us are low-priority for the
> > "main" demangler authors, and we end up having to fix them.
>
> True.
>
> So... Since this subsystem is so important, should we write our own
> demangler from scratch then? Would that result in a better outcome?
If there was somebody here with a deep knowledge of C++ and a deep
knowledge of all the different mangling schemes we need to support
then maybe. I'm not that person though. And it's not a small
project:
$ wc -l libiberty/*dem*
6386 libiberty/cp-demangle.c
174 libiberty/cp-demangle.h
232 libiberty/cp-demint.c
4869 libiberty/cplus-dem.c
11661 total
If we're going to spend a lot of time on something we should spend it
improving the existing demangler rather than trying to roll our own.
The existing demangler is *good*, it just maybe hasn't had quite the
beating that it gets from a GDB run on a big app using all kinds of
the latest and greatest C++ features.
> Or, can we perhaps extend the demangler a little to make it more
> robust itself?
I'm not sure. There's nothing obvious I can think of. I see you
wrote another email with some ideas, I'll reply to that separately.
> Is there something that could be done to demangler's testsuite to
> make it more effective in catching bugs that GDB would catch?
> (I mean other than throwing more symbols at it.
Again, I'm not sure, unless you were to break it open and unit test
the various components. It'd need careful refactoring to allow this
without breaking the API.
> Though a fuzzy tester that throws pseudo-random symbols at it would
> be a nice project on its own.)
I have a fuzzer for it. <http://gbenson.net/?p=422>. Depressingly
it gets a segfault in seconds every time. There seem to be at least
three different issues.
> > * Demangler patches often get waved through with minimal scrutiny
>
> That does sound like a problem. Can we work with the gcc folks to
> somehow prevent this from happening? E.g., perhaps we could ask
> them to CC all demangler patches to the gdb-patches@ list as well,
> like supposedly done for some other shared files.
Maybe, I'm not sure who you'd ask though. All mail to gcc-patches
with "mangl" in the subject ends up in my inbox, so the stuff is at
least getting extra scrutiny from me :) Unless of course the subject
is something useless like "PR 12345" (a pet hate of mine!)
> It's not clear to me whether the issues are with demangling itself
> being complex, or with the current implementation.
A bit of both I think.
Cheers,
Gary
--
http://gbenson.net/