From nobody@FreeBSD.org  Thu Jan  4 17:51:05 2007
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 7E82116A415
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  4 Jan 2007 17:51:05 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [69.147.83.33])
	by mx1.freebsd.org (Postfix) with ESMTP id 6FD4613C44B
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  4 Jan 2007 17:51:05 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id l04Hp5bl074707
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 4 Jan 2007 17:51:05 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id l04Hp5Kt074706;
	Thu, 4 Jan 2007 17:51:05 GMT
	(envelope-from nobody)
Message-Id: <200701041751.l04Hp5Kt074706@www.freebsd.org>
Date: Thu, 4 Jan 2007 17:51:05 GMT
From: Roy Marples<uberlord@gentoo.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: ldd aborts abruptly if a shared library is missing
X-Send-Pr-Version: www-3.0

>Number:         107529
>Category:       kern
>Synopsis:       [libexec] [patch] ldd(1) aborts abruptly if a shared library is missing
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    edwin
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 04 18:00:31 GMT 2007
>Closed-Date:    Thu Jul 03 22:54:45 UTC 2008
>Last-Modified:  Thu Jul 03 22:54:45 UTC 2008
>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@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:
Date: Mon, 16 Apr 2007 23:17:46 +0930
From: Benjamin Close <Benjamin.Close@clearchain.com>

 I think that ldd should at least print the error message for the missing 
 library then continue. I had to read the proposed output a few times 
 before I noticed the missing library.
State-Changed-From-To: open->feedback 
State-Changed-By: edwin 
State-Changed-When: Thu Jul 3 22:48:25 UTC 2008 
State-Changed-Why:  
Can you confirm it is still happening? 

Because: 

[~/cvs/svn/src/usr.bin/ldd] edwin@k7>ldd /usr/local/lib/libgtk-x11-2.0.so 
/usr/local/lib/libgtk-x11-2.0.so: 
libgdk_pixbuf-2.0.so.0 => /usr/local/lib/libgdk_pixbuf-2.0.so.0 (0x2817c000) 
libgdk-x11-2.0.so.0 => /usr/local/lib/libgdk-x11-2.0.so.0 (0x2866f000) 
libpangocairo-1.0.so.0 => /usr/local/lib/libpangocairo-1.0.so.0 (0x28194000) 
libpangoft2-1.0.so.0 => /usr/local/lib/libpangoft2-1.0.so.0 (0x2819e000) 
libpango-1.0.so.0 => /usr/local/lib/libpango-1.0.so.0 (0x286f4000) 
libfreetype.so.9 => /usr/local/lib/libfreetype.so.9 (0x28730000) 
libz.so.4 => /lib/libz.so.4 (0x281cf000) 
libfontconfig.so.1 => /usr/local/lib/libfontconfig.so.1 (0x2879e000) 
libX11.so.6 => /usr/local/lib/libX11.so.6 (0x287c7000) 
libXcomposite.so.1 => /usr/local/lib/libXcomposite.so.1 (0x281e1000) 
libXdamage.so.1 => /usr/local/lib/libXdamage.so.1 (0x281e4000) 
libXfixes.so.3 => /usr/local/lib/libXfixes.so.3 (0x281e7000) 
libatk-1.0.so.0 => /usr/local/lib/libatk-1.0.so.0 (0x288b4000) 
libgobject-2.0.so.0 => /usr/local/lib/libgobject-2.0.so.0 (0x288cd000) 
libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x281ec000) 
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x28907000) 
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x289b6000) 
>	    libcairo.so.2 => not found (0x0) 
libm.so.5 => /lib/libm.so.5 (0x28aab000) 
libthr.so.3 => /lib/libthr.so.3 (0x28ac0000) 
libc.so.7 => /lib/libc.so.7 (0x28080000) 
>	    libcairo.so.2 => not found (0x0) 
libXext.so.6 => /usr/local/lib/libXext.so.6 (0x281f0000) 
libXrender.so.1 => /usr/local/lib/libXrender.so.1 (0x28ad3000) 
libXinerama.so.1 => /usr/local/lib/libXinerama.so.1 (0x28adb000) 
libXi.so.6 => /usr/local/lib/libXi.so.6 (0x28ade000) 
libXrandr.so.2 => /usr/local/lib/libXrandr.so.2 (0x28ae6000) 
libXcursor.so.1 => /usr/local/lib/libXcursor.so.1 (0x28aed000) 
libcairo.so.2 => not found (0x0) 
libexpat.so.6 => /usr/local/lib/libexpat.so.6 (0x28af6000) 
libXau.so.6 => /usr/local/lib/libXau.so.6 (0x28b16000) 
libXdmcp.so.6 => /usr/local/lib/libXdmcp.so.6 (0x28b19000) 
librpcsvc.so.4 => /usr/lib/librpcsvc.so.4 (0x28b1e000) 
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x28b26000) 
libpcre.so.0 => /usr/local/lib/libpcre.so.0 (0x28b2f000) 

It works here! 


Responsible-Changed-From-To: freebsd-bugs->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Thu Jul 3 22:48:25 UTC 2008 
Responsible-Changed-Why:  
I'll chase submitter. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=107529 
State-Changed-From-To: feedback->closed 
State-Changed-By: edwin 
State-Changed-When: Thu Jul 3 22:53:26 UTC 2008 
State-Changed-Why:  
Submitter email bounced. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=107529 
>Unformatted:
