[PATCH 14/18] ntdll: Don't use NtSetContextThread in NtContinue.

Zebediah Figura (she/her) zfigura at codeweavers.com
Thu Feb 4 20:43:29 CST 2021


On 1/22/21 9:51 AM, Jacek Caban wrote:
> 
> NtSetContextThread, unlike NtContinue, should not set nonvolatile registers.
> 
> Signed-off-by: Jacek Caban <jacek at codeweavers.com>
> ---
>    dlls/ntdll/unix/server.c        |  2 +-
>    dlls/ntdll/unix/signal_arm.c    | 18 +++++++++++++-----
>    dlls/ntdll/unix/signal_arm64.c  | 20 ++++++++++++++------
>    dlls/ntdll/unix/signal_i386.c   | 14 +++++++++++++-
>    dlls/ntdll/unix/signal_x86_64.c | 15 ++++++++++++++-
>    dlls/ntdll/unix/unix_private.h  |  1 +
>    6 files changed, 56 insertions(+), 14 deletions(-)
> 
> 

Just to clarify—our NtSetContextThread does set nonvolatile registers, 
and continues to do so after this series. Is that incorrect behaviour?

Also:

> diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
> index db09d7759da..fe581cca7b2 100644
> --- a/dlls/ntdll/unix/server.c
> +++ b/dlls/ntdll/unix/server.c
> @@ -726,7 +726,7 @@ NTSTATUS WINAPI NtContinue( CONTEXT *context, BOOLEAN alertable )
>          status = server_select( NULL, 0, SELECT_INTERRUPTIBLE | SELECT_ALERTABLE, 0, NULL, NULL, &apc );
>          if (status == STATUS_USER_APC) invoke_apc( context, &apc );
>      }
> -    return NtSetContextThread( GetCurrentThread(), context );
> +    signal_set_cpu_context( context );
>  }
>  
>  

Would it be simpler just to move NtContinue() to signal_*.c instead?

One further question regarding this patch series / patch 0017: I assume 
you're also planning to also change NtContinue() to use the syscall exit 
code instead of set_full_cpu_context()?



More information about the wine-devel mailing list