X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fpthread_cancel.c;h=2f9d5e975f22ca60e7e9baca84b97bb6378fccac;hb=69a1b39019c51258af14c0b2d836c23d20929c9a;hp=bf07dbebd691778f25e16d824ecb92d7850518f6;hpb=060ed9367337cbbd59a9e5e638a1c2f460192f25;p=musl diff --git a/src/thread/pthread_cancel.c b/src/thread/pthread_cancel.c index bf07dbeb..2f9d5e97 100644 --- a/src/thread/pthread_cancel.c +++ b/src/thread/pthread_cancel.c @@ -2,10 +2,8 @@ #include #include "pthread_impl.h" #include "syscall.h" -#include "libc.h" -__attribute__((__visibility__("hidden"))) -long __cancel(), __syscall_cp_asm(), __syscall_cp_c(); +hidden long __cancel(), __syscall_cp_asm(), __syscall_cp_c(); long __cancel() { @@ -45,8 +43,7 @@ static void _sigaddset(sigset_t *set, int sig) set->__bits[s/8/sizeof *set->__bits] |= 1UL<<(s&8*sizeof *set->__bits-1); } -__attribute__((__visibility__("hidden"))) -extern const char __cp_begin[1], __cp_end[1], __cp_cancel[1]; +extern hidden const char __cp_begin[1], __cp_end[1], __cp_cancel[1]; static void cancel_handler(int sig, siginfo_t *si, void *ctx) { @@ -61,6 +58,9 @@ static void cancel_handler(int sig, siginfo_t *si, void *ctx) if (self->cancelasync || pc >= (uintptr_t)__cp_begin && pc < (uintptr_t)__cp_end) { uc->uc_mcontext.MC_PC = (uintptr_t)__cp_cancel; +#ifdef CANCEL_GOT + uc->uc_mcontext.MC_GOT = CANCEL_GOT; +#endif return; }