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>
index | next in thread | previous in thread | raw e-mail
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, Kaihome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140611123054.GA2777>
