On 2025-06-27 11:45, Jeremy Drake via Cygwin wrote:
On Fri, 27 Jun 2025, Corinna Vinschen via Cygwin wrote:
On Jun 27 14:41, Pip Cet via Cygwin wrote:
My suggested fix is to align the value in %rbx to the next 64-byte
multiple after the "cpuid" instruction is executed, by performing the
assembler equivalent of $rbx += 63; $rbx &= -64; I tried this:

diff --git a/winsup/cygwin/scripts/gendef b/winsup/cygwin/scripts/gendef
index 861a2405b..d681fde3f 100755
--- a/winsup/cygwin/scripts/gendef
+++ b/winsup/cygwin/scripts/gendef
@@ -232,6 +232,8 @@ sigdelayed:
        movl    \$0x0d,%eax
        xorl    %ecx,%ecx
        cpuid   # get necessary space for xsave
+       addq    \$63, %rbx
+       andq    \$-64, %rbx # align to next 64-byte multiple

what about a oneliner instead by just aligning rsp?  As in

        movq    %rbx,%rcx
        addq    \$0x48,%rbx # 0x18 for alignment, 0x30 for additional space

If aligning via andq, does the 0x18 "for alignment" still need to be
included?

I think that's a holdover from the non-xsave path above this section, and is the extra space needed here in the xsave path?
        subq    %rbx,%rsp

   +     andq    \$-64, %rsp

--
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retrancher  but when there is no more to cut
                                -- Antoine de Saint-Exupéry

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to