jasonmolenda wrote:

Interesting PR, thanks for looking at adding these annotations.  I think 
exposing these dwarf location expressions in a more user-visible way is going 
to put a lot of pressure on making them more meaningful to users, as opposed to 
debugging prints for debugger/compiler developers.  Another example of an 
unfortunate behavior on AArch64 where x0 is the 64-bit register name, w0 is the 
32-bit register name, but the DWARF register number doesn't specify which it is 
(it depends on the type of the value to read 32- or 64-bits), so the expression 
parser always prints the "w" register by default which might be a little 
confusing.

One thing which is obviously correct, but was unintuitive at first for me, was 
that the DWARF location is only known after the instruction initializing it, 
e.g.

```
    0x5555555551f7 <+7>:  xorl   %ebx, %ebx
    0x5555555551f9 <+9>:  nopl   (%rax) ; my_special_variable = DW_OP_reg3 RBX 
```

for `uint32_t my_special_variable = 0`.  The comment on +9 is really reflecting 
what has been done when +7 has executed.  It's CORRECT, but at first blush it's 
not what I'd have expected.  I think changing this would be more confusing when 
people are examining edge cases than otherwise.  Also in the sample codegen, we 
see `my_special_variable` cease to exist for a little when that register is 
reused as `new_variable` == `my_special_variable+1` and then that same incr 
value becomes `my_special_variable` when we loop and we avoid incrementing it 
again.  Oh well, that's the fun of reading assembly code, no way to make that 
easier.

https://github.com/llvm/llvm-project/pull/147460
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to