mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
53 lines
853 B
Text
53 lines
853 B
Text
// Linux NPTL 2.3.2
|
|
complex list_head {
|
|
'X' 0 next;
|
|
'X' 4 prev;
|
|
};
|
|
complex nptl_pthread {
|
|
'X' 0 loopback;
|
|
'X' 0x48 tid;
|
|
};
|
|
|
|
// cannot be done at load time -- need shared library symbols
|
|
defn guessnptl() {
|
|
if var("nptl_version") then {
|
|
pthreadlibrary = "nptl";
|
|
isnptl = 1;
|
|
} else {
|
|
pthreadlibrary = "linuxclone";
|
|
isnptl = 0;
|
|
}
|
|
}
|
|
|
|
defn pthread2tid(p) {
|
|
guessnptl();
|
|
if p == 0 then
|
|
return 0;
|
|
if isnptl then {
|
|
complex nptl_pthread p;
|
|
if p.loopback != p then
|
|
error("bad pthread "+itoa(p, "%x"));
|
|
return p.tid;
|
|
}else {
|
|
return p\X;
|
|
}
|
|
}
|
|
|
|
defn pthreadlist() {
|
|
local all, p, n, l;
|
|
|
|
if isnptl then {
|
|
all = {};
|
|
l = (list_head)stack_used;
|
|
l = (list_head)l.next;
|
|
while l != stack_used do {
|
|
p = l - *_thread_db_pthread_list;
|
|
all = append all, p;
|
|
l = (list_head)l.next;
|
|
}
|
|
} else {
|
|
all = {};
|
|
}
|
|
return all;
|
|
}
|
|
|