On Wednesday, 9 January 2013 at 10:38:33 UTC, Walter Bright wrote:
On 1/9/2013 2:28 AM, Jacob Carlborg wrote:
On 2013-01-09 11:26, Jacob Carlborg wrote:
I think it sounds like that but I don't know. I'm just trying
to figure
out how TLS is implemented on Mac OS X 10.7+.
Also, there's nothing else that calls this tlv_get_addr
function or the thunk so
I'm guessing it's the compiler that calls it.
Watcha do is something like this:
__thread int x;
int foo() { return x; }
Compile, disassemble, and look at the code generated and the
fixup records. Then there's no need to guess :-)
Surely __thread is redundant there, seeing as x will be TLS by
default?
I tried disassembling this on os x 10.7.5
otool (the default tool for this on os x) just gave me this:
tls_test.o:
indirect symbol table offset is past end of file
(__TEXT,__text) section
It couldn't see any instructions at all.
gdb disas gives this:
0x0000000000000024 <D8tls_test3fooFZi+0>: push rbp
0x0000000000000025 <D8tls_test3fooFZi+1>: mov rbp,rsp
0x0000000000000028 <D8tls_test3fooFZi+4>: mov rdi,QWORD
PTR [rip+0x0] # 0x30 <D8tls_test3fooFZi+12>
0x0000000000000030 <D8tls_test3fooFZi+12>: call 0x35
<D8tls_test3fooFZi+17>
0x0000000000000035 <D8tls_test3fooFZi+17>: mov eax,DWORD
PTR [rax]
0x0000000000000037 <D8tls_test3fooFZi+19>: pop rbp
0x0000000000000038 <D8tls_test3fooFZi+20>: ret