BROKEN: [git commit nptl] libc: remove libc weak __pthreads_* wrappers

Denys Vlasenko vda.linux at googlemail.com
Wed Apr 28 16:59:45 UTC 2010


On Wed, Apr 14, 2010 at 7:58 PM, Timo Teras <timo.teras at iki.fi> wrote:
>
> commit: http://git.uclibc.org/uClibc/commit/?id=0eadd98d30c51d26fde4062e6b8c48f3c9b5148d
> branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/nptl
>
> It is not possible to override for libpthread to override
> the weak libc definitions. This has never worked in uclibc, and
> does no longer work in glibc either (unless you use LD_DYNAMIC_WEAK).
>
> The proper thing to do is have weak prototypes in libc, and
> definitions in libpthread only. This way libc runs even if
> those functions are not defined, but just needs to protect
> against the NULL values (done by implementing __uclibc_maybe_call).
>
> This fix the problems if libc is linked before libpthread or
> if libpthread is pulled by a dependency library.
>
> Signed-off-by: Timo Teras <timo.teras at iki.fi>
> Signed-off-by: Austin Foxley <austinf at cetoncorp.com>
> ---
>  libc/misc/dirent/opendir.c                       |    2 +-


commit 0eadd98d30c51d26fde4062e6b8c48f3c9b5148d
Author: Timo Teras <timo.teras at iki.fi>
Date:   Fri Apr 16 16:29:46 2010 +0300

    libc: remove libc weak __pthreads_* wrappers

    It is not possible to override for libpthread to override
    the weak libc definitions. This has never worked in uclibc, and
    does no longer work in glibc either (unless you use LD_DYNAMIC_WEAK).

    The proper thing to do is have weak prototypes in libc, and
    definitions in libpthread only. This way libc runs even if
    those functions are not defined, but just needs to protect
    against the NULL values (done by implementing __uclibc_maybe_call).

    This fix the problems if libc is linked before libpthread or
    if libpthread is pulled by a dependency library.

    Signed-off-by: Timo Teras <timo.teras at iki.fi>
    Signed-off-by: Austin Foxley <austinf at cetoncorp.com>

diff --git a/libc/misc/dirent/opendir.c b/libc/misc/dirent/opendir.c
index 4a23ab0..66a5cc9 100644
--- a/libc/misc/dirent/opendir.c
+++ b/libc/misc/dirent/opendir.c
@@ -35,7 +35,7 @@ static DIR *fd_to_DIR(int fd, __blksize_t size)
                free(ptr);
                return NULL;
        }
-       __pthread_mutex_init(&ptr->dd_lock, NULL);
+       __UCLIBC_MUTEX_INIT_VAR(ptr->dd_lock);

        return ptr;
 }


i386 build failure (.config attached):

$ make
...
  CC libc/misc/dirent/opendir.o
libc/misc/dirent/opendir.c: In function 'fd_to_DIR':
libc/misc/dirent/opendir.c:38: warning: implicit declaration of
function '__UCLIBC_MUTEX_INIT_VAR'
libc/misc/dirent/opendir.c:38: error: 'DIR' has no member named 'dd_lock'
libc/misc/dirent/opendir.c: In function 'opendir':
libc/misc/dirent/opendir.c:106: warning: implicit declaration of
function '__fcntl_nocancel'

-- 
vda
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config
Type: application/octet-stream
Size: 5520 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/uclibc/attachments/20100428/0c9b4b94/attachment.obj>


More information about the uClibc mailing list