Authors: Josh DuBois <duboisj@codeweavers.com>, Marcus Meissner <meissner@suse.de>
PowerPC locked exchange functions merged from old ppc patch.
NtCurrentTeb handling for PowerPC (using gpr 13).
diff --git a/scheduler/sysdeps.c b/scheduler/sysdeps.c
index b3320e7..06170db 100644
--- a/scheduler/sysdeps.c
+++ b/scheduler/sysdeps.c
@@ -85,6 +85,9 @@
#if defined(__i386__)
/* On the i386, the current thread is in the %fs register */
wine_set_fs( teb->teb_sel );
+#elif defined(__powerpc__)
+ /* On PowerPC, the current TEB is in the gpr13 register */
+ __asm__ __volatile__("mr 13, %0" : : "r" (teb));
#elif defined(HAVE__LWP_CREATE)
/* On non-i386 Solaris, we use the LWP private pointer */
_lwp_setprivate( teb );
@@ -249,13 +252,13 @@
__asm int 3;
}
#endif /* defined(__GNUC__) || defined(_MSC_VER) */
-#else /* defined(__i386__) */
+#else /* !defined(__i386__) */
void SYSDEPS_CallOnStack( void (*func)(LPVOID), LPVOID arg )
{
func( arg );
while(1); /* avoid warning */
}
-#endif /* defined(__i386__) */
+#endif /* !defined(__i386__) */
/***********************************************************************
@@ -335,6 +338,8 @@
extern void *_lwp_getprivate(void);
return (struct _TEB *)_lwp_getprivate();
}
+#elif defined(__powerpc__)
+__ASM_GLOBAL_FUNC( NtCurrentTeb, "\n\tmr 3,13\n\tblr" );
#else
# error NtCurrentTeb not defined for this architecture
#endif /* __i386__ */