Pull coccinelle updates from Michal Marek: "The misc branch is reserved for Coccinelle this time: - 'report' is the default mode - MAINTAINERS update for Coccinelle - documentation udate - use new option format for spatch(1) - J=<n> variable to mimic make -j for coccicheck - check for missing pci_free_consistent() calls There are some patches for rpm-pkg and deb-pkg waiting for the 3.12-rc1 merge window" * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: Coccinelle: Update information about the minimal version required Coccinelle: Update the options used to the new option scheme scripts: Coccinelle script for pci_free_consistent() Coccinelle: Update the documentation Coccinelle: Update section of MAINTAINERS coccicheck: span checks across CPUs scripts/coccinelle: check for field address argument to kfree Coccinelle: Update the Coccinelle section of MAINTAINERS Coccinelle: Make 'report' the default mode
Unified · Split
| @@ -6,15 +6,17 @@ Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr> · 5 unmodified lines | ||
| 6 | 6 | Getting Coccinelle |
| 7 | 7 | ~~~~~~~~~~~~~~~~~~~~ |
| 8 | 8 | |
| 9 | −The semantic patches included in the kernel use the 'virtual rule' | |
| 10 | −feature which was introduced in Coccinelle version 0.1.11. | |
| 9 | +The semantic patches included in the kernel use features and options | |
| 10 | +which are provided by Coccinelle version 1.0.0-rc11 and above. | |
| 11 | +Using earlier versions will fail as the option names used by | |
| 12 | +the Coccinelle files and coccicheck have been updated. | |
| 11 | 13 | |
| 12 | −Coccinelle (>=0.2.0) is available through the package manager | |
| 14 | +Coccinelle is available through the package manager | |
| 13 | 15 | of many distributions, e.g. : |
| 14 | 16 | |
| 15 | − - Debian (>=squeeze) | |
| 16 | − - Fedora (>=13) | |
| 17 | − - Ubuntu (>=10.04 Lucid Lynx) | |
| 17 | + - Debian | |
| 18 | + - Fedora | |
| 19 | + - Ubuntu | |
| 18 | 20 | - OpenSUSE |
| 19 | 21 | - Arch Linux |
| 20 | 22 | - NetBSD |
| @@ -36,11 +38,6 @@ as a regular user, and install it with · 15 unmodified lines | ||
| 36 | 38 | |
| 37 | 39 | sudo make install |
| 38 | 40 | |
| 39 | −The semantic patches in the kernel will work best with Coccinelle version | |
| 40 | −0.2.4 or later. Using earlier versions may incur some parse errors in the | |
| 41 | −semantic patch code, but any results that are obtained should still be | |
| 42 | −correct. | |
| 43 | − | |
| 44 | 41 | Using Coccinelle on the Linux kernel |
| 45 | 42 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 46 | 43 | |
| @@ -48,7 +45,7 @@ A Coccinelle-specific target is defined in the top level · 1 unmodified line | ||
| 48 | 45 | Makefile. This target is named 'coccicheck' and calls the 'coccicheck' |
| 49 | 46 | front-end in the 'scripts' directory. |
| 50 | 47 | |
| 51 | −Four modes are defined: patch, report, context, and org. The mode to | |
| 48 | +Four basic modes are defined: patch, report, context, and org. The mode to | |
| 52 | 49 | use is specified by setting the MODE variable with 'MODE=<mode>'. |
| 53 | 50 | |
| 54 | 51 | 'patch' proposes a fix, when possible. |
| @@ -62,18 +59,24 @@ diff-like style.Lines of interest are indicated with '-'. · 7 unmodified lines | ||
| 62 | 59 | 'org' generates a report in the Org mode format of Emacs. |
| 63 | 60 | |
| 64 | 61 | Note that not all semantic patches implement all modes. For easy use |
| 65 | −of Coccinelle, the default mode is "chain" which tries the previous | |
| 66 | −modes in the order above until one succeeds. | |
| 62 | +of Coccinelle, the default mode is "report". | |
| 63 | + | |
| 64 | +Two other modes provide some common combinations of these modes. | |
| 67 | 65 | |
| 68 | −To make a report for every semantic patch, run the following command: | |
| 66 | +'chain' tries the previous modes in the order above until one succeeds. | |
| 69 | 67 | |
| 70 | − make coccicheck MODE=report | |
| 68 | +'rep+ctxt' runs successively the report mode and the context mode. | |
| 69 | + It should be used with the C option (described later) | |
| 70 | + which checks the code on a file basis. | |
| 71 | 71 | |
| 72 | −NB: The 'report' mode is the default one. | |
| 72 | +Examples: | |
| 73 | + To make a report for every semantic patch, run the following command: | |
| 73 | 74 | |
| 74 | −To produce patches, run: | |
| 75 | + make coccicheck MODE=report | |
| 75 | 76 | |
| 76 | − make coccicheck MODE=patch | |
| 77 | + To produce patches, run: | |
| 78 | + | |
| 79 | + make coccicheck MODE=patch | |
| 77 | 80 | |
| 78 | 81 | |
| 79 | 82 | The coccicheck target applies every semantic patch available in the |
| @@ -91,6 +94,11 @@ To enable verbose messages set the V= variable, for example: · 11 unmodified lines | ||
| 91 | 94 | |
| 92 | 95 | make coccicheck MODE=report V=1 |
| 93 | 96 | |
| 97 | +By default, coccicheck tries to run as parallel as possible. To change | |
| 98 | +the parallelism, set the J= variable. For example, to run across 4 CPUs: | |
| 99 | + | |
| 100 | + make coccicheck MODE=report J=4 | |
| 101 | + | |
| 94 | 102 | |
| 95 | 103 | Using Coccinelle with a single semantic patch |
| 96 | 104 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| @@ -124,26 +132,33 @@ To check only newly edited code, use the value 2 for the C flag, i.e. · 27 unmodified lines | ||
| 124 | 132 | |
| 125 | 133 | make C=2 CHECK="scripts/coccicheck" |
| 126 | 134 | |
| 135 | +In these modes, which works on a file basis, there is no information | |
| 136 | +about semantic patches displayed, and no commit message proposed. | |
| 137 | + | |
| 127 | 138 | This runs every semantic patch in scripts/coccinelle by default. The |
| 128 | 139 | COCCI variable may additionally be used to only apply a single |
| 129 | 140 | semantic patch as shown in the previous section. |
| 130 | 141 | |
| 131 | −The "chain" mode is the default. You can select another one with the | |
| 142 | +The "report" mode is the default. You can select another one with the | |
| 132 | 143 | MODE variable explained above. |
| 133 | 144 | |
| 134 | −In this mode, there is no information about semantic patches | |
| 135 | −displayed, and no commit message proposed. | |
| 136 | − | |
| 137 | 145 | Additional flags |
| 138 | 146 | ~~~~~~~~~~~~~~~~~~ |
| 139 | 147 | |
| 140 | 148 | Additional flags can be passed to spatch through the SPFLAGS |
| 141 | 149 | variable. |
| 142 | 150 | |
| 143 | − make SPFLAGS=--use_glimpse coccicheck | |
| 151 | + make SPFLAGS=--use-glimpse coccicheck | |
| 152 | + make SPFLAGS=--use-idutils coccicheck | |
| 144 | 153 | |
| 145 | 154 | See spatch --help to learn more about spatch options. |
| 146 | 155 | |
| 156 | +Note that the '--use-glimpse' and '--use-idutils' options | |
| 157 | +require external tools for indexing the code. None of them is | |
| 158 | +thus active by default. However, by indexing the code with | |
| 159 | +one of these tools, and according to the cocci file used, | |
| 160 | +spatch could proceed the entire code base more quickly. | |
| 161 | + | |
| 147 | 162 | Proposing new semantic patches |
| 148 | 163 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 149 | 164 | |
| @@ -2135,9 +2135,12 @@ COCCINELLE/Semantic Patches (SmPL) · 2134 unmodified lines | ||
| 2135 | 2135 | M: Julia Lawall <Julia.Lawall@lip6.fr> |
| 2136 | 2136 | M: Gilles Muller <Gilles.Muller@lip6.fr> |
| 2137 | 2137 | M: Nicolas Palix <nicolas.palix@imag.fr> |
| 2138 | +M: Michal Marek <mmarek@suse.cz> | |
| 2138 | 2139 | L: cocci@systeme.lip6.fr (moderated for non-subscribers) |
| 2140 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git misc | |
| 2139 | 2141 | W: http://coccinelle.lip6.fr/ |
| 2140 | 2142 | S: Supported |
| 2143 | +F: Documentation/coccinelle.txt | |
| 2141 | 2144 | F: scripts/coccinelle/ |
| 2142 | 2145 | F: scripts/coccicheck |
| 2143 | 2146 | |
| @@ -1,17 +1,31 @@ | ||
| 1 | 1 | #!/bin/bash |
| 2 | 2 | |
| 3 | +# | |
| 4 | +# This script requires at least spatch | |
| 5 | +# version 1.0.0-rc11. | |
| 6 | +# | |
| 7 | + | |
| 3 | 8 | SPATCH="`which ${SPATCH:=spatch}`" |
| 4 | 9 | |
| 10 | +trap kill_running SIGTERM SIGINT | |
| 11 | +declare -a SPATCH_PID | |
| 12 | + | |
| 5 | 13 | # The verbosity may be set by the environmental parameter V= |
| 6 | 14 | # as for example with 'make V=1 coccicheck' |
| 7 | 15 | |
| 8 | 16 | if [ -n "$V" -a "$V" != "0" ]; then |
| 9 | − VERBOSE=1 | |
| 17 | + VERBOSE="$V" | |
| 10 | 18 | else |
| 11 | 19 | VERBOSE=0 |
| 12 | 20 | fi |
| 13 | 21 | |
| 14 | −FLAGS="$SPFLAGS -very_quiet" | |
| 22 | +if [ -z "$J" ]; then | |
| 23 | + NPROC=$(getconf _NPROCESSORS_ONLN) | |
| 24 | +else | |
| 25 | + NPROC="$J" | |
| 26 | +fi | |
| 27 | + | |
| 28 | +FLAGS="$SPFLAGS --very-quiet" | |
| 15 | 29 | |
| 16 | 30 | # spatch only allows include directories with the syntax "-I include" |
| 17 | 31 | # while gcc also allows "-Iinclude" and "-include include" |
| @@ -27,14 +41,14 @@ if [ "$C" = "1" -o "$C" = "2" ]; then · 9 unmodified lines | ||
| 27 | 41 | else |
| 28 | 42 | ONLINE=0 |
| 29 | 43 | if [ "$KBUILD_EXTMOD" = "" ] ; then |
| 30 | − OPTIONS="-dir $srctree $COCCIINCLUDE" | |
| 44 | + OPTIONS="--dir $srctree $COCCIINCLUDE" | |
| 31 | 45 | else |
| 32 | − OPTIONS="-dir $KBUILD_EXTMOD $COCCIINCLUDE" | |
| 46 | + OPTIONS="--dir $KBUILD_EXTMOD $COCCIINCLUDE" | |
| 33 | 47 | fi |
| 34 | 48 | fi |
| 35 | 49 | |
| 36 | 50 | if [ "$KBUILD_EXTMOD" != "" ] ; then |
| 37 | − OPTIONS="-patch $srctree $OPTIONS" | |
| 51 | + OPTIONS="--patch $srctree $OPTIONS" | |
| 38 | 52 | fi |
| 39 | 53 | |
| 40 | 54 | if [ ! -x "$SPATCH" ]; then |
| @@ -44,13 +58,21 @@ fi · 3 unmodified lines | ||
| 44 | 58 | |
| 45 | 59 | if [ "$MODE" = "" ] ; then |
| 46 | 60 | if [ "$ONLINE" = "0" ] ; then |
| 47 | − echo 'You have not explicitly specified the mode to use. Using default "chain" mode.' | |
| 48 | − echo 'All available modes will be tried (in that order): patch, report, context, org' | |
| 61 | + echo 'You have not explicitly specified the mode to use. Using default "report" mode.' | |
| 62 | + echo 'Available modes are the following: patch, report, context, org' | |
| 49 | 63 | echo 'You can specify the mode with "make coccicheck MODE=<mode>"' |
| 64 | + echo 'Note however that some modes are not implemented by some semantic patches.' | |
| 65 | + fi | |
| 66 | + MODE="report" | |
| 67 | +fi | |
| 68 | + | |
| 69 | +if [ "$MODE" = "chain" ] ; then | |
| 70 | + if [ "$ONLINE" = "0" ] ; then | |
| 71 | + echo 'You have selected the "chain" mode.' | |
| 72 | + echo 'All available modes will be tried (in that order): patch, report, context, org' | |
| 50 | 73 | fi |
| 51 | − MODE="chain" | |
| 52 | 74 | elif [ "$MODE" = "report" -o "$MODE" = "org" ] ; then |
| 53 | − FLAGS="$FLAGS -no_show_diff" | |
| 75 | + FLAGS="$FLAGS --no-show-diff" | |
| 54 | 76 | fi |
| 55 | 77 | |
| 56 | 78 | if [ "$ONLINE" = "0" ] ; then |
| @@ -61,19 +83,35 @@ if [ "$ONLINE" = "0" ] ; then · 4 unmodified lines | ||
| 61 | 83 | fi |
| 62 | 84 | |
| 63 | 85 | run_cmd() { |
| 86 | + local i | |
| 64 | 87 | if [ $VERBOSE -ne 0 ] ; then |
| 65 | − echo "Running: $@" | |
| 88 | + echo "Running ($NPROC in parallel): $@" | |
| 66 | 89 | fi |
| 67 | − eval $@ | |
| 90 | + for i in $(seq 0 $(( NPROC - 1)) ); do | |
| 91 | + eval "$@ --max $NPROC --index $i &" | |
| 92 | + SPATCH_PID[$i]=$! | |
| 93 | + if [ $VERBOSE -eq 2 ] ; then | |
| 94 | + echo "${SPATCH_PID[$i]} running" | |
| 95 | + fi | |
| 96 | + done | |
| 97 | + wait | |
| 68 | 98 | } |
| 69 | 99 | |
| 100 | +kill_running() { | |
| 101 | + for i in $(seq $(( NPROC - 1 )) ); do | |
| 102 | + if [ $VERBOSE -eq 2 ] ; then | |
| 103 | + echo "Killing ${SPATCH_PID[$i]}" | |
| 104 | + fi | |
| 105 | + kill ${SPATCH_PID[$i]} 2>/dev/null | |
| 106 | + done | |
| 107 | +} | |
| 70 | 108 | |
| 71 | 109 | coccinelle () { |
| 72 | 110 | COCCI="$1" |
| 73 | 111 | |
| 74 | 112 | OPT=`grep "Option" $COCCI | cut -d':' -f2` |
| 75 | 113 | |
| 76 | −# The option '-parse_cocci' can be used to syntactically check the SmPL files. | |
| 114 | +# The option '--parse-cocci' can be used to syntactically check the SmPL files. | |
| 77 | 115 | # |
| 78 | 116 | # $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null |
| 79 | 117 | |
| @@ -114,20 +152,20 @@ coccinelle () { · 34 unmodified lines | ||
| 114 | 152 | |
| 115 | 153 | if [ "$MODE" = "chain" ] ; then |
| 116 | 154 | run_cmd $SPATCH -D patch \ |
| 117 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS || \ | |
| 155 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS || \ | |
| 118 | 156 | run_cmd $SPATCH -D report \ |
| 119 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff || \ | |
| 157 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff || \ | |
| 120 | 158 | run_cmd $SPATCH -D context \ |
| 121 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS || \ | |
| 159 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS || \ | |
| 122 | 160 | run_cmd $SPATCH -D org \ |
| 123 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff || exit 1 | |
| 161 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff || exit 1 | |
| 124 | 162 | elif [ "$MODE" = "rep+ctxt" ] ; then |
| 125 | 163 | run_cmd $SPATCH -D report \ |
| 126 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff && \ | |
| 164 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS --no-show-diff && \ | |
| 127 | 165 | run_cmd $SPATCH -D context \ |
| 128 | − $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1 | |
| 166 | + $FLAGS --cocci-file $COCCI $OPT $OPTIONS || exit 1 | |
| 129 | 167 | else |
| 130 | − run_cmd $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1 | |
| 168 | + run_cmd $SPATCH -D $MODE $FLAGS --cocci-file $COCCI $OPT $OPTIONS || exit 1 | |
| 131 | 169 | fi |
| 132 | 170 | |
| 133 | 171 | } |
| @@ -5,7 +5,7 @@ · 4 unmodified lines | ||
| 5 | 5 | // Confidence: High |
| 6 | 6 | // Copyright: 2009,2010 Nicolas Palix, DIKU. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | −// Options: -no_includes -include_headers | |
| 8 | +// Options: --no-includes --include-headers | |
| 9 | 9 | // |
| 10 | 10 | // Keywords: kmalloc, kzalloc, kcalloc |
| 11 | 11 | // Version min: < 2.6.12 kmalloc |
| @@ -9,7 +9,7 @@ · 8 unmodified lines | ||
| 9 | 9 | // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. |
| 10 | 10 | // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 11 | 11 | // URL: http://coccinelle.lip6.fr/rules/kzalloc.html |
| 12 | −// Options: -no_includes -include_headers | |
| 12 | +// Options: --no-includes --include-headers | |
| 13 | 13 | // |
| 14 | 14 | // Keywords: kmalloc, kzalloc |
| 15 | 15 | // Version min: < 2.6.12 kmalloc |
| @@ -4,7 +4,7 @@ · 3 unmodified lines | ||
| 4 | 4 | // |
| 5 | 5 | // Confidence: Moderate |
| 6 | 6 | // URL: http://coccinelle.lip6.fr/ |
| 7 | −// Options: -include_headers | |
| 7 | +// Options: --include-headers | |
| 8 | 8 | |
| 9 | 9 | virtual context |
| 10 | 10 | virtual org |
| @@ -10,7 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2. |
| 11 | 11 | // URL: http://coccinelle.lip6.fr/ |
| 12 | 12 | // Comments: |
| 13 | −// Options: -no_includes -include_headers | |
| 13 | +// Options: --no-includes --include-headers | |
| 14 | 14 | |
| 15 | 15 | virtual patch |
| 16 | 16 | virtual org |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual patch |
| 12 | 12 | virtual context |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual patch |
| 12 | 12 | virtual context |
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 8 | 8 | // URL: http://coccinelle.lip6.fr/ |
| 9 | 9 | // Comments: |
| 10 | −// Options: -no_includes -include_headers | |
| 10 | +// Options: --no-includes --include-headers | |
| 11 | 11 | |
| 12 | 12 | virtual patch |
| 13 | 13 | virtual context |
| @@ -5,7 +5,7 @@ · 4 unmodified lines | ||
| 5 | 5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. |
| 6 | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | −// Options: -no_includes -include_headers | |
| 8 | +// Options: --no-includes --include-headers | |
| 9 | 9 | // |
| 10 | 10 | // Keywords: ERR_PTR, PTR_ERR, PTR_RET |
| 11 | 11 | // Version min: 2.6.39 |
| @@ -4,7 +4,7 @@ · 3 unmodified lines | ||
| 4 | 4 | /// |
| 5 | 5 | // Confidence: High |
| 6 | 6 | // Comments: |
| 7 | −// Options: -no_includes -include_headers | |
| 7 | +// Options: --no-includes --include-headers | |
| 8 | 8 | |
| 9 | 9 | virtual patch |
| 10 | 10 | virtual report |
| @@ -18,7 +18,7 @@ · 17 unmodified lines | ||
| 18 | 18 | // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2. |
| 19 | 19 | // URL: http://coccinelle.lip6.fr/ |
| 20 | 20 | // Comments: |
| 21 | −// Options: -no_includes -include_headers | |
| 21 | +// Options: --no-includes --include-headers | |
| 22 | 22 | |
| 23 | 23 | virtual org |
| 24 | 24 | virtual report |
| @@ -10,7 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 11 | 11 | // URL: http://coccinelle.lip6.fr/ |
| 12 | 12 | // Comments: |
| 13 | −// Options: -no_includes -include_headers | |
| 13 | +// Options: --no-includes --include-headers | |
| 14 | 14 | |
| 15 | 15 | virtual org |
| 16 | 16 | virtual report |
| @@ -0,0 +1,32 @@ | ||
| 1 | +/// Free of a structure field | |
| 2 | +/// | |
| 3 | +// Confidence: High | |
| 4 | +// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. | |
| 5 | +// URL: http://coccinelle.lip6.fr/ | |
| 6 | +// Comments: | |
| 7 | +// Options: --no-includes --include-headers | |
| 8 | + | |
| 9 | +virtual org | |
| 10 | +virtual report | |
| 11 | +virtual context | |
| 12 | + | |
| 13 | +@r depends on context || report || org @ | |
| 14 | +expression e; | |
| 15 | +identifier f; | |
| 16 | +position p; | |
| 17 | +@@ | |
| 18 | + | |
| 19 | +* kfree@p(&e->f) | |
| 20 | + | |
| 21 | +@script:python depends on org@ | |
| 22 | +p << r.p; | |
| 23 | +@@ | |
| 24 | + | |
| 25 | +cocci.print_main("kfree",p) | |
| 26 | + | |
| 27 | +@script:python depends on report@ | |
| 28 | +p << r.p; | |
| 29 | +@@ | |
| 30 | + | |
| 31 | +msg = "ERROR: kfree of structure field" | |
| 32 | +coccilib.report.print_report(p[0],msg) | |
| @@ -0,0 +1,52 @@ | ||
| 1 | +/// Find missing pci_free_consistent for every pci_alloc_consistent. | |
| 2 | +/// | |
| 3 | +// Confidence: Moderate | |
| 4 | +// Copyright: (C) 2013 Petr Strnad. GPLv2. | |
| 5 | +// URL: http://coccinelle.lip6.fr/ | |
| 6 | +// Keywords: pci_free_consistent, pci_alloc_consistent | |
| 7 | +// Options: --no-includes --include-headers | |
| 8 | + | |
| 9 | +virtual report | |
| 10 | +virtual org | |
| 11 | + | |
| 12 | +@search@ | |
| 13 | +local idexpression id; | |
| 14 | +expression x,y,z,e; | |
| 15 | +position p1,p2; | |
| 16 | +type T; | |
| 17 | +@@ | |
| 18 | + | |
| 19 | +id = pci_alloc_consistent@p1(x,y,&z) | |
| 20 | +... when != e = id | |
| 21 | +if (id == NULL || ...) { ... return ...; } | |
| 22 | +... when != pci_free_consistent(x,y,id,z) | |
| 23 | + when != if (id) { ... pci_free_consistent(x,y,id,z) ... } | |
| 24 | + when != if (y) { ... pci_free_consistent(x,y,id,z) ... } | |
| 25 | + when != e = (T)id | |
| 26 | + when exists | |
| 27 | +( | |
| 28 | +return 0; | |
| 29 | +| | |
| 30 | +return 1; | |
| 31 | +| | |
| 32 | +return id; | |
| 33 | +| | |
| 34 | +return@p2 ...; | |
| 35 | +) | |
| 36 | + | |
| 37 | +@script:python depends on report@ | |
| 38 | +p1 << search.p1; | |
| 39 | +p2 << search.p2; | |
| 40 | +@@ | |
| 41 | + | |
| 42 | +msg = "ERROR: missing pci_free_consistent; pci_alloc_consistent on line %s and return without freeing on line %s" % (p1[0].line,p2[0].line) | |
| 43 | +coccilib.report.print_report(p2[0],msg) | |
| 44 | + | |
| 45 | +@script:python depends on org@ | |
| 46 | +p1 << search.p1; | |
| 47 | +p2 << search.p2; | |
| 48 | +@@ | |
| 49 | + | |
| 50 | +msg = "ERROR: missing pci_free_consistent; pci_alloc_consistent on line %s and return without freeing on line %s" % (p1[0].line,p2[0].line) | |
| 51 | +cocci.print_main(msg,p1) | |
| 52 | +cocci.print_secs("",p2) | |
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 8 | 8 | // URL: http://coccinelle.lip6.fr/ |
| 9 | 9 | // Comments: |
| 10 | −// Options: -no_includes -include_headers | |
| 10 | +// Options: --no-includes --include-headers | |
| 11 | 11 | |
| 12 | 12 | virtual patch |
| 13 | 13 | virtual context |
| @@ -11,7 +11,7 @@ · 10 unmodified lines | ||
| 11 | 11 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 12 | 12 | // URL: http://coccinelle.lip6.fr/ |
| 13 | 13 | // Comments: |
| 14 | −// Options: -no_includes -include_headers | |
| 14 | +// Options: --no-includes --include-headers | |
| 15 | 15 | |
| 16 | 16 | virtual patch |
| 17 | 17 | virtual context |
| @@ -9,7 +9,7 @@ · 8 unmodified lines | ||
| 9 | 9 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 10 | 10 | // URL: http://coccinelle.lip6.fr/ |
| 11 | 11 | // Comments: |
| 12 | −// Options: -no_includes -include_headers | |
| 12 | +// Options: --no-includes --include-headers | |
| 13 | 13 | |
| 14 | 14 | virtual context |
| 15 | 15 | virtual org |
| @@ -11,7 +11,7 @@ · 10 unmodified lines | ||
| 11 | 11 | // Copyright: (C) 2012 Gilles Muller, INRIA/LIP6. GPLv2. |
| 12 | 12 | // URL: http://coccinelle.lip6.fr/ |
| 13 | 13 | // Comments: |
| 14 | −// Options: -no_includes -include_headers | |
| 14 | +// Options: --no-includes --include-headers | |
| 15 | 15 | |
| 16 | 16 | virtual context |
| 17 | 17 | virtual org |
| @@ -9,7 +9,7 @@ · 8 unmodified lines | ||
| 9 | 9 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 10 | 10 | // URL: http://coccinelle.lip6.fr/ |
| 11 | 11 | // Comments: |
| 12 | −// Options: -no_includes -include_headers | |
| 12 | +// Options: --no-includes --include-headers | |
| 13 | 13 | |
| 14 | 14 | virtual patch |
| 15 | 15 | virtual context |
| @@ -8,7 +8,7 @@ · 7 unmodified lines | ||
| 8 | 8 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 9 | 9 | // URL: http://coccinelle.lip6.fr/ |
| 10 | 10 | // Comments: |
| 11 | −// Options: -no_includes -include_headers | |
| 11 | +// Options: --no-includes --include-headers | |
| 12 | 12 | |
| 13 | 13 | virtual org |
| 14 | 14 | virtual report |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual context |
| 12 | 12 | virtual org |
| @@ -11,7 +11,7 @@ · 10 unmodified lines | ||
| 11 | 11 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 12 | 12 | // URL: http://coccinelle.lip6.fr/ |
| 13 | 13 | // Comments: |
| 14 | −// Options: -no_includes -include_headers | |
| 14 | +// Options: --no-includes --include-headers | |
| 15 | 15 | |
| 16 | 16 | virtual context |
| 17 | 17 | virtual org |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. |
| 7 | 7 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 8 | 8 | // URL: http://coccinelle.lip6.fr/ |
| 9 | −// Options: -include_headers | |
| 9 | +// Options: --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual patch |
| 12 | 12 | virtual context |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual org |
| 12 | 12 | virtual report |
| @@ -8,7 +8,7 @@ · 7 unmodified lines | ||
| 8 | 8 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 9 | 9 | // URL: http://coccinelle.lip6.fr/ |
| 10 | 10 | // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise |
| 11 | −// Options: -no_includes -include_headers | |
| 11 | +// Options: --no-includes --include-headers | |
| 12 | 12 | |
| 13 | 13 | virtual org |
| 14 | 14 | virtual report |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual org |
| 12 | 12 | virtual report |
| @@ -13,7 +13,7 @@ · 12 unmodified lines | ||
| 13 | 13 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 14 | 14 | // URL: http://coccinelle.lip6.fr/ |
| 15 | 15 | // Comments: |
| 16 | −// Options: -no_includes -include_headers | |
| 16 | +// Options: --no-includes --include-headers | |
| 17 | 17 | |
| 18 | 18 | virtual org |
| 19 | 19 | virtual report |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual org |
| 12 | 12 | virtual report |
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | // Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2. |
| 8 | 8 | // URL: http://coccinelle.lip6.fr/ |
| 9 | 9 | // Comments: |
| 10 | −// Options: -no_includes -include_headers | |
| 10 | +// Options: --no-includes --include-headers | |
| 11 | 11 | |
| 12 | 12 | virtual org |
| 13 | 13 | virtual report |
| @@ -5,7 +5,7 @@ · 4 unmodified lines | ||
| 5 | 5 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 6 | 6 | // URL: http://coccinelle.lip6.fr/ |
| 7 | 7 | // Comments: |
| 8 | −// Options: -no_includes -include_headers | |
| 8 | +// Options: --no-includes --include-headers | |
| 9 | 9 | |
| 10 | 10 | virtual patch |
| 11 | 11 | virtual context |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
| 7 | 7 | // URL: http://coccinelle.lip6.fr/ |
| 8 | 8 | // Comments: |
| 9 | −// Options: -no_includes -include_headers | |
| 9 | +// Options: --no-includes --include-headers | |
| 10 | 10 | |
| 11 | 11 | virtual patch |
| 12 | 12 | virtual context |
| @@ -10,7 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 11 | 11 | // URL: http://coccinelle.lip6.fr/ |
| 12 | 12 | // Comments: |
| 13 | −// Options: -no_includes -include_headers | |
| 13 | +// Options: --no-includes --include-headers | |
| 14 | 14 | |
| 15 | 15 | virtual context |
| 16 | 16 | virtual org |
| @@ -10,7 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 11 | 11 | // URL: http://coccinelle.lip6.fr/ |
| 12 | 12 | // Comments: |
| 13 | −// Options: -no_includes -include_headers | |
| 13 | +// Options: --no-includes --include-headers | |
| 14 | 14 | |
| 15 | 15 | virtual context |
| 16 | 16 | virtual org |
| @@ -8,7 +8,7 @@ · 7 unmodified lines | ||
| 8 | 8 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. |
| 9 | 9 | // URL: http://coccinelle.lip6.fr/ |
| 10 | 10 | // Comments: |
| 11 | −// Options: -no_includes -include_headers | |
| 11 | +// Options: --no-includes --include-headers | |
| 12 | 12 | |
| 13 | 13 | virtual context |
| 14 | 14 | virtual org |
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | // Copyright: (C) 2012 Gilles Muller, INRIA. GPLv2. |
| 8 | 8 | // URL: http://coccinelle.lip6.fr/ |
| 9 | 9 | // Comments: |
| 10 | −// Options: -no_includes -include_headers | |
| 10 | +// Options: --no-includes --include-headers | |
| 11 | 11 | |
| 12 | 12 | virtual patch |
| 13 | 13 | virtual context |