aleksandr.urakov added a comment.

Yes, I mean exactly the same case. For sequences like you've written yes, the 
unwind should work, but there must be some problems with saved registers. 
`x86AssemblyInspectionEngine` doesn't handle instructions like `and %-8, %esp`, 
so the register save would work only if this instruction hadn't changed the 
`esp` value (e.g. `esp` was already aligned). Otherwise, if `esp` was changed, 
the offset to CFA in `RegisterLocation` of some register will be invalid, 
because it will not take the alignment into account.

Moreover, it is impossible to specify a location for some saved register on a 
such stack with the `CFA + offset` restore type, because we can't know how 
`esp` will be changed after `and %-8, %esp`. So I suggest to introduce one more 
frame address (along with CFA), and make it point to `esp` right after `and 
..., %esp`. So any saved register would have `AFA + offset` restore type (I've 
called for now this frame address as AFA - aligned frame address).

As for MSVC-compiled sources, the things are even more interesting. Consider 
the following program:


https://reviews.llvm.org/D53086



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

Reply via email to