]>
Commit | Line | Data |
---|---|---|
82f81a90 UD |
1 | #! /bin/sh |
2 | # Test whether all cancellable functions are cancellable. | |
3 | # Copyright (C) 2002 Free Software Foundation, Inc. | |
4 | # This file is part of the GNU C Library. | |
5 | # Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. | |
6 | ||
7 | # The GNU C Library is free software; you can redistribute it and/or | |
8 | # modify it under the terms of the GNU Lesser General Public | |
9 | # License as published by the Free Software Foundation; either | |
10 | # version 2.1 of the License, or (at your option) any later version. | |
11 | ||
12 | # The GNU C Library is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | # Lesser General Public License for more details. | |
16 | ||
17 | # You should have received a copy of the GNU Lesser General Public | |
18 | # License along with the GNU C Library; if not, write to the Free | |
19 | # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
20 | # 02111-1307 USA. | |
21 | ||
22 | while [ $# -gt 0 ]; do | |
23 | ( nm -P $1; echo 'end[end]:' ) | awk ' BEGIN { | |
24 | C["accept"]=1 | |
25 | C["close"]=1 | |
26 | C["connect"]=1 | |
27 | C["creat"]=1 | |
28 | C["fcntl"]=1 | |
29 | C["fsync"]=1 | |
30 | C["llseek"]=1 | |
31 | C["lseek"]=1 | |
32 | C["msgrcv"]=1 | |
33 | C["msgsnd"]=1 | |
34 | C["msync"]=1 | |
35 | C["nanosleep"]=1 | |
36 | C["open"]=1 | |
37 | C["open64"]=1 | |
38 | C["pause"]=1 | |
39 | C["poll"]=1 | |
40 | C["pread"]=1 | |
41 | C["pread64"]=1 | |
42 | C["pselect"]=1 | |
43 | C["pwrite"]=1 | |
44 | C["pwrite64"]=1 | |
45 | C["read"]=1 | |
46 | C["readv"]=1 | |
47 | C["recv"]=1 | |
48 | C["recvfrom"]=1 | |
49 | C["recvmsg"]=1 | |
50 | C["select"]=1 | |
51 | C["send"]=1 | |
52 | C["sendmsg"]=1 | |
53 | C["sendto"]=1 | |
54 | C["sigpause"]=1 | |
55 | C["sigsuspend"]=1 | |
56 | C["sigwait"]=1 | |
57 | C["sigwaitinfo"]=1 | |
58 | C["system"]=1 | |
59 | C["tcdrain"]=1 | |
60 | C["wait"]=1 | |
61 | C["waitid"]=1 | |
62 | C["waitpid"]=1 | |
63 | C["write"]=1 | |
64 | C["writev"]=1 | |
65 | C["__xpg_sigpause"]=1 | |
66 | } | |
67 | /:$/ { | |
68 | if (seen) | |
69 | { | |
70 | # signals.c in linuxthreads does the cancellation checks not using | |
71 | # *_{enable,disable}_asynccancel. | |
270d9d47 | 72 | # Similarly pt-system.o* is allowed to call __libc_system directly. |
3b7ed871 UD |
73 | if ((!seen_enable || !seen_disable) \ |
74 | && !(object ~ /^signals.o/) \ | |
270d9d47 | 75 | && !(object ~ /^pt-system.o/)) |
82f81a90 UD |
76 | { |
77 | printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen | |
78 | ret = 1 | |
79 | } | |
80 | } | |
81 | seen="" | |
82 | seen_enable="" | |
83 | seen_disable="" | |
84 | object=gensub(/^.*\[(.*)\]:$/,"\\1","",$0) | |
85 | next | |
86 | } | |
87 | { | |
88 | if (C[$1] && $2 ~ /^[TW]$/) | |
89 | seen=$1 | |
90 | else if ($1 ~ /^__(libc|pthread)_enable_asynccancel$/ && $2 == "U") | |
91 | seen_enable=1 | |
92 | else if ($1 ~ /^__(libc|pthread)_disable_asynccancel$/ && $2 == "U") | |
93 | seen_disable=1 | |
94 | } | |
95 | END { | |
96 | exit ret | |
97 | }' || exit | |
98 | shift | |
99 | done |