sigprocmask testing program failed with static linking

Jian Peng jipeng at broadcom.com
Mon Mar 28 22:09:17 UTC 2011


I chose Plain Text mode in Outlook, but not sure why line wrap failed.

Here is my new patch using weak_function.

>From 4ebcbb392994e5a8a310d59ca5541fe97c4babdd Mon Sep 17 00:00:00 2001
From: Jian Peng <jipeng2005 at gmail.com>
Date: Mon, 28 Mar 2011 15:00:23 -0700
Subject: [PATCH 1/1] common: fix sigprocmask static linking bug

simple sigprocmask testing program will fail to be compiled due to
multiple definition of sigprocmask in libpthread.a and libc.a

$ gcc sigprocmask-test.c -o sigprocmask-test -static -lpthread
sigprocmask.c:(.text+0x0): multiple definition of `sigprocmask'

The solution is to define sigprocmask as weak symbol.

Signed-off-by: Jian Peng <jipeng2005 at gmail.com>
---
 libc/sysdeps/linux/common/sigprocmask.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/sysdeps/linux/common/sigprocmask.c b/libc/sysdeps/linux/common/sigprocmask.c
index 011d7b3..1d0d51a 100644
--- a/libc/sysdeps/linux/common/sigprocmask.c
+++ b/libc/sysdeps/linux/common/sigprocmask.c
@@ -23,7 +23,7 @@ static __always_inline
 _syscall4(int, __rt_sigprocmask, int, how, const sigset_t *, set,
 		  sigset_t *, oldset, size_t, size)
 
-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
+int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
 {
 #ifdef SIGCANCEL
 	sigset_t local_newmask;
@@ -58,7 +58,7 @@ static __always_inline
 _syscall3(int, __syscall_sigprocmask, int, how, const sigset_t *, set,
 		  sigset_t *, oldset)
 
-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
+int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
 {
 #ifdef SIGCANCEL
 	sigset_t local_newmask;
-- 
1.7.4.1

-----Original Message-----
From: uclibc-bounces at uclibc.org [mailto:uclibc-bounces at uclibc.org] On Behalf Of Mike Frysinger
Sent: Sunday, March 27, 2011 1:01 AM
To: uclibc at uclibc.org
Subject: Re: sigprocmask testing program failed with static linking

On Sun, Mar 27, 2011 at 3:27 AM, Jian Peng wrote:

please fix your e-mail client to properly wrap long lines.

> >From 2e435b037624eff8c0daaa146d6feca57ce1eecf Mon Sep 17 00:00:00 2001
> From: Jian Peng <jipeng2005 at gmail.com>
> Date: Sat, 26 Mar 2011 23:44:52 -0700
> Subject: [PATCH 1/1] common: fix sigprocmask static linking bug
>
> simple sigprocmask testing program will fail to be compiled due to multiple definition of sigprocmask in libpthread.a and libc.a

you need to manually line wrap your changelog to like 74 chars

> -int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
> +int __attribute__((weak)) sigprocmask(int how, const sigset_t * set, sigset_t * oldset)

you need to use weak_function.  raw __attribute__((...)) is rarely the
way to go anymore.
-mike
_______________________________________________
uClibc mailing list
uClibc at uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc




More information about the uClibc mailing list