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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-amd64
To unsubscribe, send any mail to "[email protected]"