July 13, 2020 2:43 PM, "Paul Gofman" pgofman@codeweavers.com wrote:
There is no guarantee that jmp_buf is 16 bytes aligned.
Signed-off-by: Paul Gofman pgofman@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 */
Won't this only save the lower 8 bytes?
@@ -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 */
And this only restores the lower 8 bytes.
Chip