Date: Sat, 30 Aug 2008 21:38:04 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Artem Belevich <fbsdlist@src.cx> Cc: Bernd Walter <ticso@cicely7.cicely.de>, freebsd-current@freebsd.org Subject: Re: __tls_get_addr problem with recent current Message-ID: <20080830183804.GG2038@deviant.kiev.zoral.com.ua> In-Reply-To: <ed91d4a80808300946s49ff076dw64b57f8e9058f2d@mail.gmail.com> References: <ed91d4a80808300946s49ff076dw64b57f8e9058f2d@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--oxour8c+zPVguRmP Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Aug 30, 2008 at 09:46:05AM -0700, Artem Belevich wrote: > Hi, >=20 > Did someone figure out what was/is causing this problem? I believe > I've ran into the same issue on a freshly built (Aug 29th) RELENG_7 on > amd64 (Q9450 w/ 8GB RAM). >=20 > What's strange is that in my case the problem pops up when I run > 32-bit binaries from RELENG_6. Otherwise the system is stable. I can > buildworld continuously with -j8 without any problems. However, when I > try to build my code using hacked make from FreeBSD6/i386 things start > falling apart. All of a sudden I get cores from FreeBSD7/amd64 > binaries. All of them, as far as I can tell crash in __tls_get_addr. > So far I've been unable to reproduce the crashes in any other > scenarios, but I'm still trying. >=20 > Interestingly enough, crash always occurs on "mov %fs:0x0,%rdi" instru= ction, > yet the same code in the same binaries works fine when binaries are used > without mixing amd64/i386 binaries. Could that be that amd64 might > somehow inherit invalid registers from i386 binaries? Quite possible, almost sure. Could you, please, check whether the change below would fix it for you ? diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S index f34b0cc..9e13ef4 100644 --- a/sys/amd64/amd64/cpu_switch.S +++ b/sys/amd64/amd64/cpu_switch.S @@ -265,6 +265,10 @@ load_seg: movl PCB_DS(%r8),%ds movl PCB_ES(%r8),%es movl PCB_FS(%r8),%fs + movl $MSR_FSBASE,%ecx + rdmsr + shlq $32,%rdx + leaq (%rax,%rdx),%r9 jmp done_load_seg /* Restore userland %gs while preserving kernel gsbase */ 2: movq PCB_GS32P(%r8),%rax --oxour8c+zPVguRmP Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAki5k4sACgkQC3+MBN1Mb4hoSgCgupiq1FYy9tJuBus5if45ii6x I88An19RL81V4ATFPwUyDHRqSPv7yKk6 =2b+R -----END PGP SIGNATURE----- --oxour8c+zPVguRmP--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080830183804.GG2038>