Browse Source

cleanup use of visibility attributes in pthread_cancel.c

applying the attribute to a weak_alias macro was a hack. instead use a
separate declaration to apply the visibility, and consolidate
declarations together to avoid having visibility mess all over the
file.
master
Rich Felker 11 years ago
parent
commit
9c738dc183
  1. 17
      src/thread/pthread_cancel.c

17
src/thread/pthread_cancel.c

@ -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;

Loading…
Cancel
Save