[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Edlug Archive Nov 2009 ]

Re: [edlug] tsort command

tsort = topological sort

>From info

`tsort' exists because very early versions of the Unix linker processed
an archive file exactly once, and in order.  As `ld' read each object
in the archive, it decided whether it was needed in the program based on
whether it defined any symbols which were undefined at that point in
the link.
  This meant that dependencies within the archive had to be handled
specially.  For example, `scanf' probably calls `read'.  That means
that in a single pass through an archive, it was important for `scanf.o'
to appear before read.o, because otherwise a program which calls
`scanf' but not `read' might end up with an unexpected unresolved
reference to `read'.

   The way to address this problem was to first generate a set of
dependencies of one object file on another.  This was done by a shell
script called `lorder'.  The GNU tools don't provide a version of
lorder, as far as I know, but you can still find it in BSD

   Then you ran `tsort' over the `lorder' output, and you used the
resulting sort to define the order in which you added objects to the

   This whole procedure has been obsolete since about 1980, because
Unix archives now contain a symbol table.

   Anyhow, that's where tsort came from.  To solve an old problem with
the way the linker handled archive files, which has since been solved
in different ways.

David McKelvie    Interactive Information Ltd,          Registered in Scotland
07808 492268      3, Lauriston Gardens,                  Company no. SC 150689
0131 229 1052     Edinburgh EH3 9HH
                  SCOTLAND UK             Interactions speak louder than words

You can find the EdLUG mailing list FAQ list at:

This archive is kept by wibble+RM@xxx.xxx.xxx