| xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame] | 1 | #!/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 |  | 
 | 21 | NM="$1"; shift | 
 | 22 | while [ $# -gt 0 ]; do | 
 | 23 |   ( $NM -P $1; echo 'end[end]:' ) | gawk ' BEGIN { | 
 | 24 | C["accept"]=1 | 
 | 25 | C["close"]=1 | 
 | 26 | C["connect"]=1 | 
 | 27 | C["creat"]=1 | 
 | 28 | C["fcntl"]=1 | 
 | 29 | C["fdatasync"]=1 | 
 | 30 | C["fsync"]=1 | 
 | 31 | C["msgrcv"]=1 | 
 | 32 | C["msgsnd"]=1 | 
 | 33 | C["msync"]=1 | 
 | 34 | C["nanosleep"]=1 | 
 | 35 | C["open"]=1 | 
 | 36 | C["open64"]=1 | 
 | 37 | C["pause"]=1 | 
 | 38 | C["poll"]=1 | 
 | 39 | C["pread"]=1 | 
 | 40 | C["pread64"]=1 | 
 | 41 | C["pselect"]=1 | 
 | 42 | C["pwrite"]=1 | 
 | 43 | C["pwrite64"]=1 | 
 | 44 | C["read"]=1 | 
 | 45 | C["readv"]=1 | 
 | 46 | C["recv"]=1 | 
 | 47 | C["recvfrom"]=1 | 
 | 48 | C["recvmsg"]=1 | 
 | 49 | C["select"]=1 | 
 | 50 | C["send"]=1 | 
 | 51 | C["sendmsg"]=1 | 
 | 52 | C["sendto"]=1 | 
 | 53 | C["sigpause"]=1 | 
 | 54 | C["sigsuspend"]=1 | 
 | 55 | C["sigwait"]=1 | 
 | 56 | C["sigwaitinfo"]=1 | 
 | 57 | C["tcdrain"]=1 | 
 | 58 | C["wait"]=1 | 
 | 59 | C["waitid"]=1 | 
 | 60 | C["waitpid"]=1 | 
 | 61 | C["write"]=1 | 
 | 62 | C["writev"]=1 | 
 | 63 | C["__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 | } | 
 | 88 | END { | 
 | 89 |   exit ret | 
 | 90 | }' || exit | 
 | 91 |   shift | 
 | 92 | done |