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