Date: Fri, 26 Nov 2004 12:38:19 -0800 From: Peter Wemm <peter@wemm.org> To: freebsd-amd64@freebsd.org Subject: Re: How to use older libs in 32bit mode? Message-ID: <200411261238.19311.peter@wemm.org> In-Reply-To: <200411261117.02622.peter@wemm.org> References: <20041116052630.GD49800@manor.msen.com> <20041126184559.GJ49800@manor.msen.com> <200411261117.02622.peter@wemm.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 26 November 2004 11:17 am, Peter Wemm wrote: > On Friday 26 November 2004 10:46 am, Michael R. Wayne wrote: > > On Thu, Nov 25, 2004 at 12:42:33PM -0800, Peter Wemm wrote: > > > Things to check: > > > > > > * Make sure you have COMPAT_IA32 in your kernel config. For > > > example, this command should work: > > > > > > peter@overcee[8:16pm]~/fbp4/hammer/sys/amd64/conf-120> sysctl > > > kern.elf32 kern.elf32.fallback_brand: -1 > > > (The important thing is that it prints something, not the value) > > > > Yes: > > > sysctl kern.elf32 > > > > kern.elf32.fallback_brand: -1 > > > > > * Make sure you have NOT copied ld-elf or libc from an i386 > > > system. You *MUST* build at least these two on your machine. How > > > to check: > > > > > > peter@overcee[8:17pm]~-123> strings /libexec/ld-elf32.so.1 | grep > > > libmap32 /etc/libmap32.conf > > > If this comes up empty, you're in trouble. Check that > > > /usr/libexec/ld-elf32.so.1 and /libexec/ld-elf.so.1 are the same > > > file. > > > > So far OK: > > > strings /libexec/ld-elf32.so.1 | grep libmap32 > > > > /etc/libmap32.conf > > and > > lrwxr-xr-x 1 root wheel 22 Nov 15 17:13 > > /usr/libexec/ld-elf32.so.1@ -> /libexec/ld-elf32.so.1 > > > > > These will not be present on a 5.3-release system. > > > > Running 5.3-RELEASE so they are not present, as expected. > > > > > Oh wait a second. Did you build your libraries with > > > WITH_LIB32=yes or by running build32.sh ? I have a suspicion > > > that build32.sh will produce a bad library now. > > > > Aha. Yes, I built with build32.sh as it was the only way I found > > to do it. If this is not correct, perhaps someone could put up a > > quick "how-to" page and post a URL? > > > > It would also be useful to understand how to build a port for i386, > > google was not helpful in determining how to do this. > > > > > BTW: it is helpful to do a ktrace/kdump and show the last few > > > lines. I suspect there will be a sysarch syscall, followed by a > > > SIGSEGV. > > > > You are correct: > > 72509 hello CALL sysarch(0x1,0xffffd70c) > > 72509 hello RET sysarch -1 errno 22 Invalid argument > > 72509 hello PSIG SIGSEGV SIG_DFL > > 72509 hello NAMI "hello.core" > > > > So, it looks like build32.sh is broken on 5.3-RELEASE. What now? > > Oh no! It means that FreeBSD/i386 binaries unconditionally use TLS > (thread-local-storage) setup calls in early startup. That means we > are hosed until a bunch of TLS support routines are merged from 6.0 > to 5.3-stable. > > Unfortunately, there is nothing that you can do for now. :-( I've merged some of the changes (rtld-elf/reloc.c and libc/i386/gen/_set_tp.c), and removed build32.sh from RELENG_5. If you were to build a new set of libraries, I expect it will work now. libc_r threaded binaries might work, but libthr and libpthread binaries will not. If you need to run something threaded, you can set libmap32.conf to remap all libthr or libpthread references into libc_r. BTW: if you have already done a buildworld, it might be possible to rebuild just the 32 bit libraries without a full buildworld again. If you want to try this, then "cd /usr/src; rm -rf /usr/obj/lib32; make build32; make install32" -- Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com "All of this is for nothing if we don't go to the stars" - JMS/B5
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411261238.19311.peter>