From a50efac19a1eb0a9dc6f5917ae299c0fbbf3c46b Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 14 Jun 2020 12:56:54 +0000 Subject: htl: Move cleanup stack to variable shared between libc and pthread If libpthread gets loaded dynamically, the stack needs to already contain the cleanup handlers of the main thread. * htl/libc_pthread_init.c (__pthread_cleanup_stack): New per-thread variable. * htl/Versions (libc): Add __pthread_cleanup_stack as private symbol. * htl/pt-internal.h (struct __pthread): Remove cancelation_handlers field. (__pthread_cleanup_stack): Add variable declaration. * htl/pt-alloc.c (initialize_pthread): Remove initialization of cancelation_handlers field. * htl/pt-cleanup.c (__pthread_get_cleanup_stack): Return the address of __pthread_cleanup_stack instead of that of the cancelation_handlers field. * htl/forward.c: Include . (dummy_list): Remove variable. (__pthread_get_cleanup_stack): Return the address of __pthread_cleanup_stack instead of that of dummy_list. --- htl/pt-cleanup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'htl/pt-cleanup.c') diff --git a/htl/pt-cleanup.c b/htl/pt-cleanup.c index a9a7c95847..7e6149bda9 100644 --- a/htl/pt-cleanup.c +++ b/htl/pt-cleanup.c @@ -23,6 +23,6 @@ struct __pthread_cancelation_handler ** __pthread_get_cleanup_stack (void) { - return &_pthread_self ()->cancelation_handlers; + return &__pthread_cleanup_stack; } hidden_def(__pthread_get_cleanup_stack) -- cgit 1.4.1