Alexandre Julliard : kernel32/tests: Enable the ExitProcess() test on ARM64.

Alexandre Julliard julliard at winehq.org
Tue Oct 29 17:41:46 CDT 2019


Module: wine
Branch: master
Commit: fea66c28847f51de9c56e228cc08ca150f8ffba2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fea66c28847f51de9c56e228cc08ca150f8ffba2

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Oct 29 17:42:14 2019 +0100

kernel32/tests: Enable the ExitProcess() test on ARM64.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/loader.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 912e8600dd..6f143f5efd 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -683,7 +683,9 @@ static NTSTATUS map_image_section( const IMAGE_NT_HEADERS *nt_header, const IMAG
         else ok( 0, "%u: got unexpected path %s instead of %s\n", line, wine_dbgstr_w(path), wine_dbgstr_w(load_test_name));
         pLdrUnloadDll( ldr_mod );
     }
-    else if (ldr_status == STATUS_DLL_INIT_FAILED || ldr_status == STATUS_ACCESS_VIOLATION)
+    else if (ldr_status == STATUS_DLL_INIT_FAILED ||
+             ldr_status == STATUS_ACCESS_VIOLATION ||
+             ldr_status == STATUS_ILLEGAL_INSTRUCTION)
     {
         /* some dlls with invalid entry point will crash, but this means we loaded the test dll */
         ok( !expect_fallback, "%u: got test dll but expected fallback\n", line );
@@ -2953,6 +2955,7 @@ static void child_process(const char *dll_name, DWORD target_offset)
 
 static void test_ExitProcess(void)
 {
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 #include "pshpack1.h"
 #ifdef __x86_64__
     static struct section_data
@@ -2961,13 +2964,20 @@ static void test_ExitProcess(void)
         void *target;
         BYTE jmp_rax[2];
     } section_data = { { 0x48,0xb8 }, dll_entry_point, { 0xff,0xe0 } };
-#else
+#elif defined(__i386__)
     static struct section_data
     {
         BYTE mov_eax;
         void *target;
         BYTE jmp_eax[2];
     } section_data = { 0xb8, dll_entry_point, { 0xff,0xe0 } };
+#elif defined(__aarch64__)
+    static struct section_data
+    {
+        DWORD ldr;  /* ldr x0,target */
+        DWORD br;   /* br x0 */
+        void *target;
+    } section_data = { 0x58000040, 0xd61f0000, dll_entry_point };
 #endif
 #include "poppack.h"
     DWORD dummy, file_align;
@@ -2986,11 +2996,6 @@ static void test_ExitProcess(void)
     SIZE_T size;
     IMAGE_NT_HEADERS nt_header;
 
-#if !defined(__i386__) && !defined(__x86_64__)
-    skip("x86 specific ExitProcess test\n");
-    return;
-#endif
-
     if (!pRtlDllShutdownInProgress)
     {
         win_skip("RtlDllShutdownInProgress is not available on this platform (XP+)\n");
@@ -3440,6 +3445,9 @@ if (0)
 
     ret = DeleteFileA(dll_name);
     ok(ret, "DeleteFile error %d\n", GetLastError());
+#else
+    skip("x86 specific ExitProcess test\n");
+#endif
 }
 
 static PVOID WINAPI failuredllhook(ULONG ul, DELAYLOAD_INFO* pd)




More information about the wine-cvs mailing list