فهرست منبع

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.
Rich Felker 10 سال پیش
والد
کامیت
9c738dc183
1فایلهای تغییر یافته به همراه9 افزوده شده و 8 حذف شده
  1. 9 8
      src/thread/pthread_cancel.c

+ 9 - 8
src/thread/pthread_cancel.c

@@ -4,12 +4,11 @@
 #include "libc.h"
 #include "libc.h"
 
 
 #ifdef SHARED
 #ifdef SHARED
-#define hidden __attribute__((__visibility__("hidden")))
-#else
-#define hidden
+__attribute__((__visibility__("hidden")))
 #endif
 #endif
+long __cancel(), __cp_cancel(), __syscall_cp_asm(), __syscall_cp_c();
 
 
-hidden long __cancel()
+long __cancel()
 {
 {
 	pthread_t self = __pthread_self();
 	pthread_t self = __pthread_self();
 	if (self->canceldisable == PTHREAD_CANCEL_ENABLE || self->cancelasync)
 	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.
  * definition of __cp_cancel to undo those adjustments and call __cancel.
  * Otherwise, __cancel provides a definition for __cp_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,
 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,
                       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,
 long __syscall_cp_c(syscall_arg_t nr,
                     syscall_arg_t u, syscall_arg_t v, syscall_arg_t w,
                     syscall_arg_t u, syscall_arg_t v, syscall_arg_t w,
                     syscall_arg_t x, syscall_arg_t y, syscall_arg_t z)
                     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);
 	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)
 static void cancel_handler(int sig, siginfo_t *si, void *ctx)
 {
 {
 	pthread_t self = __pthread_self();
 	pthread_t self = __pthread_self();
 	ucontext_t *uc = ctx;
 	ucontext_t *uc = ctx;
 	const char *ip = ((char **)&uc->uc_mcontext)[CANCEL_REG_IP];
 	const char *ip = ((char **)&uc->uc_mcontext)[CANCEL_REG_IP];
-	hidden extern const char __cp_begin[1], __cp_end[1];
 
 
 	a_barrier();
 	a_barrier();
 	if (!self->cancel || self->canceldisable == PTHREAD_CANCEL_DISABLE) return;
 	if (!self->cancel || self->canceldisable == PTHREAD_CANCEL_DISABLE) return;