__tls_get_addr problem with recent current
Artem Belevich
fbsdlist at src.cx
Sat Aug 30 19:50:06 UTC 2008
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!
--Atem
On 8/30/08, Kostik Belousov <kostikbel at gmail.com> wrote:
> > Interestingly enough, crash always occurs on "mov %fs:0x0,%rdi" instruction,
> > 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
>
>
--
--Artem
More information about the freebsd-current
mailing list