Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable pthread_exit for now #366

Merged
merged 1 commit into from
Dec 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions expected/wasm32-wasi-pthread/defined-symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,6 @@ __progname
__progname_full
__pthread_cond_timedwait
__pthread_create
__pthread_exit
__pthread_join
__pthread_key_create
__pthread_key_delete
Expand Down Expand Up @@ -1002,7 +1001,6 @@ pthread_condattr_setclock
pthread_condattr_setpshared
pthread_create
pthread_detach
pthread_exit
pthread_getspecific
pthread_join
pthread_key_create
Expand Down
2 changes: 2 additions & 0 deletions libc-top-half/musl/include/pthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,9 @@ extern "C" {

int pthread_create(pthread_t *__restrict, const pthread_attr_t *__restrict, void *(*)(void *), void *__restrict);
int pthread_detach(pthread_t);
#ifdef __wasilibc_unmodified_upstream
_Noreturn void pthread_exit(void *);
#endif
int pthread_join(pthread_t, void **);

#ifdef __GNUC__
Expand Down
2 changes: 2 additions & 0 deletions libc-top-half/musl/src/include/pthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ hidden int __pthread_once(pthread_once_t *, void (*)(void));
hidden void __pthread_testcancel(void);
hidden int __pthread_setcancelstate(int, int *);
hidden int __pthread_create(pthread_t *restrict, const pthread_attr_t *restrict, void *(*)(void *), void *restrict);
#ifdef __wasilibc_unmodified_upstream
hidden _Noreturn void __pthread_exit(void *);
#endif
hidden int __pthread_join(pthread_t, void **);
hidden int __pthread_mutex_lock(pthread_mutex_t *);
hidden int __pthread_mutex_trylock(pthread_mutex_t *);
Expand Down
11 changes: 8 additions & 3 deletions libc-top-half/musl/src/thread/pthread_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,11 @@ void __tl_sync(pthread_t td)
if (tl_lock_waiters) __wake(&__thread_list_lock, 1, 0);
}

#ifdef __wasilibc_unmodified_upstream
_Noreturn void __pthread_exit(void *result)
#else
static void __pthread_exit(void *result)
#endif
{
pthread_t self = __pthread_self();
sigset_t set;
Expand Down Expand Up @@ -191,7 +195,7 @@ _Noreturn void __pthread_exit(void *result)
__tl_unlock();
free(self->map_base);
// Can't use `exit()` here, because it is too high level
for (;;) __wasi_proc_exit(0);
return;
}
#endif

Expand All @@ -212,7 +216,6 @@ _Noreturn void __pthread_exit(void *result)
// do it manually here
__tl_unlock();
// Can't use `exit()` here, because it is too high level
for (;;) __wasi_proc_exit(0);
#endif
}

Expand Down Expand Up @@ -272,7 +275,7 @@ static int start_c11(void *p)
}
#else
__attribute__((export_name("wasi_thread_start")))
_Noreturn void wasi_thread_start(int tid, void *p)
void wasi_thread_start(int tid, void *p)
{
struct start_args *args = p;
__asm__(".globaltype __tls_base, i32\n"
Expand Down Expand Up @@ -560,5 +563,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
return EAGAIN;
}

#ifdef __wasilibc_unmodified_upstream
weak_alias(__pthread_exit, pthread_exit);
#endif
weak_alias(__pthread_create, pthread_create);