Prevent the use of the hidden attribute for symbols. In particular, the attribute must not be applied to '__libc'-prefixed symbols to allow overwriting the dummies defined in dummies.cc by other non-weak implementations such as those in 'libc_noux.lib.so'. This attribute is applied inconsistently in libc/lib/libc/include/libc_private.h anyway. Also, force i386 to call __libc_sigprocmask via PLT to prevent R_386_PC32 relocations, which had to change the text segment. Other architectures do this automatically. --- src/lib/libc/sys/sys/cdefs.h +++ src/lib/libc/sys/sys/cdefs.h @@ -447,7 +447,7 @@ #if __GNUC_PREREQ__(4, 0) #define __null_sentinel __attribute__((__sentinel__)) #define __exported __attribute__((__visibility__("default"))) -#define __hidden __attribute__((__visibility__("hidden"))) +#define __hidden #else #define __null_sentinel #define __exported --- src/lib/libc/lib/libc/i386/gen/setjmp.S +++ src/lib/libc/lib/libc/i386/gen/setjmp.S @@ -54,7 +54,7 @@ pushl %eax /* (sigset_t*)oset */ pushl $0 /* (sigset_t*)set */ pushl $1 /* SIG_BLOCK */ - call __libc_sigprocmask + call __i386_libc_sigprocmask addl $12,%esp movl 4(%esp),%ecx movl 0(%esp),%edx @@ -76,7 +76,7 @@ leal 28(%edx), %eax pushl %eax /* (sigset_t*)set */ pushl $3 /* SIG_SETMASK */ - call __libc_sigprocmask + call __i386_libc_sigprocmask addl $12,%esp movl 4(%esp),%edx movl 8(%esp),%eax --- src/lib/libc/lib/libc/i386/gen/sigsetjmp.S +++ src/lib/libc/lib/libc/i386/gen/sigsetjmp.S @@ -63,7 +63,7 @@ pushl %eax /* (sigset_t*)oset */ pushl $0 /* (sigset_t*)set */ pushl $1 /* SIG_BLOCK */ - call __libc_sigprocmask + call __i386_libc_sigprocmask addl $12,%esp movl 4(%esp),%ecx 2: movl 0(%esp),%edx @@ -87,7 +87,7 @@ leal 28(%edx), %eax pushl %eax /* (sigset_t*)set */ pushl $3 /* SIG_SETMASK */ - call __libc_sigprocmask + call __i386_libc_sigprocmask addl $12,%esp movl 4(%esp),%edx 2: movl 8(%esp),%eax