On Mon, Dec 18, 2000 at 02:58:16AM +1000, Stephen McKay wrote:
> This has been broken for new users for some time. :-( Those of us
> upgrading from source have been immune to this problem, because we
> retain the old a.out ld.so binary.
>
> >/usr/libexec/ld.so: Undefined symbol "___error" called from
> >sim:/usr/X11R6/lib /aout/libX11.so.6.1 at 0x20160644
>
> When errno became a function that returns a pointer (previously it was
> a simple integer variable), recompiled libraries became incompatable with
> old binaries. So, I hacked the a.out loader (ld.so). The fix was in 3.0.
> Well, Nate called it a horrible hack, so maybe I should say "the hack was
> in 3.0".
src/lib/libc/sys/__error.c suggests this was the case for 2.2.7+.
What is out of sync is the X11 a.out libs. They are probably built on a
2.2.7 or 2.2.8 box, thus they refer to `___error' vs. `errno'. These
libs are wrong for the SimCity binary. They are a.out yes, but not
proper for compat20 use. Since SimCity needs `libgcc.so.261', I'll
assume it was built that long ago.
The problem isn't as much ld.so, as it should match the libc.so, et.al.
you are using from the compat2[01] dist (needed to satisfy ``ldd
lib/SimCity/res/sim''). And `ld.so' and the shared libs would be
consistent on the system the a.out program was built on.
What I would feel most comfortable with, is doing a MFC to RELENG_2_2 of
the rtld-aout changes since then, building a new `ld.so' and putting that
in the compat2? dists. Problem is I don't have access to a 2.2-STABLE
box.
> I poked about with my old FreeBSD CD collection and found that
> version 3.0 through 3.2 have a fully functioning (fully hack enabled)
> ld.so, but an older binary has been substituted in 3.3 and onward,
> including 4.0 and 4.1, and most likely 4.2 also.
Are you sure? src/lib/compat/compat2[012]/ld.so.gz.uu are all at
rev 1.1. So there has been no change to them over the lifetime of their
existence. All three are identical -- having the same MD5 checksum.
Well, looking at the release tags compat22/ld.so was in 3.2.
compat2[01]/ld.so was added for 3.3.
> I can only guess that some anonymous release engineer (nobody we know :-)
> picked the wrong CD at some point to get the master copy of ld.so once
> it stopped compiling. (Or at least stopped being easily compiled.)
Not quite. I seem to remember that JKH was makeing a tarball of a.out
libs from what ever was on his box at the time (thus probably the last
a.out ld.so just before E-day on 3-CURRENT). When I committed the
compat2? bits, I took ld.so from a 2.2.x release as this is the compat2?
dist, not compat3.aout dist. Which is what you're suggesting should have
been done.
--
-- David ([EMAIL PROTECTED])
GNU is Not Unix / Linux Is Not UniX
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message