Re: Arla 0.42-RC2

[email protected] (Niels Möller)
Newsgroups gmane.comp.file-systems.arla.general
Message-ID <[email protected]>
Tomas Olsson <[email protected]> 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 -lreso
 lv

>  * 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.