[PATCH] winecrt0: Do not expect jmp_buf to be aligned in __wine_longjmp on x86_64.

Paul Gofman pgofman at codeweavers.com
Mon Jul 13 14:43:06 CDT 2020


There is no guarantee that jmp_buf is 16 bytes aligned.

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
 dlls/winecrt0/exception.c | 40 +++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/dlls/winecrt0/exception.c b/dlls/winecrt0/exception.c
index 137ee2d6ee3..d3ce8d1aebb 100644
--- a/dlls/winecrt0/exception.c
+++ b/dlls/winecrt0/exception.c
@@ -80,16 +80,16 @@ __ASM_GLOBAL_FUNC( __wine_setjmpex,
                    "movq %r15,0x48(%rcx)\n\t"      /* jmp_buf->R15 */
                    "movq (%rsp),%rax\n\t"
                    "movq %rax,0x50(%rcx)\n\t"      /* jmp_buf->Rip */
-                   "movdqa %xmm6,0x60(%rcx)\n\t"   /* jmp_buf->Xmm6 */
-                   "movdqa %xmm7,0x70(%rcx)\n\t"   /* jmp_buf->Xmm7 */
-                   "movdqa %xmm8,0x80(%rcx)\n\t"   /* jmp_buf->Xmm8 */
-                   "movdqa %xmm9,0x90(%rcx)\n\t"   /* jmp_buf->Xmm9 */
-                   "movdqa %xmm10,0xa0(%rcx)\n\t"  /* jmp_buf->Xmm10 */
-                   "movdqa %xmm11,0xb0(%rcx)\n\t"  /* jmp_buf->Xmm11 */
-                   "movdqa %xmm12,0xc0(%rcx)\n\t"  /* jmp_buf->Xmm12 */
-                   "movdqa %xmm13,0xd0(%rcx)\n\t"  /* jmp_buf->Xmm13 */
-                   "movdqa %xmm14,0xe0(%rcx)\n\t"  /* jmp_buf->Xmm14 */
-                   "movdqa %xmm15,0xf0(%rcx)\n\t"  /* jmp_buf->Xmm15 */
+                   "movq %xmm6,0x60(%rcx)\n\t"   /* jmp_buf->Xmm6 */
+                   "movq %xmm7,0x70(%rcx)\n\t"   /* jmp_buf->Xmm7 */
+                   "movq %xmm8,0x80(%rcx)\n\t"   /* jmp_buf->Xmm8 */
+                   "movq %xmm9,0x90(%rcx)\n\t"   /* jmp_buf->Xmm9 */
+                   "movq %xmm10,0xa0(%rcx)\n\t"  /* jmp_buf->Xmm10 */
+                   "movq %xmm11,0xb0(%rcx)\n\t"  /* jmp_buf->Xmm11 */
+                   "movq %xmm12,0xc0(%rcx)\n\t"  /* jmp_buf->Xmm12 */
+                   "movq %xmm13,0xd0(%rcx)\n\t"  /* jmp_buf->Xmm13 */
+                   "movq %xmm14,0xe0(%rcx)\n\t"  /* jmp_buf->Xmm14 */
+                   "movq %xmm15,0xf0(%rcx)\n\t"  /* jmp_buf->Xmm15 */
                    "xorq %rax,%rax\n\t"
                    "retq" )
 
@@ -103,16 +103,16 @@ __ASM_GLOBAL_FUNC( __wine_longjmp,
                    "movq 0x38(%rcx),%r13\n\t"      /* jmp_buf->R13 */
                    "movq 0x40(%rcx),%r14\n\t"      /* jmp_buf->R14 */
                    "movq 0x48(%rcx),%r15\n\t"      /* jmp_buf->R15 */
-                   "movdqa 0x60(%rcx),%xmm6\n\t"   /* jmp_buf->Xmm6 */
-                   "movdqa 0x70(%rcx),%xmm7\n\t"   /* jmp_buf->Xmm7 */
-                   "movdqa 0x80(%rcx),%xmm8\n\t"   /* jmp_buf->Xmm8 */
-                   "movdqa 0x90(%rcx),%xmm9\n\t"   /* jmp_buf->Xmm9 */
-                   "movdqa 0xa0(%rcx),%xmm10\n\t"  /* jmp_buf->Xmm10 */
-                   "movdqa 0xb0(%rcx),%xmm11\n\t"  /* jmp_buf->Xmm11 */
-                   "movdqa 0xc0(%rcx),%xmm12\n\t"  /* jmp_buf->Xmm12 */
-                   "movdqa 0xd0(%rcx),%xmm13\n\t"  /* jmp_buf->Xmm13 */
-                   "movdqa 0xe0(%rcx),%xmm14\n\t"  /* jmp_buf->Xmm14 */
-                   "movdqa 0xf0(%rcx),%xmm15\n\t"  /* jmp_buf->Xmm15 */
+                   "movq 0x60(%rcx),%xmm6\n\t"   /* jmp_buf->Xmm6 */
+                   "movq 0x70(%rcx),%xmm7\n\t"   /* jmp_buf->Xmm7 */
+                   "movq 0x80(%rcx),%xmm8\n\t"   /* jmp_buf->Xmm8 */
+                   "movq 0x90(%rcx),%xmm9\n\t"   /* jmp_buf->Xmm9 */
+                   "movq 0xa0(%rcx),%xmm10\n\t"  /* jmp_buf->Xmm10 */
+                   "movq 0xb0(%rcx),%xmm11\n\t"  /* jmp_buf->Xmm11 */
+                   "movq 0xc0(%rcx),%xmm12\n\t"  /* jmp_buf->Xmm12 */
+                   "movq 0xd0(%rcx),%xmm13\n\t"  /* jmp_buf->Xmm13 */
+                   "movq 0xe0(%rcx),%xmm14\n\t"  /* jmp_buf->Xmm14 */
+                   "movq 0xf0(%rcx),%xmm15\n\t"  /* jmp_buf->Xmm15 */
                    "movq 0x50(%rcx),%rdx\n\t"      /* jmp_buf->Rip */
                    "movq 0x10(%rcx),%rsp\n\t"      /* jmp_buf->Rsp */
                    "jmp *%rdx" )
-- 
2.26.2




More information about the wine-devel mailing list