1 2a931b72 2005-02-11 devnull // Linux NPTL 2.3.2
2 2a931b72 2005-02-11 devnull complex list_head {
3 2a931b72 2005-02-11 devnull 'X' 0 next;
4 2a931b72 2005-02-11 devnull 'X' 4 prev;
6 2a931b72 2005-02-11 devnull complex nptl_pthread {
7 2a931b72 2005-02-11 devnull 'X' 0 loopback;
8 2a931b72 2005-02-11 devnull 'X' 0x48 tid;
11 2a931b72 2005-02-11 devnull // cannot be done at load time -- need shared library symbols
12 2a931b72 2005-02-11 devnull defn guessnptl() {
13 2a931b72 2005-02-11 devnull if var("nptl_version") then {
14 2a931b72 2005-02-11 devnull pthreadlibrary = "nptl";
15 2a931b72 2005-02-11 devnull isnptl = 1;
17 2a931b72 2005-02-11 devnull pthreadlibrary = "linuxclone";
18 2a931b72 2005-02-11 devnull isnptl = 0;
22 2a931b72 2005-02-11 devnull defn pthread2tid(p) {
23 2a931b72 2005-02-11 devnull guessnptl();
24 2a931b72 2005-02-11 devnull if p == 0 then
25 2a931b72 2005-02-11 devnull return 0;
26 2a931b72 2005-02-11 devnull if isnptl then {
27 2a931b72 2005-02-11 devnull complex nptl_pthread p;
28 2a931b72 2005-02-11 devnull if p.loopback != p then
29 2a931b72 2005-02-11 devnull error("bad pthread "+itoa(p, "%x"));
30 2a931b72 2005-02-11 devnull return p.tid;
32 2a931b72 2005-02-11 devnull return p\X;
36 2a931b72 2005-02-11 devnull defn pthreadlist() {
37 2a931b72 2005-02-11 devnull local all, p, n, l;
39 2a931b72 2005-02-11 devnull if isnptl then {
40 2a931b72 2005-02-11 devnull all = {};
41 2a931b72 2005-02-11 devnull l = (list_head)stack_used;
42 2a931b72 2005-02-11 devnull l = (list_head)l.next;
43 2a931b72 2005-02-11 devnull while l != stack_used do {
44 2a931b72 2005-02-11 devnull p = l - *_thread_db_pthread_list;
45 2a931b72 2005-02-11 devnull all = append all, p;
46 2a931b72 2005-02-11 devnull l = (list_head)l.next;
49 2a931b72 2005-02-11 devnull all = {};
51 2a931b72 2005-02-11 devnull return all;