Blame


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;
5 2a931b72 2005-02-11 devnull };
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;
9 2a931b72 2005-02-11 devnull };
10 2a931b72 2005-02-11 devnull
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;
16 2a931b72 2005-02-11 devnull } else {
17 2a931b72 2005-02-11 devnull pthreadlibrary = "linuxclone";
18 2a931b72 2005-02-11 devnull isnptl = 0;
19 2a931b72 2005-02-11 devnull }
20 2a931b72 2005-02-11 devnull }
21 2a931b72 2005-02-11 devnull
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;
31 2a931b72 2005-02-11 devnull }else {
32 2a931b72 2005-02-11 devnull return p\X;
33 2a931b72 2005-02-11 devnull }
34 2a931b72 2005-02-11 devnull }
35 2a931b72 2005-02-11 devnull
36 2a931b72 2005-02-11 devnull defn pthreadlist() {
37 2a931b72 2005-02-11 devnull local all, p, n, l;
38 2a931b72 2005-02-11 devnull
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;
47 2a931b72 2005-02-11 devnull }
48 2a931b72 2005-02-11 devnull } else {
49 2a931b72 2005-02-11 devnull all = {};
50 2a931b72 2005-02-11 devnull }
51 2a931b72 2005-02-11 devnull return all;
52 2a931b72 2005-02-11 devnull }
53 2a931b72 2005-02-11 devnull