Module: wine Branch: master Commit: 28718b80e26ab867acaef588cafadd4fac3648cf URL: https://gitlab.winehq.org/wine/wine/-/commit/28718b80e26ab867acaef588cafadd4...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Jul 8 11:58:27 2024 +0200
wow64: Add a helper to get the 32-bit TEB.
---
dlls/wow64/syscall.c | 9 +++------ dlls/wow64/wow64_private.h | 5 +++++ 2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c index 5c2e9012d57..dba95db8588 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -286,9 +286,7 @@ static void __attribute__((used)) call_user_exception_dispatcher( EXCEPTION_RECO */ static void __attribute__((used)) call_raise_user_exception_dispatcher( ULONG code ) { - TEB32 *teb32 = (TEB32 *)((char *)NtCurrentTeb() + NtCurrentTeb()->WowTebOffset); - - teb32->ExceptionCode = code; + NtCurrentTeb32()->ExceptionCode = code;
switch (current_machine) { @@ -846,10 +844,9 @@ static DWORD WINAPI process_init( RTL_RUN_ONCE *once, void *param, void **contex */ static void thread_init(void) { - TEB32 *teb32 = (TEB32 *)((char *)NtCurrentTeb() + NtCurrentTeb()->WowTebOffset); void *cpu_area_ctx;
- teb32->WOW32Reserved = PtrToUlong( pBTCpuGetBopCode() ); + NtCurrentTeb32()->WOW32Reserved = PtrToUlong( pBTCpuGetBopCode() ); RtlWow64GetCurrentCpuArea( NULL, &cpu_area_ctx, NULL ); NtCurrentTeb()->TlsSlots[WOW64_TLS_WOW64INFO] = wow64info; if (pBTCpuThreadInit) pBTCpuThreadInit(); @@ -1172,7 +1169,7 @@ NTSTATUS WINAPI Wow64KiUserCallbackDispatcher( ULONG id, void *args, ULONG len, void **ret_ptr, ULONG *ret_len ) { WOW64_CPURESERVED *cpu = NtCurrentTeb()->TlsSlots[WOW64_TLS_CPURESERVED]; - TEB32 *teb32 = (TEB32 *)((char *)NtCurrentTeb() + NtCurrentTeb()->WowTebOffset); + TEB32 *teb32 = NtCurrentTeb32(); ULONG teb_frame = teb32->Tib.ExceptionList; struct user_callback_frame frame; USHORT flags = cpu->Flags; diff --git a/dlls/wow64/wow64_private.h b/dlls/wow64/wow64_private.h index 4f38c704174..80604b0ad17 100644 --- a/dlls/wow64/wow64_private.h +++ b/dlls/wow64/wow64_private.h @@ -69,6 +69,11 @@ static inline const WCHAR *get_machine_wow64_dir( USHORT machine ) } }
+static inline TEB32 *NtCurrentTeb32(void) +{ + return (TEB32 *)((char *)NtCurrentTeb() + NtCurrentTeb()->WowTebOffset); +} + static inline ULONG get_ulong( UINT **args ) { return *(*args)++; } static inline HANDLE get_handle( UINT **args ) { return LongToHandle( *(*args)++ ); } static inline void *get_ptr( UINT **args ) { return ULongToPtr( *(*args)++ ); }