Date: Sat, 16 Jun 2001 02:49:52 -0400 (EDT) From: Chris BeHanna <behanna@topperwein.dyndns.org> To: FreeBSD-gnats-submit@freebsd.org Cc: jdp@polstra.com Subject: bin/28191: rtld-elf apparently ignores LD_LIBRARY_PATH Message-ID: <200106160649.f5G6nqP89676@topperwein.dyndns.org>
next in thread | raw e-mail | index | archive | help
>Number: 28191 >Category: bin >Synopsis: rtld-elf ignores LD_LIBRARY_PATH >Confidential: no >Severity: critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Jun 15 23:50:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Chris BeHanna >Release: FreeBSD 4.3-STABLE i386 >Organization: >Environment: System: FreeBSD topperwein.dyndns.org 4.3-STABLE FreeBSD 4.3-STABLE #0: Tue Jun 12 09:06:55 EDT 2001 root@topperwein.dyndns.org:/usr/obj/usr/src/sys/TOPPERWEIN i386 CPU: AMD Athlon, 1.333 GHz (AMD K-7) Affected file: /usr/libexec/ld-elf.so.1 >Description: The XFree86 4.1.0_4 port fails on this box when attempting to build the Type 1 fonts. In particular, this line fails: LD_LIBRARY_PATH=../../../exports/lib XFT_CONFIG=../../../lib/Xft/XftConfig ../../../exports/bin/xftcache . /usr/libexec/ld-elf.so.1: ../../../exports/bin/xftcache: Undefined symbol "XftDirSave" where `pwd` is /usr/ports/x11/XFree86-4/work/xc/programs/xftcache. According to rtld(1), LD_LIBRARY_PATH should supercede the default search path except for setuid and setgid executables, of which xftcache is neither. I verified this problem by running the command by hand and by doing "LD_LIBRARY_PATH=../../../exports/lib ldd xftcache". The output pointed to the installed /usr/X11R6/lib/libXft.so instead of the one within the XFree86 build tree and, indeed the installed libXft.so doesn't have the symbol XftDirSave, but the one in the build tree does. Note that ldconfig -r reveals an entry for libXft.so that does indeed point to /usr/X11R6/lib/libXft.so. That said, if I can't selectively override that by setting LD_LIBRARY_PATH on the command line, that's a big problem. From the comment from find_library(), I see that the executable's RPATH entry takes precedence over LD_LIBRARY_PATH. If that's the case, then how can LD_LIBRARY_PATH be used to force an executable to bootstrap itself from a build tree? >How-To-Repeat: Attempt to build XFree86 4.1.0_4 on an Athlon running 4.3-STABLE from the date indicated in uname -a, above. >Fix: Change find_library() to look in LD_LIBRARY_PATH before RPATH for non-setuid, non-setgid executables: --- rtld.c Mon May 14 01:01:35 2001 +++ rtld.c.new Sat Jun 16 02:45:03 2001 @@ -803,8 +803,8 @@ dbg(" Searching for \"%s\"", name); if ((refobj != NULL && - (pathname = search_library_path(name, refobj->rpath)) != NULL) || (pathname = search_library_path(name, ld_library_path)) != NULL || + (pathname = search_library_path(name, refobj->rpath)) != NULL) || (pathname = search_library_path(name, gethints())) != NULL || (pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL) return pathname; If I completely misunderstand, please let me know, and I'll raise no fuss about closing this PR. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106160649.f5G6nqP89676>