aprantl added inline comments.

================
Comment at: lldb/include/lldb/Symbol/Function.h:304
+public:
+  CallEdge(const char *mangled_name, lldb::addr_t return_pc);
+
----------------
vsk wrote:
> vsk wrote:
> > aprantl wrote:
> > > Does this also work for C functions? If yes, would `symbol_name` be a 
> > > more accurate description?
> > > 
> > > Is this pointer globally unique in the program, or can two mangled names 
> > > appear in a legal C program that don't refer to the same function?
> > Yes, C functions are handled. I'll use "symbol_name", hopefully that makes 
> > it clearer.
> Great question. No, a symbol name is not necessarily globally unique. Prior 
> to C11, the one-definition-rule doesn't apply. Even with the ODR, a private 
> symbol in a shared library may have the same name as a strong definition in 
> the main executable.
> 
> I haven't tried to disambiguate ODR conflicts in this patch. What happens 
> when a conflict occurs is: `FindFunctionSymbols` prioritizes the symbol in 
> the main executable, and if the call edge's return PC doesn't exactly match 
> what's in the register state we decline to create any artificial frames. I.e. 
> in the presence of ODR conflicts, we only present artificial frames when 
> we're 100% sure they are accurate.
> 
> Handling ODR conflicts is a 'to do', though. I'll make an explicit note of 
> that here.
Thanks! It might be interesting to grep through an XNU dsym to see just how 
common conflicts are in typical C code.


https://reviews.llvm.org/D50478



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

Reply via email to