@ -4,12 +4,11 @@
# include "libc.h"
# ifdef SHARED
# define hidden __attribute__((__visibility__("hidden")))
# else
# define hidden
__attribute__ ( ( __visibility__ ( " hidden " ) ) )
# endif
long __cancel ( ) , __cp_cancel ( ) , __syscall_cp_asm ( ) , __syscall_cp_c ( ) ;
hidden long __cancel ( )
long __cancel ( )
{
pthread_t self = __pthread_self ( ) ;
if ( self - > canceldisable = = PTHREAD_CANCEL_ENABLE | | self - > cancelasync )
@ -22,14 +21,12 @@ hidden long __cancel()
* definition of __cp_cancel to undo those adjustments and call __cancel .
* Otherwise , __cancel provides a definition for __cp_cancel . */
hidden weak_alias ( __cancel , __cp_cancel ) ;
weak_alias ( __cancel , __cp_cancel ) ;
hidden
long __syscall_cp_asm ( volatile void * , syscall_arg_t ,
syscall_arg_t , syscall_arg_t , syscall_arg_t ,
syscall_arg_t , syscall_arg_t , syscall_arg_t ) ;
hidden
long __syscall_cp_c ( syscall_arg_t nr ,
syscall_arg_t u , syscall_arg_t v , syscall_arg_t w ,
syscall_arg_t x , syscall_arg_t y , syscall_arg_t z )
@ -55,12 +52,16 @@ static void _sigaddset(sigset_t *set, int sig)
set - > __bits [ s / 8 / sizeof * set - > __bits ] | = 1UL < < ( s & 8 * sizeof * set - > __bits - 1 ) ;
}
# ifdef SHARED
__attribute__ ( ( __visibility__ ( " hidden " ) ) )
# endif
extern const char __cp_begin [ 1 ] , __cp_end [ 1 ] ;
static void cancel_handler ( int sig , siginfo_t * si , void * ctx )
{
pthread_t self = __pthread_self ( ) ;
ucontext_t * uc = ctx ;
const char * ip = ( ( char * * ) & uc - > uc_mcontext ) [ CANCEL_REG_IP ] ;
hidden extern const char __cp_begin [ 1 ] , __cp_end [ 1 ] ;
a_barrier ( ) ;
if ( ! self - > cancel | | self - > canceldisable = = PTHREAD_CANCEL_DISABLE ) return ;