[uClibc] nptl strace

Rogelio Serrano rogelio at smsglobal.net
Fri Apr 30 06:49:34 UTC 2004


Hi All,

Im trying to understand nptl and the new kernel system calls 
associated with it. Attached is the strace of the system calls 
made by a test pogram.

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

void *
service_loop(void * arg)
{
     printf("thread\n");
     return NULL;
}

int
main()
{
     pthread_t tid;
     pthread_create(&tid, NULL, service_loop, NULL);
     while(1);
}

this is the trace:

execve("./a.out", ["./a.out"], [/* 33 vars */]) = 0
uname({sys="Linux", node="debian", ...}) = 0
brk(0)                                  = 0x804a000
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such 
file or directory)
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such 
file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=39146, ...}) = 0
old_mmap(NULL, 39146, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such 
file or directory)
open("/lib/tls/i686/cmov/libpthread.so.0", O_RDONLY) = 3
read(3, 
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20E\0\000"..., 
512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=82361, ...}) = 0
old_mmap(NULL, 64928, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 
0x40022000
old_mmap(0x4002f000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED, 3, 0xd000) = 0x4002f000
old_mmap(0x40030000, 7584, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40030000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such 
file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, 
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200X\1"..., 
512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=1271196, ...}) = 0
old_mmap(NULL, 1281580, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) 
= 0x40032000
old_mmap(0x40160000, 36864, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED, 3, 0x12d000) = 0x40160000
old_mmap(0x40169000, 7724, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40169000
close(3)                                = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4016b000
set_thread_area({entry_number:-1 -> 6, base_addr:0x4016b5a0, 
limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, 
limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0x40018000, 39146)               = 0
set_tid_address(0x4016b5e8)             = 1412
rt_sigaction(SIGRTMIN, {0x40026470, [], SA_SIGINFO}, NULL, 8) = 
0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, 
rlim_max=RLIM_INFINITY}) = 0
mmap2(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4016c000
brk(0)                                  = 0x804a000
brk(0x806b000)                          = 0x806b000
brk(0)                                  = 0x806b000
mprotect(0x4016c000, 4096, PROT_NONE)   = 0
clone(child_stack=0x4096cb48, 
flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|CLONE_DETACHED, 
parent_tidptr=0x4096cbf8, {entry_number:6, 
base_addr:0x4096cbb0, limit:1048575, seg_32bit:1, contents:0, 
read_exec_only:0, limit_in_pages:1, seg_not_present:0, 
useable:1}, child_tidptr=0x4096cbf8) = 1413


Can anybody help me decipher this? And can  we infer from this 
trace what structures are required to implement nptl style 
threads for uClibc?




More information about the uClibc mailing list