define and use internal macros for hidden visibility, weak refs
authorRich Felker <dalias@aerifal.cx>
Wed, 5 Sep 2018 16:43:34 +0000 (12:43 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 5 Sep 2018 18:05:14 +0000 (14:05 -0400)
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.

38 files changed:
arch/arm/atomic_arch.h
arch/arm/pthread_arch.h
arch/mips/syscall_arch.h
arch/mipsn32/syscall_arch.h
arch/sh/atomic_arch.h
crt/crt1.c
crt/rcrt1.c
ldso/dlstart.c
ldso/dynlink.c
src/env/__init_tls.c
src/env/__libc_start_main.c
src/env/__stack_chk_fail.c
src/exit/abort.c
src/exit/exit.c
src/internal/fdpic_crt.h
src/internal/libc.h
src/internal/malloc_impl.h
src/internal/sh/__shcall.c
src/internal/syscall.h
src/internal/version.c
src/ldso/__dlsym.c
src/ldso/dl_iterate_phdr.c
src/ldso/dlclose.c
src/ldso/dlerror.c
src/ldso/dlinfo.c
src/ldso/dlopen.c
src/ldso/tlsdesc.c
src/multibyte/internal.h
src/signal/sigaction.c
src/signal/sigsetjmp_tail.c
src/thread/__syscall_cp.c
src/thread/__tls_get_addr.c
src/thread/arm/__set_thread_area.c
src/thread/pthread_attr_setinheritsched.c
src/thread/pthread_cancel.c
src/thread/sh/__set_thread_area.c
src/thread/sh/__unmapself.c
src/thread/x32/syscall_cp_fixup.c

index 62458b4..e427836 100644 (file)
@@ -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
index 8f2ae8f..5c6aff2 100644 (file)
@@ -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));
index 666f413..01de67b 100644 (file)
@@ -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)
 
index 93a026f..f6a1fba 100644 (file)
@@ -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)
 
index d48a765..0a4d0c1 100644 (file)
@@ -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");
index af02af9..7b12665 100644 (file)
@@ -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(*)());
 
index be01715..7bb3322 100644 (file)
@@ -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);
 }
index 4dbe178..20d50f2 100644 (file)
@@ -1,5 +1,6 @@
 #include <stddef.h>
 #include "dynlink.h"
+#include "libc.h"
 
 #ifndef START
 #define START "_dlstart"
 
 #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;
index 87281dd..b46cbaf 100644 (file)
@@ -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, ...)
 {
index 31d324a..e022424 100644 (file)
@@ -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)
 {
index 0583f68..c1b0669 100644 (file)
@@ -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);
index 4de82fd..e32596d 100644 (file)
@@ -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);
index d6bd546..7c323d2 100644 (file)
@@ -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)
 {
index bf7835a..a6869b3 100644 (file)
@@ -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)
 {
index 7eb50c6..3c3f077 100644 (file)
@@ -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,
index 5e14518..7307a73 100644 (file)
@@ -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)
index 5d025b0..4355d84 100644 (file)
@@ -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
index dfe80a7..2365590 100644 (file)
@@ -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);
 }
index 6d378a8..c12a46c 100644 (file)
@@ -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);
 
index dc044ec..0d6e1f8 100644 (file)
@@ -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;
 }
index 99aafdf..bf99dff 100644 (file)
@@ -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)
 {
index f3160ef..86c87ef 100644 (file)
@@ -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)
 {
index 0ef2231..a774209 100644 (file)
@@ -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)
 {
index 378f035..c8c718a 100644 (file)
@@ -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)
 {
index a173d1a..1e2c550 100644 (file)
@@ -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)
 {
index dcdb439..6b1d792 100644 (file)
@@ -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)
 {
index a2985cb..df7eb9c 100644 (file)
@@ -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()
 {
index 421a3d4..7d0e782 100644 (file)
@@ -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      */
index ac9a3ac..2adedaa 100644 (file)
@@ -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;
index 78762aa..252529a 100644 (file)
@@ -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);
index 09a2be8..afd82ef 100644 (file)
@@ -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,
index 3b6c9b1..3bc6057 100644 (file)
@@ -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)
 {
index daf496c..09de65a 100644 (file)
@@ -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)
 {
index e540e84..605af97 100644 (file)
@@ -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;
index 5d458af..43f8d40 100644 (file)
@@ -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)
 {
index 9c47f78..34264bd 100644 (file)
@@ -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)
 {
index d4fb8be..719392a 100644 (file)
@@ -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
index b1f3a38..b1a1faa 100644 (file)
@@ -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) {