mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
54 lines
853 B
Text
54 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;
|
||
|
}
|
||
|
|