firmiana402 wrote:

Thanks for the quick fix and for the detailed explanation.

While looking at the breakpad example you mentioned, I noticed what may be a 
separate issue in the current `DW_OP_breg*` evaluator.

For `DW_OP_breg7 +0, DW_OP_consts +80, DW_OP_plus`, I think the surprising part 
is that `DW_OP_breg7` produces an 8-byte scalar on a 32-bit target. DWARF says 
that `DW_OP_breg0..31` / `DW_OP_bregx` push the register-plus-offset result 
with the generic type. On an i386 target, that generic type should be 
address-sized, i.e. 4 bytes.

So the mixed 8-byte / 4-byte operands in that expression may actually be 
exposing another LLDB bug: the `DW_OP_breg*` result seems to be widened to 64 
bits before later generic arithmetic sees it.

I wrote this up separately here: #209728

I would appreciate your thoughts on whether this interpretation looks right. If 
it does, I can also work on a follow-up patch to canonicalize the `DW_OP_breg*` 
result back to the target generic/address size.

https://github.com/llvm/llvm-project/pull/209641
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to