Date: Thu, 5 Apr 2012 22:58:22 +0200 From: Kristof Provost <kristof@sigsegv.be> To: Jason Evans <jasone@canonware.com> Cc: Oleksandr Tymoshenko <gonzo@bluezbox.com>, freebsd-arch@freebsd.org Subject: Re: TLS on ARM and MIPS Message-ID: <20120405205822.GR9275@thebe.jupiter.sigsegv.be> In-Reply-To: <C2ED9FBB-DA2E-4F35-A0E4-8AF8148FEB1D@canonware.com> References: <2FF97057-905D-4F02-9138-75680ABC6202@canonware.com> <4F79F020.9070504@freebsd.org> <3C11DB18-1C43-446E-A0BC-FC15C6126819@canonware.com> <4F7A170E.8020209@bluezbox.com> <BE64B52D-B1BA-4107-8D14-D4FAF2C62350@canonware.com> <4F7B98C0.6090209@bluezbox.com> <C2ED9FBB-DA2E-4F35-A0E4-8AF8148FEB1D@canonware.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120405205822.GR9275>