提交 730bee72 编写于 作者: R Rich Felker

fix static linking dependency bloat with cancellation

previously, pthread_cleanup_push/pop were pulling in all of
pthread_create due to dependency on the __pthread_unwind_next
function. this was not needed, as cancellation cleanup handlers can
never be called unless pthread_exit or pthread_cancel is reachable.
上级 fc0ecd35
......@@ -3,10 +3,22 @@
#ifdef __pthread_register_cancel
#undef __pthread_register_cancel
#undef __pthread_unregister_cancel
#undef __pthread_unwind_next
#define __pthread_register_cancel __pthread_register_cancel_3
#define __pthread_unregister_cancel __pthread_unregister_cancel_3
#define __pthread_unwind_next __pthread_unwind_next_3
#endif
static void dummy(struct __ptcb *cb)
{
}
weak_alias(dummy, __pthread_do_unwind);
void __pthread_unwind_next(struct __ptcb *cb)
{
__pthread_do_unwind(cb);
}
void __pthread_register_cancel(struct __ptcb *cb)
{
struct pthread *self = pthread_self();
......
......@@ -14,3 +14,11 @@ __pthread_unregister_cancel:
call __pthread_unregister_cancel_3
popl %eax
ret
.global __pthread_unwind_next
.type __pthread_unwind_next,@function
__pthread_unwind_next:
pushl %eax
call __pthread_unwind_next_3
popl %eax
ret
.text
.global __pthread_unwind_next
.type __pthread_unwind_next,@function
__pthread_unwind_next:
pushl %eax
call __pthread_unwind_next_3
popl %eax
ret
......@@ -8,12 +8,7 @@ weak_alias(dummy_0, __synccall_lock);
weak_alias(dummy_0, __synccall_unlock);
weak_alias(dummy_0, __pthread_tsd_run_dtors);
#ifdef __pthread_unwind_next
#undef __pthread_unwind_next
#define __pthread_unwind_next __pthread_unwind_next_3
#endif
void __pthread_unwind_next(struct __ptcb *cb)
void __pthread_do_unwind(struct __ptcb *cb)
{
pthread_t self = pthread_self();
int n;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册