sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/dev-tools/coccinellemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h-Copyright 2010 Nicolas Palix h]h-Copyright 2010 Nicolas Palix }hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/dev-tools/coccinelle.rsthKubh)}(h+Copyright 2010 Julia Lawall h]h+Copyright 2010 Julia Lawall }hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh)}(h4Copyright 2010 Gilles Muller h]h4Copyright 2010 Gilles Muller }hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh highlightlang)}(hhh]h}(h]h ]h"]h$]h&]langnoneforcelinenothresholduh1hhhhhhhhKubhtarget)}(h.. _devtools_coccinelle:h]h}(h]h ]h"]h$]h&]refiddevtools-coccinelleuh1hhKhhhhhhubhsection)}(hhh](htitle)}(h Coccinelleh]h Coccinelle}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh paragraph)}(hCoccinelle is a tool for pattern matching and text transformation that has many uses in kernel development, including the application of complex, tree-wide patches and detection of problematic programming patterns.h]hCoccinelle is a tool for pattern matching and text transformation that has many uses in kernel development, including the application of complex, tree-wide patches and detection of problematic programming patterns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK hhhhubh)}(hhh](h)}(hGetting Coccinelleh]hGetting Coccinelle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hThe semantic patches included in the kernel use features and options which are provided by Coccinelle version 1.0.0-rc11 and above. Using earlier versions will fail as the option names used by the Coccinelle files and coccicheck have been updated.h]hThe semantic patches included in the kernel use features and options which are provided by Coccinelle version 1.0.0-rc11 and above. Using earlier versions will fail as the option names used by the Coccinelle files and coccicheck have been updated.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hQCoccinelle is available through the package manager of many distributions, e.g. :h]hQCoccinelle is available through the package manager of many distributions, e.g. :}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh block_quote)}(hF- Debian - Fedora - Ubuntu - OpenSUSE - Arch Linux - NetBSD - FreeBSD h]h bullet_list)}(hhh](h list_item)}(hDebianh]j)}(hjNh]hDebian}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjLubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(hFedorah]j)}(hjeh]hFedora}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjcubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(hUbuntuh]j)}(hj|h]hUbuntu}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjzubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(hOpenSUSEh]j)}(hjh]hOpenSUSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(h Arch Linuxh]j)}(hjh]h Arch Linux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(hNetBSDh]j)}(hjh]hNetBSD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK hjubah}(h]h ]h"]h$]h&]uh1jJhjGubjK)}(hFreeBSD h]j)}(hFreeBSDh]hFreeBSD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK!hjubah}(h]h ]h"]h$]h&]uh1jJhjGubeh}(h]h ]h"]h$]h&]bullet-uh1jEhhhKhjAubah}(h]h ]h"]h$]h&]uh1j?hhhKhjhhubj)}(hSome distribution packages are obsolete and it is recommended to use the latest version released from the Coccinelle homepage at http://coccinelle.lip6.fr/h](hSome distribution packages are obsolete and it is recommended to use the latest version released from the Coccinelle homepage at }(hjhhhNhNubh reference)}(hhttp://coccinelle.lip6.fr/h]hhttp://coccinelle.lip6.fr/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK#hjhhubj)}(hOr from Github at:h]hOr from Github at:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK'hjhhubj)}(h(https://github.com/coccinelle/coccinelleh]j)}(hj+h]h(https://github.com/coccinelle/coccinelle}(hj-hhhNhNubah}(h]h ]h"]h$]h&]refurij+uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhhhK)hjhhubj)}(h.Once you have it, run the following commands::h]h-Once you have it, run the following commands:}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK+hjhhubh literal_block)}(h./autogen ./configure makeh]h./autogen ./configure make}hjQsbah}(h]h ]h"]h$]h&]hhuh1jOhhhK-hjhhubj)}(h(as a regular user, and install it with::h]h'as a regular user, and install it with:}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK1hjhhubjP)}(hsudo make installh]hsudo make install}hjmsbah}(h]h ]h"]h$]h&]hhuh1jOhhhK3hjhhubj)}(hMMore detailed installation instructions to build from source can be found at:h]hMMore detailed installation instructions to build from source can be found at:}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK5hjhhubj)}(h@https://github.com/coccinelle/coccinelle/blob/master/install.txth]j)}(hjh]h@https://github.com/coccinelle/coccinelle/blob/master/install.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK8hjhhubeh}(h]getting-coccinelleah ]h"]getting coccinelleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSupplemental documentationh]hSupplemental documentation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK;ubj)}(h1For supplemental documentation refer to the wiki:h]h1For supplemental documentation refer to the wiki:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK=hjhhubj)}(h*https://bottest.wiki.kernel.org/coccicheckh]j)}(hjh]h*https://bottest.wiki.kernel.org/coccicheck}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK?hjhhubj)}(hMThe wiki documentation always refers to the linux-next version of the script.h]hMThe wiki documentation always refers to the linux-next version of the script.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKAhjhhubj)}(hAFor Semantic Patch Language(SmPL) grammar documentation refer to:h]hAFor Semantic Patch Language(SmPL) grammar documentation refer to:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKChjhhubj)}(hFhttps://coccinelle.gitlabpages.inria.fr/website/docs/main_grammar.htmlh]j)}(hjh]hFhttps://coccinelle.gitlabpages.inria.fr/website/docs/main_grammar.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKEhjhhubeh}(h]supplemental-documentationah ]h"]supplemental documentationah$]h&]uh1hhhhhhhhK;ubh)}(hhh](h)}(h$Using Coccinelle on the Linux kernelh]h$Using Coccinelle on the Linux kernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKHubj)}(hA Coccinelle-specific target is defined in the top level Makefile. This target is named ``coccicheck`` and calls the ``coccicheck`` front-end in the ``scripts`` directory.h](hXA Coccinelle-specific target is defined in the top level Makefile. This target is named }(hj-hhhNhNubhliteral)}(h``coccicheck``h]h coccicheck}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ubh and calls the }(hj-hhhNhNubj6)}(h``coccicheck``h]h coccicheck}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ubh front-end in the }(hj-hhhNhNubj6)}(h ``scripts``h]hscripts}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ubh directory.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKJhjhhubj)}(hFour basic modes are defined: ``patch``, ``report``, ``context``, and ``org``. The mode to use is specified by setting the MODE variable with ``MODE=``.h](hFour basic modes are defined: }(hjshhhNhNubj6)}(h ``patch``h]hpatch}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjsubh, }(hjshhhNhNubj6)}(h ``report``h]hreport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjsubh, }hjssbj6)}(h ``context``h]hcontext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjsubh, and }(hjshhhNhNubj6)}(h``org``h]horg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjsubhA. The mode to use is specified by setting the MODE variable with }(hjshhhNhNubj6)}(h``MODE=``h]h MODE=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKNhjhhubjF)}(hhh](jK)}(h)``patch`` proposes a fix, when possible. h]j)}(h(``patch`` proposes a fix, when possible.h](j6)}(h ``patch``h]hpatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh proposes a fix, when possible.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKRhjubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubjK)}(hV``report`` generates a list in the following format: file:line:column-column: message h]j)}(hU``report`` generates a list in the following format: file:line:column-column: messageh](j6)}(h ``report``h]hreport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh+ generates a list in the following format: }(hjhhhNhNubj)}(hfile:line:column-columnh]hfile:line:column-column}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurij uh1jhjubh : message}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKThjubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubjK)}(h}``context`` highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with ``-``. h]j)}(h|``context`` highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with ``-``.h](j6)}(h ``context``h]hcontext}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAubhk highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with }(hjAhhhNhNubj6)}(h``-``h]h-}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKWhj=ubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubjK)}(h<``org`` generates a report in the Org mode format of Emacs. h]j)}(h;``org`` generates a report in the Org mode format of Emacs.h](j6)}(h``org``h]horg}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyubh4 generates a report in the Org mode format of Emacs.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKZhjuubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jEhhhKRhjhhubj)}(hqNote that not all semantic patches implement all modes. For easy use of Coccinelle, the default mode is "report".h]huNote that not all semantic patches implement all modes. For easy use of Coccinelle, the default mode is “report”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK\hjhhubj)}(h@Two other modes provide some common combinations of these modes.h]h@Two other modes provide some common combinations of these modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK_hjhhubjF)}(hhh](jK)}(hJ``chain`` tries the previous modes in the order above until one succeeds. h]j)}(hI``chain`` tries the previous modes in the order above until one succeeds.h](j6)}(h ``chain``h]hchain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh@ tries the previous modes in the order above until one succeeds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKahjubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubjK)}(h``rep+ctxt`` runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis. h]j)}(h``rep+ctxt`` runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis.h](j6)}(h ``rep+ctxt``h]hrep+ctxt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKchjubah}(h]h ]h"]h$]h&]uh1jJhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jEhhhKahjhhubh)}(hhh](h)}(hExamplesh]hExamples}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKhubj)}(hFTo make a report for every semantic patch, run the following command::h]hETo make a report for every semantic patch, run the following command:}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKjhjhhubjP)}(hmake coccicheck MODE=reporth]hmake coccicheck MODE=report}hj1sbah}(h]h ]h"]h$]h&]hhuh1jOhhhKlhjhhubj)}(hTo produce patches, run::h]hTo produce patches, run:}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKnhjhhubjP)}(hmake coccicheck MODE=patchh]hmake coccicheck MODE=patch}hjMsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKphjhhubj)}(hThe coccicheck target applies every semantic patch available in the sub-directories of ``scripts/coccinelle`` to the entire Linux kernel.h](hWThe coccicheck target applies every semantic patch available in the sub-directories of }(hj[hhhNhNubj6)}(h``scripts/coccinelle``h]hscripts/coccinelle}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[ubh to the entire Linux kernel.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKshjhhubj)}(hFor each semantic patch, a commit message is proposed. It gives a description of the problem being checked by the semantic patch, and includes a reference to Coccinelle.h]hFor each semantic patch, a commit message is proposed. It gives a description of the problem being checked by the semantic patch, and includes a reference to Coccinelle.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKvhjhhubj)}(hAs with any static code analyzer, Coccinelle produces false positives. Thus, reports must be carefully checked, and patches reviewed.h]hAs with any static code analyzer, Coccinelle produces false positives. Thus, reports must be carefully checked, and patches reviewed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKzhjhhubj)}(h=To enable verbose messages set the V= variable, for example::h]h MODE=patchh]h.make coccicheck COCCI= MODE=patch}hjssbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjFhhubj)}(hor::h]hor:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjFhhubjP)}(h/make coccicheck COCCI= MODE=reporth]h/make coccicheck COCCI= MODE=report}hjsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjFhhubeh}(h]-using-coccinelle-with-a-single-semantic-patchah ]h"]-using coccinelle with a single semantic patchah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h3Controlling Which Files are Processed by Coccinelleh]h3Controlling Which Files are Processed by Coccinelle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(h4By default the entire kernel source tree is checked.h]h4By default the entire kernel source tree is checked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h|To apply Coccinelle to a specific directory, ``M=`` can be used. For example, to check drivers/net/wireless/ one may write::h](h-To apply Coccinelle to a specific directory, }(hjhhhNhNubj6)}(h``M=``h]hM=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubhH can be used. For example, to check drivers/net/wireless/ one may write:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubjP)}(h'make coccicheck M=drivers/net/wireless/h]h'make coccicheck M=drivers/net/wireless/}hjsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjhhubj)}(hTo apply Coccinelle on a file basis, instead of a directory basis, the C variable is used by the makefile to select which files to work with. This variable can be used to run scripts for the entire kernel, a specific directory, or for a single file.h]hTo apply Coccinelle on a file basis, instead of a directory basis, the C variable is used by the makefile to select which files to work with. This variable can be used to run scripts for the entire kernel, a specific directory, or for a single file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hFor example, to check drivers/bluetooth/bfusb.c, the value 1 is passed to the C variable to check files that make considers need to be compiled.::h]hFor example, to check drivers/bluetooth/bfusb.c, the value 1 is passed to the C variable to check files that make considers need to be compiled.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubjP)}(h;make C=1 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.oh]h;make C=1 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.o}hjsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjhhubj)}(hoThe value 2 is passed to the C variable to check files regardless of whether they need to be compiled or not.::h]hnThe value 2 is passed to the C variable to check files regardless of whether they need to be compiled or not.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubjP)}(h;make C=2 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.oh]h;make C=2 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.o}hj*sbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjhhubj)}(hIn these modes, which work on a file basis, there is no information about semantic patches displayed, and no commit message proposed.h]hIn these modes, which work on a file basis, there is no information about semantic patches displayed, and no commit message proposed.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hThis runs every semantic patch in scripts/coccinelle by default. The COCCI variable may additionally be used to only apply a single semantic patch as shown in the previous section.h]hThis runs every semantic patch in scripts/coccinelle by default. The COCCI variable may additionally be used to only apply a single semantic patch as shown in the previous section.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hdThe "report" mode is the default. You can select another one with the MODE variable explained above.h]hhThe “report” mode is the default. You can select another one with the MODE variable explained above.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]3controlling-which-files-are-processed-by-coccinelleah ]h"]3controlling which files are processed by coccinelleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h!Debugging Coccinelle SmPL patchesh]h!Debugging Coccinelle SmPL patches}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhhhhhKubj)}(hUsing coccicheck is best as it provides in the spatch command line include options matching the options used when we compile the kernel. You can learn what these options are by using V=1; you could then manually run Coccinelle with debug options added.h]hUsing coccicheck is best as it provides in the spatch command line include options matching the options used when we compile the kernel. You can learn what these options are by using V=1; you could then manually run Coccinelle with debug options added.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubj)}(hXAlternatively you can debug running Coccinelle against SmPL patches by asking for stderr to be redirected to stderr. By default stderr is redirected to /dev/null; if you'd like to capture stderr you can specify the ``DEBUG_FILE="file.txt"`` option to coccicheck. For instance::h](hAlternatively you can debug running Coccinelle against SmPL patches by asking for stderr to be redirected to stderr. By default stderr is redirected to /dev/null; if you’d like to capture stderr you can specify the }(hjhhhNhNubj6)}(h``DEBUG_FILE="file.txt"``h]hDEBUG_FILE="file.txt"}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh$ option to coccicheck. For instance:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubjP)}(hxrm -f cocci.err make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err cat cocci.errh]hxrm -f cocci.err make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err cat cocci.err}hjsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjjhhubj)}(hYou can use SPFLAGS to add debugging flags; for instance you may want to add both ``--profile --show-trying`` to SPFLAGS when debugging. For example you may want to use::h](hRYou can use SPFLAGS to add debugging flags; for instance you may want to add both }(hjhhhNhNubj6)}(h``--profile --show-trying``h]h--profile --show-trying}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh< to SPFLAGS when debugging. For example you may want to use:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubjP)}(hrm -f err.log export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci make coccicheck DEBUG_FILE="err.log" MODE=report SPFLAGS="--profile --show-trying" M=./drivers/mfdh]hrm -f err.log export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci make coccicheck DEBUG_FILE="err.log" MODE=report SPFLAGS="--profile --show-trying" M=./drivers/mfd}hjsbah}(h]h ]h"]h$]h&]hhuh1jOhhhKhjjhhubj)}(herr.log will now have the profiling information, while stdout will provide some progress information as Coccinelle moves forward with work.h]herr.log will now have the profiling information, while stdout will provide some progress information as Coccinelle moves forward with work.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubj)}(hNOTE:h]hNOTE:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubj)}(hDDEBUG_FILE support is only supported when using coccinelle >= 1.0.2.h]hDDEBUG_FILE support is only supported when using coccinelle >= 1.0.2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubj)}(hCurrently, DEBUG_FILE support is only available to check folders, and not single files. This is because checking a single file requires spatch to be called twice leading to DEBUG_FILE being set both times to the same value, giving rise to an error.h]hCurrently, DEBUG_FILE support is only available to check folders, and not single files. This is because checking a single file requires spatch to be called twice leading to DEBUG_FILE being set both times to the same value, giving rise to an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjjhhubeh}(h]!debugging-coccinelle-smpl-patchesah ]h"]!debugging coccinelle smpl patchesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h.cocciconfig supporth]h.cocciconfig support}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hhhhhKubj)}(hCoccinelle supports reading .cocciconfig for default Coccinelle options that should be used every time spatch is spawned. The order of precedence for variables for .cocciconfig is as follows:h]hCoccinelle supports reading .cocciconfig for default Coccinelle options that should be used every time spatch is spawned. The order of precedence for variables for .cocciconfig is as follows:}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj%hhubjF)}(hhh](jK)}(h5Your current user's home directory is processed firsth]j)}(hjIh]h7Your current user’s home directory is processed first}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjGubah}(h]h ]h"]h$]h&]uh1jJhjDhhhhhNubjK)}(h= 1.0.6. When no ID file is specified coccinelle assumes your ID database file is in the file .id-utils.index on the top level of the kernel. Coccinelle carries a script scripts/idutils_index.sh which creates the database with::h]hX Coccinelle supports idutils as well but requires coccinelle >= 1.0.6. When no ID file is specified coccinelle assumes your ID database file is in the file .id-utils.index on the top level of the kernel. Coccinelle carries a script scripts/idutils_index.sh which creates the database with:}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM)hj= hhubjP)}(h"mkid -i C --output .id-utils.indexh]h"mkid -i C --output .id-utils.index}hjx sbah}(h]h ]h"]h$]h&]hhuh1jOhhhM.hj= hhubj)}(hRIf you have another database filename you can also just symlink with this name. ::h]hOIf you have another database filename you can also just symlink with this name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM0hj= hhubjP)}(h%make SPFLAGS=--use-idutils coccicheckh]h%make SPFLAGS=--use-idutils coccicheck}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhM3hj= hhubj)}(hNAlternatively you can specify the database filename explicitly, for instance::h]hMAlternatively you can specify the database filename explicitly, for instance:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj= hhubjP)}(h8make SPFLAGS="--use-idutils /full-path/to/ID" coccicheckh]h8make SPFLAGS="--use-idutils /full-path/to/ID" coccicheck}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhM8hj= hhubj)}(h9See ``spatch --help`` to learn more about spatch options.h](hSee }(hj hhhNhNubj6)}(h``spatch --help``h]h spatch --help}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh$ to learn more about spatch options.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM:hj= hhubj)}(hX(Note that the ``--use-glimpse`` and ``--use-idutils`` options require external tools for indexing the code. None of them is thus active by default. However, by indexing the code with one of these tools, and according to the cocci file used, spatch could proceed the entire code base more quickly.h](hNote that the }(hj hhhNhNubj6)}(h``--use-glimpse``h]h --use-glimpse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh and }(hj hhhNhNubj6)}(h``--use-idutils``h]h --use-idutils}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh options require external tools for indexing the code. None of them is thus active by default. However, by indexing the code with one of these tools, and according to the cocci file used, spatch could proceed the entire code base more quickly.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM<hj= hhubeh}(h]additional-flagsah ]h"]additional flagsah$]h&]uh1hhhhhhhhM!ubh)}(hhh](h)}(hSmPL patch specific optionsh]hSmPL patch specific options}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMCubj)}(hSmPL patches can have their own requirements for options passed to Coccinelle. SmPL patch-specific options can be provided by providing them at the top of the SmPL patch, for instance::h]hSmPL patches can have their own requirements for options passed to Coccinelle. SmPL patch-specific options can be provided by providing them at the top of the SmPL patch, for instance:}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhj hhubjP)}(h+// Options: --no-includes --include-headersh]h+// Options: --no-includes --include-headers}hj7 sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMIhj hhubeh}(h]smpl-patch-specific-optionsah ]h"]smpl patch specific optionsah$]h&]uh1hhhhhhhhMCubh)}(hhh](h)}(h"SmPL patch Coccinelle requirementsh]h"SmPL patch Coccinelle requirements}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hhhhhMLubj)}(hXAs Coccinelle features get added some more advanced SmPL patches may require newer versions of Coccinelle. If an SmPL patch requires a minimum version of Coccinelle, this can be specified as follows, as an example if requiring at least Coccinelle >= 1.0.5::h]hXAs Coccinelle features get added some more advanced SmPL patches may require newer versions of Coccinelle. If an SmPL patch requires a minimum version of Coccinelle, this can be specified as follows, as an example if requiring at least Coccinelle >= 1.0.5:}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMNhjM hhubjP)}(h// Requires: 1.0.5h]h// Requires: 1.0.5}hjl sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMShjM hhubeh}(h]"smpl-patch-coccinelle-requirementsah ]h"]"smpl patch coccinelle requirementsah$]h&]uh1hhhhhhhhMLubh)}(hhh](h)}(hProposing new semantic patchesh]hProposing new semantic patches}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMVubj)}(hNew semantic patches can be proposed and submitted by kernel developers. For sake of clarity, they should be organized in the sub-directories of ``scripts/coccinelle/``.h](hNew semantic patches can be proposed and submitted by kernel developers. For sake of clarity, they should be organized in the sub-directories of }(hj hhhNhNubj6)}(h``scripts/coccinelle/``h]hscripts/coccinelle/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMXhj hhubeh}(h]proposing-new-semantic-patchesah ]h"]proposing new semantic patchesah$]h&]uh1hhhhhhhhMVubh)}(hhh](h)}(h+Detailed description of the ``report`` modeh](hDetailed description of the }(hj hhhNhNubj6)}(h ``report``h]hreport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh mode}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hhhhhM^ubj)}(h5``report`` generates a list in the following format::h](j6)}(h ``report``h]hreport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh* generates a list in the following format:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM`hj hhubjP)}(h file:line:column-column: messageh]h file:line:column-column: message}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMbhj hhubh)}(hhh](h)}(hExampleh]hExample}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMeubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMghj hhubjP)}(hGmake coccicheck MODE=report COCCI=scripts/coccinelle/api/err_cast.coccih]hGmake coccicheck MODE=report COCCI=scripts/coccinelle/api/err_cast.cocci}hj' sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMihj hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMkhj hhubjP)}(hX @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on report@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) coccilib.report.print_report(p[0], msg) h]hX @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on report@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) coccilib.report.print_report(p[0], msg) }hjC sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMmhj hhubj)}(hRThis SmPL excerpt generates entries on the standard output, as illustrated below::h]hQThis SmPL excerpt generates entries on the standard output, as illustrated below:}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM~hj hhubjP)}(h/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg /home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth /home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with algh]h/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg /home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth /home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg}hj_ sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubeh}(h]exampleah ]h"]h$]exampleah&]uh1hhj hhhhhMe referencedKubeh}(h]'detailed-description-of-the-report-modeah ]h"]'detailed description of the report modeah$]h&]uh1hhhhhhhhM^ubh)}(hhh](h)}(h*Detailed description of the ``patch`` modeh](hDetailed description of the }(hj hhhNhNubj6)}(h ``patch``h]hpatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubh mode}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~ hhhhhMubj)}(hTWhen the ``patch`` mode is available, it proposes a fix for each problem identified.h](h When the }(hj hhhNhNubj6)}(h ``patch``h]hpatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ubhB mode is available, it proposes a fix for each problem identified.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj~ hhubh)}(hhh](h)}(hExampleh]hExample}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hFmake coccicheck MODE=patch COCCI=scripts/coccinelle/api/err_cast.coccih]hFmake coccicheck MODE=patch COCCI=scripts/coccinelle/api/err_cast.cocci}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hx @ depends on !context && patch && !org && !report @ expression x; @@ - ERR_PTR(PTR_ERR(x)) + ERR_CAST(x) h]hx @ depends on !context && patch && !org && !report @ expression x; @@ - ERR_PTR(PTR_ERR(x)) + ERR_CAST(x) }hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubj)}(hVThis SmPL excerpt generates patch hunks on the standard output, as illustrated below::h]hUThis SmPL excerpt generates patch hunks on the standard output, as illustrated below:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hXdiff -u -p a/crypto/ctr.c b/crypto/ctr.c --- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200 @@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); + return ERR_CAST(alg); /* Block size must be >= 4 bytes. */ err = -EINVAL;h]hXdiff -u -p a/crypto/ctr.c b/crypto/ctr.c --- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200 @@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); + return ERR_CAST(alg); /* Block size must be >= 4 bytes. */ err = -EINVAL;}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubeh}(h]id1ah ]h"]h$]js ah&]uh1hhj~ hhhhhMju Kubeh}(h]&detailed-description-of-the-patch-modeah ]h"]&detailed description of the patch modeah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h,Detailed description of the ``context`` modeh](hDetailed description of the }(hj8 hhhNhNubj6)}(h ``context``h]hcontext}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8 ubh mode}(hj8 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5 hhhhhMubj)}(hP``context`` highlights lines of interest and their context in a diff-like style.h](j6)}(h ``context``h]hcontext}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX ubhE highlights lines of interest and their context in a diff-like style.}(hjX hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj5 hhubj@)}(hX#**NOTE**: The diff-like output generated is NOT an applicable patch. The intent of the ``context`` mode is to highlight the important lines (annotated with minus, ``-``) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code. h]j)}(hX"**NOTE**: The diff-like output generated is NOT an applicable patch. The intent of the ``context`` mode is to highlight the important lines (annotated with minus, ``-``) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code.h](hstrong)}(h**NOTE**h]hNOTE}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1j| hjx ubhO: The diff-like output generated is NOT an applicable patch. The intent of the }(hjx hhhNhNubj6)}(h ``context``h]hcontext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjx ubhA mode is to highlight the important lines (annotated with minus, }(hjx hhhNhNubj6)}(h``-``h]h-}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjx ubhz) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code.}(hjx hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjt ubah}(h]h ]h"]h$]h&]uh1j?hhhMhj5 hhubh)}(hhh](h)}(hExampleh]hExample}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hHmake coccicheck MODE=context COCCI=scripts/coccinelle/api/err_cast.coccih]hHmake coccicheck MODE=context COCCI=scripts/coccinelle/api/err_cast.cocci}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hi @ depends on context && !patch && !org && !report@ expression x; @@ * ERR_PTR(PTR_ERR(x)) h]hi @ depends on context && !patch && !org && !report@ expression x; @@ * ERR_PTR(PTR_ERR(x)) }hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubj)}(hUThis SmPL excerpt generates diff hunks on the standard output, as illustrated below::h]hTThis SmPL excerpt generates diff hunks on the standard output, as illustrated below:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjP)}(hXdiff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing --- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ /tmp/nothing @@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); /* Block size must be >= 4 bytes. */ err = -EINVAL;h]hXdiff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing --- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ /tmp/nothing @@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); /* Block size must be >= 4 bytes. */ err = -EINVAL;}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhj hhubeh}(h]id2ah ]h"]h$]exampleah&]uh1hhj5 hhhhhMju Kubeh}(h](detailed-description-of-the-context-modeah ]h"](detailed description of the context modeah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h(Detailed description of the ``org`` modeh](hDetailed description of the }(hj8 hhhNhNubj6)}(h``org``h]horg}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8 ubh mode}(hj8 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5 hhhhhMubj)}(h;``org`` generates a report in the Org mode format of Emacs.h](j6)}(h``org``h]horg}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX ubh4 generates a report in the Org mode format of Emacs.}(hjX hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj5 hhubh)}(hhh](h)}(hExampleh]hExample}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt hhhhhMubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjt hhubjP)}(hDmake coccicheck MODE=org COCCI=scripts/coccinelle/api/err_cast.coccih]hDmake coccicheck MODE=org COCCI=scripts/coccinelle/api/err_cast.cocci}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhjt hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjt hhubjP)}(hX2 @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on org@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) h]hX2 @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on org@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) }hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhjt hhubj)}(hVThis SmPL excerpt generates Org entries on the standard output, as illustrated below::h]hUThis SmPL excerpt generates Org entries on the standard output, as illustrated below:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjt hhubjP)}(hXl* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]] * TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]] * TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]h]hXl* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]] * TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]] * TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]}hj sbah}(h]h ]h"]h$]h&]hhuh1jOhhhMhjt hhubeh}(h]id3ah ]h"]h$]exampleah&]uh1hhj5 hhhhhMju Kubeh}(h]$detailed-description-of-the-org-modeah ]h"]$detailed description of the org modeah$]h&]uh1hhhhhhhhMubeh}(h]( coccinelleheh ]h"]( coccinelledevtools_coccinelleeh$]h&]uh1hhhhhhhhK expect_referenced_by_name}j hsexpect_referenced_by_id}hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(j hj j jjjjjjjjjCj@jjjgjdj"jj: j7 j j jJ jG j j| j j j{ jx exampleNj2 j/ j2 j/ j j u nametypes}(j j jjjjjCjjgj"j: j jJ j j j{ j^j2 j2 j uh}(hhj hjjjjjjjjj@jjjFjdjjjjj7 j%j j= jG j j| jM j j jx j jo j j/ j~ j( j j/ j5 j' j j j5 j jt u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j'KsRparse_messages](hsystem_message)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j( alevelKtypeINFOsourcehlineMuh1j}hj hhhhhMubj~)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j' alevelKtypejsourcehlineMuh1j}hj hhhhhMubj~)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineMuh1j}hjt hhhhhMubetransform_messages]j~)}(hhh]j)}(hhh]h9Hyperlink target "devtools-coccinelle" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1j}uba transformerN include_log] decorationNhhub.