[lldb-dev] LLDB expressions confused by overloading
Siva Chandra via lldb-dev
lldb-dev at lists.llvm.org
Thu Nov 5 10:24:26 PST 2015
On Thu, Nov 5, 2015 at 9:43 AM, Aidan Dodds via lldb-dev
<lldb-dev at lists.llvm.org> wrote:
> I believe I have tracked down an interesting bug which related to LLDBs
> expression parser.
>
> In my target program I have a math library, a shared object which makes use
> of clangs __attribute__((overloadable)) extension for C99. This causes the
> the function names in the math library to be mangled.
> A problem arises however since some of the function names mirror those
> exported by libm.so, and the function names in libm are not mangled.
>
> My problem scenario:
> If I call an expression during a debugging session, the symbol table of
> libm.so is consulted first and a match will be found. Later on in the
> expression setup, any dwarf information will be consulted for functions with
> this name. libm.so doesn't have any debugging info attached, however the
> math library of my target may. In this case the expression will now call
> which ever function it could first find dwarf info for, regardless of the
> name mangling.
>
> The net result is that a function will be called in my targets math library
> that may not match the given function signature. In my case this causes the
> expression to raise a SEGFAULT and fail. I was seeing an expression to call
> a vector4 function, in fact call the vector 2 version behinds the scenes.
>
> One solution to this problem seems to be to have the expression evaluator
> try and first look for any functions that may have a mangled name for the
> given function signature, and if that fails fall back to simply checking for
> the unmangled version, as is currently done.
Is this similar to the problem tackled by this patch:
http://reviews.llvm.org/D12809
More information about the lldb-dev
mailing list