Subject: Re: armv6 - Thread and process ID registers
To: Matt Thomas <matt@3am-software.com>
From: Richard Earnshaw <richard.earnshaw@buzzard.freeserve.co.uk>
List: port-arm
Date: 07/09/2007 22:15:43
On Mon, 2007-07-09 at 13:31 -0700, Matt Thomas wrote:
> The ARM1136 has three new coprocessor 32-bit (of coures) registers for storing
> thread and process information.
>
> They are user read/write, user read/only, and privileged-only read/write.
>
> Obviously the user-visible ones need to dealt with on a context switch. But the
> problem is cf_context_switch doesn't anywhere to store the user readwrite
> register (it only gets passed the L1 page table ptr). It doesn't seem smart to
> store/restore it on user exceptions since it'll only change on context switches.
> Since r4 stores the old lwp, I'm thinking of using that register to store it
> in mdlwp.
>
I think the user-space registers can be hidden/disabled if we don't want
to support them immediately. We should do this if we can't guarantee to
save/restore the value on context switches at this time.
> For the user readonly register, I would also keep that in mdlwp and restore it
> in cf_context_switch. But I'm not sure what user space would make it. I'd
> allow a user to store a value in it via sysarch(ARM_SET_USERID, value).
>
Linux uses it (or is it the R/W one?) for Thread local storage (and gcc
has a TLS usage model to use it for that).
R.