Date: Tue, 17 Jun 2003 13:08:58 -0500 From: Dan Nelson <dnelson@allantgroup.com> To: Marcel Moolenaar <marcel@xcllnt.net> Cc: Joe Kelsey <joek@mail.flyingcroc.net> Subject: Re: Tools to modify shared libraries Message-ID: <20030617180858.GL64929@dan.emsphone.com> In-Reply-To: <20030617174834.GA1012@dhcp01.pn.xcllnt.net> References: <3EEE4717.2090409@mail.flyingcroc.net> <1055804020.79093.2.camel@rushlight.kf8nh.apk.net> <3EEF19D5.9040706@mail.flyingcroc.net> <20030617154208.GA584@dhcp01.pn.xcllnt.net> <3EEF3883.1080500@mail.flyingcroc.net> <20030617160141.GB584@dhcp01.pn.xcllnt.net> <20030617130236.7c683e4c.ak03@gte.com> <20030617174834.GA1012@dhcp01.pn.xcllnt.net>
next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Jun 17), Marcel Moolenaar said: > On Tue, Jun 17, 2003 at 01:02:36PM -0400, Alexander Kabaev wrote: > > On Tue, 17 Jun 2003 09:01:41 -0700 > > Marcel Moolenaar <marcel@xcllnt.net> wrote: > > > On Tue, Jun 17, 2003 at 08:49:23AM -0700, Joe Kelsey wrote: Linux > > > uses the same linker (GNU ld). Fixing the linker will have the > > > same effect on Linux as it will have on FreeBSD and hence will > > > prevent unnecessary dependencies in Linux libraries to Linux > > > libraries and thus remove the need to patch ELF files in the long > > > run. > > > > > > > LD putting a library in DT_NEEDED regardless of whether or not > > library exports any required symbols as long as it appears on > > command line is a feature, not a bug AFAIK. > > It's a bug because DT_NEEDED serves the purpose of recording library > dependencies. Any library that does not contribute to symbol > resolution is by definition not a dependency. Hence, its presence in > DT_NEEDED only makes the dependency information wrong. Dependency > information that's wrong is untrustworthy and unreliable and thus > unusable. Hence, a bug. Immediate consequences of broken dependency > information is the increased startup time of shared binaries, the > restriction in use of libraries in cases where they can be used and > the obstruction in replacing libraries with different implementations > by possibly causing artificial conflicts due to unnecessary loading > of libraries. > > Only explicit user directives should allow adding libraries to DT_NEEDED > regardless of whether there's actually a dependency. Dependencies can change after a program is linked, though. How about the contrived case of a program needing the openpty function, so -lutil is linked in. Then 6 months later openpty is moved to libc, making the dependency on libutil unneeded. The end result is the same as if a new program is unnecessarily linked with -lutil, but cannot be "fixed" with ld because at the time it was linked, the first program actually did need libutil. -- Dan Nelson dnelson@allantgroup.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030617180858.GL64929>