bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnulib's `lock' module v.s. the Hurd's libpthread


From: Thomas Schwinge
Subject: gnulib's `lock' module v.s. the Hurd's libpthread
Date: Thu, 22 Mar 2007 12:47:01 +0100
User-agent: Mutt/1.5.11

Hello!

I'd like to have some input on the following issue.  This is the
underlying problem of recent (newer than 0.14.5, I think) versions of GNU
gettext failing to build for us.


#v+
$ git clone git://git.sv.gnu.org/gnulib.git
$ cd gnulib
$ ./gnulib-tool --dir=test-lock --create-testdir lock
[...]
$ mkdir test-lock/build
$ cd test-lock/build
$ ../configure
[...]
checking whether imported symbols can be declared weak... yes
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking for pthread_kill in -lpthread... yes
checking for pthread_rwlock_t... yes
checking for multithread API to use... posix
[...]
$ make
[...]
$ cat > t.c
#include "config.h"
#include "lock.h"

int main()
{
  gl_rwlock_t foo;
  gl_rwlock_destroy (foo);

  return 0;
}
#v-

#v+
$ uname -a
GNU flubber 0.3 GNU-Mach 1.3.99/Hurd-0.3 i686-AT386 GNU
$ gcc -Wall t.c -I../gllib -Lgllib -lgnu
gllib/libgnu.a(lock.o): In function `pthread_rwlock_destroy':
/usr/include/bits/rwlock.h:68: undefined reference to `_pthread_rwlock_destroy'
collect2: ld returned 1 exit status
#v-

#v+
$ uname -a
Linux dirichlet 2.6.20-12-generic #2 SMP Sun Mar 18 03:07:14 UTC 2007 i686 
GNU/Linux
$ gcc -Wall t.c -I../gllib -Lgllib -lgnu
$ echo $?
0
#v-


So, where does this stem from?  The Hurd's libpthread has an optimization
(provided in the header files), looking as follows:

#v+
_EXTERN_INLINE int
pthread_rwlock_destroy (struct __pthread_rwlock *__rwlock)
{
  extern int _pthread_rwlock_destroy (struct __pthread_rwlock *);

  if (__rwlock->__attr || __rwlock->__data)
    return _pthread_rwlock_destroy (__rwlock);

  return 0;
}
#v-

The symbol `_pthread_rwlock_destroy' is provided in the pthread library
file, which is not linked against by default, so our current libpthread
implementation in fact asserts that if <pthread.h> is included,
`-lpthread' will also be given when linking.  -- But the gnulib code
does not neccessarily enforce that.

For the Linux case, the nptl seems not to do such a thing, so it works as
expected.


So, should the Hurd's libpthread be changed or which other possibilities
are there?


I might also note that if replacing the `rwlock' with, e.g., a `lock'
(i.e. `pthread_mutex_destroy') this problem does not occur.  (Why?)


Regards,
 Thomas

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]