clayborg added inline comments.

================
Comment at: lldb/source/Commands/CommandObjectTarget.cpp:4175
+    
+    if (object_file->GetFileSpec() != symbol_fspec) {
+      result.AppendWarning("there is a discrepancy between the module file "
----------------
amccarth wrote:
> amccarth wrote:
> > clayborg wrote:
> > > labath wrote:
> > > > This part is not good. Everywhere else except pdbs this means that we 
> > > > were in fact unable to load the symbol file. What happens is that if we 
> > > > cannot load the object file representing the symbol file (at [[ 
> > > > https://github.com/llvm/llvm-project/blob/master/lldb/source/Symbol/SymbolVendor.cpp#L48
> > > >  | SymbolVendor.cpp:48 ]]), we fall back to creating a SymbolFile using 
> > > > the object file of the original module (line 52).
> > > > 
> > > > The effect of that is that the symbol file creation will always 
> > > > succeed, the previous checks are more-or-less useless, and the only way 
> > > > to check if we are really using the symbols from the file the user 
> > > > specified is to compare the file specs.
> > > > 
> > > > Now, PDB symbol files are abusing this fallback, and reading the 
> > > > symbols from the pdb files even though they were in fact asked to read 
> > > > them from the executable file. This is why this may sound like a 
> > > > "discrepancy" coming from the pdb world, but everywhere else this just 
> > > > means that the symbol file was not actually loaded.
> > > This could also fail if the symbol file spec was a bundle which got 
> > > resolved when the module was loaded. If the user specified 
> > > "/path/to/foo.dSYM" and the underlying code was able to resolve the 
> > > symbol file in the dSYM bundle to 
> > > "/path/to/foo.dSYM/Contents/Resources/DWARF/foo".
> > Interesting.  I did not expect that fallback behavior from the API.
> > 
> > > PDB symbol files are abusing this fallback
> > 
> > I'm not sure there's abuse going on here.  I'm not understanding something 
> > about how lldb models this situation.  Consider the case where the user 
> > explicitly asks lldb to load symbols from a PDB:
> > 
> >     (lldb) target add symbols D:\my_symbols\foo.pdb
> > 
> > Then `symbol_file` is the PDB and `object_file` is the executable or DLL.  
> > I would expect those file specs to match only in the case where the symbols 
> > are in the binary (in other words, when symbol file and object file are the 
> > same file).  Even ignoring the PDB case, it seems this wouldn't even work 
> > in the case you mentioned above where the object file is stripped and the 
> > symbol file is an unstripped copy of the object file (possibly with a 
> > different name).  You can also get here if the symbols were matched by UUID 
> > rather than file spec.  Or when the symbols were matched by the basename 
> > minus some extension.
> > 
> > Given that dsyms work, I must be misunderstanding something here.  Can you 
> > help me understand?
> > 
> > What's the right thing to do here?  If I just undo this refactor, then 
> > we're back to silent failures when the symbols exist in a different file 
> > than the object.
> In your example, the file specs do not match.
> 
> 1. The old code would therefore reject the symbol file and return an error.
> 2. The new code would therefore emit a warning but proceed with the selected 
> symbol file and return success.
> 
> Do you want either of these behaviors or something else?
all I know is I can and have typed:
```
(lldb) target symbols add /path/to/foo.dSYM
```
And it would successfully associate it with the binary, probably because the 
code on 4071 would see a UUID and accept it before it gets to this point. 

What is the point of the warning? When would this happen?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73594/new/

https://reviews.llvm.org/D73594



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

Reply via email to