Date: Mon, 25 Sep 1995 10:13:56 +0000 From: Matt Thomas <matt@lkg.dec.com> To: hackers@freefall.freebsd.org Subject: Re: Big win for BSD/OS compatibility Message-ID: <199509251014.KAA06744@whydos.lkg.dec.com> In-Reply-To: Your message of "Sun, 24 Sep 1995 17:17:30 -0400." <Pine.BSF.3.91.950924171648.4383A-100000@aries.ai.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Jordan Hubbard said:
> I'm currently talking with them (Netscape) about this very subject.
> Apparently they need dlopen()/dlsym() functionality in Netscape 2.0
> and this is not provided in BSDI 1.1, so there's a problem.
>
> I'm now busily trying to talk them into doing both BSDI 2.0 and
> FreeBSD 2.x native ports.. :-)
However BSD/OS 2.0 doesn't have dlopen or dlsym either. From the 2.0
slicc man page:
BUGS
Shlicc is currently a shell script, with all the problems that entail
from that. Pure compiles aren't too much slower because the script execs
cc(1) as soon as it parses enough arguments to realize that linking isn't
necessary. Linking ought to be slower because the script runs awk(1) and
other heavyweight programs, but the fact that no code needs to be loaded
from the stub library, and hence no relocations need to be performed on
the library or its symbols, can actually make linking a little faster.
If a shared library is missing or corrupted or unreadable, programs will
print errors and dump core. The shared C library contains the library
loader routine; if it's hosed, then basically nothing works. If the
shared C library is deleted or mangled, you may need to boot from floppy
to restore it.
Turning on profiling turns off shared libraries. It didn't seem useful
to save space in binaries and then waste it by producing profiled shared
libraries that are hardly ever used.
Shared library text and data do not appear in core dumps. The current
core dump file format isn't rich enough to support multi-segment core im-
ages. Also, debugging can be inconvenient because you can't put break-
points in code that isn't mapped yet, and the libraries are not mapped
until after the program starts.
The overhead of loading the shared libraries is small but measurable.
There are 6 system calls per library at startup before executing any user
code. There is also some small overhead in indirecting through the jump
table. On the plus side, sharing library pages means that they are more
likely to be in core and thus less likely to require paging in.
The current implementation is cheap and fast, using statically linked li-
braries rather than dynamically linked libraries. This scheme makes bi-
naries smaller and start-up much faster, but it has some limitations. In
particular, if you write a substitute for a library routine and use the
shared library, the calls to that routine from within the shared library
will use the library version, not your version. This is particularly an-
noying with programs that provide their own malloc(3) and free(3) rou-
tines; if you try to free memory that was generated from (say) the shared
strdup(3), your program can dump core. Also, if library code compares a
pointer to a library function that was passed to it from user code to the
address of the library function, it will fail because the user code sees
only the address of the jump table slot. (Yes, some standard library
code actually does this!)
The current implementation has no automatic versioning. Crude library
version changes can be effected using the shlib.map file, however.
In spite of the names and the implementation strategy, these shared li-
braries have nothing in common with SVr3 shared libraries and are not
compatible with them. You aren't imagining things, though; this imple-
mentation is just as simple and lacking in features. Simpler, actually:
there is no special kernel support for these shared libraries; they are
implemented in user mode with standard BSD system calls.
While this may be fine for BSDI to base their product, there is no way of
any third party product (such as Netscape) to produce their own shared
libraries. All libraries have base addresses and there is not a guarunteed
way of avoiding address conflicts.
The FreeBSD (and NetBSD for that matter) dynamic libraries is much more
sophisticated than what's in BSD/OS 2.0.
Matt Thomas Internet: matt@lkg.dec.com
3am Software Foundry WWW URL: <currently homeless>
Westford, MA Disclaimer: Digital disavows all knowledge
of this message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199509251014.KAA06744>
