Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Jun 2014 14:30:54 +0200
From:      Kai Wang <kaiw@FreeBSD.org>
To:        David Chisnall <theraven@FreeBSD.org>
Cc:        Ryan Stone <rysto32@gmail.com>, freebsd-toolchain@FreeBSD.org
Subject:   Re: abi::__cxa_demangle provides invalid result on non-mangled symbols
Message-ID:  <20140611123054.GA2777@soulhacker>
In-Reply-To: <9BDAE8E2-0573-4526-9136-97D3492D7DEF@FreeBSD.org>
References:  <CAFMmRNw_9hS3YuDbjFJH0btvoPADJ7_4=L13z2sK71gctPzXhQ@mail.gmail.com> <CAPyFy2Buh4BUEuYW5nfQFdEMio9=yaDAkivg1zXPnEBzr_CzJQ@mail.gmail.com> <9BDAE8E2-0573-4526-9136-97D3492D7DEF@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jun 10, 2014 at 07:38:19AM +0100, David Chisnall wrote:
> On 10 Jun 2014, at 03:44, Ed Maste <emaste@freebsd.org> wrote:
> 
> > I had the same issue in LLVM, and as hacky as it seems, the solution
> > is to check that the name starts with "_Z" before passing it to
> > __cxa_demangle.
> > 
> > For reference the LLVM review for the change is here:
> > http://reviews.llvm.org/D2552
> > 
> > I didn't get around to testing it on Linux; since you have a test
> > application ready it would be interesting to see the result of
> > __cxa_demangle("f") there.
> 
> If you know that the thing that you are demangling is a symbol name, then you can use the _Z check, which isn't really a hack - it's a marker added to identify C++ symbols.  Note that, if you're writing portable code, you need to remember that some systems prepend an underscore to all compiler-generated symbols, so you may also need to check for __Z and trim the leading _.
> 
> The __cxa_demangle() function has to handle things that are not just symbols (types and so on) and so can't do this test itself.  Its most common use is generating a human-friendly error for an uncaught exception, where it is just parsing a type encoding.
> 
> The demangler that we ship is from libelftc.  It also fails on a number of C++11 types and doesn't handle some complex template cases.  

Hi David,

If possible, could you list a few examples that the demangler can not
handle?  Maybe we can fix this in libelftc and merge it back later.

Thanks,
Kai



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140611123054.GA2777>