i386 Go programs crash on amd64

Konstantin Belousov kostikbel at gmail.com
Fri May 23 23:34:50 UTC 2014


On Fri, May 23, 2014 at 04:28:34PM -0700, Peter Wemm wrote:
> 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?
Provide the minimal test case.

> >>
> > 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.

We do support ldt for 32bit binaries on amd64.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-amd64/attachments/20140524/1c0b7594/attachment.sig>


More information about the freebsd-amd64 mailing list