Re: __tls_get_addr problem with recent current

From: Kostik Belousov <kostikbel_at_gmail.com>
Date: Sat, 30 Aug 2008 22:58:44 +0300
On Sat, Aug 30, 2008 at 12:50:04PM -0700, Artem Belevich wrote:
> Patch seems to have fixed the problem. The build that used to fail
> immediatelly has been going on for few minutes now with no crashes so
> far.
> 
> Thanks a lot for the quick fix!

Hmm, after I sent the patch, I started thought that, in fact, we shall
reread the fsbase when switching from 32bit process, not when switching
to such process. Could you, please, retest with the following change
(against stock sources, not over the previous patch) ?

diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S
index f34b0cc..29ce2e1 100644
--- a/sys/amd64/amd64/cpu_switch.S
+++ b/sys/amd64/amd64/cpu_switch.S
_at__at_ -249,6 +249,10 _at__at_ store_seg:
 1:	movl	%ds,PCB_DS(%r8)
 	movl	%es,PCB_ES(%r8)
 	movl	%fs,PCB_FS(%r8)
+	movl	$MSR_FSBASE,%ecx
+	rdmsr
+	shlq	$32,%rdx
+	leaq	(%rax,%rdx),%r9
 	jmp	done_store_seg
 2:	movq	PCB_GS32P(%r8),%rax
 	movq	(%rax),%rax

Received on Sat Aug 30 2008 - 17:58:51 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:34 UTC