loader/kthread: Remove some unneeded #ifdefs, other platforms use pthread now.
This commit is contained in:
parent
bdeeabeb28
commit
dd0340ef0a
|
@ -18343,14 +18343,10 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for ac_func in \
|
for ac_func in \
|
||||||
_lwp_create \
|
|
||||||
_lwp_self \
|
|
||||||
_pclose \
|
_pclose \
|
||||||
_popen \
|
_popen \
|
||||||
_snprintf \
|
_snprintf \
|
||||||
|
|
|
@ -1239,8 +1239,6 @@ fi
|
||||||
dnl **** Check for functions ****
|
dnl **** Check for functions ****
|
||||||
|
|
||||||
AC_CHECK_FUNCS(\
|
AC_CHECK_FUNCS(\
|
||||||
_lwp_create \
|
|
||||||
_lwp_self \
|
|
||||||
_pclose \
|
_pclose \
|
||||||
_popen \
|
_popen \
|
||||||
_snprintf \
|
_snprintf \
|
||||||
|
|
|
@ -932,12 +932,6 @@
|
||||||
/* Define if Xrender has the XRenderSetPictureTransform function */
|
/* Define if Xrender has the XRenderSetPictureTransform function */
|
||||||
#undef HAVE_XRENDERSETPICTURETRANSFORM
|
#undef HAVE_XRENDERSETPICTURETRANSFORM
|
||||||
|
|
||||||
/* Define to 1 if you have the `_lwp_create' function. */
|
|
||||||
#undef HAVE__LWP_CREATE
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `_lwp_self' function. */
|
|
||||||
#undef HAVE__LWP_SELF
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `_pclose' function. */
|
/* Define to 1 if you have the `_pclose' function. */
|
||||||
#undef HAVE__PCLOSE
|
#undef HAVE__PCLOSE
|
||||||
|
|
||||||
|
|
|
@ -58,12 +58,6 @@ struct _pthread_cleanup_buffer;
|
||||||
#ifdef HAVE_SYS_SYSCALL_H
|
#ifdef HAVE_SYS_SYSCALL_H
|
||||||
# include <sys/syscall.h>
|
# include <sys/syscall.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_LWP_H
|
|
||||||
# include <sys/lwp.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UCONTEXT_H
|
|
||||||
# include <ucontext.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SCHED_H
|
#ifdef HAVE_SCHED_H
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -192,9 +186,6 @@ static void cleanup_thread( void *ptr )
|
||||||
wine_ldt_free_fs( info.teb_sel );
|
wine_ldt_free_fs( info.teb_sel );
|
||||||
if (info.stack_size) munmap( info.stack_base, info.stack_size );
|
if (info.stack_size) munmap( info.stack_base, info.stack_size );
|
||||||
if (info.teb_size) munmap( info.teb_base, info.teb_size );
|
if (info.teb_size) munmap( info.teb_base, info.teb_size );
|
||||||
#ifdef HAVE__LWP_CREATE
|
|
||||||
_lwp_exit();
|
|
||||||
#endif
|
|
||||||
_exit( info.exit_status );
|
_exit( info.exit_status );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,15 +267,6 @@ static int create_thread( struct wine_pthread_thread_info *info )
|
||||||
: "eax", "edx");
|
: "eax", "edx");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#elif defined(HAVE__LWP_CREATE)
|
|
||||||
{
|
|
||||||
ucontext_t context;
|
|
||||||
_lwp_makecontext( &context, (void(*)(void *))info->entry, info,
|
|
||||||
NULL, info->stack_base, info->stack_size );
|
|
||||||
if ( _lwp_create( &context, 0, NULL ) )
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -297,7 +279,6 @@ static int create_thread( struct wine_pthread_thread_info *info )
|
||||||
*/
|
*/
|
||||||
static void init_current_teb( struct wine_pthread_thread_info *info )
|
static void init_current_teb( struct wine_pthread_thread_info *info )
|
||||||
{
|
{
|
||||||
#ifdef __i386__
|
|
||||||
/* On the i386, the current thread is in the %fs register */
|
/* On the i386, the current thread is in the %fs register */
|
||||||
LDT_ENTRY fs_entry;
|
LDT_ENTRY fs_entry;
|
||||||
|
|
||||||
|
@ -305,30 +286,10 @@ static void init_current_teb( struct wine_pthread_thread_info *info )
|
||||||
wine_ldt_set_limit( &fs_entry, info->teb_size - 1 );
|
wine_ldt_set_limit( &fs_entry, info->teb_size - 1 );
|
||||||
wine_ldt_set_flags( &fs_entry, WINE_LDT_FLAGS_DATA|WINE_LDT_FLAGS_32BIT );
|
wine_ldt_set_flags( &fs_entry, WINE_LDT_FLAGS_DATA|WINE_LDT_FLAGS_32BIT );
|
||||||
wine_ldt_init_fs( info->teb_sel, &fs_entry );
|
wine_ldt_init_fs( info->teb_sel, &fs_entry );
|
||||||
#elif defined(HAVE__LWP_CREATE)
|
|
||||||
/* On non-i386 Solaris, we use the LWP private pointer */
|
|
||||||
_lwp_setprivate( info->teb_base );
|
|
||||||
#elif defined(__powerpc__)
|
|
||||||
/* On PowerPC, the current TEB is in the gpr13 register */
|
|
||||||
# ifdef __APPLE__
|
|
||||||
__asm__ __volatile__("mr r13, %0" : : "r" (info->teb_base));
|
|
||||||
# else
|
|
||||||
__asm__ __volatile__("mr 2, %0" : : "r" (info->teb_base));
|
|
||||||
# endif
|
|
||||||
#elif defined(__ALPHA__)
|
|
||||||
/* FIXME: On Alpha, the current TEB is not accessible to user-space */
|
|
||||||
/* __asm__ __volatile__();*/
|
|
||||||
#else
|
|
||||||
# error You must implement init_current_teb for your platform
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* set pid and tid */
|
/* set pid and tid */
|
||||||
info->pid = getpid();
|
info->pid = getpid();
|
||||||
#ifdef HAVE__LWP_SELF
|
|
||||||
info->tid = _lwp_self();
|
|
||||||
#else
|
|
||||||
info->tid = -1;
|
info->tid = -1;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -338,29 +299,7 @@ static void init_current_teb( struct wine_pthread_thread_info *info )
|
||||||
static void *get_current_teb(void)
|
static void *get_current_teb(void)
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
|
|
||||||
#ifdef __i386__
|
|
||||||
__asm__( ".byte 0x64\n\tmovl 0x18,%0" : "=r" (ret) );
|
__asm__( ".byte 0x64\n\tmovl 0x18,%0" : "=r" (ret) );
|
||||||
#elif defined(HAVE__LWP_CREATE)
|
|
||||||
ret = _lwp_getprivate();
|
|
||||||
#elif defined(__powerpc__)
|
|
||||||
# ifdef __APPLE__
|
|
||||||
__asm__( "mr %0,r13" : "=r" (ret) );
|
|
||||||
# else
|
|
||||||
__asm__( "mr %0,2" : "=r" (ret) );
|
|
||||||
# endif
|
|
||||||
#elif defined(__ALPHA__)
|
|
||||||
/* 0x00ab is the PAL opcode for rdteb */
|
|
||||||
__asm__( "lda $30,8($30)\n\t"
|
|
||||||
"stq $0,0($30)\n\t"
|
|
||||||
"call_pal 0x00ab\n\t"
|
|
||||||
"mov $0,%0\n\t"
|
|
||||||
"ldq $0,0($30)\n\t"
|
|
||||||
"lda $30,-8($30)" : "=r" (ret) );
|
|
||||||
#else
|
|
||||||
# error get_current_teb not defined for this architecture
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,9 +318,6 @@ static void DECLSPEC_NORETURN exit_thread( struct wine_pthread_thread_info *info
|
||||||
*/
|
*/
|
||||||
static void DECLSPEC_NORETURN abort_thread( long status )
|
static void DECLSPEC_NORETURN abort_thread( long status )
|
||||||
{
|
{
|
||||||
#ifdef HAVE__LWP_CREATE
|
|
||||||
_lwp_exit();
|
|
||||||
#endif
|
|
||||||
_exit( status );
|
_exit( status );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue