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__ */