PERFORCE change 50188 for review

Julian Elischer julian at elischer.org
Sat Apr 3 14:19:30 PST 2004


Daniel Eischen wrote:
> On Sat, 3 Apr 2004, Doug Rabson wrote:
> 
> 
>>On Saturday 03 April 2004 19:22, Daniel Eischen wrote:
>>
>>>On Sat, 3 Apr 2004, Doug Rabson wrote:
>>>
>>>>I was just wandering around the internet looking at the scenery and
>>>>I ended up here:
>>>>http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html.
>>>
>>>Neat.
>>>
>>>
>>>>This document describes a new options (which is not supported by
>>>>the compiler in current right now), -mno-tls-direct-seg-refs. This
>>>>looks like it will do everything we need for both i386 and amd64,
>>>>i.e. instead of code like:
>>>>
>>>>	movl	%gs:x at ntpoff, %eax
>>>>
>>>>it should generate:
>>>>
>>>>	movl	%gs:0, %eax
>>>>	movl	x at ntpoff(%eax), %eax
>>>
>>>That's what I thought the SUN ABI was supposed to do, no?
>>>Perhaps I should go back and read the TLS spec...
>>
>>The main difference, (for me anyway) is that the calling convention for 
>>tls_get_addr in the sun abi is a standard stack-based convention. This 
>>leads to bulky code sequences which are hard for the linker to 
>>transform when it realises that it can change a reference from e.g. 
>>global dynamic to local exec.
> 
> 
> Oh, I was really only thinking that the tls_get_addr function
> and everything else would be pretty much the same as the
> GNU convention, except that there would be one extra
> instruction for __thread references (like you show
> above).  I think this is what we were going on from the
> start.
> 
> 
>>>>Although I'm still not quite convinced that we can't do the first
>>>>version with essentially zero cost for i386 at least.
>>>
>>>I think it might get messy trying to manage LDTs.  Extra
>>>locking will be needed when you need to borrow them from
>>>other threads, and you need to make sure those other threads
>>>aren't running and aren't scope system.  You might as well
>>>make a system call to continue the thread and let the
>>>kernel do all the work.
>>
>>Probably. If we can arrange to reduce the syscall cost somewhat (e.g. 
>>with sysenter/sysexit instead of int $80), perhaps this still isn't too 
>>much of a problem. I think that most programs should do far fewer 
>>context switches than most other work.
> 
> 
> But everything else being equal, it's so much easier
> for the one extra instruction in the TLS reference.
> 

Talking with Peter, it may be feasible to use the kernel
to set %fs:0 to point to per-thread data as there is a very fast
way to make syscalls (12 clocks vs 300 clocks, or so he says)
so that leaves us only with problems on the x86.
The option above is what I thought we were going to do all along for x86


-- 
+------------------------------------+       ______ _  __
|   __--_|\  Julian Elischer         |       \     U \/ / hard at work in
|  /       \ julian at elischer.org     +------>x   USA    \ a very strange
| (   OZ    )                                \___   ___ | country !
+- X_.---._/    presently in San Francisco       \_/   \\
           v



More information about the freebsd-threads mailing list