summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018-09-05 12:43:34 -0400
committerRich Felker <dalias@aerifal.cx>2018-09-05 14:05:14 -0400
commit9b95fd0944e4206949e90633c3fed088202810ec (patch)
tree4af9c66139abfef78854aca3200f836153727c23
parent2de29bc994029b903a366b8a4a9f8c3c3ee2be90 (diff)
downloadmusl-9b95fd0944e4206949e90633c3fed088202810ec.tar.gz
define and use internal macros for hidden visibility, weak refs
this cleans up what had become widespread direct inline use of "GNU C" style attributes directly in the source, and lowers the barrier to increased use of hidden visibility, which will be useful to recovering some of the efficiency lost when the protected visibility hack was dropped in commit dc2f368e565c37728b0d620380b849c3a1ddd78f, especially on archs where the PLT ABI is costly.
-rw-r--r--arch/arm/atomic_arch.h5
-rw-r--r--arch/arm/pthread_arch.h2
-rw-r--r--arch/mips/syscall_arch.h3
-rw-r--r--arch/mipsn32/syscall_arch.h3
-rw-r--r--arch/sh/atomic_arch.h4
-rw-r--r--crt/crt1.c5
-rw-r--r--crt/rcrt1.c7
-rw-r--r--ldso/dlstart.c6
-rw-r--r--ldso/dynlink.c30
-rw-r--r--src/env/__init_tls.c3
-rw-r--r--src/env/__libc_start_main.c3
-rw-r--r--src/env/__stack_chk_fail.c3
-rw-r--r--src/exit/abort.c3
-rw-r--r--src/exit/exit.c3
-rw-r--r--src/internal/fdpic_crt.h4
-rw-r--r--src/internal/libc.h23
-rw-r--r--src/internal/malloc_impl.h8
-rw-r--r--src/internal/sh/__shcall.c5
-rw-r--r--src/internal/syscall.h4
-rw-r--r--src/internal/version.c4
-rw-r--r--src/ldso/__dlsym.c3
-rw-r--r--src/ldso/dl_iterate_phdr.c3
-rw-r--r--src/ldso/dlclose.c4
-rw-r--r--src/ldso/dlerror.c9
-rw-r--r--src/ldso/dlinfo.c7
-rw-r--r--src/ldso/dlopen.c3
-rw-r--r--src/ldso/tlsdesc.c3
-rw-r--r--src/multibyte/internal.h6
-rw-r--r--src/signal/sigaction.c3
-rw-r--r--src/signal/sigsetjmp_tail.c4
-rw-r--r--src/thread/__syscall_cp.c4
-rw-r--r--src/thread/__tls_get_addr.c3
-rw-r--r--src/thread/arm/__set_thread_area.c5
-rw-r--r--src/thread/pthread_attr_setinheritsched.c4
-rw-r--r--src/thread/pthread_cancel.c6
-rw-r--r--src/thread/sh/__set_thread_area.c9
-rw-r--r--src/thread/sh/__unmapself.c2
-rw-r--r--src/thread/x32/syscall_cp_fixup.c13
38 files changed, 94 insertions, 125 deletions
diff --git a/arch/arm/atomic_arch.h b/arch/arm/atomic_arch.h
index 62458b45..e427836a 100644
--- a/arch/arm/atomic_arch.h
+++ b/arch/arm/atomic_arch.h
@@ -1,11 +1,12 @@
+#include "libc.h"
+
#if __ARM_ARCH_4__ || __ARM_ARCH_4T__ || __ARM_ARCH == 4
#define BLX "mov lr,pc\n\tbx"
#else
#define BLX "blx"
#endif
-extern uintptr_t __attribute__((__visibility__("hidden")))
- __a_cas_ptr, __a_barrier_ptr;
+extern hidden uintptr_t __a_cas_ptr, __a_barrier_ptr;
#if ((__ARM_ARCH_6__ || __ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
|| __ARM_ARCH_6T2__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
diff --git a/arch/arm/pthread_arch.h b/arch/arm/pthread_arch.h
index 8f2ae8f8..5c6aff28 100644
--- a/arch/arm/pthread_arch.h
+++ b/arch/arm/pthread_arch.h
@@ -18,7 +18,7 @@ static inline pthread_t __pthread_self()
static inline pthread_t __pthread_self()
{
- extern uintptr_t __attribute__((__visibility__("hidden"))) __a_gettp_ptr;
+ extern hidden uintptr_t __a_gettp_ptr;
register uintptr_t p __asm__("r0");
__asm__ __volatile__ ( BLX " %1" : "=r"(p) : "r"(__a_gettp_ptr) : "cc", "lr" );
return (void *)(p-sizeof(struct pthread));
diff --git a/arch/mips/syscall_arch.h b/arch/mips/syscall_arch.h
index 666f413f..01de67b8 100644
--- a/arch/mips/syscall_arch.h
+++ b/arch/mips/syscall_arch.h
@@ -3,8 +3,7 @@
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
-__attribute__((visibility("hidden")))
-long (__syscall)(long, ...);
+hidden long (__syscall)(long, ...);
#define SYSCALL_RLIM_INFINITY (-1UL/2)
diff --git a/arch/mipsn32/syscall_arch.h b/arch/mipsn32/syscall_arch.h
index 93a026f6..f6a1fbae 100644
--- a/arch/mipsn32/syscall_arch.h
+++ b/arch/mipsn32/syscall_arch.h
@@ -1,8 +1,7 @@
#define __SYSCALL_LL_E(x) (x)
#define __SYSCALL_LL_O(x) (x)
-__attribute__((visibility("hidden")))
-long (__syscall)(long, ...);
+hidden long (__syscall)(long, ...);
#define SYSCALL_RLIM_INFINITY (-1UL/2)
diff --git a/arch/sh/atomic_arch.h b/arch/sh/atomic_arch.h
index d48a7651..0a4d0c11 100644
--- a/arch/sh/atomic_arch.h
+++ b/arch/sh/atomic_arch.h
@@ -1,3 +1,5 @@
+#include "libc.h"
+
#if defined(__SH4A__)
#define a_ll a_ll
@@ -30,7 +32,7 @@ static inline void a_barrier()
#else
#define a_cas a_cas
-__attribute__((__visibility__("hidden"))) extern const void *__sh_cas_ptr;
+extern hidden const void *__sh_cas_ptr;
static inline int a_cas(volatile int *p, int t, int s)
{
register int r1 __asm__("r1");
diff --git a/crt/crt1.c b/crt/crt1.c
index af02af94..7b12665f 100644
--- a/crt/crt1.c
+++ b/crt/crt1.c
@@ -1,12 +1,13 @@
#include <features.h>
+#include "libc.h"
#define START "_start"
#include "crt_arch.h"
int main();
-void _init() __attribute__((weak));
-void _fini() __attribute__((weak));
+weak void _init();
+weak void _fini();
_Noreturn int __libc_start_main(int (*)(), int, char **,
void (*)(), void(*)(), void(*)());
diff --git a/crt/rcrt1.c b/crt/rcrt1.c
index be017153..7bb3322f 100644
--- a/crt/rcrt1.c
+++ b/crt/rcrt1.c
@@ -3,13 +3,12 @@
#include "../ldso/dlstart.c"
int main();
-void _init() __attribute__((weak));
-void _fini() __attribute__((weak));
+weak void _init();
+weak void _fini();
_Noreturn int __libc_start_main(int (*)(), int, char **,
void (*)(), void(*)(), void(*)());
-__attribute__((__visibility__("hidden")))
-_Noreturn void __dls2(unsigned char *base, size_t *sp)
+hidden _Noreturn void __dls2(unsigned char *base, size_t *sp)
{
__libc_start_main(main, *sp, (void *)(sp+1), _init, _fini, 0);
}
diff --git a/ldso/dlstart.c b/ldso/dlstart.c
index 4dbe1784..20d50f2c 100644
--- a/ldso/dlstart.c
+++ b/ldso/dlstart.c
@@ -1,5 +1,6 @@
#include <stddef.h>
#include "dynlink.h"
+#include "libc.h"
#ifndef START
#define START "_dlstart"
@@ -11,14 +12,13 @@
#ifndef GETFUNCSYM
#define GETFUNCSYM(fp, sym, got) do { \
- __attribute__((__visibility__("hidden"))) void sym(); \
+ hidden void sym(); \
static void (*static_func_ptr)() = sym; \
__asm__ __volatile__ ( "" : "+m"(static_func_ptr) : : "memory"); \
*(fp) = static_func_ptr; } while(0)
#endif
-__attribute__((__visibility__("hidden")))
-void _dlstart_c(size_t *sp, size_t *dynv)
+hidden void _dlstart_c(size_t *sp, size_t *dynv)
{
size_t i, aux[AUX_CNT], dyn[DYN_CNT];
size_t *rel, rel_size, base;
diff --git a/ldso/dynlink.c b/ldso/dynlink.c
index 87281ddb..b46cbafb 100644
--- a/ldso/dynlink.c
+++ b/ldso/dynlink.c
@@ -99,8 +99,7 @@ int __init_tp(void *);
void __init_libc(char **, char *);
void *__copy_tls(unsigned char *);
-__attribute__((__visibility__("hidden")))
-const char *__libc_get_version(void);
+hidden const char *__libc_get_version(void);
static struct builtin_tls {
char c;
@@ -133,14 +132,11 @@ static struct dso *const nodeps_dummy;
struct debug *_dl_debug_addr = &debug;
-__attribute__((__visibility__("hidden")))
-extern int __malloc_replaced;
+extern hidden int __malloc_replaced;
-__attribute__((__visibility__("hidden")))
-void (*const __init_array_start)(void)=0, (*const __fini_array_start)(void)=0;
+hidden void (*const __init_array_start)(void)=0, (*const __fini_array_start)(void)=0;
-__attribute__((__visibility__("hidden")))
-extern void (*const __init_array_end)(void), (*const __fini_array_end)(void);
+extern hidden void (*const __init_array_end)(void), (*const __fini_array_end)(void);
weak_alias(__init_array_start, __init_array_end);
weak_alias(__fini_array_start, __fini_array_end);
@@ -306,8 +302,7 @@ static struct symdef find_sym(struct dso *dso, const char *s, int need_def)
return def;
}
-__attribute__((__visibility__("hidden")))
-ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
+hidden ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stride)
{
@@ -1332,8 +1327,7 @@ void __init_tls(size_t *auxv)
{
}
-__attribute__((__visibility__("hidden")))
-void *__tls_get_new(tls_mod_off_t *v)
+hidden void *__tls_get_new(tls_mod_off_t *v)
{
pthread_t self = __pthread_self();
@@ -1401,8 +1395,7 @@ static void update_tls_size()
* linker itself, but some of the relocations performed may need to be
* replaced later due to copy relocations in the main program. */
-__attribute__((__visibility__("hidden")))
-void __dls2(unsigned char *base, size_t *sp)
+hidden void __dls2(unsigned char *base, size_t *sp)
{
if (DL_FDPIC) {
void *p1 = (void *)sp[-2];
@@ -1860,8 +1853,7 @@ end:
return p;
}
-__attribute__((__visibility__("hidden")))
-int __dl_invalid_handle(void *h)
+hidden int __dl_invalid_handle(void *h)
{
struct dso *p;
for (p=head; p; p=p->next) if (h==p) return 0;
@@ -2027,8 +2019,7 @@ int dladdr(const void *addr_arg, Dl_info *info)
return 1;
}
-__attribute__((__visibility__("hidden")))
-void *__dlsym(void *restrict p, const char *restrict s, void *restrict ra)
+hidden void *__dlsym(void *restrict p, const char *restrict s, void *restrict ra)
{
void *res;
pthread_rwlock_rdlock(&lock);
@@ -2063,8 +2054,7 @@ int dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void
return ret;
}
-__attribute__((__visibility__("hidden")))
-void __dl_vseterr(const char *, va_list);
+hidden void __dl_vseterr(const char *, va_list);
static void error(const char *fmt, ...)
{
diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c
index 31d324a8..e0224243 100644
--- a/src/env/__init_tls.c
+++ b/src/env/__init_tls.c
@@ -72,8 +72,7 @@ typedef Elf32_Phdr Phdr;
typedef Elf64_Phdr Phdr;
#endif
-__attribute__((__weak__, __visibility__("hidden")))
-extern const size_t _DYNAMIC[];
+extern weak hidden const size_t _DYNAMIC[];
static void static_init_tls(size_t *aux)
{
diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c
index 0583f686..c1b06697 100644
--- a/src/env/__libc_start_main.c
+++ b/src/env/__libc_start_main.c
@@ -11,8 +11,7 @@ void __init_tls(size_t *);
static void dummy(void) {}
weak_alias(dummy, _init);
-__attribute__((__weak__, __visibility__("hidden")))
-extern void (*const __init_array_start)(void), (*const __init_array_end)(void);
+extern weak hidden void (*const __init_array_start)(void), (*const __init_array_end)(void);
static void dummy1(void *p) {}
weak_alias(dummy1, __init_ssp);
diff --git a/src/env/__stack_chk_fail.c b/src/env/__stack_chk_fail.c
index 4de82fd9..e32596d1 100644
--- a/src/env/__stack_chk_fail.c
+++ b/src/env/__stack_chk_fail.c
@@ -17,7 +17,6 @@ void __stack_chk_fail(void)
a_crash();
}
-__attribute__((__visibility__("hidden")))
-void __stack_chk_fail_local(void);
+hidden void __stack_chk_fail_local(void);
weak_alias(__stack_chk_fail, __stack_chk_fail_local);
diff --git a/src/exit/abort.c b/src/exit/abort.c
index d6bd546b..7c323d26 100644
--- a/src/exit/abort.c
+++ b/src/exit/abort.c
@@ -6,8 +6,7 @@
#include "libc.h"
#include "ksigaction.h"
-__attribute__((__visibility__("hidden")))
-volatile int __abort_lock[1];
+hidden volatile int __abort_lock[1];
_Noreturn void abort(void)
{
diff --git a/src/exit/exit.c b/src/exit/exit.c
index bf7835a1..a6869b37 100644
--- a/src/exit/exit.c
+++ b/src/exit/exit.c
@@ -12,8 +12,7 @@ weak_alias(dummy, __funcs_on_exit);
weak_alias(dummy, __stdio_exit);
weak_alias(dummy, _fini);
-__attribute__((__weak__, __visibility__("hidden")))
-extern void (*const __fini_array_start)(void), (*const __fini_array_end)(void);
+extern weak hidden void (*const __fini_array_start)(void), (*const __fini_array_end)(void);
static void libc_exit_fini(void)
{
diff --git a/src/internal/fdpic_crt.h b/src/internal/fdpic_crt.h
index 7eb50c6b..3c3f077d 100644
--- a/src/internal/fdpic_crt.h
+++ b/src/internal/fdpic_crt.h
@@ -1,7 +1,7 @@
#include <stdint.h>
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-void *__fdpic_fixup(void *map, uintptr_t *a, uintptr_t *z)
+hidden void *__fdpic_fixup(void *map, uintptr_t *a, uintptr_t *z)
{
/* If map is a null pointer, the program was loaded by a
* non-FDPIC-aware ELF loader, and fixups are not needed,
diff --git a/src/internal/libc.h b/src/internal/libc.h
index 5e145183..7307a738 100644
--- a/src/internal/libc.h
+++ b/src/internal/libc.h
@@ -33,24 +33,21 @@ struct __libc {
#define PAGE_SIZE libc.page_size
#endif
-#ifdef __PIC__
-#define ATTR_LIBC_VISIBILITY __attribute__((visibility("hidden")))
-#else
-#define ATTR_LIBC_VISIBILITY
-#endif
+#define weak __attribute__((__weak__))
+#define hidden __attribute__((__visibility__("hidden")))
-extern struct __libc __libc ATTR_LIBC_VISIBILITY;
+extern hidden struct __libc __libc;
#define libc __libc
-extern size_t __hwcap ATTR_LIBC_VISIBILITY;
-extern size_t __sysinfo ATTR_LIBC_VISIBILITY;
+extern hidden size_t __hwcap;
+extern hidden size_t __sysinfo;
extern char *__progname, *__progname_full;
/* Designed to avoid any overhead in non-threaded processes */
-void __lock(volatile int *) ATTR_LIBC_VISIBILITY;
-void __unlock(volatile int *) ATTR_LIBC_VISIBILITY;
-int __lockfile(FILE *) ATTR_LIBC_VISIBILITY;
-void __unlockfile(FILE *) ATTR_LIBC_VISIBILITY;
+hidden void __lock(volatile int *);
+hidden void __unlock(volatile int *);
+hidden int __lockfile(FILE *);
+hidden void __unlockfile(FILE *);
#define LOCK(x) __lock(x)
#define UNLOCK(x) __unlock(x)
@@ -61,7 +58,7 @@ extern char **__environ;
#undef weak_alias
#define weak_alias(old, new) \
- extern __typeof(old) new __attribute__((weak, alias(#old)))
+ extern __typeof(old) new __attribute__((__weak__, __alias__(#old)))
#undef LFS64_2
#define LFS64_2(x, y) weak_alias(x, y)
diff --git a/src/internal/malloc_impl.h b/src/internal/malloc_impl.h
index 5d025b06..4355d84c 100644
--- a/src/internal/malloc_impl.h
+++ b/src/internal/malloc_impl.h
@@ -1,6 +1,8 @@
#ifndef MALLOC_IMPL_H
#define MALLOC_IMPL_H
+#include "libc.h"
+
void *__mmap(void *, size_t, int, int, int, off_t);
int __munmap(void *, size_t);
void *__mremap(void *, size_t, size_t, int, ...);
@@ -36,10 +38,8 @@ struct bin {
#define IS_MMAPPED(c) !((c)->csize & (C_INUSE))
-__attribute__((__visibility__("hidden")))
-void __bin_chunk(struct chunk *);
+hidden void __bin_chunk(struct chunk *);
-__attribute__((__visibility__("hidden")))
-extern int __malloc_replaced;
+hidden extern int __malloc_replaced;
#endif
diff --git a/src/internal/sh/__shcall.c b/src/internal/sh/__shcall.c
index dfe80a7f..23655904 100644
--- a/src/internal/sh/__shcall.c
+++ b/src/internal/sh/__shcall.c
@@ -1,5 +1,6 @@
-__attribute__((__visibility__("hidden")))
-int __shcall(void *arg, int (*func)(void *))
+#include "libc.h"
+
+hidden int __shcall(void *arg, int (*func)(void *))
{
return func(arg);
}
diff --git a/src/internal/syscall.h b/src/internal/syscall.h
index 6d378a81..c12a46cd 100644
--- a/src/internal/syscall.h
+++ b/src/internal/syscall.h
@@ -2,6 +2,7 @@
#define _INTERNAL_SYSCALL_H
#include <sys/syscall.h>
+#include "libc.h"
#include "syscall_arch.h"
#ifndef SYSCALL_RLIM_INFINITY
@@ -21,8 +22,7 @@
typedef long syscall_arg_t;
#endif
-__attribute__((visibility("hidden")))
-long __syscall_ret(unsigned long), __syscall(syscall_arg_t, ...),
+hidden long __syscall_ret(unsigned long), __syscall(syscall_arg_t, ...),
__syscall_cp(syscall_arg_t, syscall_arg_t, syscall_arg_t, syscall_arg_t,
syscall_arg_t, syscall_arg_t, syscall_arg_t);
diff --git a/src/internal/version.c b/src/internal/version.c
index dc044ec4..0d6e1f82 100644
--- a/src/internal/version.c
+++ b/src/internal/version.c
@@ -1,9 +1,9 @@
#include "version.h"
+#include "libc.h"
static const char version[] = VERSION;
-__attribute__((__visibility__("hidden")))
-const char *__libc_get_version()
+hidden const char *__libc_get_version()
{
return version;
}
diff --git a/src/ldso/__dlsym.c b/src/ldso/__dlsym.c
index 99aafdf9..bf99dff8 100644
--- a/src/ldso/__dlsym.c
+++ b/src/ldso/__dlsym.c
@@ -1,8 +1,7 @@
#include <dlfcn.h>
#include "libc.h"
-__attribute__((__visibility__("hidden")))
-void __dl_seterr(const char *, ...);
+hidden void __dl_seterr(const char *, ...);
static void *stub_dlsym(void *restrict p, const char *restrict s, void *restrict ra)
{
diff --git a/src/ldso/dl_iterate_phdr.c b/src/ldso/dl_iterate_phdr.c
index f3160ef4..86c87ef8 100644
--- a/src/ldso/dl_iterate_phdr.c
+++ b/src/ldso/dl_iterate_phdr.c
@@ -4,8 +4,7 @@
#define AUX_CNT 38
-__attribute__((__weak__, __visibility__("hidden")))
-extern const size_t _DYNAMIC[];
+extern weak hidden const size_t _DYNAMIC[];
static int static_dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void *data), void *data)
{
diff --git a/src/ldso/dlclose.c b/src/ldso/dlclose.c
index 0ef22319..a774209d 100644
--- a/src/ldso/dlclose.c
+++ b/src/ldso/dlclose.c
@@ -1,7 +1,7 @@
#include <dlfcn.h>
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-int __dl_invalid_handle(void *);
+hidden int __dl_invalid_handle(void *);
int dlclose(void *p)
{
diff --git a/src/ldso/dlerror.c b/src/ldso/dlerror.c
index 378f0356..c8c718ab 100644
--- a/src/ldso/dlerror.c
+++ b/src/ldso/dlerror.c
@@ -23,8 +23,7 @@ void __dl_thread_cleanup(void)
free(self->dlerror_buf);
}
-__attribute__((__visibility__("hidden")))
-void __dl_vseterr(const char *fmt, va_list ap)
+hidden void __dl_vseterr(const char *fmt, va_list ap)
{
va_list ap2;
va_copy(ap2, ap);
@@ -43,8 +42,7 @@ void __dl_vseterr(const char *fmt, va_list ap)
self->dlerror_flag = 1;
}
-__attribute__((__visibility__("hidden")))
-void __dl_seterr(const char *fmt, ...)
+hidden void __dl_seterr(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
@@ -52,8 +50,7 @@ void __dl_seterr(const char *fmt, ...)
va_end(ap);
}
-__attribute__((__visibility__("hidden")))
-int __dl_invalid_handle(void *);
+hidden int __dl_invalid_handle(void *);
static int stub_invalid_handle(void *h)
{
diff --git a/src/ldso/dlinfo.c b/src/ldso/dlinfo.c
index a173d1ac..1e2c5500 100644
--- a/src/ldso/dlinfo.c
+++ b/src/ldso/dlinfo.c
@@ -1,11 +1,10 @@
#define _GNU_SOURCE
#include <dlfcn.h>
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-int __dl_invalid_handle(void *);
+hidden int __dl_invalid_handle(void *);
-__attribute__((__visibility__("hidden")))
-void __dl_seterr(const char *, ...);
+hidden void __dl_seterr(const char *, ...);
int dlinfo(void *dso, int req, void *res)
{
diff --git a/src/ldso/dlopen.c b/src/ldso/dlopen.c
index dcdb4398..6b1d792a 100644
--- a/src/ldso/dlopen.c
+++ b/src/ldso/dlopen.c
@@ -1,8 +1,7 @@
#include <dlfcn.h>
#include "libc.h"
-__attribute__((__visibility__("hidden")))
-void __dl_seterr(const char *, ...);
+hidden void __dl_seterr(const char *, ...);
static void *stub_dlopen(const char *file, int mode)
{
diff --git a/src/ldso/tlsdesc.c b/src/ldso/tlsdesc.c
index a2985cb6..df7eb9c9 100644
--- a/src/ldso/tlsdesc.c
+++ b/src/ldso/tlsdesc.c
@@ -1,8 +1,7 @@
#include <stddef.h>
#include "libc.h"
-__attribute__((__visibility__("hidden")))
-ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
+hidden ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
ptrdiff_t __tlsdesc_static()
{
diff --git a/src/multibyte/internal.h b/src/multibyte/internal.h
index 421a3d4a..7d0e7828 100644
--- a/src/multibyte/internal.h
+++ b/src/multibyte/internal.h
@@ -1,11 +1,9 @@
#define bittab __fsmu8
#include <stdint.h>
+#include "libc.h"
-#ifdef __PIC__
-__attribute__((__visibility__("hidden")))
-#endif
-extern const uint32_t bittab[];
+extern hidden const uint32_t bittab[];
/* Upper 6 state bits are a negative integer offset to bound-check next byte */
/* equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f */
diff --git a/src/signal/sigaction.c b/src/signal/sigaction.c
index ac9a3ac2..2adedaa4 100644
--- a/src/signal/sigaction.c
+++ b/src/signal/sigaction.c
@@ -8,7 +8,8 @@
volatile int dummy_lock[1] = { 0 };
-__attribute__((__visibility__("hidden")))
+extern hidden volatile int __abort_lock[1];
+
weak_alias(dummy_lock, __abort_lock);
static int unmask_done;
diff --git a/src/signal/sigsetjmp_tail.c b/src/signal/sigsetjmp_tail.c
index 78762aa2..252529a4 100644
--- a/src/signal/sigsetjmp_tail.c
+++ b/src/signal/sigsetjmp_tail.c
@@ -1,9 +1,9 @@
#include <setjmp.h>
#include <signal.h>
#include "syscall.h"
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-int __sigsetjmp_tail(sigjmp_buf jb, int ret)
+hidden int __sigsetjmp_tail(sigjmp_buf jb, int ret)
{
void *p = jb->__ss;
__syscall(SYS_rt_sigprocmask, SIG_SETMASK, ret?p:0, ret?0:p, _NSIG/8);
diff --git a/src/thread/__syscall_cp.c b/src/thread/__syscall_cp.c
index 09a2be84..afd82eff 100644
--- a/src/thread/__syscall_cp.c
+++ b/src/thread/__syscall_cp.c
@@ -1,8 +1,8 @@
#include "pthread_impl.h"
#include "syscall.h"
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-long __syscall_cp_c();
+hidden long __syscall_cp_c();
static long sccp(syscall_arg_t nr,
syscall_arg_t u, syscall_arg_t v, syscall_arg_t w,
diff --git a/src/thread/__tls_get_addr.c b/src/thread/__tls_get_addr.c
index 3b6c9b1b..3bc60571 100644
--- a/src/thread/__tls_get_addr.c
+++ b/src/thread/__tls_get_addr.c
@@ -2,8 +2,7 @@
#include "pthread_impl.h"
#include "libc.h"
-__attribute__((__visibility__("hidden")))
-void *__tls_get_new(tls_mod_off_t *);
+hidden void *__tls_get_new(tls_mod_off_t *);
void *__tls_get_addr(tls_mod_off_t *v)
{
diff --git a/src/thread/arm/__set_thread_area.c b/src/thread/arm/__set_thread_area.c
index daf496c2..09de65aa 100644
--- a/src/thread/arm/__set_thread_area.c
+++ b/src/thread/arm/__set_thread_area.c
@@ -5,7 +5,7 @@
#define HWCAP_TLS (1 << 15)
-extern const unsigned char __attribute__((__visibility__("hidden")))
+extern hidden const unsigned char
__a_barrier_oldkuser[], __a_barrier_v6[], __a_barrier_v7[],
__a_cas_v6[], __a_cas_v7[],
__a_gettp_cp15[];
@@ -22,8 +22,7 @@ extern const unsigned char __attribute__((__visibility__("hidden")))
#define __a_gettp_kuser 0xffff0fe0
#define __a_gettp_cp15 (uintptr_t)__a_gettp_cp15
-extern uintptr_t __attribute__((__visibility__("hidden")))
- __a_barrier_ptr, __a_cas_ptr, __a_gettp_ptr;
+extern hidden uintptr_t __a_barrier_ptr, __a_cas_ptr, __a_gettp_ptr;
int __set_thread_area(void *p)
{
diff --git a/src/thread/pthread_attr_setinheritsched.c b/src/thread/pthread_attr_setinheritsched.c
index e540e846..605af973 100644
--- a/src/thread/pthread_attr_setinheritsched.c
+++ b/src/thread/pthread_attr_setinheritsched.c
@@ -1,8 +1,8 @@
#include "pthread_impl.h"
#include "syscall.h"
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-void *__start_sched(void *p)
+hidden void *__start_sched(void *p)
{
struct start_sched_args *ssa = p;
void *start_arg = ssa->start_arg;
diff --git a/src/thread/pthread_cancel.c b/src/thread/pthread_cancel.c
index 5d458af2..43f8d405 100644
--- a/src/thread/pthread_cancel.c
+++ b/src/thread/pthread_cancel.c
@@ -4,8 +4,7 @@
#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 +44,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)
{
diff --git a/src/thread/sh/__set_thread_area.c b/src/thread/sh/__set_thread_area.c
index 9c47f78d..34264bdd 100644
--- a/src/thread/sh/__set_thread_area.c
+++ b/src/thread/sh/__set_thread_area.c
@@ -7,14 +7,11 @@
#define CPU_HAS_LLSC 0x0040
#define CPU_HAS_CAS_L 0x0400
-__attribute__((__visibility__("hidden")))
-extern const char __sh_cas_gusa[], __sh_cas_llsc[], __sh_cas_imask[], __sh_cas_cas_l[];
+extern hidden const char __sh_cas_gusa[], __sh_cas_llsc[], __sh_cas_imask[], __sh_cas_cas_l[];
-__attribute__((__visibility__("hidden")))
-const void *__sh_cas_ptr;
+hidden const void *__sh_cas_ptr;
-__attribute__((__visibility__("hidden")))
-unsigned __sh_nommu;
+hidden unsigned __sh_nommu;
int __set_thread_area(void *p)
{
diff --git a/src/thread/sh/__unmapself.c b/src/thread/sh/__unmapself.c
index d4fb8be5..719392a6 100644
--- a/src/thread/sh/__unmapself.c
+++ b/src/thread/sh/__unmapself.c
@@ -12,7 +12,7 @@ void __unmapself_sh_nommu(void *, size_t);
: : "r"(pc), "r"(sp) : "r0", "memory" )
#include "../__unmapself.c"
#undef __unmapself
-extern __attribute__((__visibility__("hidden"))) unsigned __sh_nommu;
+extern hidden unsigned __sh_nommu;
#else
#define __sh_nommu 0
#endif
diff --git a/src/thread/x32/syscall_cp_fixup.c b/src/thread/x32/syscall_cp_fixup.c
index b1f3a382..b1a1faa6 100644
--- a/src/thread/x32/syscall_cp_fixup.c
+++ b/src/thread/x32/syscall_cp_fixup.c
@@ -1,8 +1,9 @@
#include <sys/syscall.h>
+#include "libc.h"
-__attribute__((__visibility__("hidden")))
-long __syscall_cp_internal(volatile void*, long long, long long, long long, long long,
- long long, long long, long long);
+hidden long __syscall_cp_internal(volatile void*, long long, long long,
+ long long, long long, long long,
+ long long, long long);
struct __timespec { long long tv_sec; long tv_nsec; };
struct __timespec_kernel { long long tv_sec; long long tv_nsec; };
@@ -12,9 +13,9 @@ struct __timespec_kernel { long long tv_sec; long long tv_nsec; };
ts->tv_nsec = __tsc(X)->tv_nsec; \
(X) = (unsigned long)ts; } } while(0)
-__attribute__((__visibility__("hidden")))
-long __syscall_cp_asm (volatile void * foo, long long n, long long a1, long long a2, long long a3,
- long long a4, long long a5, long long a6)
+hidden long __syscall_cp_asm (volatile void * foo, long long n, long long a1,
+ long long a2, long long a3, long long a4,
+ long long a5, long long a6)
{
struct __timespec_kernel ts[1];
switch (n) {