The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: Norman Wilson <norman@oclsc.org>
To: tuhs@tuhs.org
Subject: Re: [TUHS] Deleted lib1 and lib2 in v6, recoverable?
Date: Sun, 30 Dec 2018 14:07:09 -0500	[thread overview]
Message-ID: <1546196832.22954.for-standards-violators@oclsc.org> (raw)

Warner Losh:

  But wasn't it tsort that did the heavy lifting to get things in order?

  ar c foo.a `tsort *.o`

  Ranlib just made it fast by adding an index..

====

There's a little more than that to ranlib.

Without ranlib, ld made a single pass through each library,
loading the modules that resolved unresolved symbols.  If
a module itself had unresolved symbols (as many do) and
some of those symbols were defined in a module ld had
already passed, you were out of luck, unless you explicitly
told ld to run a second pass, e.g. cc x.o y.o -la -la.
Hence the importance of explicit ordering when building
the library archive, and the usefulness of tsort.

Ranlib makes a list of all the .o file in this archive and
the global symbols defined or used by each module, and
places the list first in the archive.  If ld is (as it
was) changed to recognize the index, it can then make a
list of all the object files needed from this archive, even
if needed only by some file it will load from the same
archive, then collect all required modules in a single pass.

Ld could all along have just made two passes through the
library, one to assemble the same list ranlib did in advance,
a second to load the files.  (Or perhaps a first pass to
load what it knows it needs and assemble the list, and a
second only if necessary.)  Presumably it didn't both to
make ld simpler and because disk I/O was much slower back
then (especially on a heavily-loaded time-sharing system,
something far less common today).  I suspect it would work
fine just to do it that way today.

Nowadays ranlib is no longer a separate program: ar
recognizes object files and maintains an index if any are
present.  I never especially liked that; ar is in
principle a general tool so why should it have a special
case for one type of file?  But in practice I don't know
anyone who uses ar for anything except libraries any more
(everyone uses tar for the general case, since it does a
better job).  Were I to wave flags over the matter I'd
rather push to ditch ar entirely save for compatibility
with the past, move to using tar rather than ar for object
libraries, and let ld do two passes when necessary rather
than requiring that libraries be specially prepared.  As
I say, I think modern systems are fast enough that that
would work fine.

Norman Wilson
Toronto ON

             reply	other threads:[~2018-12-30 19:07 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-30 19:07 Norman Wilson [this message]
2018-12-30 19:24 ` Paul Winalski
2018-12-31  6:57 ` arnold
2019-01-02 13:54   ` Tony Finch
  -- strict thread matches above, loose matches on Subject: below --
2018-12-31  3:22 Rudi Blom
2018-12-31  2:28 Doug McIlroy
2018-12-31  3:34 ` Will Senn
2018-12-31  6:52   ` ron
2018-12-29 14:13 Noel Chiappa
2018-12-29  1:09 Noel Chiappa
2018-12-29  1:26 ` Will Senn
2018-12-29  1:35 ` Warren Toomey
     [not found]   ` <82e23dba-38a4-3ee4-e35a-6293b8eef749@gmail.com>
2018-12-29  4:59     ` Warren Toomey
2018-12-29 16:26       ` Clem Cole
2018-12-29 16:49         ` Warner Losh
2018-12-29 17:48           ` Clem cole
2018-12-30 18:34 ` Paul Winalski
2018-12-30 18:48   ` ron
2018-12-30 18:56     ` Warner Losh
2018-12-30 19:02     ` Paul Winalski
2018-12-31  0:00   ` Donald ODona
2018-12-31 17:51     ` Paul Winalski
2018-12-29  0:25 Will Senn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1546196832.22954.for-standards-violators@oclsc.org \
    --to=norman@oclsc.org \
    --cc=tuhs@tuhs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).