Module: wine Branch: master Commit: 220a70bee268415925d1ae747611f48e51665e64 URL: https://gitlab.winehq.org/wine/wine/-/commit/220a70bee268415925d1ae747611f48...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Nov 14 18:55:39 2023 +0100
ntdll: Don't use x86-64 assembly on ARM64EC.
---
dlls/ntdll/loader.c | 6 +++--- dlls/ntdll/process.c | 6 +++++- dlls/ntdll/relay.c | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 1a87f4d1f5e..93edc237405 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -304,7 +304,7 @@ __ASM_GLOBAL_FUNC(call_dll_entry_point, __ASM_CFI(".cfi_def_cfa %esp,4\n\t") __ASM_CFI(".cfi_same_value %ebp\n\t") "ret" ) -#elif defined(__x86_64__) +#elif defined(__x86_64__) && !defined(__arm64ec__) extern BOOL CDECL call_dll_entry_point( DLLENTRYPROC proc, void *module, UINT reason, void *reserved ); /* Some apps modify rbx in TLS entry point. */ __ASM_GLOBAL_FUNC(call_dll_entry_point, @@ -379,7 +379,7 @@ struct stub const char *name; const void* entry; }; -#elif defined(__aarch64__) +#elif defined(__aarch64__) || defined(__arm64ec__) struct stub { DWORD ldr_x0; /* ldr x0, $dll */ @@ -443,7 +443,7 @@ static ULONG_PTR allocate_stub( const char *dll, const char *name ) stub->dll = dll; stub->name = name; stub->entry = stub_entry_point; -#elif defined(__aarch64__) +#elif defined(__aarch64__) || defined(__arm64ec__) stub->ldr_x0 = 0x580000a0; /* ldr x0, #20 ($dll) */ stub->ldr_x1 = 0x580000c1; /* ldr x1, #24 ($name) */ stub->mov_x2_lr = 0xaa1e03e2; /* mov x2, lr */ diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index 3ca4195ab3d..f3b899a43f8 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -249,7 +249,11 @@ NTSTATUS WINAPI RtlWow64GetThreadSelectorEntry( HANDLE handle, THREAD_DESCRIPTOR if (RtlWow64GetThreadContext( handle, &context )) { /* hardcoded values */ -#ifdef __x86_64__ +#ifdef __arm64ec__ + context.SegCs = 0x33; + context.SegSs = 0x2b; + context.SegFs = 0x53; +#elif defined(__x86_64__) context.SegCs = 0x23; __asm__( "movw %%fs,%0" : "=m" (context.SegFs) ); __asm__( "movw %%ss,%0" : "=m" (context.SegSs) ); diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c index adc8267ae1f..b6046bb661f 100644 --- a/dlls/ntdll/relay.c +++ b/dlls/ntdll/relay.c @@ -34,7 +34,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(relay);
-#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) +#if (defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)) && !defined(__arm64ec__)
struct relay_descr /* descriptor for a module */ {