Date: Fri, 23 May 2014 16:28:34 -0700 From: Peter Wemm <peter@wemm.org> To: freebsd-amd64@freebsd.org Subject: Re: i386 Go programs crash on amd64 Message-ID: <537FD9A2.2010607@wemm.org> In-Reply-To: <537FD853.3000505@wemm.org> References: <20140523225300.GA14433@server.rulingia.com> <537FD853.3000505@wemm.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 5/23/14, 4:22 PM, Peter Wemm wrote: > On 5/23/14, 3:53 PM, Peter Jeremy wrote: >> I've been playing with Go (lang/go) and found that i386 Go binaries >> segfault when run on amd64 (9.x, 10.x or HEAD). I've narrowed it down >> to the LDT handling but am not sure whether it's on the FreeBSD or Go >> side. >> >> As far as I can see, the i386 binary is correctly calling i386_set_ldt() >> and the i386_set_ldt() emulation in the amd64 kernel matches the i386 >> kernel - but the net result doesn't work. >> >> Can anyone offer any suggestions as to how to resolve this? >> > We don't emulate i386_set_ldt(). > > The 32 bit version of libc on amd64 has a different implementation > that calls sysarch(I386_SET_FSBASE, ..) and friends. Normally this is > handled transparently by static linking, but obviously that's an issue > for Go. Actually, that's an even more interesting question. WHY are they using i386_set_ldt()? Where is it coming from? As near as I can tell, libc, libthr etc call I386_SET_GSBASE for tls. -Peter
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?537FD9A2.2010607>