diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 6477bf8a953..35395283619 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -1945,16 +1945,16 @@ NTSTATUS WINAPI NtGetContextThread( HANDLE handle, CONTEXT *context ) context->Rbp = frame->rbp; context->Rip = frame->rip; context->EFlags = frame->eflags; - __asm__( "movw %%cs,%0" : "=g" (context->SegCs) ); - __asm__( "movw %%ss,%0" : "=g" (context->SegSs) ); + context->SegCs = frame->cs; + context->SegSs = frame->ss; context->ContextFlags |= CONTEXT_CONTROL; } if (needed_flags & CONTEXT_SEGMENTS) { - __asm__( "movw %%ds,%0" : "=g" (context->SegDs) ); - __asm__( "movw %%es,%0" : "=g" (context->SegEs) ); - __asm__( "movw %%fs,%0" : "=g" (context->SegFs) ); - __asm__( "movw %%gs,%0" : "=g" (context->SegGs) ); + context->SegDs = frame->ds; + context->SegEs = frame->es; + context->SegFs = frame->fs; + context->SegGs = frame->gs; context->ContextFlags |= CONTEXT_SEGMENTS; } if (needed_flags & CONTEXT_FLOATING_POINT) diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c index 12ba189aa0a..863d17c2734 100644 --- a/tools/winebuild/import.c +++ b/tools/winebuild/import.c @@ -1529,6 +1529,12 @@ void output_syscalls( DLLSPEC *spec ) output( "\tmovq %%rbx,-0x28(%%rbp)\n" ); output( "\tleaq 0x10(%%rbp),%%rbx\n" ); output( "\tmovq %%rbx,-0x10(%%rbp)\n" ); + output( "\tmovw %%cs,-0x20(%%rbp)\n" ); + output( "\tmovw %%ds,-0x1e(%%rbp)\n" ); + output( "\tmovw %%es,-0x1c(%%rbp)\n" ); + output( "\tmovw %%fs,-0x1a(%%rbp)\n" ); + output( "\tmovw %%ss,-0x8(%%rbp)\n" ); + output( "\tmovw %%gs,-0x6(%%rbp)\n" ); output( "\tfxsave64 (%%rsp)\n" ); output( "\tmovq %%gs:0x30,%%rcx\n" ); output( "\tleaq -0x98(%%rbp),%%rbx\n" );