From b288f7be1860c6373555b3d412fe849a656fe165 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Hentschel?= Date: Wed, 6 Feb 2013 22:00:59 +0100 Subject: [PATCH] ntdll: Set TPIDRURW to TEB on thread init for ARM. --- dlls/ntdll/signal_arm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 5ad4016913b..6abd76b56fe 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -832,6 +832,21 @@ void signal_free_thread( TEB *teb ) NtFreeVirtualMemory( NtCurrentProcess(), (void **)&teb, &size, MEM_RELEASE ); } +/********************************************************************** + * set_tpidrurw + * + * Win32/ARM applications expect the TEB pointer to be in the TPIDRURW register. + */ +#ifdef __ARM_ARCH_7A__ +extern void set_tpidrurw( TEB *teb ); +__ASM_GLOBAL_FUNC( set_tpidrurw, + "mcr p15, 0, r0, c13, c0, 2\n\t" /* TEB -> TPIDRURW */ + "blx lr" ) +#else +void set_tpidrurw( TEB *teb ) +{ +} +#endif /********************************************************************** * signal_init_thread @@ -845,6 +860,7 @@ void signal_init_thread( TEB *teb ) pthread_key_create( &teb_key, NULL ); init_done = 1; } + set_tpidrurw( teb ); pthread_setspecific( teb_key, teb ); } -- 2.11.4.GIT