From: Jacek Caban <jacek@codeweavers.com> Fixes -Wunused-but-set-global warnings. --- dlls/ntdll/tests/wow64.c | 68 ++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/dlls/ntdll/tests/wow64.c b/dlls/ntdll/tests/wow64.c index 59601c49563..84ff4945629 100644 --- a/dlls/ntdll/tests/wow64.c +++ b/dlls/ntdll/tests/wow64.c @@ -31,7 +31,6 @@ #include "ddk/wdm.h" #include "wine/test.h" -static NTSTATUS (WINAPI *pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); static NTSTATUS (WINAPI *pNtQuerySystemInformationEx)(SYSTEM_INFORMATION_CLASS,void*,ULONG,void*,ULONG,ULONG*); static NTSTATUS (WINAPI *pRtlGetNativeSystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); static void (WINAPI *pRtlOpenCrossProcessEmulatorWorkConnection)(HANDLE,HANDLE*,void**); @@ -39,13 +38,13 @@ static void * (WINAPI *pRtlFindExportedRoutineByName)(HMODULE,const char *); static USHORT (WINAPI *pRtlWow64GetCurrentMachine)(void); static NTSTATUS (WINAPI *pRtlWow64GetProcessMachines)(HANDLE,WORD*,WORD*); static NTSTATUS (WINAPI *pRtlWow64GetSharedInfoProcess)(HANDLE,BOOLEAN*,WOW64INFO*); -static NTSTATUS (WINAPI *pRtlWow64GetThreadContext)(HANDLE,WOW64_CONTEXT*); static NTSTATUS (WINAPI *pRtlWow64IsWowGuestMachineSupported)(USHORT,BOOLEAN*); static NTSTATUS (WINAPI *pNtMapViewOfSectionEx)(HANDLE,HANDLE,PVOID*,const LARGE_INTEGER*,SIZE_T*,ULONG,ULONG,MEM_EXTENDED_PARAMETER*,ULONG); static NTSTATUS (WINAPI *pNtSetLdtEntries)(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG); #ifdef _WIN64 static NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*); static NTSTATUS (WINAPI *pRtlWow64GetCpuAreaInfo)(WOW64_CPURESERVED*,ULONG,WOW64_CPU_AREA_INFO*); +static NTSTATUS (WINAPI *pRtlWow64GetThreadContext)(HANDLE,WOW64_CONTEXT*); static NTSTATUS (WINAPI *pRtlWow64GetThreadSelectorEntry)(HANDLE,THREAD_DESCRIPTOR_INFORMATION*,ULONG,ULONG*); static CROSS_PROCESS_WORK_ENTRY * (WINAPI *pRtlWow64PopAllCrossProcessWorkFromWorkList)(CROSS_PROCESS_WORK_HDR*,BOOLEAN*); static CROSS_PROCESS_WORK_ENTRY * (WINAPI *pRtlWow64PopCrossProcessWorkFromFreeList)(CROSS_PROCESS_WORK_HDR*); @@ -54,18 +53,19 @@ static BOOLEAN (WINAPI *pRtlWow64PushCrossProcessWorkOntoWorkList)(CROSS_PROCESS static BOOLEAN (WINAPI *pRtlWow64RequestCrossProcessHeavyFlush)(CROSS_PROCESS_WORK_HDR*); static void (WINAPI *pProcessPendingCrossProcessEmulatorWork)(void); #else +static NTSTATUS (WINAPI *pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); static NTSTATUS (WINAPI *pNtWow64AllocateVirtualMemory64)(HANDLE,ULONG64*,ULONG64,ULONG64*,ULONG,ULONG); static NTSTATUS (WINAPI *pNtWow64GetNativeSystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); static NTSTATUS (WINAPI *pNtWow64IsProcessorFeaturePresent)(ULONG); static NTSTATUS (WINAPI *pNtWow64QueryInformationProcess64)(HANDLE,PROCESSINFOCLASS,void*,ULONG,ULONG*); static NTSTATUS (WINAPI *pNtWow64ReadVirtualMemory64)(HANDLE,ULONG64,void*,ULONG64,ULONG64*); static NTSTATUS (WINAPI *pNtWow64WriteVirtualMemory64)(HANDLE,ULONG64,const void *,ULONG64,ULONG64*); +static BOOL old_wow64; /* Wine old-style wow64 */ +static void *code_mem; #endif static BOOL is_win64 = sizeof(void *) > sizeof(int); static BOOL is_wow64; -static BOOL old_wow64; /* Wine old-style wow64 */ -static void *code_mem; #ifdef __i386__ static USHORT current_machine = IMAGE_FILE_MACHINE_I386; @@ -105,6 +105,7 @@ static void init(void) if (!IsWow64Process( GetCurrentProcess(), &is_wow64 )) is_wow64 = FALSE; +#ifndef _WIN64 if (is_wow64) { TEB64 *teb64 = ULongToPtr( NtCurrentTeb()->GdiBatchCount ); @@ -115,11 +116,11 @@ static void init(void) old_wow64 = !peb64->LdrData; } } +#endif #define GET_PROC(func) p##func = (void *)GetProcAddress( ntdll, #func ) GET_PROC( NtMapViewOfSectionEx ); GET_PROC( NtSetLdtEntries ); - GET_PROC( NtQuerySystemInformation ); GET_PROC( NtQuerySystemInformationEx ); GET_PROC( RtlGetNativeSystemInformation ); GET_PROC( RtlOpenCrossProcessEmulatorWorkConnection ); @@ -127,11 +128,11 @@ static void init(void) GET_PROC( RtlWow64GetCurrentMachine ); GET_PROC( RtlWow64GetProcessMachines ); GET_PROC( RtlWow64GetSharedInfoProcess ); - GET_PROC( RtlWow64GetThreadContext ); GET_PROC( RtlWow64IsWowGuestMachineSupported ); #ifdef _WIN64 GET_PROC( KiUserExceptionDispatcher ); GET_PROC( RtlWow64GetCpuAreaInfo ); + GET_PROC( RtlWow64GetThreadContext ); GET_PROC( RtlWow64GetThreadSelectorEntry ); GET_PROC( RtlWow64PopAllCrossProcessWorkFromWorkList ); GET_PROC( RtlWow64PopCrossProcessWorkFromFreeList ); @@ -140,6 +141,7 @@ static void init(void) GET_PROC( RtlWow64RequestCrossProcessHeavyFlush ); GET_PROC( ProcessPendingCrossProcessEmulatorWork ); #else + GET_PROC( NtQuerySystemInformation ); GET_PROC( NtWow64AllocateVirtualMemory64 ); GET_PROC( NtWow64GetNativeSystemInformation ); GET_PROC( NtWow64IsProcessorFeaturePresent ); @@ -184,8 +186,10 @@ static void init(void) trace( "current %04x native %04x\n", current_machine, native_machine ); +#ifndef _WIN64 if (native_machine == IMAGE_FILE_MACHINE_AMD64) code_mem = VirtualAlloc( NULL, 65536, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE ); +#endif } static BOOL create_process_machine( char *cmdline, DWORD flags, USHORT machine, PROCESS_INFORMATION *pi ) @@ -2314,8 +2318,10 @@ static NTSTATUS call_func64( ULONG64 func64, int nb_args, ULONG64 *args ) return func( func64, nb_args, args ); } -static ULONG64 main_module, ntdll_module, wow64_module, wow64base_module, wow64con_module, - wow64cpu_module, xtajit_module, wow64win_module; +static struct +{ + ULONG64 main, ntdll, wow64, xtajit, wow64win, wow64base, wow64con, wow64cpu; +} modules; static void enum_modules64( void (*func)(ULONG64,const WCHAR *) ) { @@ -2423,10 +2429,10 @@ static void check_module( ULONG64 base, const WCHAR *name ) if ((p = wcsrchr( module, '\\' ))) p++; else p = module; ok( !wcsicmp( name, p ), "wrong name %s / %s\n", debugstr_w(name), debugstr_w(module)); - main_module = base; + modules.main = base; return; } -#define CHECK_MODULE(mod) do { if (!wcsicmp( name, L"" #mod ".dll" )) { mod ## _module = base; return; } } while(0) +#define CHECK_MODULE(mod) do { if (!wcsicmp( name, L"" #mod ".dll" )) { modules.mod = base; return; } } while(0) CHECK_MODULE(ntdll); CHECK_MODULE(wow64); CHECK_MODULE(wow64base); @@ -2448,14 +2454,14 @@ static void test_modules(void) enum_modules64( check_module ); todo_wine_if( old_wow64 ) { - ok( main_module, "main module not found\n" ); - ok( ntdll_module, "64-bit ntdll not found\n" ); - ok( wow64_module, "wow64.dll not found\n" ); + ok( modules.main, "main module not found\n" ); + ok( modules.ntdll, "64-bit ntdll not found\n" ); + ok( modules.wow64, "wow64.dll not found\n" ); if (native_machine == IMAGE_FILE_MACHINE_ARM64) - ok( xtajit_module, "xtajit.dll not found\n" ); + ok( modules.xtajit, "xtajit.dll not found\n" ); else - ok( wow64cpu_module, "wow64cpu.dll not found\n" ); - ok( wow64win_module, "wow64win.dll not found\n" ); + ok( modules.wow64cpu, "wow64cpu.dll not found\n" ); + ok( modules.wow64win, "wow64win.dll not found\n" ); } } @@ -2804,7 +2810,7 @@ static void test_init_block(void) } #undef CHECK_FUNC - if (size && (ptr64 = get_proc_address64( ntdll_module, "LdrSystemDllInitBlock" ))) + if (size && (ptr64 = get_proc_address64( modules.ntdll, "LdrSystemDllInitBlock" ))) { DWORD buffer[64]; HANDLE process = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() ); @@ -2820,16 +2826,16 @@ static void test_init_block(void) static void test_memory_notifications(void) { - HMODULE module = (HMODULE)(ULONG_PTR)xtajit_module; + HMODULE module = (HMODULE)(ULONG_PTR)modules.xtajit; WOW64INFO *info; DWORD i; - if (!xtajit_module) + if (!modules.xtajit) { skip( "xtajit.dll not loaded\n" ); return; } - if ((ULONG_PTR)module != xtajit_module) + if ((ULONG_PTR)module != modules.xtajit) { skip( "xtajit.dll loaded above 4G\n" ); return; @@ -2891,9 +2897,9 @@ static void test_iosb(void) if (!is_wow64) return; if (!code_mem) return; - if (!ntdll_module) return; - read_func = get_proc_address64( ntdll_module, "NtReadFile" ); - flush_func = get_proc_address64( ntdll_module, "NtFlushBuffersFile" ); + if (!modules.ntdll) return; + read_func = get_proc_address64( modules.ntdll, "NtReadFile" ); + flush_func = get_proc_address64( modules.ntdll, "NtFlushBuffersFile" ); /* async calls set iosb32 but not iosb64 */ @@ -3034,7 +3040,7 @@ static void test_iosb(void) static NTSTATUS invoke_syscall( const char *name, ULONG args32[] ) { ULONG64 args64[] = { -1, PtrToUlong( args32 ) }; - ULONG64 func = get_proc_address64( wow64_module, "Wow64SystemServiceEx" ); + ULONG64 func = get_proc_address64( modules.wow64, "Wow64SystemServiceEx" ); BYTE *syscall = (BYTE *)GetProcAddress( GetModuleHandleA("ntdll.dll"), name ); ok( syscall != NULL, "syscall %s not found\n", name ); @@ -3057,9 +3063,9 @@ static void test_syscalls(void) if (!is_wow64) return; if (!code_mem) return; - if (!ntdll_module) return; + if (!modules.ntdll) return; - func = get_proc_address64( wow64_module, "Wow64SystemServiceEx" ); + func = get_proc_address64( modules.wow64, "Wow64SystemServiceEx" ); ok( func, "Wow64SystemServiceEx not found\n" ); event = CreateEventA( NULL, FALSE, FALSE, NULL ); @@ -3141,9 +3147,9 @@ static void test_cpu_area(void) if (!is_wow64) return; if (!code_mem) return; - if (!ntdll_module) return; + if (!modules.ntdll) return; - if ((ptr = get_proc_address64( ntdll_module, "RtlWow64GetCurrentCpuArea" ))) + if ((ptr = get_proc_address64( modules.ntdll, "RtlWow64GetCurrentCpuArea" ))) { USHORT machine = 0xdead; ULONG64 context, context_ex; @@ -3171,9 +3177,9 @@ static void test_exception_dispatcher(void) if (!is_wow64) return; if (!code_mem) return; - if (!ntdll_module) return; + if (!modules.ntdll) return; - ptr = get_proc_address64( ntdll_module, "KiUserExceptionDispatcher" ); + ptr = get_proc_address64( modules.ntdll, "KiUserExceptionDispatcher" ); ok( ptr, "KiUserExceptionDispatcher not found\n" ); if (pNtWow64ReadVirtualMemory64) @@ -3191,7 +3197,7 @@ static void test_exception_dispatcher(void) status = pNtWow64ReadVirtualMemory64( process, hook_ptr, &hook, sizeof(hook), &res ); ok( !status, "NtWow64ReadVirtualMemory64 failed %lx\n", status ); - expect = get_proc_address64( wow64_module, "Wow64PrepareForException" ); + expect = get_proc_address64( modules.wow64, "Wow64PrepareForException" ); ok( hook == expect, "hook %I64x set to %I64x / %I64x\n", hook_ptr, hook, expect ); NtClose( process ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10861