Re: __tls_get_addr problem with recent current

From: Artem Belevich <fbsdlist_at_src.cx>
Date: Sat, 30 Aug 2008 12:50:04 -0700
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
>  _at__at_ -265,6 +265,10 _at__at_ 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
Received on Sat Aug 30 2008 - 17:50:06 UTC

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