> On Nov 5, 2015, at 9:43 AM, Aidan Dodds via lldb-dev 
> <lldb-dev@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.
> 
> Would this make sense?
> 
> It seems less then ideal to have a clash of mangled and unmangled names, but 
> I can imagine this situation may not be all that rare.

The correct fix for this is to have the DWARFASTParserClang, when it parses the 
function prototype, recognize that a C function (check the language of the 
compile unit) has a mangled name and enable the corresponding bit in the 
clang::FunctionType so that the expression parser knows to look for the mangled 
name when someone uses it. Then no changes to the expression parser should be 
required.

Greg Clayton

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to