~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/coccicheck

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/coccicheck (Version linux-6.12-rc7) and /scripts/coccicheck (Version linux-5.10.229)


  1 #!/usr/bin/env bash                            !!   1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0                  2 # SPDX-License-Identifier: GPL-2.0
  3 # Linux kernel coccicheck                           3 # Linux kernel coccicheck
  4 #                                                   4 #
  5 # Read Documentation/dev-tools/coccinelle.rst       5 # Read Documentation/dev-tools/coccinelle.rst
  6 #                                                   6 #
  7 # This script requires at least spatch              7 # This script requires at least spatch
  8 # version 1.0.0-rc11.                               8 # version 1.0.0-rc11.
  9                                                     9 
 10 DIR="$(dirname $(readlink -f $0))/.."              10 DIR="$(dirname $(readlink -f $0))/.."
 11 SPATCH="`which ${SPATCH:=spatch}`"                 11 SPATCH="`which ${SPATCH:=spatch}`"
 12                                                    12 
 13 if [ ! -x "$SPATCH" ]; then                        13 if [ ! -x "$SPATCH" ]; then
 14     echo 'spatch is part of the Coccinelle pro     14     echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
 15     exit 1                                         15     exit 1
 16 fi                                                 16 fi
 17                                                    17 
 18 SPATCH_VERSION=$($SPATCH --version | head -1 |     18 SPATCH_VERSION=$($SPATCH --version | head -1 | awk '{print $3}')
                                                   >>  19 SPATCH_VERSION_NUM=$(echo $SPATCH_VERSION | ${DIR}/scripts/ld-version.sh)
 19                                                    20 
 20 USE_JOBS="no"                                      21 USE_JOBS="no"
 21 $SPATCH --help | grep -e "--jobs" > /dev/null  !!  22 $SPATCH --help | grep "\-\-jobs" > /dev/null && USE_JOBS="yes"
 22                                                    23 
 23 # The verbosity may be set by the environmenta     24 # The verbosity may be set by the environmental parameter V=
 24 # as for example with 'make V=1 coccicheck'        25 # as for example with 'make V=1 coccicheck'
 25                                                    26 
 26 if [ -n "$V" -a "$V" != "0" ]; then                27 if [ -n "$V" -a "$V" != "0" ]; then
 27         VERBOSE="$V"                               28         VERBOSE="$V"
 28 else                                               29 else
 29         VERBOSE=0                                  30         VERBOSE=0
 30 fi                                                 31 fi
 31                                                    32 
 32 FLAGS="--very-quiet"                               33 FLAGS="--very-quiet"
 33                                                    34 
 34 # You can use SPFLAGS to append extra argument     35 # You can use SPFLAGS to append extra arguments to coccicheck or override any
 35 # heuristics done in this file as Coccinelle a     36 # heuristics done in this file as Coccinelle accepts the last options when
 36 # options conflict.                                37 # options conflict.
 37 #                                                  38 #
 38 # A good example for use of SPFLAGS is if you      39 # A good example for use of SPFLAGS is if you want to debug your cocci script,
 39 # you can for instance use the following:          40 # you can for instance use the following:
 40 #                                                  41 #
 41 # $ export COCCI=scripts/coccinelle/misc/irqf_     42 # $ export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci
 42 # $ make coccicheck MODE=report DEBUG_FILE="al     43 # $ make coccicheck MODE=report DEBUG_FILE="all.err" SPFLAGS="--profile --show-trying" M=./drivers/mfd/arizona-irq.c
 43 #                                                  44 #
 44 # "--show-trying" should show you what rule is     45 # "--show-trying" should show you what rule is being processed as it goes to
 45 # stdout, you do not need a debug file for tha     46 # stdout, you do not need a debug file for that. The profile output will be
 46 # be sent to stdout, if you provide a DEBUG_FI     47 # be sent to stdout, if you provide a DEBUG_FILE the profiling data can be
 47 # inspected there.                                 48 # inspected there.
 48 #                                                  49 #
 49 # --profile will not output if --very-quiet is     50 # --profile will not output if --very-quiet is used, so avoid it.
 50 echo $SPFLAGS | grep -E -e "--profile|--show-t !!  51 echo $SPFLAGS | egrep -e "--profile|--show-trying" 2>&1 > /dev/null
 51 if [ $? -eq 0 ]; then                              52 if [ $? -eq 0 ]; then
 52         FLAGS="--quiet"                            53         FLAGS="--quiet"
 53 fi                                                 54 fi
 54                                                    55 
 55 # spatch only allows include directories with      56 # spatch only allows include directories with the syntax "-I include"
 56 # while gcc also allows "-Iinclude" and "-incl     57 # while gcc also allows "-Iinclude" and "-include include"
 57 COCCIINCLUDE=${LINUXINCLUDE//-I/-I }               58 COCCIINCLUDE=${LINUXINCLUDE//-I/-I }
 58 COCCIINCLUDE=${COCCIINCLUDE// -include/ --incl     59 COCCIINCLUDE=${COCCIINCLUDE// -include/ --include}
 59                                                    60 
 60 if [ "$C" = "1" -o "$C" = "2" ]; then              61 if [ "$C" = "1" -o "$C" = "2" ]; then
 61     ONLINE=1                                       62     ONLINE=1
 62                                                    63 
 63     if [[ $# -le 0 ]]; then                    << 
 64             echo ''                            << 
 65             echo 'Specifying both the variable << 
 66 command results in a shift count error.'       << 
 67             echo ''                            << 
 68             echo 'Try specifying "scripts/cocc << 
 69             echo ''                            << 
 70             echo 'Example:      make C=2 CHECK << 
 71             echo ''                            << 
 72             exit 1                             << 
 73     fi                                         << 
 74                                                << 
 75     # Take only the last argument, which is th     64     # Take only the last argument, which is the C file to test
 76     shift $(( $# - 1 ))                            65     shift $(( $# - 1 ))
 77     OPTIONS="$COCCIINCLUDE $1"                     66     OPTIONS="$COCCIINCLUDE $1"
 78                                                    67 
 79     # No need to parallelize Coccinelle since      68     # No need to parallelize Coccinelle since this mode takes one input file.
 80     NPROC=1                                        69     NPROC=1
 81 else                                               70 else
 82     ONLINE=0                                       71     ONLINE=0
 83     if [ "$KBUILD_EXTMOD" = "" ] ; then            72     if [ "$KBUILD_EXTMOD" = "" ] ; then
 84         OPTIONS="--dir $srctree $COCCIINCLUDE"     73         OPTIONS="--dir $srctree $COCCIINCLUDE"
 85     else                                           74     else
 86         OPTIONS="--dir $KBUILD_EXTMOD $COCCIIN     75         OPTIONS="--dir $KBUILD_EXTMOD $COCCIINCLUDE"
 87     fi                                             76     fi
 88                                                    77 
 89     # Use only one thread per core by default      78     # Use only one thread per core by default if hyperthreading is enabled
 90     THREADS_PER_CORE=$(LANG=C lscpu | grep "Th !!  79     THREADS_PER_CORE=$(lscpu | grep "Thread(s) per core: " | tr -cd "[:digit:]")
 91     if [ -z "$J" ]; then                           80     if [ -z "$J" ]; then
 92         NPROC=$(getconf _NPROCESSORS_ONLN)         81         NPROC=$(getconf _NPROCESSORS_ONLN)
 93         if [ $THREADS_PER_CORE -gt 1 -a $NPROC     82         if [ $THREADS_PER_CORE -gt 1 -a $NPROC -gt 4 ] ; then
 94                 NPROC=$((NPROC/2))                 83                 NPROC=$((NPROC/2))
 95         fi                                         84         fi
 96     else                                           85     else
 97         NPROC="$J"                                 86         NPROC="$J"
 98     fi                                             87     fi
 99 fi                                                 88 fi
100                                                    89 
101 if [ "$KBUILD_EXTMOD" != "" ] ; then               90 if [ "$KBUILD_EXTMOD" != "" ] ; then
102     OPTIONS="--patch $srctree $OPTIONS"            91     OPTIONS="--patch $srctree $OPTIONS"
103 fi                                                 92 fi
104                                                    93 
105 # You can override by using SPFLAGS                94 # You can override by using SPFLAGS
106 if [ "$USE_JOBS" = "no" ]; then                    95 if [ "$USE_JOBS" = "no" ]; then
107         trap kill_running SIGTERM SIGINT           96         trap kill_running SIGTERM SIGINT
108         declare -a SPATCH_PID                      97         declare -a SPATCH_PID
109 elif [ "$NPROC" != "1" ]; then                     98 elif [ "$NPROC" != "1" ]; then
110         # Using 0 should work as well, refer t     99         # Using 0 should work as well, refer to _SC_NPROCESSORS_ONLN use on
111         # https://github.com/rdicosmo/parmap/b    100         # https://github.com/rdicosmo/parmap/blob/master/setcore_stubs.c
112         OPTIONS="$OPTIONS --jobs $NPROC --chun    101         OPTIONS="$OPTIONS --jobs $NPROC --chunksize 1"
113 fi                                                102 fi
114                                                   103 
115 if [ "$MODE" = "" ] ; then                        104 if [ "$MODE" = "" ] ; then
116     if [ "$ONLINE" = "0" ] ; then                 105     if [ "$ONLINE" = "0" ] ; then
117         echo 'You have not explicitly specifie    106         echo 'You have not explicitly specified the mode to use. Using default "report" mode.'
118         echo 'Available modes are the followin    107         echo 'Available modes are the following: patch, report, context, org, chain'
119         echo 'You can specify the mode with "m    108         echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
120         echo 'Note however that some modes are    109         echo 'Note however that some modes are not implemented by some semantic patches.'
121     fi                                            110     fi
122     MODE="report"                                 111     MODE="report"
123 fi                                                112 fi
124                                                   113 
125 if [ "$MODE" = "chain" ] ; then                   114 if [ "$MODE" = "chain" ] ; then
126     if [ "$ONLINE" = "0" ] ; then                 115     if [ "$ONLINE" = "0" ] ; then
127         echo 'You have selected the "chain" mo    116         echo 'You have selected the "chain" mode.'
128         echo 'All available modes will be trie    117         echo 'All available modes will be tried (in that order): patch, report, context, org'
129     fi                                            118     fi
130 elif [ "$MODE" = "report" -o "$MODE" = "org" ]    119 elif [ "$MODE" = "report" -o "$MODE" = "org" ] ; then
131     FLAGS="--no-show-diff $FLAGS"                 120     FLAGS="--no-show-diff $FLAGS"
132 fi                                                121 fi
133                                                   122 
134 if [ "$ONLINE" = "0" ] ; then                     123 if [ "$ONLINE" = "0" ] ; then
135     echo ''                                       124     echo ''
136     echo 'Please check for false positives in     125     echo 'Please check for false positives in the output before submitting a patch.'
137     echo 'When using "patch" mode, carefully r    126     echo 'When using "patch" mode, carefully review the patch before submitting it.'
138     echo ''                                       127     echo ''
139 fi                                                128 fi
140                                                   129 
141 run_cmd_parmap() {                                130 run_cmd_parmap() {
142         if [ $VERBOSE -ne 0 ] ; then              131         if [ $VERBOSE -ne 0 ] ; then
143                 echo "Running ($NPROC in paral    132                 echo "Running ($NPROC in parallel): $@"
144         fi                                        133         fi
145         if [ "$DEBUG_FILE" != "/dev/null" -a "    134         if [ "$DEBUG_FILE" != "/dev/null" -a "$DEBUG_FILE" != "" ]; then
146                 echo $@>>$DEBUG_FILE              135                 echo $@>>$DEBUG_FILE
147                 $@ 2>>$DEBUG_FILE                 136                 $@ 2>>$DEBUG_FILE
148         else                                      137         else
149                 echo $@                           138                 echo $@
150                 $@ 2>&1                           139                 $@ 2>&1
151         fi                                        140         fi
152                                                   141 
153         err=$?                                    142         err=$?
154         if [[ $err -ne 0 ]]; then                 143         if [[ $err -ne 0 ]]; then
155                 echo "coccicheck failed"          144                 echo "coccicheck failed"
156                 exit $err                         145                 exit $err
157         fi                                        146         fi
158 }                                                 147 }
159                                                   148 
160 run_cmd_old() {                                   149 run_cmd_old() {
161         local i                                   150         local i
162         if [ $VERBOSE -ne 0 ] ; then              151         if [ $VERBOSE -ne 0 ] ; then
163                 echo "Running ($NPROC in paral    152                 echo "Running ($NPROC in parallel): $@"
164         fi                                        153         fi
165         for i in $(seq 0 $(( NPROC - 1)) ); do    154         for i in $(seq 0 $(( NPROC - 1)) ); do
166                 eval "$@ --max $NPROC --index     155                 eval "$@ --max $NPROC --index $i &"
167                 SPATCH_PID[$i]=$!                 156                 SPATCH_PID[$i]=$!
168                 if [ $VERBOSE -eq 2 ] ; then      157                 if [ $VERBOSE -eq 2 ] ; then
169                         echo "${SPATCH_PID[$i]    158                         echo "${SPATCH_PID[$i]} running"
170                 fi                                159                 fi
171         done                                      160         done
172         wait                                      161         wait
173 }                                                 162 }
174                                                   163 
175 run_cmd() {                                       164 run_cmd() {
176         if [ "$USE_JOBS" = "yes" ]; then          165         if [ "$USE_JOBS" = "yes" ]; then
177                 run_cmd_parmap $@                 166                 run_cmd_parmap $@
178         else                                      167         else
179                 run_cmd_old $@                    168                 run_cmd_old $@
180         fi                                        169         fi
181 }                                                 170 }
182                                                   171 
183 kill_running() {                                  172 kill_running() {
184         for i in $(seq 0 $(( NPROC - 1 )) ); d    173         for i in $(seq 0 $(( NPROC - 1 )) ); do
185                 if [ $VERBOSE -eq 2 ] ; then      174                 if [ $VERBOSE -eq 2 ] ; then
186                         echo "Killing ${SPATCH    175                         echo "Killing ${SPATCH_PID[$i]}"
187                 fi                                176                 fi
188                 kill ${SPATCH_PID[$i]} 2>/dev/    177                 kill ${SPATCH_PID[$i]} 2>/dev/null
189         done                                      178         done
190 }                                                 179 }
191                                                   180 
192 # You can override heuristics with SPFLAGS, th    181 # You can override heuristics with SPFLAGS, these must always go last
193 OPTIONS="$OPTIONS $SPFLAGS"                       182 OPTIONS="$OPTIONS $SPFLAGS"
194                                                   183 
195 coccinelle () {                                   184 coccinelle () {
196     COCCI="$1"                                    185     COCCI="$1"
197                                                   186 
198     OPT=`grep "Options:" $COCCI | cut -d':' -f    187     OPT=`grep "Options:" $COCCI | cut -d':' -f2`
199     REQ=`grep "Requires:" $COCCI | cut -d':' -    188     REQ=`grep "Requires:" $COCCI | cut -d':' -f2 | sed "s| ||"`
200     if [ -n "$REQ" ] && ! { echo "$REQ"; echo  !! 189     REQ_NUM=$(echo $REQ | ${DIR}/scripts/ld-version.sh)
201             echo "Skipping coccinelle SmPL pat !! 190     if [ "$REQ_NUM" != "0" ] ; then
202             echo "You have coccinelle:         !! 191             if [ "$SPATCH_VERSION_NUM" -lt "$REQ_NUM" ] ; then
203             echo "This SmPL patch requires:    !! 192                     echo "Skipping coccinelle SmPL patch: $COCCI"
204             return                             !! 193                     echo "You have coccinelle:           $SPATCH_VERSION"
                                                   >> 194                     echo "This SmPL patch requires:      $REQ"
                                                   >> 195                     return
                                                   >> 196             fi
205     fi                                            197     fi
206                                                   198 
207 #   The option '--parse-cocci' can be used to     199 #   The option '--parse-cocci' can be used to syntactically check the SmPL files.
208 #                                                 200 #
209 #    $SPATCH -D $MODE $FLAGS -parse_cocci $COC    201 #    $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
210                                                   202 
211     if [ $VERBOSE -ne 0 -a $ONLINE -eq 0 ] ; t    203     if [ $VERBOSE -ne 0 -a $ONLINE -eq 0 ] ; then
212                                                   204 
213         FILE=${COCCI#$srctree/}                   205         FILE=${COCCI#$srctree/}
214                                                   206 
215         echo "Processing `basename $COCCI`"       207         echo "Processing `basename $COCCI`"
216         echo "with option(s) \"$OPT\""            208         echo "with option(s) \"$OPT\""
217         echo ''                                   209         echo ''
218         echo 'Message example to submit a patc    210         echo 'Message example to submit a patch:'
219                                                   211 
220         sed -ne 's|^///||p' $COCCI                212         sed -ne 's|^///||p' $COCCI
221                                                   213 
222         if [ "$MODE" = "patch" ] ; then           214         if [ "$MODE" = "patch" ] ; then
223             echo ' The semantic patch that mak    215             echo ' The semantic patch that makes this change is available'
224         elif [ "$MODE" = "report" ] ; then        216         elif [ "$MODE" = "report" ] ; then
225             echo ' The semantic patch that mak    217             echo ' The semantic patch that makes this report is available'
226         elif [ "$MODE" = "context" ] ; then       218         elif [ "$MODE" = "context" ] ; then
227             echo ' The semantic patch that spo    219             echo ' The semantic patch that spots this code is available'
228         elif [ "$MODE" = "org" ] ; then           220         elif [ "$MODE" = "org" ] ; then
229             echo ' The semantic patch that mak    221             echo ' The semantic patch that makes this Org report is available'
230         else                                      222         else
231             echo ' The semantic patch that mak    223             echo ' The semantic patch that makes this output is available'
232         fi                                        224         fi
233         echo " in $FILE."                         225         echo " in $FILE."
234         echo ''                                   226         echo ''
235         echo ' More information about semantic    227         echo ' More information about semantic patching is available at'
236         echo ' http://coccinelle.lip6.fr/'        228         echo ' http://coccinelle.lip6.fr/'
237         echo ''                                   229         echo ''
238                                                   230 
239         if [ "`sed -ne 's|^//#||p' $COCCI`" ]     231         if [ "`sed -ne 's|^//#||p' $COCCI`" ] ; then
240             echo 'Semantic patch information:'    232             echo 'Semantic patch information:'
241             sed -ne 's|^//#||p' $COCCI            233             sed -ne 's|^//#||p' $COCCI
242             echo ''                               234             echo ''
243         fi                                        235         fi
244     fi                                            236     fi
245                                                   237 
246     if [ "$MODE" = "chain" ] ; then               238     if [ "$MODE" = "chain" ] ; then
247         run_cmd $SPATCH -D patch   \              239         run_cmd $SPATCH -D patch   \
248                 $FLAGS --cocci-file $COCCI $OP    240                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS               || \
249         run_cmd $SPATCH -D report  \              241         run_cmd $SPATCH -D report  \
250                 $FLAGS --cocci-file $COCCI $OP    242                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff || \
251         run_cmd $SPATCH -D context \              243         run_cmd $SPATCH -D context \
252                 $FLAGS --cocci-file $COCCI $OP    244                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS               || \
253         run_cmd $SPATCH -D org     \              245         run_cmd $SPATCH -D org     \
254                 $FLAGS --cocci-file $COCCI $OP    246                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff || exit 1
255     elif [ "$MODE" = "rep+ctxt" ] ; then          247     elif [ "$MODE" = "rep+ctxt" ] ; then
256         run_cmd $SPATCH -D report  \              248         run_cmd $SPATCH -D report  \
257                 $FLAGS --cocci-file $COCCI $OP    249                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff && \
258         run_cmd $SPATCH -D context \              250         run_cmd $SPATCH -D context \
259                 $FLAGS --cocci-file $COCCI $OP    251                 $FLAGS --cocci-file $COCCI $OPT $OPTIONS || exit 1
260     else                                          252     else
261         run_cmd $SPATCH -D $MODE   $FLAGS --co    253         run_cmd $SPATCH -D $MODE   $FLAGS --cocci-file $COCCI $OPT $OPTIONS || exit 1
262     fi                                            254     fi
263                                                   255 
264 }                                                 256 }
265                                                   257 
266 if [ "$DEBUG_FILE" != "/dev/null" -a "$DEBUG_F    258 if [ "$DEBUG_FILE" != "/dev/null" -a "$DEBUG_FILE" != "" ]; then
267         if [ -f $DEBUG_FILE ]; then               259         if [ -f $DEBUG_FILE ]; then
268                 echo "Debug file $DEBUG_FILE e    260                 echo "Debug file $DEBUG_FILE exists, bailing"
269                 exit                              261                 exit
270         fi                                        262         fi
271 else                                              263 else
272         DEBUG_FILE="/dev/null"                    264         DEBUG_FILE="/dev/null"
273 fi                                                265 fi
274                                                   266 
275 if [ "$COCCI" = "" ] ; then                       267 if [ "$COCCI" = "" ] ; then
276     for f in `find $srctree/scripts/coccinelle    268     for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
277         coccinelle $f                             269         coccinelle $f
278     done                                          270     done
279 else                                              271 else
280     coccinelle $COCCI                             272     coccinelle $COCCI
281 fi                                                273 fi
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php