__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