Date: Mon, 23 Sep 1996 07:50:08 +0200 (MET DST) From: Juergen Lock <nox@jelal.hb.north.de> To: jehamby@lightside.com Cc: jdrobina@infinet.com, freebsd-emulation@freebsd.org Subject: Re: Linker from Slackware always produces staticly linked programs Message-ID: <199609230550.HAA00627@saturn.hb.north.de> In-Reply-To: <Pine.AUX.3.94.960919140302.29880A-100000@covina.lightside.com> from Jake Hamby at "Sep 22, 96 12:51:44 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
Jake Hamby writes:
> On Thu, 19 Sep 1996, James Drobina wrote:
>...
> > The linker distribued with SLackware 96 is
> > $ ld -v
> > ld version cygnus-2.6 (with BFD 2.6.0.14)
> >
> > If I replace the Slackare 96 linker with an older version. I can link
> > dynamic programs and hello world works. I backed the linker out and
> > replaced it with
> >
> > $ ./ld -v
> > ld version cygnus/linux-2.5.2l.17 (with BFD cygnus/linux-2.5.2l.11)
> >
> > Has anyone seen this problem? Is it a slackware problem or an emulation
> > problem?
>
> It's an ELF problem. Last time I looked at the code, the ELF loader
> figured out whether it was loading a FreeBSD, Linux, or SVR4 ELF binary by
> the name of the dynamic loader (ld.so), which is in a different directory
> on each of the three. For statically linked programs, there is physically
> no way to tell the difference between ELF programs for each OS (!) so it
> assumes a native FreeBSD ELF program (yes there is such a beast, there is
> an elfkit available for download, I believe on freefall.freebsd.org).
>
> We're caught between a rock and a hard place here, because on the one
> hand, any statically linked ELF binary is most likely to be Linux, simply
> because nobody's using FreeBSD ELF yet (because, unlike Linux, our a.out
> format doesn't suck :-), but on the other hand, if/when we do decide to
> move to ELF, there _will_ be a lot of statically linked _FreeBSD_ ELF
> binaries.
Is there no way at least these _FreeBSD_ ELF binaries can be marked
somehow (if all else fails a few `magic' bytes, whatever)?
>
> I guess the solution is to find or make an a.out (or dynamically linked
> ELF) version of the programs in question.
Or if your desperate and you know all your ELF binaries are linux try this,
Index: kern/imgact_elf.c
===================================================================
RCS file: /home/cvs/cvs/src/sys/kern/imgact_elf.c,v
retrieving revision 1.8
diff -u -r1.8 imgact_elf.c
--- imgact_elf.c 1996/08/31 16:52:23 1.8
+++ imgact_elf.c 1996/09/07 19:40:35
@@ -644,8 +644,12 @@
goto fail;
}
}
- else
+ else {
imgp->entry_addr = entry;
+#if defined(STATIC_ELF_LINUX)
+ imgp->proc->p_sysent = &elf_linux_sysvec;
+#endif
+ }
/*
* Construct auxargs table (used by the fixup routine)
and set options "STATIC_ELF_LINUX" in the config file...
>
> -- Jake
cheers,
Juergen
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199609230550.HAA00627>
