Arla 0.42-RC2

Niels Möller nisse at lysator.liu.se
Wed Apr 5 16:27:26 CEST 2006


Tomas Olsson <tol at stacken.kth.se> writes:

> >   2006-04-04 15:04:49 CEST: arla: Rec message: opcode = 1 (wakeup), size = 24
> >   libgcc_s.so.1 must be installed for pthread_cancel to work
> > 
> > (I configured arla with --with-pthreads). I do have a file
> > /lib/libgcc_s.so.1 installed, so this error message seems strange.
> > 
> That message is probably from the pthreads implementation, so I guess we
> have a linking problem. Things to try:
> 
>  * run with the same flags in gdb and see where it dies

Setting a breakpoint on _exit, I got the following backtrace:

  (gdb) bt
  #0  0xb7bd2cc0 in _exit () from /lib/tls/libc.so.6
  #1  0xb7b92e9c in __libc_fatal () from /lib/tls/libc.so.6
  #2  0xb7f2c074 in _Unwind_ForcedUnwind () from /lib/tls/libpthread.so.0
  #3  0xb7f2a1c3 in __pthread_unwind () from /lib/tls/libpthread.so.0
  #4  0xb7f26bc1 in pthread_exit () from /lib/tls/libpthread.so.0
  #5  0x08092845 in LWP_DestroyProcess (pid=0x81115e0) at plwp.c:680
  #6  0x08093049 in Create_Process_Part2 (temp=0x81115e0) at plwp.c:903
  #7  0xb7f25b63 in start_thread () from /lib/tls/libpthread.so.0
  #8  0xb7c0118a in clone () from /lib/tls/libc.so.6
  (gdb)

According to
http://www.redhat.com/archives/phil-list/2003-July/msg00043.html
(which describes a bug hopefully fixed long ago), the thread library
does use an explicit call do __libc_dlopen in order to use the stack
unwind code in libgcc.

>  * ldd on arlad

$ ldd /usr/arla/libexec/arlad
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7f03000)
        libkafs.so.0 => /usr/lib/libkafs.so.0 (0xb7efb000)
        libkrb5.so.17 => /usr/lib/libkrb5.so.17 (0xb7ebc000)
        libasn1.so.6 => /usr/lib/libasn1.so.6 (0xb7e95000)
        libroken.so.16 => /usr/lib/libroken.so.16 (0xb7e83000)
        libdb-4.3.so => /usr/lib/libdb-4.3.so (0xb7d9f000)
        libkrb.so.1 => /usr/lib/libkrb.so.1 (0xb7d82000)
        libcrypto.so.0.9.7 => /usr/lib/i686/cmov/libcrypto.so.0.9.7 (0xb7c82000)
        libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0xb7c55000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7c52000)
        libresolv.so.2 => /lib/tls/libresolv.so.2 (0xb7c40000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7b0b000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7f19000)
        libdb-4.1.so => /usr/lib/libdb-4.1.so (0xb7a4a000)
        libdl.so.2 => /lib/tls/libdl.so.2 (0xb7a46000)

>  * cd arla-obj/arlad ; rm arlad ; make
>    to see how it was built

  $ make arlad
  ../libtool --mode=link gcc -g  -Wall -Wmissing-prototypes -Wpointer-arith -Wmissing-declarations -Wnested-externs   -o arlad adir.o arla.o arladeb.o arladebu.o cmcb.o conn.o cred.o d-trans.o disco.o dynroot.o fcache.o fprio.o inter.o kernel.o messages.o poller.o subr.o state.o stats.o volcache.o nnpfs.o bsd-subr.o arlad.o ../lib/bufdir/libbufdir.la -L../rxdef -lrxdefclient -lrxcbserver -L../rx -lrx -L../lwp -llwp -lpthread ../lib/ko/libko.la ../util/libarlautil.la ../lib/vers/libvers.la ../lib/roken/libroken.la ../rxkad/librxkad.la   -L/usr/lib  -lkrb5  -lkafs  -lresolv -lresolv
  gcc -g -Wall -Wmissing-prototypes -Wpointer-arith -Wmissing-declarations -Wnested-externs -o arlad adir.o arla.o arladeb.o arladebu.o cmcb.o conn.o cred.o d-trans.o disco.o dynroot.o fcache.o fprio.o inter.o kernel.o messages.o poller.o subr.o state.o stats.o volcache.o nnpfs.o bsd-subr.o arlad.o ../lib/bufdir/.libs/libbufdir.a -L/usr/local/src/arla-0.42-RC2/rxdef /usr/local/src/arla-0.42-RC2/rxdef/.libs/librxdefclient.a /usr/local/src/arla-0.42-RC2/rxdef/.libs/librxcbserver.a -L/usr/local/src/arla-0.42-RC2/rx /usr/local/src/arla-0.42-RC2/rx/.libs/librx.a -L/usr/local/src/arla-0.42-RC2/lwp -llwp -lpthread ../lib/ko/.libs/libko.a ../util/.libs/libarlautil.a ../lib/vers/.libs/libvers.a ../lib/roken/.libs/libroken.a ../rxkad/.libs/librxkad.a -L/usr/lib /usr/lib/libkafs.so /usr/lib/libkrb5.so /usr/lib/libasn1.so /usr/lib/libroken.so -ldb /usr/lib/libkrb.so -lcrypto -lcrypt -lcom_err -lresolv

>  * read config.log to see what happened

Anything in particular I should look for? The configure script looks
for pthread_create and sched_yield, and decides that -lpthread is
needed for linking.

It's puzzling. I also tried strace -f arlad -n, which says:

  5357  open("/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
  5357  open("/usr/lib/i686/cmov/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
  5357  open("/usr/lib/i686/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
  5357  open("/usr/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
  5357  write(2, "libgcc_s.so.1 must be installed "..., 59) = 59
  5357  exit_group(127)                   = ?

The file /lib/libgcc_s.so.1 exists and is readable, so I really don't
understand why open returns ENOENT.

Regards,
/Niels


More information about the Arla-drinkers mailing list