charles-zablit wrote:

> There is a "AtFunctionEntry" unwindplan that the ABI plugin can specify but 
> that's about it. Is that the situation?

Yes, I matched what we do here: 
https://github.com/llvm/llvm-project/blob/a9e5bb572703780e3eea4a2759104a141ea73466/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp#L859-L862.

This effectively makes Windows equal to the AtFunctionEntry unwindplan.

I could not find any source that Windows is `omit-frame-pointer` by default, 
however, Windows x64 does not guarantee that RBP is a frame pointer:
https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions?view=msvc-170#prolog-and-epilog
> Register volatility and preservation
> ...
> RBP | Nonvolatile | May be used as a frame pointer; must be preserved by 
> callee

My understanding is that 
[`RegisterContextUnwind::GetFullUnwindPlanForFrame`](https://github.com/llvm/llvm-project/blob/4f76a4c5a3f8711fe13b05c0f93ac78349396292/lldb/source/Target/RegisterContextUnwind.cpp#L825)
 only falls back to the default when there is no unwinding data for the 
function. On Windows, that's a function which does not edit `rsp`, so `rsp+8` 
is valid for the whole body and the current `rbp+16` is wrong even in that case.


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

Reply via email to