misc/107529: ldd aborts abruptly if a shared library is missing
Roy Marples
uberlord at gentoo.org
Thu Jan 4 10:00:37 PST 2007
>Number: 107529
>Category: misc
>Synopsis: ldd aborts abruptly if a shared library is missing
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 04 18:00:31 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator: Roy Marples
>Release: FreeBSD-6.2_rc2
>Organization:
Gentoo
>Environment:
FreeBSD uberlaptop 6.2-RC2 FreeBSD Gentoo 6.2_rc2 #0: Sun Dec 31 16:44:50 GMT 2006 root at uberlaptop:/usr/src/sys-6.2_rc2/i386/compile/UBERKERNEL i386
>Description:
ldd aborts abruptly if a shared library is missing.
Example:
uberlaptop rtld-elf # ldd /usr/lib/libgtk-x11-2.0.so.0
/usr/lib/libgtk-x11-2.0.so.0:
ldd: /usr/lib/libgtk-x11-2.0.so.0: Shared object "libcairo.so.12" not found, required by "libgtk-x11-2.0.so.0"
/usr/lib/libgtk-x11-2.0.so.0: exit status 1
Whereas expected output would be:
uberlaptop rtld-elf # ldd /usr/lib/libgtk-x11-2.0.so.0
/usr/lib/libgtk-x11-2.0.so.0:
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x284bb000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x284d1000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x28555000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x2855e000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x28598000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x2859b000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x285a0000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x285b9000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x285f2000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x285f5000)
libintl.so.8 => /lib/libintl.so.8 (0x28687000)
libiconv.so.2 => /lib/libiconv.so.2 (0x28690000)
libcairo.so.12 => not found (0x0)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x2876e000)
libz.so.1 => /lib/libz.so.1 (0x287db000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x287ed000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x28817000)
libglitz.so.1 => /usr/lib/libglitz.so.1 (0x28836000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0x28859000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x2887d000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x28885000)
libm.so.4 => /lib/libm.so.4 (0x28970000)
libgcc_s.so.1 => /usr/lib/gcc/i686-gentoo-freebsd6.2/4.1.1/libgcc_s.so.1 (0x2816f000)
libcairo.so.12 => not found (0x0)
libXi.so.6 => /usr/lib/libXi.so.6 (0x28987000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x2898f000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x28993000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x289a1000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x289b3000)
libcairo.so.12 => not found (0x0)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x289b8000)
libc.so.6 => /lib/libc.so.6 (0x28089000)
librpcsvc.so.3 => /usr/lib/librpcsvc.so.3 (0x289e4000)
>How-To-Repeat:
Remove any library (non critical obviously) and ldd a binary that requires it.
>Fix:
Apply below patch :)
It should be safe as functionality is only changed if called from ldd.
diff -ur libexec.orig/rtld-elf/rtld.c libexec/rtld-elf/rtld.c
--- libexec.orig/rtld-elf/rtld.c 2007-01-04 17:21:32 +0000
+++ libexec/rtld-elf/rtld.c 2007-01-04 17:19:14 +0000
@@ -1266,8 +1266,12 @@
char **curpath = paths;
needed->obj = NULL;
- if (paths == NULL)
- return -1;
+ if (paths == NULL) {
+ if (ld_tracing)
+ continue;
+ else
+ return -1;
+ }
while(*curpath) {
if (needed->obj == NULL) {
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list