blob: 90d8768604a32e6ba33ab49c2bede777bfb0b618 [file] [log] [blame]
rsc2a931b72005-02-11 16:51:43 +00001// Linux NPTL 2.3.2
2complex list_head {
3 'X' 0 next;
4 'X' 4 prev;
5};
6complex nptl_pthread {
7 'X' 0 loopback;
8 'X' 0x48 tid;
9};
10
11// cannot be done at load time -- need shared library symbols
12defn guessnptl() {
13 if var("nptl_version") then {
14 pthreadlibrary = "nptl";
15 isnptl = 1;
16 } else {
17 pthreadlibrary = "linuxclone";
18 isnptl = 0;
19 }
20}
21
22defn pthread2tid(p) {
23 guessnptl();
24 if p == 0 then
25 return 0;
26 if isnptl then {
27 complex nptl_pthread p;
28 if p.loopback != p then
29 error("bad pthread "+itoa(p, "%x"));
30 return p.tid;
31 }else {
32 return p\X;
33 }
34}
35
36defn pthreadlist() {
37 local all, p, n, l;
38
39 if isnptl then {
40 all = {};
41 l = (list_head)stack_used;
42 l = (list_head)l.next;
43 while l != stack_used do {
44 p = l - *_thread_db_pthread_list;
45 all = append all, p;
46 l = (list_head)l.next;
47 }
48 } else {
49 all = {};
50 }
51 return all;
52}
53