[lldb-dev] LLDB expressions confused by overloading

Aidan Dodds via lldb-dev lldb-dev at lists.llvm.org
Thu Nov 5 09:43:21 PST 2015


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.

I am happy to provide more info if it would be usefull.

Thanks,
Aidan

-- 
Aidan Dodds
staff software engineer, Debuggers
Codeplay Software Ltd
Level C, Argyle House, 3 Lady Lawson St.
Edinbrgh, EH3 9DR
Tel: 0131 466 0503
Fax: 0131 557 6600
Website: http://www.codeplay.com
Twitter: https://twitter.com/codeplaysoft

This email and any attachments may contain confidential and /or privileged information and is for use by the addressee only. If you are not the intended recipient, please notify Codeplay Software Ltd immediately and delete the message from your computer. You may not copy or forward it,or use or disclose its contents to any other person. Any views or other information in this message which do not relate to our business are not authorized by Codeplay software Ltd, nor does this message form part of any contract unless so stated.
As internet communications are capable of data corruption Codeplay Software Ltd does not accept any responsibility for any changes made to this message after it was sent. Please note that Codeplay Software Ltd does not accept any liability or responsibility for viruses and it is your responsibility to scan any attachments.
Company registered in England and Wales, number: 04567874
Registered office: 81 Linkfield Street, Redhill RH1 6BY



More information about the lldb-dev mailing list