L4Re: Thread local storage
Taru Karttunen
taruti at taruti.net
Tue Dec 21 20:03:39 CET 2010
Hello
The following program crashes:
#include <stdio.h>
#include <pthread.h>
__thread int i;
int main(void)
{
puts("Hello World!");
printf("address of i=%p\n", &i);
printf("i=%d\n", i);
return 0;
}
with:
MOE: loading 'rom/hello2'
Hello World!
address of i=0xb30001fc
L4Re: unhandled exception: pc=0x100013c
How should TLS initialization be done? This is with
L4_MULTITHREADED = y
Dump of assembler code for function main:
0x01000100 <+0>: push %ebp
0x01000101 <+1>: mov %esp,%ebp
0x01000103 <+3>: and $0xfffffff0,%esp
0x01000106 <+6>: sub $0x10,%esp
0x01000109 <+9>: movl $0x1017b20,(%esp)
0x01000110 <+16>: call 0x100dab0 <puts>
0x01000115 <+21>: movl $0x1,(%esp)
0x0100011c <+28>: call 0x100f9a0 <sleep>
0x01000121 <+33>: mov %gs:0x0,%eax
0x01000127 <+39>: movl $0x1017b2d,(%esp)
0x0100012e <+46>: add $0xfffffffc,%eax
0x01000133 <+51>: mov %eax,0x4(%esp)
0x01000137 <+55>: call 0x100da80 <printf>
0x0100013c <+60>: mov %gs:0xfffffffc,%eax
0x01000142 <+66>: movl $0x1017b3e,(%esp)
0x01000149 <+73>: mov %eax,0x4(%esp)
0x0100014d <+77>: call 0x100da80 <printf>
0x01000152 <+82>: xor %eax,%eax
0x01000154 <+84>: leave
0x01000155 <+85>: ret
So how to get this working?
ps. I have a rudimentary port of gccgo on L4Re working,
and am polishing it over the holidays.
- Taru Karttunen
More information about the l4-hackers
mailing list