blob: 9098e3238f5aa7788e7929fff05f72dcf2ecf1e4 [file] [log] [blame]
xf.libdd93d52023-05-12 07:10:14 -07001#!/bin/sh
2# Test whether all cancelable functions are cancelable.
3# Copyright (C) 2002-2016 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, see
19# <http://www.gnu.org/licenses/>.
20
21NM="$1"; shift
22while [ $# -gt 0 ]; do
23 ( $NM -P $1; echo 'end[end]:' ) | gawk ' BEGIN {
24C["accept"]=1
25C["close"]=1
26C["connect"]=1
27C["creat"]=1
28C["fcntl"]=1
29C["fdatasync"]=1
30C["fsync"]=1
31C["msgrcv"]=1
32C["msgsnd"]=1
33C["msync"]=1
34C["nanosleep"]=1
35C["open"]=1
36C["open64"]=1
37C["pause"]=1
38C["poll"]=1
39C["pread"]=1
40C["pread64"]=1
41C["pselect"]=1
42C["pwrite"]=1
43C["pwrite64"]=1
44C["read"]=1
45C["readv"]=1
46C["recv"]=1
47C["recvfrom"]=1
48C["recvmsg"]=1
49C["select"]=1
50C["send"]=1
51C["sendmsg"]=1
52C["sendto"]=1
53C["sigpause"]=1
54C["sigsuspend"]=1
55C["sigwait"]=1
56C["sigwaitinfo"]=1
57C["tcdrain"]=1
58C["wait"]=1
59C["waitid"]=1
60C["waitpid"]=1
61C["write"]=1
62C["writev"]=1
63C["__xpg_sigpause"]=1
64}
65/:$/ {
66 if (seen)
67 {
68 if (!seen_enable || !seen_disable)
69 {
70 printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen
71 ret = 1
72 }
73 }
74 seen=""
75 seen_enable=""
76 seen_disable=""
77 object=gensub(/^.*\[(.*)\]:$/, "\\1", 1, $0)
78 next
79}
80{
81 if (C[$1] && $2 ~ /^[TW]$/)
82 seen=$1
83 else if ($1 ~ /^([.]|)__(libc|pthread)_enable_asynccancel$/ && $2 == "U")
84 seen_enable=1
85 else if ($1 ~ /^([.]|)__(libc|pthread)_disable_asynccancel$/ && $2 == "U")
86 seen_disable=1
87}
88END {
89 exit ret
90}' || exit
91 shift
92done