diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 1a87f4d1f5eece202eed083ab8ee1c84385226a0..93edc237405caca330f78b40efdea5fb08aa188e 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 3ca4195ab3d090028c74b0c3370c8e21a57455f1..f3b899a43f8cb4ededa48b85d0249fda6938b657 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 adc8267ae1f719396dcf50205ee2d143c4257275..b6046bb661f3e84a42206adb19bdef9772ee019c 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 */ {