Message info
 
To:Jason Evans From:Kristof Provost Subject:Re: TLS on ARM and MIPS Date:Thu, 5 Apr 2012 22:58:22 +0200
 

On 2012-04-04 22:00:57 (-0700), Jason Evans <jasone@canonware.com> wrote:
> On Apr 3, 2012, at 5:41 PM, Oleksandr Tymoshenko wrote:
> > I tested it for MIPS - works fine. Unfortunately I don't have
> > ARM hardware that works with HEAD so can't test ARM part of the change.
>
> Thanks for testing MIPS. I'm going to just assume that TLS works everywhere.
> If it doesn't, we'll find out soon enough. =)
>
It appears to be rather broken on ARM, at least in combination with
shared libraries.

I'm trying to run on an OpenRD board (Kirkwood ARM core) and I see
alignment faults whenever TLS is used. Considering that malloc appears
to use it that'd be pretty much everywhere.

A minimal test case is to have a shared library expose a __thread
variable and then to write to it from outside the library.

The assembly looks like this:
int main(int argc, char **argv)
{
8774: e52de004 push {lr} ; (str lr, [sp,
#-4]!)
kp_int = 4;
8778: e59f3014 ldr r3, [pc, #20] ; 8794
<main+0x20>
877c: e79f3003 ldr r3, [pc, r3]
8780: ebffff4c bl 84b8 <_init+0x58>
8784: e3a02004 mov r2, #4 ; 0x4
8788: e7802003 str r2, [r0, r3]

return 0;
}

The faulting instruction is 0x8788. At that point r0 is 0x20036000, r3
is 0xffff1fff.

Let me know if you need to know anything else.
In the mean time I'll keep trying to figure out how it's supposed to be
working in the first place :)

Regards.
Kristof

_______________________________________________
freebsd-arch@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"