labath added a comment.

It looks like you've managed to find a bug in lldb. Congratulations. ;)

I don't yet fully understand what's going on, but the rough idea is this: Lldb 
relies heavily on knowing the boundaries of every function. For this reason, 
our ELF code contains logic to parse the unwind info for an object file, and 
use it to create fake (synthetic) symbols if we don't have real ones 
(ObjectFileELF::ParseUnwindSymbols). The first bug is that it tries to create a 
new symbol for the unwind info of main. This is probably due to incomplete 
handling of unlinked files. The second bug is that the code assigns 
`symtab.size()` as the ID of the new symbol. This is a problem, because the 
symtab can contain real symbols with IDs larger than that (because we skip some 
useless symbols when creating lldb Symbol objects). This seems to be the case 
with this test file which contains an undefined STT_NOTYPE symbol as a first 
entry.  (I'm not sure why is that the case, nor if this is specific to this 
test file). In any case, the result of all this is that we end up with two 
symbols with ID 12 ("x", and the synthetic one) and we end up picking one 
nondeterministically when resolving relocations for `x`.

In this case, windows actually chooses the right symbol, which is why it 
correctly ends up printing `x = 10`. On linux, we pick the wrong one, and `x` 
ends up pointing to a random block of zeroes.

I'm going to look into these issues, but for the time being, you can just work 
around the issue by removing the `main` function, which will stop all of these 
bad things from happening. I have attached a reduced version of this test file, 
which should work correctly everywhere. (Strictly speaking, it would've been 
enough to remove the .cfi directives, but while I was in there, I took the 
opportunity to remove other unnecessary cruft as well)

F16352196: dwo-relative-path.s <https://reviews.llvm.org/F16352196>


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97786

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

Reply via email to