[clang] [llvm] [win][x64] Unwind v2 3/n: Add support for emitting unwind v2 information (equivalent to MSVC /d2epilogunwind) (PR #129142)

2025-02-28 Thread Pedro Miguel Justo via cfe-commits

pmsjt wrote:

> How do epilogs work in chained unwind tables? Do the epilog opcodes from the 
> original table get ignored?

They are additive. When execution is on a fragment, it is assumed that all 
unwind opcodes from the parent fragment(s), all the way to the principal 
fragment, are already applied.

https://github.com/llvm/llvm-project/pull/129142
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [win][x64] Unwind v2 3/n: Add support for emitting unwind v2 information (equivalent to MSVC /d2epilogunwind) (PR #129142)

2025-02-28 Thread Pedro Miguel Justo via cfe-commits

pmsjt wrote:

https://learn.microsoft.com/en-us/cpp/build/exception-handling-x64?view=msvc-170#chained-unwind-info-structures

I don't know what an "atend" is, but what you are describing doesn't seem to be 
a possible solution. Epilogs must be present in the main function entry. Only 
the main function entry can contain unwind opcodes which make changes to the 
stack pointer and return (or tail-call). Fragments can save and restore 
registers with mov but not push/pop. Think of fragments as extensions of the 
body, which can save and restore aditional registers, but they won't have 
prologs or epilogs of their own.

https://github.com/llvm/llvm-project/pull/129142
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits