Skip site navigation (1)Skip section navigation (2)
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>