[PATCH] D38819: [libunwind] Add support for dwarf unwinding on windows on x86_64
Martin Storsjö via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 25 14:13:21 PDT 2017
mstorsjo added inline comments.
================
Comment at: src/UnwindRegistersRestore.S:72
+ movq 56(%rcx), %rax # rax holds new stack pointer
+ subq $16, %rax
+ movq %rax, 56(%rcx)
----------------
mstorsjo wrote:
> compnerd wrote:
> > Hmm, why is this `$16`? The `$rsp` was adjusted by `$8` in the `setjmp`.
> This is the exact same thing as is done right now for x86_64 on unixy systems already, just with different registers.
>
> The adjustment by 16 bytes is because we store `rcx` and `rip` on the stack here to restore them slightly differently than the others. See the `store new rcx/rip on new stack`, `restore rcx later` and `rcx was saved here earlier` and `rip was saved here` comments below.
Instead of duplicating the asm for the win64 and unix calling convention, I can also pretty easily template it using the cpp, using a define for whatever register holds the context pointer from the first function argument. Would that be better, or is it clearer just to have it typed out in both forms literally?
https://reviews.llvm.org/D38819
More information about the cfe-commits
mailing list